@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,33 @@
1
+ {%- comment -%}
2
+ Column — a vertical stack cell inside a Split (mirrors WP core/column). Reuses the
3
+ ds-core `.gcds-flex` primitive in column direction and accepts any theme block.
4
+ {%- endcomment -%}
5
+ <div
6
+ class="gcds-flex"
7
+ style="--gcds-flex-direction: column; --gcds-flex-gap: {{ block.settings.gap | default: 'var(--gcds-space-5)' }}; --gcds-flex-align: {{ block.settings.align | default: 'stretch' }};"
8
+ {{ block.shopify_attributes }}
9
+ >
10
+ {% content_for 'blocks' %}
11
+ </div>
12
+
13
+ {% schema %}
14
+ {
15
+ "name": "t:blocks.column_name",
16
+ "settings": [
17
+ { "type": "text", "id": "gap", "label": "t:settings.gap", "default": "var(--gcds-space-5)" },
18
+ {
19
+ "type": "select",
20
+ "id": "align",
21
+ "label": "t:settings.align",
22
+ "default": "stretch",
23
+ "options": [
24
+ { "value": "stretch", "label": "t:align.stretch" },
25
+ { "value": "flex-start", "label": "t:align.start" },
26
+ { "value": "center", "label": "t:align.center" }
27
+ ]
28
+ }
29
+ ],
30
+ "blocks": [{ "type": "@theme" }],
31
+ "presets": [{ "name": "t:blocks.column_name" }]
32
+ }
33
+ {% endschema %}
@@ -0,0 +1,37 @@
1
+ {%- comment -%}
2
+ Image — a media block (fills a gap: the theme has no core image block). Renders a
3
+ responsive <img> from a merchant image with an optional square+cover crop and the
4
+ token border radius. Falls back to a placeholder when no image is set.
5
+ {%- endcomment -%}
6
+ {%- assign radius = 'var(--gcds-radius-md)' -%}
7
+ {%- if block.settings.image != blank -%}
8
+ <img
9
+ src="{{ block.settings.image | image_url: width: 1200 }}"
10
+ srcset="{{ block.settings.image | image_url: width: 700 }} 700w, {{ block.settings.image | image_url: width: 1400 }} 1400w"
11
+ sizes="(min-width: 40rem) 50vw, 100vw"
12
+ alt="{{ block.settings.image.alt | escape }}"
13
+ width="{{ block.settings.image.width }}"
14
+ height="{{ block.settings.image.height }}"
15
+ loading="lazy"
16
+ style="display:block; width:100%; height:auto; border-radius:{{ radius }};{% if block.settings.square %} aspect-ratio:1; object-fit:cover;{% endif %}"
17
+ {{ block.shopify_attributes }}
18
+ >
19
+ {%- else -%}
20
+ <div
21
+ style="border-radius:{{ radius }}; overflow:hidden;{% if block.settings.square %} aspect-ratio:1;{% endif %}"
22
+ {{ block.shopify_attributes }}
23
+ >
24
+ {{ 'image' | placeholder_svg_tag }}
25
+ </div>
26
+ {%- endif -%}
27
+
28
+ {% schema %}
29
+ {
30
+ "name": "t:blocks.image_name",
31
+ "settings": [
32
+ { "type": "image_picker", "id": "image", "label": "t:settings.image" },
33
+ { "type": "checkbox", "id": "square", "label": "t:settings.square", "default": true }
34
+ ],
35
+ "presets": [{ "name": "t:blocks.image_name" }]
36
+ }
37
+ {% endschema %}
@@ -0,0 +1,52 @@
1
+ {%- comment -%}
2
+ Modal — a native <dialog> (.gcds-modal) opened zero-JS via Invoker Commands
3
+ (command/commandfor). Styled by modal.css in baseline.css. block.id makes the
4
+ trigger↔dialog link unique. "Dismissible" adds closedby="any" (native light dismiss;
5
+ Chromium/Firefox — Safari keeps Esc-only). No JS.
6
+
7
+ CONTAINER: the dialog interior is composed from re-organizable child blocks —
8
+ _modal-media (full-bleed image/video), _modal-header, _modal-body, _modal-footer —
9
+ rendered via {% content_for 'blocks' %}. Merchants add/remove/reorder them freely
10
+ (AQ-B2). The corner close (X) is built in — it lives after the content so a media
11
+ block stays :first-child (meets the top edge, no top padding).
12
+ {%- endcomment -%}
13
+ {%- assign mid = 'gcds-modal-' | append: block.id -%}
14
+ <button class="gcds-button gcds-button--primary gcds-button--md" command="show-modal" commandfor="{{ mid }}" {{ block.shopify_attributes }}>
15
+ {{- block.settings.trigger_label | escape -}}
16
+ </button>
17
+ <dialog id="{{ mid }}" class="gcds-modal"{% if block.settings.dismissible %} closedby="any"{% endif %}>
18
+ {% content_for 'blocks' %}
19
+ {%- if block.settings.show_close -%}
20
+ <button class="gcds-modal__close" command="close" commandfor="{{ mid }}" aria-label="{{ block.settings.close_label | default: 'Close' | escape }}">
21
+ {%- render 'lucide', icon: 'x' -%}
22
+ </button>
23
+ {%- endif -%}
24
+ </dialog>
25
+
26
+ {% schema %}
27
+ {
28
+ "name": "t:blocks.modal_name",
29
+ "settings": [
30
+ { "type": "text", "id": "trigger_label", "label": "t:settings.trigger_label", "default": "Open modal" },
31
+ { "type": "checkbox", "id": "dismissible", "label": "t:settings.dismissible", "default": true },
32
+ { "type": "checkbox", "id": "show_close", "label": "t:settings.show_close", "default": true },
33
+ { "type": "text", "id": "close_label", "label": "t:settings.close_label", "default": "Close" }
34
+ ],
35
+ "blocks": [
36
+ { "type": "_modal-media" },
37
+ { "type": "_modal-header" },
38
+ { "type": "_modal-body" },
39
+ { "type": "_modal-footer" }
40
+ ],
41
+ "presets": [
42
+ {
43
+ "name": "t:blocks.modal_name",
44
+ "blocks": [
45
+ { "type": "_modal-header" },
46
+ { "type": "_modal-body" },
47
+ { "type": "_modal-footer" }
48
+ ]
49
+ }
50
+ ]
51
+ }
52
+ {% endschema %}
@@ -0,0 +1,24 @@
1
+ {%- comment -%}
2
+ Popover — a floating panel (.gcds-popover) on the Popover API + CSS anchor
3
+ positioning. Styled by popover.css in baseline.css. block.id makes the
4
+ trigger↔panel link unique. Zero JS (anchor placement is Chromium-only; elsewhere it
5
+ opens at the UA position).
6
+ {%- endcomment -%}
7
+ {%- assign pid = 'gcds-popover-' | append: block.id -%}
8
+ <button class="gcds-button gcds-button--outline gcds-button--md" popovertarget="{{ pid }}" {{ block.shopify_attributes }}>
9
+ {{- block.settings.trigger_label | escape -}}
10
+ </button>
11
+ <div id="{{ pid }}" popover class="gcds-popover">
12
+ {{ block.settings.content }}
13
+ </div>
14
+
15
+ {% schema %}
16
+ {
17
+ "name": "t:blocks.popover_name",
18
+ "settings": [
19
+ { "type": "text", "id": "trigger_label", "label": "t:settings.trigger_label", "default": "Details" },
20
+ { "type": "richtext", "id": "content", "label": "t:settings.content", "default": "<p>Anything can go here.</p>" }
21
+ ],
22
+ "presets": [{ "name": "t:blocks.popover_name" }]
23
+ }
24
+ {% endschema %}
@@ -0,0 +1,22 @@
1
+ {%- comment -%}
2
+ Skeleton — a pulsing content placeholder (.gcds-skeleton). Styled by skeleton.css in
3
+ baseline.css; zero JS. Owns no size — width/height come from settings. Decorative
4
+ (aria-hidden).
5
+ {%- endcomment -%}
6
+ <div
7
+ class="gcds-skeleton"
8
+ style="inline-size: {{ block.settings.width | default: '100%' }}; block-size: {{ block.settings.height | default: '1rem' }};"
9
+ aria-hidden="true"
10
+ {{ block.shopify_attributes }}
11
+ ></div>
12
+
13
+ {% schema %}
14
+ {
15
+ "name": "t:blocks.skeleton_name",
16
+ "settings": [
17
+ { "type": "text", "id": "width", "label": "t:settings.width", "default": "100%" },
18
+ { "type": "text", "id": "height", "label": "t:settings.height", "default": "1rem" }
19
+ ],
20
+ "presets": [{ "name": "t:blocks.skeleton_name" }]
21
+ }
22
+ {% endschema %}
@@ -0,0 +1,22 @@
1
+ {%- comment -%}
2
+ Spinner — a pure-CSS loading indicator (.gcds-spinner). Styled by spinner.css in
3
+ baseline.css; inherits currentColor. Zero JS. Size via the --gcds-spinner-size knob.
4
+ {%- endcomment -%}
5
+ <span
6
+ class="gcds-spinner"
7
+ role="status"
8
+ aria-label="{{ block.settings.label | escape }}"
9
+ {% if block.settings.size != blank %}style="--gcds-spinner-size: {{ block.settings.size }}"{% endif %}
10
+ {{ block.shopify_attributes }}
11
+ ></span>
12
+
13
+ {% schema %}
14
+ {
15
+ "name": "t:blocks.spinner_name",
16
+ "settings": [
17
+ { "type": "text", "id": "label", "label": "t:settings.label", "default": "Loading" },
18
+ { "type": "text", "id": "size", "label": "t:settings.size", "info": "t:settings.size_css_info" }
19
+ ],
20
+ "presets": [{ "name": "t:blocks.spinner_name" }]
21
+ }
22
+ {% endschema %}
@@ -0,0 +1,39 @@
1
+ {%- comment -%}
2
+ Split — a responsive multi-column layout block. Fills a Wave 5 layout gap Shopify
3
+ can't get from Tailwind by reusing the ds-core `.gcds-grid` primitive (auto-fit:
4
+ cells sit side by side on wide viewports and stack on narrow ones — no media
5
+ query). Accepts only Column blocks, mirroring WordPress core/columns → core/column.
6
+ Layout only; the look comes from the nested blocks. Ships two columns by default.
7
+ {%- endcomment -%}
8
+ {%- assign col_min = block.settings.col_min | default: '18rem' -%}
9
+ <div
10
+ class="gcds-grid"
11
+ style="--gcds-grid-min: {{ col_min }}; align-items: {{ block.settings.align | default: 'center' }};"
12
+ {{ block.shopify_attributes }}
13
+ >
14
+ {% content_for 'blocks' %}
15
+ </div>
16
+
17
+ {% schema %}
18
+ {
19
+ "name": "t:blocks.split_name",
20
+ "settings": [
21
+ { "type": "text", "id": "col_min", "label": "t:settings.col_min", "default": "18rem" },
22
+ {
23
+ "type": "select",
24
+ "id": "align",
25
+ "label": "t:settings.align",
26
+ "default": "center",
27
+ "options": [
28
+ { "value": "start", "label": "t:align.start" },
29
+ { "value": "center", "label": "t:align.center" },
30
+ { "value": "stretch", "label": "t:align.stretch" }
31
+ ]
32
+ }
33
+ ],
34
+ "blocks": [{ "type": "column" }],
35
+ "presets": [
36
+ { "name": "t:blocks.split_name", "blocks": [{ "type": "column" }, { "type": "column" }] }
37
+ ]
38
+ }
39
+ {% endschema %}
@@ -0,0 +1,19 @@
1
+ {%- comment -%}
2
+ Tab — one panel within a Tabs container (.gcds-tabs__panel). Its title feeds the tab
3
+ button that Tabs' script generates (via data-tab-title). Accepts nested @theme blocks
4
+ as the panel content. Only meaningful inside a Tabs block.
5
+ {%- endcomment -%}
6
+ <section class="gcds-tabs__panel" data-tab-title="{{ block.settings.title | escape }}" {{ block.shopify_attributes }}>
7
+ {% content_for 'blocks' %}
8
+ </section>
9
+
10
+ {% schema %}
11
+ {
12
+ "name": "t:blocks.tab_name",
13
+ "settings": [
14
+ { "type": "text", "id": "title", "label": "t:settings.title", "default": "Tab" }
15
+ ],
16
+ "blocks": [{ "type": "@theme" }],
17
+ "presets": [{ "name": "t:blocks.tab_name" }]
18
+ }
19
+ {% endschema %}
@@ -0,0 +1,78 @@
1
+ {%- comment -%}
2
+ Tabs — a container of Tab child blocks (.gcds-tabs). Each Tab renders a panel with a
3
+ data-tab-title; the {% javascript %} below builds the tablist from those panels and
4
+ wires selection + arrow-key nav (loaded only when a Tabs block is on the page, once
5
+ per type). Styled by tabs.css in baseline.css. Before JS runs, all panels show
6
+ (progressive). Accepts only "tab" children (mirrors buttons -> button).
7
+ {%- endcomment -%}
8
+ <div class="gcds-tabs" data-gcds-tabs {{ block.shopify_attributes }}>
9
+ {% content_for 'blocks' %}
10
+ </div>
11
+
12
+ {% javascript %}
13
+ document.querySelectorAll("[data-gcds-tabs]").forEach(function (root) {
14
+ if (root.dataset.gcdsTabsBound) return;
15
+ root.dataset.gcdsTabsBound = "1";
16
+ var panels = Array.prototype.slice.call(root.querySelectorAll(".gcds-tabs__panel"));
17
+ if (!panels.length) return;
18
+
19
+ var list = document.createElement("div");
20
+ list.className = "gcds-tabs__list";
21
+ list.setAttribute("role", "tablist");
22
+
23
+ var tabButtons = panels.map(function (panel, i) {
24
+ var base = (root.id || "gcds-tabs") + "-" + i;
25
+ if (!panel.id) panel.id = base + "-panel";
26
+ panel.setAttribute("role", "tabpanel");
27
+ panel.setAttribute("aria-labelledby", base + "-tab");
28
+ panel.tabIndex = 0;
29
+ var btn = document.createElement("button");
30
+ btn.type = "button";
31
+ btn.className = "gcds-tabs__tab";
32
+ btn.id = base + "-tab";
33
+ btn.setAttribute("role", "tab");
34
+ btn.setAttribute("aria-controls", panel.id);
35
+ btn.textContent = panel.getAttribute("data-tab-title") || "Tab " + (i + 1);
36
+ return btn;
37
+ });
38
+
39
+ tabButtons.forEach(function (btn) { list.appendChild(btn); });
40
+ root.insertBefore(list, root.firstChild);
41
+
42
+ function select(i, focus) {
43
+ tabButtons.forEach(function (btn, j) {
44
+ var selected = j === i;
45
+ btn.setAttribute("aria-selected", selected ? "true" : "false");
46
+ btn.tabIndex = selected ? 0 : -1;
47
+ panels[j].hidden = !selected;
48
+ if (selected && focus) btn.focus();
49
+ });
50
+ }
51
+
52
+ tabButtons.forEach(function (btn, i) {
53
+ btn.addEventListener("click", function () { select(i); });
54
+ btn.addEventListener("keydown", function (event) {
55
+ var next;
56
+ if (event.key === "ArrowRight") next = (i + 1) % tabButtons.length;
57
+ else if (event.key === "ArrowLeft") next = (i - 1 + tabButtons.length) % tabButtons.length;
58
+ else if (event.key === "Home") next = 0;
59
+ else if (event.key === "End") next = tabButtons.length - 1;
60
+ else return;
61
+ event.preventDefault();
62
+ select(next, true);
63
+ });
64
+ });
65
+
66
+ select(0);
67
+ });
68
+ {% endjavascript %}
69
+
70
+ {% schema %}
71
+ {
72
+ "name": "t:blocks.tabs_name",
73
+ "blocks": [{ "type": "tab" }],
74
+ "presets": [
75
+ { "name": "t:blocks.tabs_name", "blocks": [{ "type": "tab" }, { "type": "tab" }] }
76
+ ]
77
+ }
78
+ {% endschema %}
@@ -0,0 +1,55 @@
1
+ {%- comment -%}
2
+ Tags — outputs a product's tags or collections as a wrapping row of linked badges
3
+ (a .gcds-badge-group of .gcds-badge). Styled by badge.css in baseline.css; the
4
+ Shopify analogue of WP's core/post-terms badge treatment. Uses the product picked
5
+ in settings, or the product in scope (a product section) when none is set — so it
6
+ works on product pages AND anywhere you name a product (e.g. a homepage feature).
7
+ {%- endcomment -%}
8
+ {%- assign p = block.settings.product | default: product -%}
9
+ {%- assign source = block.settings.source | default: 'tags' -%}
10
+ {%- assign variant = block.settings.variant | default: 'secondary' -%}
11
+ <div class="gcds-badge-group" {{ block.shopify_attributes }}>
12
+ {%- if source == 'collections' -%}
13
+ {%- for col in p.collections -%}
14
+ <a class="gcds-badge gcds-badge--{{ variant }}" href="{{ col.url }}">{{ col.title | escape }}</a>
15
+ {%- endfor -%}
16
+ {%- else -%}
17
+ {%- for tag in p.tags -%}
18
+ <a class="gcds-badge gcds-badge--{{ variant }}" href="{{ routes.all_products_collection_url }}/{{ tag | handleize }}">{{ tag | escape }}</a>
19
+ {%- endfor -%}
20
+ {%- endif -%}
21
+ </div>
22
+
23
+ {% schema %}
24
+ {
25
+ "name": "t:blocks.tags_name",
26
+ "settings": [
27
+ { "type": "product", "id": "product", "label": "t:settings.product", "info": "t:settings.product_info" },
28
+ {
29
+ "type": "select",
30
+ "id": "source",
31
+ "label": "t:settings.source",
32
+ "default": "tags",
33
+ "options": [
34
+ { "value": "tags", "label": "t:source.tags" },
35
+ { "value": "collections", "label": "t:source.collections" }
36
+ ]
37
+ },
38
+ {
39
+ "type": "select",
40
+ "id": "variant",
41
+ "label": "t:settings.variant",
42
+ "default": "secondary",
43
+ "options": [
44
+ { "value": "primary", "label": "t:variant.primary" },
45
+ { "value": "secondary", "label": "t:variant.secondary" },
46
+ { "value": "outline", "label": "t:variant.outline" },
47
+ { "value": "error", "label": "t:variant.error" },
48
+ { "value": "success", "label": "t:variant.success" },
49
+ { "value": "warning", "label": "t:variant.warning" }
50
+ ]
51
+ }
52
+ ],
53
+ "presets": [{ "name": "t:blocks.tags_name" }]
54
+ }
55
+ {% endschema %}
@@ -0,0 +1,55 @@
1
+ {%- comment -%}
2
+ Text — a heading + body block (fills a gap: the typography block is a fixed
3
+ specimen, not merchant content). Element look comes from baseline.css; the toggles
4
+ add the Baseline utility classes (display heading, lead paragraph, muted).
5
+ {%- endcomment -%}
6
+ {%- liquid
7
+ assign level = block.settings.level | default: 'h2'
8
+ assign heading_class = 'gcds-text-balance'
9
+ if block.settings.display
10
+ assign heading_class = 'gcds-display gcds-text-balance'
11
+ endif
12
+ assign body_class = 'gcds-text-balance'
13
+ if block.settings.lead
14
+ assign body_class = 'gcds-lead ' | append: body_class
15
+ endif
16
+ if block.settings.muted
17
+ assign body_class = body_class | append: ' gcds-text-muted'
18
+ endif
19
+ -%}
20
+ <div {{ block.shopify_attributes }}>
21
+ {%- if block.settings.heading != blank -%}
22
+ <{{ level }} class="{{ heading_class }}">{{ block.settings.heading | escape }}</{{ level }}>
23
+ {%- endif -%}
24
+ {%- if block.settings.body != blank -%}
25
+ <p class="{{ body_class }}">{{ block.settings.body }}</p>
26
+ {%- endif -%}
27
+ </div>
28
+
29
+ {% schema %}
30
+ {
31
+ "name": "t:blocks.text_name",
32
+ "settings": [
33
+ { "type": "text", "id": "heading", "label": "t:settings.heading", "default": "Heading" },
34
+ {
35
+ "type": "select",
36
+ "id": "level",
37
+ "label": "t:settings.level",
38
+ "default": "h2",
39
+ "options": [
40
+ { "value": "h1", "label": "H1" },
41
+ { "value": "h2", "label": "H2" },
42
+ { "value": "h3", "label": "H3" },
43
+ { "value": "h4", "label": "H4" },
44
+ { "value": "h5", "label": "H5" },
45
+ { "value": "h6", "label": "H6" }
46
+ ]
47
+ },
48
+ { "type": "checkbox", "id": "display", "label": "t:settings.display", "default": false },
49
+ { "type": "inline_richtext", "id": "body", "label": "t:settings.body" },
50
+ { "type": "checkbox", "id": "lead", "label": "t:settings.lead", "default": false },
51
+ { "type": "checkbox", "id": "muted", "label": "t:settings.muted", "default": false }
52
+ ],
53
+ "presets": [{ "name": "t:blocks.text_name" }]
54
+ }
55
+ {% endschema %}
@@ -0,0 +1,50 @@
1
+ {%- comment -%}
2
+ Tooltip — a hover/focus label (.gcds-tooltip) on a popover="hint" + CSS anchor
3
+ positioning. Styled by tooltip.css in baseline.css. block.id links trigger↔tip and
4
+ names the anchor. The {% javascript %} below drives show/hide on hover/focus (the
5
+ Interest Invokers replacement); it's only loaded when a Tooltip block is on the page,
6
+ once per type, and wires every instance.
7
+ {%- endcomment -%}
8
+ {%- assign tid = 'gcds-tt-' | append: block.id -%}
9
+ <span class="gcds-tooltip-anchor" style="anchor-name: --{{ tid }}">
10
+ <button
11
+ type="button"
12
+ class="gcds-button gcds-button--ghost gcds-button--md"
13
+ aria-describedby="{{ tid }}"
14
+ {{ block.shopify_attributes }}
15
+ >
16
+ {{- block.settings.trigger_label | escape -}}
17
+ </button>
18
+ </span>
19
+ <div id="{{ tid }}" popover="hint" role="tooltip" class="gcds-tooltip" style="position-anchor: --{{ tid }}">
20
+ {{- block.settings.content | escape -}}
21
+ </div>
22
+
23
+ {% stylesheet %}
24
+ .gcds-tooltip-anchor { display: contents; }
25
+ {% endstylesheet %}
26
+
27
+ {% javascript %}
28
+ document.querySelectorAll(".gcds-tooltip").forEach(function (tip) {
29
+ var trigger = document.querySelector('[aria-describedby="' + tip.id + '"]');
30
+ if (!trigger || typeof tip.showPopover !== "function" || trigger.dataset.gcdsTooltipBound) return;
31
+ trigger.dataset.gcdsTooltipBound = "1";
32
+ var show = function () { try { tip.showPopover(); } catch (e) {} };
33
+ var hide = function () { try { tip.hidePopover(); } catch (e) {} };
34
+ trigger.addEventListener("pointerenter", show);
35
+ trigger.addEventListener("focus", show);
36
+ trigger.addEventListener("pointerleave", hide);
37
+ trigger.addEventListener("blur", hide);
38
+ });
39
+ {% endjavascript %}
40
+
41
+ {% schema %}
42
+ {
43
+ "name": "t:blocks.tooltip_name",
44
+ "settings": [
45
+ { "type": "text", "id": "trigger_label", "label": "t:settings.trigger_label", "default": "Hover me" },
46
+ { "type": "text", "id": "content", "label": "t:settings.content", "default": "A helpful, non-essential hint." }
47
+ ],
48
+ "presets": [{ "name": "t:blocks.tooltip_name" }]
49
+ }
50
+ {% endschema %}
@@ -0,0 +1,90 @@
1
+ {%- comment -%}
2
+ Typography — a prose specimen mirroring the Next.js home page and the WordPress
3
+ gcds/typography pattern. The element look comes from baseline.css (bare-tag
4
+ styles); .gcds-prose adds the vertical rhythm for this contiguous prose blob,
5
+ exactly like the React <article className="gcds-prose">. Fixed demo content —
6
+ no block settings (a real store would render merchant rich text into .gcds-prose).
7
+ {%- endcomment -%}
8
+ <div class="gcds-prose baseline-prose" {{ block.shopify_attributes }}>
9
+ <h2>Typography specimen</h2>
10
+ <h3>Stacked heading example</h3>
11
+ <p>
12
+ A paragraph with <strong>strong</strong>, <b>bold</b>, <em>emphasis</em>, <i>italic</i>,
13
+ <a href="#">a link</a>, <mark>highlighted text</mark>, <small>small print</small>, and
14
+ <abbr title="Cascading Style Sheets">CSS</abbr>. Edits: <del>removed</del> <ins>inserted</ins>,
15
+ <s>struck</s>. Math: H<sub>2</sub>O and E = mc<sup>2</sup>. Press <kbd>Ctrl</kbd> +
16
+ <kbd>C</kbd>. Inline <code>code()</code> and a quote: <q>brevity is the soul of wit</q>
17
+ <cite>— Shakespeare</cite>.
18
+ </p>
19
+
20
+ <h3>Lists</h3>
21
+ <ul>
22
+ <li>Unordered item one</li>
23
+ <li>
24
+ Item two with a nested list
25
+ <ul>
26
+ <li>Nested item</li>
27
+ <li>Nested item</li>
28
+ </ul>
29
+ </li>
30
+ <li>Unordered item three</li>
31
+ </ul>
32
+ <ol>
33
+ <li>Ordered first</li>
34
+ <li>Ordered second</li>
35
+ </ol>
36
+
37
+ <h3>Description list</h3>
38
+ <dl>
39
+ <dt>Token</dt>
40
+ <dd>A named design decision (color, space, type) consumed across targets.</dd>
41
+ <dt>Component</dt>
42
+ <dd>A reusable unit composed from tokens and markup.</dd>
43
+ </dl>
44
+
45
+ <h3>Blockquote &amp; figure</h3>
46
+ <blockquote>
47
+ <p>Design is not just what it looks like and feels like. Design is how it works.</p>
48
+ <cite>Steve Jobs</cite>
49
+ </blockquote>
50
+ <figure>
51
+ <blockquote>
52
+ <p>A figure can wrap a quote or an image and caption it.</p>
53
+ </blockquote>
54
+ <figcaption>Figure with a figcaption.</figcaption>
55
+ </figure>
56
+
57
+ <h3>Code block</h3>
58
+ <pre><code>function greet(name) {
59
+ return `Hello, ${name}`;
60
+ }</code></pre>
61
+
62
+ <h3>Table</h3>
63
+ <table>
64
+ <caption>A sample data table.</caption>
65
+ <thead>
66
+ <tr><th>Target</th><th>Channel</th><th>Status</th></tr>
67
+ </thead>
68
+ <tbody>
69
+ <tr><td>React / Next</td><td>npm</td><td>Ready</td></tr>
70
+ <tr><td>WordPress</td><td>Composer</td><td>Ready</td></tr>
71
+ <tr><td>Shopify</td><td>CLI</td><td>Ready</td></tr>
72
+ </tbody>
73
+ </table>
74
+
75
+ <hr>
76
+
77
+ <p>And a closing paragraph after a horizontal rule.</p>
78
+ </div>
79
+
80
+ {% stylesheet %}
81
+ /* Readable measure for the prose blob, matching WP contentSize / the React article. */
82
+ .baseline-prose { max-width: 45rem; }
83
+ {% endstylesheet %}
84
+
85
+ {% schema %}
86
+ {
87
+ "name": "t:blocks.typography_name",
88
+ "presets": [{ "name": "t:blocks.typography_name" }]
89
+ }
90
+ {% endschema %}
@@ -0,0 +1,4 @@
1
+ {
2
+ "current": {},
3
+ "presets": {}
4
+ }
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "name": "theme_info",
4
+ "theme_name": "Baseline",
5
+ "theme_version": "0.0.0",
6
+ "theme_author": "GoldenComm",
7
+ "theme_documentation_url": "https://bitbucket.org/goldencomm/design-system",
8
+ "theme_support_url": "https://bitbucket.org/goldencomm/design-system/issues"
9
+ }
10
+ ]
@@ -0,0 +1,21 @@
1
+ <!doctype html>
2
+ <html lang="{{ request.locale.iso_code }}">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="theme-color" content="">
7
+ <link rel="canonical" href="{{ canonical_url }}">
8
+ <title>{{ page_title }}</title>
9
+ {%- if page_description -%}
10
+ <meta name="description" content="{{ page_description | escape }}">
11
+ {%- endif -%}
12
+
13
+ {{ content_for_header }}
14
+
15
+ {%- comment -%} Baseline tokens + gcds-* component styles, synced from @goldencomm/ds-core. {%- endcomment -%}
16
+ {{ 'baseline.css' | asset_url | stylesheet_tag }}
17
+ </head>
18
+ <body>
19
+ {{ content_for_layout }}
20
+ </body>
21
+ </html>
@@ -0,0 +1,5 @@
1
+ {
2
+ "general": {
3
+ "skip_to_content": "Skip to content"
4
+ }
5
+ }