@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.
- package/README.md +88 -0
- package/index.mjs +296 -0
- package/package.json +44 -0
- package/templates/next/.claude/skills/ai-elements/SKILL.md +160 -0
- package/templates/next/.claude/skills/ai-elements/references/agent.md +134 -0
- package/templates/next/.claude/skills/ai-elements/references/artifact.md +84 -0
- package/templates/next/.claude/skills/ai-elements/references/attachments.md +190 -0
- package/templates/next/.claude/skills/ai-elements/references/audio-player.md +134 -0
- package/templates/next/.claude/skills/ai-elements/references/canvas.md +34 -0
- package/templates/next/.claude/skills/ai-elements/references/chain-of-thought.md +81 -0
- package/templates/next/.claude/skills/ai-elements/references/checkpoint.md +183 -0
- package/templates/next/.claude/skills/ai-elements/references/code-block.md +170 -0
- package/templates/next/.claude/skills/ai-elements/references/commit.md +177 -0
- package/templates/next/.claude/skills/ai-elements/references/confirmation.md +262 -0
- package/templates/next/.claude/skills/ai-elements/references/connection.md +34 -0
- package/templates/next/.claude/skills/ai-elements/references/context.md +126 -0
- package/templates/next/.claude/skills/ai-elements/references/controls.md +32 -0
- package/templates/next/.claude/skills/ai-elements/references/conversation.md +224 -0
- package/templates/next/.claude/skills/ai-elements/references/edge.md +52 -0
- package/templates/next/.claude/skills/ai-elements/references/environment-variables.md +102 -0
- package/templates/next/.claude/skills/ai-elements/references/file-tree.md +72 -0
- package/templates/next/.claude/skills/ai-elements/references/image.md +146 -0
- package/templates/next/.claude/skills/ai-elements/references/inline-citation.md +299 -0
- package/templates/next/.claude/skills/ai-elements/references/jsx-preview.md +104 -0
- package/templates/next/.claude/skills/ai-elements/references/message.md +237 -0
- package/templates/next/.claude/skills/ai-elements/references/mic-selector.md +189 -0
- package/templates/next/.claude/skills/ai-elements/references/model-selector.md +112 -0
- package/templates/next/.claude/skills/ai-elements/references/node.md +73 -0
- package/templates/next/.claude/skills/ai-elements/references/open-in-chat.md +67 -0
- package/templates/next/.claude/skills/ai-elements/references/package-info.md +95 -0
- package/templates/next/.claude/skills/ai-elements/references/panel.md +33 -0
- package/templates/next/.claude/skills/ai-elements/references/persona.md +166 -0
- package/templates/next/.claude/skills/ai-elements/references/plan.md +79 -0
- package/templates/next/.claude/skills/ai-elements/references/prompt-input.md +579 -0
- package/templates/next/.claude/skills/ai-elements/references/queue.md +172 -0
- package/templates/next/.claude/skills/ai-elements/references/reasoning.md +238 -0
- package/templates/next/.claude/skills/ai-elements/references/sandbox.md +129 -0
- package/templates/next/.claude/skills/ai-elements/references/schema-display.md +102 -0
- package/templates/next/.claude/skills/ai-elements/references/shimmer.md +48 -0
- package/templates/next/.claude/skills/ai-elements/references/snippet.md +64 -0
- package/templates/next/.claude/skills/ai-elements/references/sources.md +209 -0
- package/templates/next/.claude/skills/ai-elements/references/speech-input.md +163 -0
- package/templates/next/.claude/skills/ai-elements/references/stack-trace.md +224 -0
- package/templates/next/.claude/skills/ai-elements/references/suggestion.md +124 -0
- package/templates/next/.claude/skills/ai-elements/references/task.md +222 -0
- package/templates/next/.claude/skills/ai-elements/references/terminal.md +103 -0
- package/templates/next/.claude/skills/ai-elements/references/test-results.md +157 -0
- package/templates/next/.claude/skills/ai-elements/references/tool.md +285 -0
- package/templates/next/.claude/skills/ai-elements/references/toolbar.md +32 -0
- package/templates/next/.claude/skills/ai-elements/references/transcription.md +120 -0
- package/templates/next/.claude/skills/ai-elements/references/voice-selector.md +241 -0
- package/templates/next/.claude/skills/ai-elements/references/web-preview.md +200 -0
- package/templates/next/.claude/skills/ai-elements/scripts/agent.tsx +61 -0
- package/templates/next/.claude/skills/ai-elements/scripts/artifact.tsx +127 -0
- package/templates/next/.claude/skills/ai-elements/scripts/attachments-inline.tsx +128 -0
- package/templates/next/.claude/skills/ai-elements/scripts/attachments-list.tsx +95 -0
- package/templates/next/.claude/skills/ai-elements/scripts/attachments.tsx +85 -0
- package/templates/next/.claude/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
- package/templates/next/.claude/skills/ai-elements/scripts/audio-player.tsx +68 -0
- package/templates/next/.claude/skills/ai-elements/scripts/chain-of-thought.tsx +82 -0
- package/templates/next/.claude/skills/ai-elements/scripts/checkpoint.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
- package/templates/next/.claude/skills/ai-elements/scripts/code-block.tsx +120 -0
- package/templates/next/.claude/skills/ai-elements/scripts/commit.tsx +94 -0
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-accepted.tsx +40 -0
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-rejected.tsx +40 -0
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation.tsx +55 -0
- package/templates/next/.claude/skills/ai-elements/scripts/context.tsx +45 -0
- package/templates/next/.claude/skills/ai-elements/scripts/conversation.tsx +177 -0
- package/templates/next/.claude/skills/ai-elements/scripts/environment-variables.tsx +62 -0
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-basic.tsx +18 -0
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-expanded.tsx +21 -0
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-selection.tsx +24 -0
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree.tsx +42 -0
- package/templates/next/.claude/skills/ai-elements/scripts/image.tsx +20 -0
- package/templates/next/.claude/skills/ai-elements/scripts/inline-citation.tsx +97 -0
- package/templates/next/.claude/skills/ai-elements/scripts/jsx-preview.tsx +104 -0
- package/templates/next/.claude/skills/ai-elements/scripts/message.tsx +365 -0
- package/templates/next/.claude/skills/ai-elements/scripts/mic-selector.tsx +49 -0
- package/templates/next/.claude/skills/ai-elements/scripts/model-selector.tsx +365 -0
- package/templates/next/.claude/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
- package/templates/next/.claude/skills/ai-elements/scripts/package-info.tsx +51 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-command.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-glint.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-halo.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-mana.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-obsidian.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/persona-opal.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/plan.tsx +65 -0
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-cursor.tsx +502 -0
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-tooltip.tsx +44 -0
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input.tsx +267 -0
- package/templates/next/.claude/skills/ai-elements/scripts/queue-prompt-input.tsx +394 -0
- package/templates/next/.claude/skills/ai-elements/scripts/queue.tsx +295 -0
- package/templates/next/.claude/skills/ai-elements/scripts/reasoning.tsx +71 -0
- package/templates/next/.claude/skills/ai-elements/scripts/sandbox.tsx +178 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-basic.tsx +9 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display.tsx +110 -0
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer-duration.tsx +31 -0
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer-elements.tsx +43 -0
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer.tsx +17 -0
- package/templates/next/.claude/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
- package/templates/next/.claude/skills/ai-elements/scripts/snippet.tsx +25 -0
- package/templates/next/.claude/skills/ai-elements/scripts/sources-custom.tsx +39 -0
- package/templates/next/.claude/skills/ai-elements/scripts/sources.tsx +32 -0
- package/templates/next/.claude/skills/ai-elements/scripts/speech-input.tsx +84 -0
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace.tsx +58 -0
- package/templates/next/.claude/skills/ai-elements/scripts/suggestion-input.tsx +144 -0
- package/templates/next/.claude/skills/ai-elements/scripts/suggestion.tsx +32 -0
- package/templates/next/.claude/skills/ai-elements/scripts/task.tsx +59 -0
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
- package/templates/next/.claude/skills/ai-elements/scripts/terminal.tsx +82 -0
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
- package/templates/next/.claude/skills/ai-elements/scripts/test-results.tsx +102 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool-output-available.tsx +80 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool-output-error.tsx +44 -0
- package/templates/next/.claude/skills/ai-elements/scripts/tool.tsx +222 -0
- package/templates/next/.claude/skills/ai-elements/scripts/transcription.tsx +290 -0
- package/templates/next/.claude/skills/ai-elements/scripts/voice-selector.tsx +245 -0
- package/templates/next/.claude/skills/ai-elements/scripts/web-preview.tsx +115 -0
- package/templates/next/.claude/skills/ai-sdk/SKILL.md +78 -0
- package/templates/next/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/templates/next/.claude/skills/frontend-design/SKILL.md +55 -0
- package/templates/next/.claude/skills/gc-implement-figma-page/SKILL.md +93 -0
- package/templates/next/.claude/skills/migrate-ai-sdk-v6-to-v7/SKILL.md +108 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/AGENTS.md +946 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/README.md +60 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/SKILL.md +89 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/metadata.json +11 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/_sections.md +29 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/_template.md +24 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/AGENTS.md +3810 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/README.md +123 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/SKILL.md +149 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/metadata.json +15 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/templates/next/.claude/skills/web-design-guidelines/SKILL.md +39 -0
- package/templates/next/CLAUDE.md +42 -0
- package/templates/next/README.md +30 -0
- package/templates/next/_gitignore +4 -0
- package/templates/next/app/globals.css +13 -0
- package/templates/next/app/layout.tsx +44 -0
- package/templates/next/app/page.tsx +30 -0
- package/templates/next/globals.d.ts +8 -0
- package/templates/next/next.config.mjs +6 -0
- package/templates/next/package.json +38 -0
- package/templates/next/postcss.config.mjs +5 -0
- package/templates/next/skills-lock.json +47 -0
- package/templates/next/tsconfig.json +36 -0
- package/templates/shopify-theme/.claude/skills/gc-shopify-block/SKILL.md +44 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/SKILL.md +51 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/log_skill_use.mjs +205 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/search_docs.mjs +272 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.ps1 +361 -0
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.sh +527 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/SKILL.md +343 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/blocks/hero-slide.liquid +342 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/config/settings_schema.json +1 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/featured-collection.liquid +457 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.json +10 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.schema.json +103 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/package.json +10 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/search_docs.mjs +759 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.ps1 +361 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.sh +527 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/validate.mjs +654 -0
- package/templates/shopify-theme/.claude/skills/shopify-liquid/sections/hero-banner.liquid +329 -0
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/SKILL.md +165 -0
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/log_skill_use.mjs +205 -0
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.ps1 +361 -0
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.sh +527 -0
- package/templates/shopify-theme/.shopifyignore +9 -0
- package/templates/shopify-theme/CLAUDE.md +51 -0
- package/templates/shopify-theme/README.md +92 -0
- package/templates/shopify-theme/assets/baseline.css +8390 -0
- package/templates/shopify-theme/assets/swiper-element-bundle.min.js +14 -0
- package/templates/shopify-theme/blocks/_accordion.liquid +59 -0
- package/templates/shopify-theme/blocks/_carousel-slide.liquid +24 -0
- package/templates/shopify-theme/blocks/_modal-body.liquid +18 -0
- package/templates/shopify-theme/blocks/_modal-footer.liquid +36 -0
- package/templates/shopify-theme/blocks/_modal-header.liquid +19 -0
- package/templates/shopify-theme/blocks/_modal-media.liquid +37 -0
- package/templates/shopify-theme/blocks/accordion-group.liquid +53 -0
- package/templates/shopify-theme/blocks/alert.liquid +92 -0
- package/templates/shopify-theme/blocks/avatar-group.liquid +51 -0
- package/templates/shopify-theme/blocks/avatar.liquid +56 -0
- package/templates/shopify-theme/blocks/badge.liquid +33 -0
- package/templates/shopify-theme/blocks/breadcrumb.liquid +45 -0
- package/templates/shopify-theme/blocks/button.liquid +51 -0
- package/templates/shopify-theme/blocks/buttons.liquid +41 -0
- package/templates/shopify-theme/blocks/card.liquid +67 -0
- package/templates/shopify-theme/blocks/carousel.liquid +55 -0
- package/templates/shopify-theme/blocks/column.liquid +33 -0
- package/templates/shopify-theme/blocks/image.liquid +37 -0
- package/templates/shopify-theme/blocks/modal.liquid +52 -0
- package/templates/shopify-theme/blocks/popover.liquid +24 -0
- package/templates/shopify-theme/blocks/skeleton.liquid +22 -0
- package/templates/shopify-theme/blocks/spinner.liquid +22 -0
- package/templates/shopify-theme/blocks/split.liquid +39 -0
- package/templates/shopify-theme/blocks/tab.liquid +19 -0
- package/templates/shopify-theme/blocks/tabs.liquid +78 -0
- package/templates/shopify-theme/blocks/tags.liquid +55 -0
- package/templates/shopify-theme/blocks/text.liquid +55 -0
- package/templates/shopify-theme/blocks/tooltip.liquid +50 -0
- package/templates/shopify-theme/blocks/typography.liquid +90 -0
- package/templates/shopify-theme/config/settings_data.json +4 -0
- package/templates/shopify-theme/config/settings_schema.json +10 -0
- package/templates/shopify-theme/layout/theme.liquid +21 -0
- package/templates/shopify-theme/locales/en.default.json +5 -0
- package/templates/shopify-theme/locales/en.default.schema.json +131 -0
- package/templates/shopify-theme/package.json +21 -0
- package/templates/shopify-theme/scripts/sync-tokens.mjs +32 -0
- package/templates/shopify-theme/sections/baseline-components.liquid +81 -0
- package/templates/shopify-theme/skills-lock.json +23 -0
- package/templates/shopify-theme/snippets/lucide.liquid +34 -0
- package/templates/shopify-theme/snippets/pagination.liquid +44 -0
- package/templates/shopify-theme/templates/collection.json +13 -0
- package/templates/shopify-theme/templates/gift_card.liquid +5 -0
- package/templates/shopify-theme/templates/index.json +135 -0
- package/templates/shopify-theme/templates/list-collections.json +13 -0
- package/templates/shopify-theme/templates/product.json +13 -0
- package/templates/wordpress/.claude/CLAUDE.md +37 -0
- package/templates/wordpress/.claude/skills/wp-block-development/SKILL.md +174 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/attributes-and-serialization.md +22 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/block-json.md +49 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/creating-new-blocks.md +46 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/debugging.md +36 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/deprecations.md +24 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/dynamic-rendering.md +23 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/inner-blocks.md +25 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/registration.md +30 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/supports-and-wrappers.md +18 -0
- package/templates/wordpress/.claude/skills/wp-block-development/references/tooling-and-testing.md +21 -0
- package/templates/wordpress/.claude/skills/wp-block-development/scripts/list_blocks.mjs +121 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/SKILL.md +116 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/creating-new-block-theme.md +37 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/debugging.md +24 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/patterns.md +18 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/style-variations.md +14 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/templates-and-parts.md +16 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/references/theme-json.md +59 -0
- package/templates/wordpress/.claude/skills/wp-block-themes/scripts/detect_block_themes.mjs +117 -0
- package/templates/wordpress/.claude/skills/wp-performance/SKILL.md +146 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/autoload-options.md +24 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/cron.md +20 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/database.md +20 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/http-api.md +15 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/measurement.md +21 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/object-cache.md +24 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/query-monitor-headless.md +38 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/server-timing.md +22 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-doctor.md +24 -0
- package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-profile.md +32 -0
- package/templates/wordpress/.claude/skills/wp-performance/scripts/perf_inspect.mjs +128 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/SKILL.md +112 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/data-and-cron.md +19 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/debugging.md +19 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/lifecycle.md +33 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/security.md +29 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/settings-api.md +22 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/structure.md +16 -0
- package/templates/wordpress/.claude/skills/wp-plugin-development/scripts/detect_plugins.mjs +122 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/SKILL.md +114 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/authentication.md +18 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/custom-content-types.md +20 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/discovery-and-params.md +20 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/responses-and-fields.md +30 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/routes-and-endpoints.md +36 -0
- package/templates/wordpress/.claude/skills/wp-rest-api/references/schema.md +22 -0
- package/templates/wordpress/.ddev/commands/web/seed +7 -0
- package/templates/wordpress/.ddev/config.yaml +18 -0
- package/templates/wordpress/.ddev/docker-compose.packages.yaml +14 -0
- package/templates/wordpress/.ddev/docker-compose.redis.yaml +11 -0
- package/templates/wordpress/.env.example +33 -0
- package/templates/wordpress/CLAUDE.md +34 -0
- package/templates/wordpress/README.md +45 -0
- package/templates/wordpress/_gitignore +33 -0
- package/templates/wordpress/auth.json.example +18 -0
- package/templates/wordpress/composer.json +91 -0
- package/templates/wordpress/composer.lock +1594 -0
- package/templates/wordpress/package.json +13 -0
- package/templates/wordpress/scripts/seed.sh +64 -0
- package/templates/wordpress/skills-lock.json +35 -0
- package/templates/wordpress/wp-config.php +89 -0
- package/templates/wordpress/wp-content/index.php +2 -0
- 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 & 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,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>
|