quiver-cli 1.3.1 → 2.0.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.
Files changed (407) hide show
  1. package/README.md +197 -239
  2. package/dist/cli.js +3163 -2040
  3. package/package.json +10 -11
  4. package/template/.agents/AGENTS.md +0 -26
  5. package/template/.agents/commands/cp.md +0 -108
  6. package/template/.agents/commands/next-setup.md +0 -1064
  7. package/template/.agents/commands/review.md +0 -68
  8. package/template/.agents/commands/terraform-readme.md +0 -38
  9. package/template/.agents/config.json +0 -80
  10. package/template/.agents/plugins/opencode/rtk.ts +0 -34
  11. package/template/.agents/skills/agent-browser/SKILL.md +0 -52
  12. package/template/.agents/skills/apps/skybridge/SKILL.md +0 -52
  13. package/template/.agents/skills/code/cleanup/SKILL.md +0 -26
  14. package/template/.agents/skills/code/improve/SKILL.md +0 -122
  15. package/template/.agents/skills/code/improve/references/audit-playbook.md +0 -130
  16. package/template/.agents/skills/code/improve/references/closing-the-loop.md +0 -96
  17. package/template/.agents/skills/code/improve/references/plan-template.md +0 -197
  18. package/template/.agents/skills/code/vercel-react-best-practices/AGENTS.md +0 -3810
  19. package/template/.agents/skills/code/vercel-react-best-practices/README.md +0 -123
  20. package/template/.agents/skills/code/vercel-react-best-practices/SKILL.md +0 -149
  21. package/template/.agents/skills/code/vercel-react-best-practices/metadata.json +0 -15
  22. package/template/.agents/skills/code/vercel-react-best-practices/rules/_sections.md +0 -46
  23. package/template/.agents/skills/code/vercel-react-best-practices/rules/_template.md +0 -28
  24. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-effect-event-deps.md +0 -56
  25. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  26. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  27. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  28. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  29. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +0 -37
  30. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-defer-await.md +0 -82
  31. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  32. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-parallel.md +0 -28
  33. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  34. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-analyzable-paths.md +0 -63
  35. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -60
  36. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  37. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  38. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  39. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  40. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  41. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  42. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  43. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  44. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  45. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  46. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  47. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  48. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  49. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  50. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
  51. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  52. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  53. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  54. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  55. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-request-idle-callback.md +0 -105
  56. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  57. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  58. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  59. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  60. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  61. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  62. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  63. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  64. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  65. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
  66. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
  67. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  68. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  69. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  70. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  71. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  72. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  73. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  74. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  75. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  76. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  77. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  78. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
  79. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  80. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
  81. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  82. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
  83. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  84. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  85. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  86. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  87. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  88. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  89. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -149
  90. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-no-shared-module-state.md +0 -50
  91. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  92. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +0 -34
  93. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-serialization.md +0 -38
  94. package/template/.agents/skills/data/prisma-cli/SKILL.md +0 -265
  95. package/template/.agents/skills/data/prisma-cli/references/agent-safety.md +0 -27
  96. package/template/.agents/skills/data/prisma-cli/references/complete.md +0 -22
  97. package/template/.agents/skills/data/prisma-cli/references/db-execute.md +0 -78
  98. package/template/.agents/skills/data/prisma-cli/references/db-pull.md +0 -185
  99. package/template/.agents/skills/data/prisma-cli/references/db-push.md +0 -150
  100. package/template/.agents/skills/data/prisma-cli/references/db-seed.md +0 -188
  101. package/template/.agents/skills/data/prisma-cli/references/debug.md +0 -46
  102. package/template/.agents/skills/data/prisma-cli/references/dev.md +0 -157
  103. package/template/.agents/skills/data/prisma-cli/references/format.md +0 -48
  104. package/template/.agents/skills/data/prisma-cli/references/generate.md +0 -173
  105. package/template/.agents/skills/data/prisma-cli/references/init.md +0 -139
  106. package/template/.agents/skills/data/prisma-cli/references/mcp.md +0 -39
  107. package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +0 -127
  108. package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +0 -145
  109. package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +0 -89
  110. package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +0 -80
  111. package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +0 -57
  112. package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +0 -65
  113. package/template/.agents/skills/data/prisma-cli/references/studio.md +0 -137
  114. package/template/.agents/skills/data/prisma-cli/references/validate.md +0 -53
  115. package/template/.agents/skills/data/prisma-client-api/SKILL.md +0 -216
  116. package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +0 -223
  117. package/template/.agents/skills/data/prisma-client-api/references/constructor.md +0 -221
  118. package/template/.agents/skills/data/prisma-client-api/references/filters.md +0 -256
  119. package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +0 -281
  120. package/template/.agents/skills/data/prisma-client-api/references/query-options.md +0 -276
  121. package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +0 -198
  122. package/template/.agents/skills/data/prisma-client-api/references/relations.md +0 -308
  123. package/template/.agents/skills/data/prisma-client-api/references/transactions.md +0 -184
  124. package/template/.agents/skills/design/impeccable/SKILL.md +0 -84
  125. package/template/.agents/skills/design/impeccable/reference/adapt.md +0 -312
  126. package/template/.agents/skills/design/impeccable/reference/adapt.native.md +0 -58
  127. package/template/.agents/skills/design/impeccable/reference/android.md +0 -46
  128. package/template/.agents/skills/design/impeccable/reference/animate.md +0 -89
  129. package/template/.agents/skills/design/impeccable/reference/audit.md +0 -136
  130. package/template/.agents/skills/design/impeccable/reference/audit.native.md +0 -139
  131. package/template/.agents/skills/design/impeccable/reference/bolder.md +0 -33
  132. package/template/.agents/skills/design/impeccable/reference/clarify.md +0 -94
  133. package/template/.agents/skills/design/impeccable/reference/colorize.md +0 -86
  134. package/template/.agents/skills/design/impeccable/reference/craft-floor.md +0 -44
  135. package/template/.agents/skills/design/impeccable/reference/craft.md +0 -5
  136. package/template/.agents/skills/design/impeccable/reference/critique.md +0 -806
  137. package/template/.agents/skills/design/impeccable/reference/degraded/asset-producer.md +0 -37
  138. package/template/.agents/skills/design/impeccable/reference/degraded/documenter.md +0 -24
  139. package/template/.agents/skills/design/impeccable/reference/degraded/finish-reviewer.md +0 -38
  140. package/template/.agents/skills/design/impeccable/reference/degraded/manual-edit-applier.md +0 -92
  141. package/template/.agents/skills/design/impeccable/reference/delight.md +0 -70
  142. package/template/.agents/skills/design/impeccable/reference/distill.md +0 -111
  143. package/template/.agents/skills/design/impeccable/reference/doctor.md +0 -54
  144. package/template/.agents/skills/design/impeccable/reference/document.md +0 -416
  145. package/template/.agents/skills/design/impeccable/reference/extract.md +0 -69
  146. package/template/.agents/skills/design/impeccable/reference/harden.md +0 -336
  147. package/template/.agents/skills/design/impeccable/reference/hooks.md +0 -111
  148. package/template/.agents/skills/design/impeccable/reference/init.md +0 -131
  149. package/template/.agents/skills/design/impeccable/reference/ios.md +0 -51
  150. package/template/.agents/skills/design/impeccable/reference/layout.md +0 -84
  151. package/template/.agents/skills/design/impeccable/reference/live-setup.md +0 -102
  152. package/template/.agents/skills/design/impeccable/reference/live.md +0 -323
  153. package/template/.agents/skills/design/impeccable/reference/new-work.md +0 -145
  154. package/template/.agents/skills/design/impeccable/reference/onboard.md +0 -234
  155. package/template/.agents/skills/design/impeccable/reference/operate.md +0 -61
  156. package/template/.agents/skills/design/impeccable/reference/optimize.md +0 -258
  157. package/template/.agents/skills/design/impeccable/reference/overdrive.md +0 -127
  158. package/template/.agents/skills/design/impeccable/reference/polish.md +0 -105
  159. package/template/.agents/skills/design/impeccable/reference/quieter.md +0 -99
  160. package/template/.agents/skills/design/impeccable/reference/routing.md +0 -18
  161. package/template/.agents/skills/design/impeccable/reference/shape.md +0 -59
  162. package/template/.agents/skills/design/impeccable/reference/typeset.md +0 -80
  163. package/template/.agents/skills/design/impeccable/reference/visualize.md +0 -46
  164. package/template/.agents/skills/design/impeccable/scripts/build-phase.mjs +0 -1022
  165. package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +0 -94
  166. package/template/.agents/skills/design/impeccable/scripts/comp-diff.mjs +0 -391
  167. package/template/.agents/skills/design/impeccable/scripts/comp-spec.mjs +0 -513
  168. package/template/.agents/skills/design/impeccable/scripts/concept-seed.mjs +0 -814
  169. package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +0 -325
  170. package/template/.agents/skills/design/impeccable/scripts/context.mjs +0 -1565
  171. package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +0 -473
  172. package/template/.agents/skills/design/impeccable/scripts/data/font-index-failures.json +0 -121
  173. package/template/.agents/skills/design/impeccable/scripts/data/font-index.json +0 -1
  174. package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +0 -198
  175. package/template/.agents/skills/design/impeccable/scripts/detect.mjs +0 -30
  176. package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +0 -2204
  177. package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +0 -432
  178. package/template/.agents/skills/design/impeccable/scripts/detector/design-system.mjs +0 -1311
  179. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +0 -9043
  180. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +0 -51
  181. package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +0 -434
  182. package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +0 -1319
  183. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +0 -1241
  184. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +0 -288
  185. package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -189
  186. package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +0 -18
  187. package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +0 -213
  188. package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +0 -166
  189. package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +0 -635
  190. package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +0 -5681
  191. package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +0 -596
  192. package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +0 -127
  193. package/template/.agents/skills/design/impeccable/scripts/detector/shared/fonts.mjs +0 -30
  194. package/template/.agents/skills/design/impeccable/scripts/detector/shared/inline-ignores.mjs +0 -148
  195. package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +0 -7
  196. package/template/.agents/skills/design/impeccable/scripts/doctor.mjs +0 -329
  197. package/template/.agents/skills/design/impeccable/scripts/embed-prompt.mjs +0 -166
  198. package/template/.agents/skills/design/impeccable/scripts/font-match.mjs +0 -457
  199. package/template/.agents/skills/design/impeccable/scripts/generate-image.mjs +0 -447
  200. package/template/.agents/skills/design/impeccable/scripts/hook-admin.mjs +0 -819
  201. package/template/.agents/skills/design/impeccable/scripts/hook-before-edit.mjs +0 -538
  202. package/template/.agents/skills/design/impeccable/scripts/hook-lib.mjs +0 -2490
  203. package/template/.agents/skills/design/impeccable/scripts/hook.mjs +0 -79
  204. package/template/.agents/skills/design/impeccable/scripts/lib/artifact-schema.mjs +0 -93
  205. package/template/.agents/skills/design/impeccable/scripts/lib/composition-catalog.mjs +0 -200
  206. package/template/.agents/skills/design/impeccable/scripts/lib/concept-catalog.mjs +0 -396
  207. package/template/.agents/skills/design/impeccable/scripts/lib/design-parser.mjs +0 -880
  208. package/template/.agents/skills/design/impeccable/scripts/lib/font-fingerprint.mjs +0 -564
  209. package/template/.agents/skills/design/impeccable/scripts/lib/font-index.mjs +0 -130
  210. package/template/.agents/skills/design/impeccable/scripts/lib/hero-checks.mjs +0 -246
  211. package/template/.agents/skills/design/impeccable/scripts/lib/image-metrics.mjs +0 -306
  212. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-config.mjs +0 -640
  213. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-paths.mjs +0 -137
  214. package/template/.agents/skills/design/impeccable/scripts/lib/is-generated.mjs +0 -72
  215. package/template/.agents/skills/design/impeccable/scripts/lib/live-path-globs.mjs +0 -37
  216. package/template/.agents/skills/design/impeccable/scripts/lib/open-system-browser.mjs +0 -26
  217. package/template/.agents/skills/design/impeccable/scripts/lib/png.mjs +0 -281
  218. package/template/.agents/skills/design/impeccable/scripts/lib/provider.mjs +0 -5
  219. package/template/.agents/skills/design/impeccable/scripts/lib/raster.mjs +0 -194
  220. package/template/.agents/skills/design/impeccable/scripts/lib/roll-selection.mjs +0 -369
  221. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-deep.mjs +0 -485
  222. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-notice.mjs +0 -169
  223. package/template/.agents/skills/design/impeccable/scripts/lib/staleness.mjs +0 -533
  224. package/template/.agents/skills/design/impeccable/scripts/lib/surface-briefs.mjs +0 -149
  225. package/template/.agents/skills/design/impeccable/scripts/lib/target-args.mjs +0 -42
  226. package/template/.agents/skills/design/impeccable/scripts/lib/target-slug.mjs +0 -33
  227. package/template/.agents/skills/design/impeccable/scripts/lib/template-extensions.mjs +0 -146
  228. package/template/.agents/skills/design/impeccable/scripts/live/accept-css.mjs +0 -617
  229. package/template/.agents/skills/design/impeccable/scripts/live/accept-verify.mjs +0 -60
  230. package/template/.agents/skills/design/impeccable/scripts/live/browser-script-parts.mjs +0 -84
  231. package/template/.agents/skills/design/impeccable/scripts/live/completion.mjs +0 -28
  232. package/template/.agents/skills/design/impeccable/scripts/live/event-validation.mjs +0 -199
  233. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/astro.mjs +0 -47
  234. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/detect-utils.mjs +0 -73
  235. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/index.mjs +0 -143
  236. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/journal.mjs +0 -197
  237. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nextjs.mjs +0 -49
  238. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nuxt.mjs +0 -161
  239. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/script-src.mjs +0 -17
  240. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/static-html.mjs +0 -26
  241. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/sveltekit.mjs +0 -71
  242. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tag-strategy.mjs +0 -247
  243. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tanstack-start.mjs +0 -70
  244. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/vite-generic.mjs +0 -42
  245. package/template/.agents/skills/design/impeccable/scripts/live/generation-preflight.mjs +0 -149
  246. package/template/.agents/skills/design/impeccable/scripts/live/insert-ui.mjs +0 -458
  247. package/template/.agents/skills/design/impeccable/scripts/live/instructions.mjs +0 -142
  248. package/template/.agents/skills/design/impeccable/scripts/live/manual-apply.mjs +0 -939
  249. package/template/.agents/skills/design/impeccable/scripts/live/manual-edit-routes.mjs +0 -357
  250. package/template/.agents/skills/design/impeccable/scripts/live/manual-edits-buffer.mjs +0 -152
  251. package/template/.agents/skills/design/impeccable/scripts/live/poll-lanes.mjs +0 -14
  252. package/template/.agents/skills/design/impeccable/scripts/live/project-ignores.mjs +0 -139
  253. package/template/.agents/skills/design/impeccable/scripts/live/roots.mjs +0 -508
  254. package/template/.agents/skills/design/impeccable/scripts/live/session-store.mjs +0 -563
  255. package/template/.agents/skills/design/impeccable/scripts/live/source-lock.mjs +0 -105
  256. package/template/.agents/skills/design/impeccable/scripts/live/source-search.mjs +0 -105
  257. package/template/.agents/skills/design/impeccable/scripts/live/svelte-ast.mjs +0 -969
  258. package/template/.agents/skills/design/impeccable/scripts/live/svelte-component.mjs +0 -1366
  259. package/template/.agents/skills/design/impeccable/scripts/live/sveltekit-adapter.mjs +0 -304
  260. package/template/.agents/skills/design/impeccable/scripts/live/tanstack-adapter.mjs +0 -259
  261. package/template/.agents/skills/design/impeccable/scripts/live/ui-surfaces.mjs +0 -75
  262. package/template/.agents/skills/design/impeccable/scripts/live/vocabulary.mjs +0 -171
  263. package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +0 -938
  264. package/template/.agents/skills/design/impeccable/scripts/live-browser-dom.js +0 -146
  265. package/template/.agents/skills/design/impeccable/scripts/live-browser-ignores.js +0 -242
  266. package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +0 -123
  267. package/template/.agents/skills/design/impeccable/scripts/live-browser.js +0 -12551
  268. package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +0 -1200
  269. package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +0 -107
  270. package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +0 -800
  271. package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +0 -51
  272. package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +0 -463
  273. package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +0 -292
  274. package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +0 -368
  275. package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +0 -430
  276. package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +0 -123
  277. package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +0 -1698
  278. package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +0 -71
  279. package/template/.agents/skills/design/impeccable/scripts/live-target.mjs +0 -30
  280. package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +0 -927
  281. package/template/.agents/skills/design/impeccable/scripts/live.mjs +0 -334
  282. package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +0 -14
  283. package/template/.agents/skills/design/impeccable/scripts/palette.mjs +0 -628
  284. package/template/.agents/skills/design/impeccable/scripts/pin.mjs +0 -224
  285. package/template/.agents/skills/design/impeccable/scripts/serve-question.mjs +0 -1783
  286. package/template/.agents/skills/design/impeccable/scripts/surface-brief.mjs +0 -74
  287. package/template/.agents/skills/design/shadcn/SKILL.md +0 -277
  288. package/template/.agents/skills/design/shadcn/agents/openai.yml +0 -5
  289. package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
  290. package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
  291. package/template/.agents/skills/design/shadcn/cli.md +0 -290
  292. package/template/.agents/skills/design/shadcn/customization.md +0 -209
  293. package/template/.agents/skills/design/shadcn/evals/evals.json +0 -77
  294. package/template/.agents/skills/design/shadcn/mcp.md +0 -105
  295. package/template/.agents/skills/design/shadcn/registry.md +0 -277
  296. package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +0 -306
  297. package/template/.agents/skills/design/shadcn/rules/chat.md +0 -250
  298. package/template/.agents/skills/design/shadcn/rules/composition.md +0 -213
  299. package/template/.agents/skills/design/shadcn/rules/forms.md +0 -192
  300. package/template/.agents/skills/design/shadcn/rules/icons.md +0 -101
  301. package/template/.agents/skills/design/shadcn/rules/styling.md +0 -185
  302. package/template/.agents/skills/find-skills/SKILL.md +0 -141
  303. package/template/.agents/skills/hono/SKILL.md +0 -593
  304. package/template/.agents/skills/integrations/langfuse/SKILL.md +0 -150
  305. package/template/.agents/skills/integrations/langfuse/references/ci-cd.md +0 -41
  306. package/template/.agents/skills/integrations/langfuse/references/cli.md +0 -60
  307. package/template/.agents/skills/integrations/langfuse/references/create-dataset.md +0 -35
  308. package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +0 -87
  309. package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +0 -121
  310. package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +0 -293
  311. package/template/.agents/skills/integrations/langfuse/references/prompt-engineering.md +0 -35
  312. package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +0 -79
  313. package/template/.agents/skills/integrations/langfuse/references/sdk-upgrade.md +0 -34
  314. package/template/.agents/skills/integrations/langfuse/references/setting-up-evals.md +0 -65
  315. package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +0 -35
  316. package/template/.agents/skills/integrations/langfuse/references/trace-evaluator-upgrade.md +0 -76
  317. package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +0 -66
  318. package/template/.agents/skills/integrations/langfuse/references/v4-project-migration.md +0 -75
  319. package/template/.agents/skills/integrations/posthog/SKILL.md +0 -102
  320. package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +0 -63
  321. package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +0 -77
  322. package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +0 -57
  323. package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +0 -140
  324. package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +0 -490
  325. package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +0 -45
  326. package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +0 -139
  327. package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +0 -302
  328. package/template/.agents/skills/integrations/posthog/references/identify-users.md +0 -202
  329. package/template/.agents/skills/integrations/posthog/references/integration-example.md +0 -706
  330. package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +0 -385
  331. package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +0 -43
  332. package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +0 -37
  333. package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +0 -22
  334. package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +0 -38
  335. package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +0 -200
  336. package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +0 -62
  337. package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +0 -197
  338. package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +0 -397
  339. package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +0 -98
  340. package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +0 -120
  341. package/template/.agents/skills/repo/repo-ci/SKILL.md +0 -265
  342. package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +0 -129
  343. package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +0 -800
  344. package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +0 -47
  345. package/template/.agents/skills/repo/repo-init-node/SKILL.md +0 -196
  346. package/template/.agents/skills/skill-creator/LICENSE.txt +0 -202
  347. package/template/.agents/skills/skill-creator/SKILL.md +0 -485
  348. package/template/.agents/skills/skill-creator/agents/analyzer.md +0 -274
  349. package/template/.agents/skills/skill-creator/agents/comparator.md +0 -202
  350. package/template/.agents/skills/skill-creator/agents/grader.md +0 -223
  351. package/template/.agents/skills/skill-creator/assets/eval_review.html +0 -146
  352. package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  353. package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +0 -1325
  354. package/template/.agents/skills/skill-creator/references/schemas.md +0 -430
  355. package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  356. package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  357. package/template/.agents/skills/skill-creator/scripts/generate_report.py +0 -326
  358. package/template/.agents/skills/skill-creator/scripts/improve_description.py +0 -247
  359. package/template/.agents/skills/skill-creator/scripts/package_skill.py +0 -136
  360. package/template/.agents/skills/skill-creator/scripts/quick_validate.py +0 -103
  361. package/template/.agents/skills/skill-creator/scripts/run_eval.py +0 -310
  362. package/template/.agents/skills/skill-creator/scripts/run_loop.py +0 -328
  363. package/template/.agents/skills/skill-creator/scripts/utils.py +0 -47
  364. package/template/.agents/skills/supabase/CHANGELOG.md +0 -78
  365. package/template/.agents/skills/supabase/SKILL.md +0 -149
  366. package/template/.agents/skills/supabase/assets/feedback-issue-template.md +0 -17
  367. package/template/.agents/skills/supabase/references/skill-feedback.md +0 -17
  368. package/template/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +0 -73
  369. package/template/.agents/skills/supabase-postgres-best-practices/SKILL.md +0 -64
  370. package/template/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +0 -170
  371. package/template/.agents/skills/supabase-postgres-best-practices/references/_sections.md +0 -39
  372. package/template/.agents/skills/supabase-postgres-best-practices/references/_template.md +0 -34
  373. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +0 -55
  374. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +0 -49
  375. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +0 -46
  376. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +0 -44
  377. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +0 -41
  378. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +0 -46
  379. package/template/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +0 -54
  380. package/template/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +0 -53
  381. package/template/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +0 -50
  382. package/template/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +0 -50
  383. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +0 -56
  384. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +0 -68
  385. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +0 -50
  386. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +0 -54
  387. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +0 -45
  388. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +0 -55
  389. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +0 -55
  390. package/template/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +0 -44
  391. package/template/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +0 -40
  392. package/template/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +0 -48
  393. package/template/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +0 -43
  394. package/template/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +0 -45
  395. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +0 -80
  396. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +0 -46
  397. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +0 -59
  398. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +0 -55
  399. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +0 -55
  400. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +0 -61
  401. package/template/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +0 -54
  402. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +0 -50
  403. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +0 -63
  404. package/template/.agents/skills/writing/humanizer/LICENSE +0 -21
  405. package/template/.agents/skills/writing/humanizer/README.md +0 -209
  406. package/template/.agents/skills/writing/humanizer/SKILL.md +0 -456
  407. package/template/.agents/upstreams.json +0 -115
@@ -1,306 +0,0 @@
1
- # Base vs Radix
2
-
3
- API differences between `base` and `radix`. Check the `base` field from `npx shadcn@latest info`.
4
-
5
- ## Contents
6
-
7
- - Composition: asChild vs render
8
- - Button / trigger as non-button element
9
- - Select (items prop, placeholder, positioning, multiple, object values)
10
- - ToggleGroup (type vs multiple)
11
- - Slider (scalar vs array)
12
- - Accordion (type and defaultValue)
13
-
14
- ---
15
-
16
- ## Composition: asChild (radix) vs render (base)
17
-
18
- Radix uses `asChild` to replace the default element. Base uses `render`. Don't wrap triggers in extra elements.
19
-
20
- **Incorrect:**
21
-
22
- ```tsx
23
- <DialogTrigger>
24
- <div>
25
- <Button>Open</Button>
26
- </div>
27
- </DialogTrigger>
28
- ```
29
-
30
- **Correct (radix):**
31
-
32
- ```tsx
33
- <DialogTrigger asChild>
34
- <Button>Open</Button>
35
- </DialogTrigger>
36
- ```
37
-
38
- **Correct (base):**
39
-
40
- ```tsx
41
- <DialogTrigger render={<Button />}>Open</DialogTrigger>
42
- ```
43
-
44
- This applies to all trigger and close components: `DialogTrigger`, `SheetTrigger`, `AlertDialogTrigger`, `DropdownMenuTrigger`, `PopoverTrigger`, `TooltipTrigger`, `CollapsibleTrigger`, `DialogClose`, `SheetClose`, `NavigationMenuLink`, `BreadcrumbLink`, `SidebarMenuButton`, `Badge`, `Item`.
45
-
46
- ---
47
-
48
- ## Button / trigger as non-button element (base only)
49
-
50
- When `render` changes an element to a non-button (`<a>`, `<span>`), add `nativeButton={false}`.
51
-
52
- **Incorrect (base):** missing `nativeButton={false}`.
53
-
54
- ```tsx
55
- <Button render={<a href="/docs" />}>Read the docs</Button>
56
- ```
57
-
58
- **Correct (base):**
59
-
60
- ```tsx
61
- <Button render={<a href="/docs" />} nativeButton={false}>
62
- Read the docs
63
- </Button>
64
- ```
65
-
66
- **Correct (radix):**
67
-
68
- ```tsx
69
- <Button asChild>
70
- <a href="/docs">Read the docs</a>
71
- </Button>
72
- ```
73
-
74
- Same for triggers whose `render` is not a `Button`:
75
-
76
- ```tsx
77
- // base.
78
- <PopoverTrigger render={<InputGroupAddon />} nativeButton={false}>
79
- Pick date
80
- </PopoverTrigger>
81
- ```
82
-
83
- ---
84
-
85
- ## Select
86
-
87
- **items prop (base only).** Base requires an `items` prop on the root. Radix uses inline JSX only.
88
-
89
- **Incorrect (base):**
90
-
91
- ```tsx
92
- <Select>
93
- <SelectTrigger><SelectValue placeholder="Select a fruit" /></SelectTrigger>
94
- </Select>
95
- ```
96
-
97
- **Correct (base):**
98
-
99
- ```tsx
100
- const items = [
101
- { label: "Select a fruit", value: null },
102
- { label: "Apple", value: "apple" },
103
- { label: "Banana", value: "banana" },
104
- ]
105
-
106
- <Select items={items}>
107
- <SelectTrigger>
108
- <SelectValue />
109
- </SelectTrigger>
110
- <SelectContent>
111
- <SelectGroup>
112
- {items.map((item) => (
113
- <SelectItem key={item.value} value={item.value}>{item.label}</SelectItem>
114
- ))}
115
- </SelectGroup>
116
- </SelectContent>
117
- </Select>
118
- ```
119
-
120
- **Correct (radix):**
121
-
122
- ```tsx
123
- <Select>
124
- <SelectTrigger>
125
- <SelectValue placeholder="Select a fruit" />
126
- </SelectTrigger>
127
- <SelectContent>
128
- <SelectGroup>
129
- <SelectItem value="apple">Apple</SelectItem>
130
- <SelectItem value="banana">Banana</SelectItem>
131
- </SelectGroup>
132
- </SelectContent>
133
- </Select>
134
- ```
135
-
136
- **Placeholder.** Base uses a `{ value: null }` item in the items array. Radix uses `<SelectValue placeholder="...">`.
137
-
138
- **Content positioning.** Base uses `alignItemWithTrigger`. Radix uses `position`.
139
-
140
- ```tsx
141
- // base.
142
- <SelectContent alignItemWithTrigger={false} side="bottom">
143
-
144
- // radix.
145
- <SelectContent position="popper">
146
- ```
147
-
148
- ---
149
-
150
- ## Select — multiple selection and object values (base only)
151
-
152
- Base supports `multiple`, render-function children on `SelectValue`, and object values with `itemToStringValue`. Radix is single-select with string values only.
153
-
154
- **Correct (base — multiple selection):**
155
-
156
- ```tsx
157
- <Select items={items} multiple defaultValue={[]}>
158
- <SelectTrigger>
159
- <SelectValue>
160
- {(value: string[]) => value.length === 0 ? "Select fruits" : `${value.length} selected`}
161
- </SelectValue>
162
- </SelectTrigger>
163
- ...
164
- </Select>
165
- ```
166
-
167
- **Correct (base — object values):**
168
-
169
- ```tsx
170
- <Select defaultValue={plans[0]} itemToStringValue={(plan) => plan.name}>
171
- <SelectTrigger>
172
- <SelectValue>{(value) => value.name}</SelectValue>
173
- </SelectTrigger>
174
- ...
175
- </Select>
176
- ```
177
-
178
- ---
179
-
180
- ## ToggleGroup
181
-
182
- Base uses a `multiple` boolean prop. Radix uses `type="single"` or `type="multiple"`.
183
-
184
- **Incorrect (base):**
185
-
186
- ```tsx
187
- <ToggleGroup type="single" defaultValue="daily">
188
- <ToggleGroupItem value="daily">Daily</ToggleGroupItem>
189
- </ToggleGroup>
190
- ```
191
-
192
- **Correct (base):**
193
-
194
- ```tsx
195
- // Single (no prop needed), defaultValue is always an array.
196
- <ToggleGroup defaultValue={["daily"]} spacing={2}>
197
- <ToggleGroupItem value="daily">Daily</ToggleGroupItem>
198
- <ToggleGroupItem value="weekly">Weekly</ToggleGroupItem>
199
- </ToggleGroup>
200
-
201
- // Multi-selection.
202
- <ToggleGroup multiple>
203
- <ToggleGroupItem value="bold">Bold</ToggleGroupItem>
204
- <ToggleGroupItem value="italic">Italic</ToggleGroupItem>
205
- </ToggleGroup>
206
- ```
207
-
208
- **Correct (radix):**
209
-
210
- ```tsx
211
- // Single, defaultValue is a string.
212
- <ToggleGroup type="single" defaultValue="daily" spacing={2}>
213
- <ToggleGroupItem value="daily">Daily</ToggleGroupItem>
214
- <ToggleGroupItem value="weekly">Weekly</ToggleGroupItem>
215
- </ToggleGroup>
216
-
217
- // Multi-selection.
218
- <ToggleGroup type="multiple">
219
- <ToggleGroupItem value="bold">Bold</ToggleGroupItem>
220
- <ToggleGroupItem value="italic">Italic</ToggleGroupItem>
221
- </ToggleGroup>
222
- ```
223
-
224
- **Controlled single value:**
225
-
226
- ```tsx
227
- // base — wrap/unwrap arrays.
228
- const [value, setValue] = React.useState("normal")
229
- <ToggleGroup value={[value]} onValueChange={(v) => setValue(v[0])}>
230
-
231
- // radix — plain string.
232
- const [value, setValue] = React.useState("normal")
233
- <ToggleGroup type="single" value={value} onValueChange={setValue}>
234
- ```
235
-
236
- ---
237
-
238
- ## Slider
239
-
240
- Base accepts a plain number for a single thumb. Radix always requires an array.
241
-
242
- **Incorrect (base):**
243
-
244
- ```tsx
245
- <Slider defaultValue={[50]} max={100} step={1} />
246
- ```
247
-
248
- **Correct (base):**
249
-
250
- ```tsx
251
- <Slider defaultValue={50} max={100} step={1} />
252
- ```
253
-
254
- **Correct (radix):**
255
-
256
- ```tsx
257
- <Slider defaultValue={[50]} max={100} step={1} />
258
- ```
259
-
260
- Both use arrays for range sliders. Controlled `onValueChange` in base may need a cast:
261
-
262
- ```tsx
263
- // base.
264
- const [value, setValue] = React.useState([0.3, 0.7])
265
- <Slider value={value} onValueChange={(v) => setValue(v as number[])} />
266
-
267
- // radix.
268
- const [value, setValue] = React.useState([0.3, 0.7])
269
- <Slider value={value} onValueChange={setValue} />
270
- ```
271
-
272
- ---
273
-
274
- ## Accordion
275
-
276
- Radix requires `type="single"` or `type="multiple"` and supports `collapsible`. `defaultValue` is a string. Base uses no `type` prop, uses `multiple` boolean, and `defaultValue` is always an array.
277
-
278
- **Incorrect (base):**
279
-
280
- ```tsx
281
- <Accordion type="single" collapsible defaultValue="item-1">
282
- <AccordionItem value="item-1">...</AccordionItem>
283
- </Accordion>
284
- ```
285
-
286
- **Correct (base):**
287
-
288
- ```tsx
289
- <Accordion defaultValue={["item-1"]}>
290
- <AccordionItem value="item-1">...</AccordionItem>
291
- </Accordion>
292
-
293
- // Multi-select.
294
- <Accordion multiple defaultValue={["item-1", "item-2"]}>
295
- <AccordionItem value="item-1">...</AccordionItem>
296
- <AccordionItem value="item-2">...</AccordionItem>
297
- </Accordion>
298
- ```
299
-
300
- **Correct (radix):**
301
-
302
- ```tsx
303
- <Accordion type="single" collapsible defaultValue="item-1">
304
- <AccordionItem value="item-1">...</AccordionItem>
305
- </Accordion>
306
- ```
@@ -1,250 +0,0 @@
1
- # Chat & Messaging
2
-
3
- Components for conversation and chat UI. Compose these instead of hand-rolling
4
- bubbles, scroll containers, dividers, or attachment cards.
5
-
6
- Install: `npx shadcn@latest add message-scroller message bubble attachment marker`
7
-
8
- The same component names and props ship for both `base` and `radix`; only
9
- composition differs (`render` vs `asChild`). See [base-vs-radix.md](./base-vs-radix.md).
10
-
11
- ## Contents
12
-
13
- - Scrollable threads use MessageScroller
14
- - Message rows use Message
15
- - Message surfaces use Bubble
16
- - Attachments use Attachment
17
- - System notes and dividers use Marker
18
- - Streaming, anchoring, and jump-to-latest are built in
19
- - Escape hatch: the scroller hooks
20
-
21
- ---
22
-
23
- ## Scrollable threads use MessageScroller
24
-
25
- A conversation that scrolls, follows new messages, restores position, or jumps
26
- to a message uses `MessageScroller`. Don't build a raw overflow container with
27
- manual scroll wiring, and don't reach for `ScrollArea`.
28
-
29
- The parts nest in a fixed order. Every direct child of the content is wrapped in
30
- a `MessageScrollerItem` so the scroller can measure, anchor, preserve position,
31
- track visibility, and jump to it. `MessageScrollerButton` sits inside
32
- `MessageScroller`, after the viewport.
33
-
34
- **Incorrect:**
35
-
36
- ```tsx
37
- // Hand-rolled scroll container with manual stick-to-bottom logic.
38
- <div ref={scrollRef} onScroll={handleScroll} className="flex-1 overflow-y-auto">
39
- <div className="flex flex-col gap-6 p-4">
40
- {messages.map((m) => (
41
- <ChatMessage key={m.id} message={m} />
42
- ))}
43
- </div>
44
- </div>
45
- ```
46
-
47
- **Correct:**
48
-
49
- ```tsx
50
- <MessageScrollerProvider autoScroll>
51
- <MessageScroller>
52
- <MessageScrollerViewport>
53
- <MessageScrollerContent>
54
- {messages.map((message) => (
55
- <MessageScrollerItem
56
- key={message.id}
57
- messageId={message.id}
58
- scrollAnchor={message.role === "user"}
59
- >
60
- <Message align={message.role === "user" ? "end" : "start"}>
61
- {/* ...message content... */}
62
- </Message>
63
- </MessageScrollerItem>
64
- ))}
65
- </MessageScrollerContent>
66
- </MessageScrollerViewport>
67
- <MessageScrollerButton />
68
- </MessageScroller>
69
- </MessageScrollerProvider>
70
- ```
71
-
72
- ---
73
-
74
- ## Message rows use Message
75
-
76
- `Message` lays out a single row: avatar, header, content, footer, with
77
- alignment. Group consecutive rows from one sender with `MessageGroup`. Don't
78
- rebuild the row from flex divs.
79
-
80
- `align="end"` is the current user's side; `align="start"` is everyone else.
81
-
82
- ```tsx
83
- <Message align="start">
84
- <MessageAvatar>
85
- <Avatar>
86
- <AvatarImage src={sender.avatar} alt={sender.name} />
87
- <AvatarFallback>{initials}</AvatarFallback>
88
- </Avatar>
89
- </MessageAvatar>
90
- <MessageContent>
91
- <MessageHeader>{sender.name}</MessageHeader>
92
- <Bubble>
93
- <BubbleContent>{text}</BubbleContent>
94
- </Bubble>
95
- <MessageFooter>{time}</MessageFooter>
96
- </MessageContent>
97
- </Message>
98
- ```
99
-
100
- ---
101
-
102
- ## Message surfaces use Bubble
103
-
104
- The colored message surface is `Bubble` + `BubbleContent`, never a styled `div`
105
- with `bg-muted` / `bg-primary` and hand-managed corners.
106
-
107
- - `variant`: `default`, `secondary`, `muted`, `tinted`, `outline`, `ghost`, `destructive`.
108
- - `align`: `start` or `end` (matches the `Message` side).
109
-
110
- `BubbleReactions` renders the reaction cluster. `side` (`top` | `bottom`) and
111
- `align` (`start` | `end`) position it against the bubble. Don't lay reactions out
112
- with absolutely-positioned `Badge`s.
113
-
114
- **Incorrect:**
115
-
116
- ```tsx
117
- <div className="w-fit rounded-2xl bg-primary px-3 py-2 text-primary-foreground">
118
- {text}
119
- </div>
120
- ```
121
-
122
- **Correct:**
123
-
124
- ```tsx
125
- <Bubble variant="default" align="end">
126
- <BubbleContent>{text}</BubbleContent>
127
- <BubbleReactions side="bottom" align="end">
128
- <Badge variant="secondary">👍 2</Badge>
129
- </BubbleReactions>
130
- </Bubble>
131
- ```
132
-
133
- ---
134
-
135
- ## Attachments use Attachment
136
-
137
- File and image attachments use `Attachment`, not `Item` or a custom card. It
138
- carries upload state, so wire `state` to the real status rather than rendering a
139
- separate spinner.
140
-
141
- - `state`: `idle`, `uploading`, `processing`, `error`, `done`. `uploading` and
142
- `processing` apply the `shimmer` animation to the title automatically.
143
- - `size`: `default`, `sm`, `xs`. `orientation`: `horizontal`, `vertical`.
144
- - Use `AttachmentGroup` to lay out several attachments in a scrolling row.
145
-
146
- ```tsx
147
- <Attachment state="done">
148
- <AttachmentMedia variant="icon">
149
- <FileTextIcon />
150
- </AttachmentMedia>
151
- <AttachmentContent>
152
- <AttachmentTitle>homepage-feedback.pdf</AttachmentTitle>
153
- <AttachmentDescription>PDF · 2.4 MB</AttachmentDescription>
154
- </AttachmentContent>
155
- <AttachmentActions>
156
- <AttachmentAction>
157
- <DownloadIcon />
158
- </AttachmentAction>
159
- </AttachmentActions>
160
- </Attachment>
161
- ```
162
-
163
- For an image, use `<AttachmentMedia variant="image">` with an `img` child.
164
-
165
- ---
166
-
167
- ## System notes and dividers use Marker
168
-
169
- Status lines ("Sarah joined the conversation"), date dividers ("Today"), and
170
- labeled separators are `Marker`, not a `Separator` plus a centered span.
171
-
172
- - `variant`: `default` (plain row), `separator` (centered label with rules on
173
- each side), `border` (bottom-bordered row).
174
- - `MarkerIcon` holds a leading icon; `MarkerContent` holds the label.
175
-
176
- **Incorrect:**
177
-
178
- ```tsx
179
- <div className="flex items-center gap-3 py-2">
180
- <Separator className="flex-1" />
181
- <span className="text-xs text-muted-foreground">Today</span>
182
- <Separator className="flex-1" />
183
- </div>
184
- ```
185
-
186
- **Correct:**
187
-
188
- ```tsx
189
- <Marker variant="separator">
190
- <MarkerContent>Today</MarkerContent>
191
- </Marker>
192
- ```
193
-
194
- ---
195
-
196
- ## Streaming, anchoring, and jump-to-latest are built in
197
-
198
- `MessageScroller` handles the behavior that chat UIs usually reinvent. Don't
199
- write a `useStickToBottom` hook, a `ResizeObserver`, or manual `scrollTop` math.
200
-
201
- - **Follow the live edge while streaming.** `MessageScrollerProvider` with
202
- `autoScroll` keeps the view pinned to new content and yields the moment the
203
- user scrolls up. Streaming token updates that grow the last message are
204
- followed automatically.
205
- - **Anchor a turn.** `scrollAnchor` on a `MessageScrollerItem` marks the row to
206
- hold in view (typically the user's message that started the turn).
207
- - **Jump to latest.** `MessageScrollerButton` appears when the user scrolls away
208
- and scrolls back on click. `direction="end"` (default) or `direction="start"`.
209
- It is a self-managing control, so don't gate it behind your own scroll-position
210
- state.
211
- - **Open a saved transcript without a flash.** `defaultScrollPosition` applies
212
- after mount. When it is `"end"` or `"last-anchor"`, the viewport has
213
- `data-pending-scroll` until that position is applied. The styled viewport
214
- hides. For `"end"` on first paint when messages are in the server HTML, copy
215
- this script into the page, not into the primitive. Skip it for `"last-anchor"`
216
- and for client-fetched messages. Keep `suppressHydrationWarning` on the
217
- viewport. Pass a `nonce` if you use a Content Security Policy.
218
-
219
- ```tsx
220
- const scrollToEndScript = `(function () {
221
- var viewport = document.getElementById("messages")
222
- if (!viewport) {
223
- return
224
- }
225
- viewport.scrollTop = viewport.scrollHeight
226
- viewport.removeAttribute("data-pending-scroll")
227
- })()`
228
-
229
- <MessageScroller>
230
- <MessageScrollerViewport id="messages" suppressHydrationWarning>
231
- <MessageScrollerContent>{/* transcript */}</MessageScrollerContent>
232
- </MessageScrollerViewport>
233
- <script dangerouslySetInnerHTML={{ __html: scrollToEndScript }} />
234
- <MessageScrollerButton />
235
- </MessageScroller>
236
- ```
237
-
238
- For a "thinking…" indicator while the model generates, apply the `shimmer`
239
- utility to text. Don't author a custom keyframe animation. See
240
- [styling.md](./styling.md).
241
-
242
- ---
243
-
244
- ## Escape hatch: the scroller hooks
245
-
246
- For behavior the parts don't expose, read state from the hooks rather than
247
- re-implementing the scroller: `useMessageScroller`,
248
- `useMessageScrollerVisibility`, and `useMessageScrollerScrollable`. They come
249
- from the auto-installed `@shadcn/react` dependency, so there's nothing extra to
250
- install. Reach for them only when composition can't express what you need.