@goldencomm/create-baseline 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -79
- package/index.mjs +175 -283
- package/package.json +13 -30
- package/templates/ci/bitbucket-pipelines.yml +29 -0
- package/templates/code-connect/accordion-item.figma.ts +45 -0
- package/templates/code-connect/accordion.figma.ts +40 -0
- package/templates/code-connect/alert.figma.ts +378 -0
- package/templates/code-connect/avatar-badge.figma.ts +14 -0
- package/templates/code-connect/avatar-group-count.figma.ts +16 -0
- package/templates/code-connect/avatar-group.figma.ts +30 -0
- package/templates/code-connect/avatar.figma.ts +34 -0
- package/templates/code-connect/badge.figma.ts +383 -0
- package/templates/code-connect/breadcrumb-item.figma.ts +23 -0
- package/templates/code-connect/breadcrumb-separator.figma.ts +12 -0
- package/templates/code-connect/breadcrumb.figma.ts +32 -0
- package/templates/code-connect/button-group.figma.ts +28 -0
- package/templates/code-connect/button.figma.ts +408 -0
- package/templates/code-connect/card.figma.ts +74 -0
- package/templates/code-connect/carousel.figma.ts +27 -0
- package/templates/code-connect/checkbox.figma.ts +34 -0
- package/templates/code-connect/columns-1.figma.ts +43 -0
- package/templates/code-connect/columns-2.figma.ts +49 -0
- package/templates/code-connect/columns-3.figma.ts +45 -0
- package/templates/code-connect/columns-4.figma.ts +46 -0
- package/templates/code-connect/container.figma.ts +42 -0
- package/templates/code-connect/dialog.figma.ts +72 -0
- package/templates/code-connect/drawer.figma.ts +69 -0
- package/templates/code-connect/dropdown-menu-checkbox-item.figma.ts +19 -0
- package/templates/code-connect/dropdown-menu-item.figma.ts +25 -0
- package/templates/code-connect/dropdown-menu-label.figma.ts +16 -0
- package/templates/code-connect/dropdown-menu-radio-item.figma.ts +19 -0
- package/templates/code-connect/dropdown-menu-separator.figma.ts +12 -0
- package/templates/code-connect/dropdown-menu-sub-trigger.figma.ts +22 -0
- package/templates/code-connect/dropdown-menu.figma.ts +44 -0
- package/templates/code-connect/field-horizontal.figma.ts +73 -0
- package/templates/code-connect/field.figma.ts +68 -0
- package/templates/code-connect/hover-card.figma.ts +41 -0
- package/templates/code-connect/icon-button.figma.ts +382 -0
- package/templates/code-connect/input-group.figma.ts +51 -0
- package/templates/code-connect/input-otp.figma.ts +40 -0
- package/templates/code-connect/input.figma.ts +42 -0
- package/templates/code-connect/item-group.figma.ts +30 -0
- package/templates/code-connect/item.figma.ts +50 -0
- package/templates/code-connect/kbd.figma.ts +16 -0
- package/templates/code-connect/media.figma.ts +35 -0
- package/templates/code-connect/meter.figma.ts +31 -0
- package/templates/code-connect/native-select.figma.ts +36 -0
- package/templates/code-connect/navigation-menu-link.figma.ts +33 -0
- package/templates/code-connect/navigation-menu-trigger.figma.ts +28 -0
- package/templates/code-connect/navigation-menu.figma.ts +30 -0
- package/templates/code-connect/pagination-ellipsis.figma.ts +11 -0
- package/templates/code-connect/pagination-link.figma.ts +24 -0
- package/templates/code-connect/pagination-next.figma.ts +17 -0
- package/templates/code-connect/pagination-previous.figma.ts +17 -0
- package/templates/code-connect/pagination.figma.ts +33 -0
- package/templates/code-connect/panel.figma.ts +40 -0
- package/templates/code-connect/popover.figma.ts +58 -0
- package/templates/code-connect/progress.figma.ts +34 -0
- package/templates/code-connect/radio.figma.ts +29 -0
- package/templates/code-connect/section.figma.ts +42 -0
- package/templates/code-connect/select.figma.ts +30 -0
- package/templates/code-connect/sheet.figma.ts +70 -0
- package/templates/code-connect/sidebar-menu-button.figma.ts +36 -0
- package/templates/code-connect/sidebar.figma.ts +44 -0
- package/templates/code-connect/spinner.figma.ts +13 -0
- package/templates/code-connect/switch.figma.ts +32 -0
- package/templates/code-connect/table-cell.figma.ts +21 -0
- package/templates/code-connect/table.figma.ts +62 -0
- package/templates/code-connect/tabs-trigger.figma.ts +369 -0
- package/templates/code-connect/tabs.figma.ts +28 -0
- package/templates/code-connect/textarea.figma.ts +32 -0
- package/templates/code-connect/toggle-group.figma.ts +24 -0
- package/templates/code-connect/toggle.figma.ts +385 -0
- package/templates/code-connect/tooltip.figma.ts +29 -0
- package/templates/next/app/globals.css +13 -12
- package/templates/next/app/page.tsx +38 -26
- package/templates/next/public/placeholder.svg +1 -0
- package/templates/shopify/.gitattributes +1 -0
- package/templates/shopify/.shopifyignore +23 -0
- package/templates/shopify/.theme-check.yml +1 -0
- package/templates/shopify/CODE_OF_CONDUCT.md +132 -0
- package/templates/shopify/CONTRIBUTING.md +24 -0
- package/templates/shopify/LICENSE.md +9 -0
- package/templates/shopify/README.md +160 -0
- package/templates/shopify/assets/carousel.js +2 -0
- package/templates/shopify/assets/critical.css +117 -0
- package/templates/shopify/assets/icon-account.svg +6 -0
- package/templates/shopify/assets/icon-cart.svg +5 -0
- package/templates/shopify/assets/predictive-search.js +65 -0
- package/templates/shopify/assets/shoppy-x-ray.svg +1 -0
- package/templates/shopify/blocks/_accordion-item.liquid +44 -0
- package/templates/shopify/blocks/_card-footer.liquid +26 -0
- package/templates/shopify/blocks/_carousel-slide.liquid +21 -0
- package/templates/shopify/blocks/_column.liquid +30 -0
- package/templates/shopify/blocks/_dialog-footer.liquid +28 -0
- package/templates/shopify/blocks/_sheet-footer.liquid +28 -0
- package/templates/shopify/blocks/_tab.liquid +21 -0
- package/templates/shopify/blocks/accordion.liquid +40 -0
- package/templates/shopify/blocks/blog-posts.liquid +70 -0
- package/templates/shopify/blocks/button.figma.ts +359 -0
- package/templates/shopify/blocks/button.liquid +477 -0
- package/templates/shopify/blocks/card.liquid +73 -0
- package/templates/shopify/blocks/carousel.liquid +47 -0
- package/templates/shopify/blocks/columns.liquid +73 -0
- package/templates/shopify/blocks/contact-form.liquid +69 -0
- package/templates/shopify/blocks/container.liquid +29 -0
- package/templates/shopify/blocks/dialog.liquid +77 -0
- package/templates/shopify/blocks/group.liquid +105 -0
- package/templates/shopify/blocks/heading.liquid +57 -0
- package/templates/shopify/blocks/icon-button.figma.ts +358 -0
- package/templates/shopify/blocks/media.liquid +80 -0
- package/templates/shopify/blocks/navigation-menu.liquid +23 -0
- package/templates/shopify/blocks/panel.liquid +64 -0
- package/templates/shopify/blocks/popover.liquid +88 -0
- package/templates/shopify/blocks/section-heading.liquid +68 -0
- package/templates/shopify/blocks/sheet.liquid +90 -0
- package/templates/shopify/blocks/tabs.liquid +58 -0
- package/templates/shopify/blocks/text.liquid +59 -0
- package/templates/shopify/build-js.mjs +22 -0
- package/templates/shopify/config/settings_data.json +182 -0
- package/templates/shopify/config/settings_schema.json +365 -0
- package/templates/shopify/layout/password.liquid +19 -0
- package/templates/shopify/layout/theme.liquid +57 -0
- package/templates/shopify/locales/en.default.json +58 -0
- package/templates/shopify/locales/en.default.schema.json +303 -0
- package/templates/shopify/package-lock.json +521 -0
- package/templates/shopify/package.json +17 -0
- package/templates/shopify/sections/404.liquid +23 -0
- package/templates/shopify/sections/article.liquid +81 -0
- package/templates/shopify/sections/baseline-header.liquid +236 -0
- package/templates/shopify/sections/baseline-kitchen-sink.liquid +988 -0
- package/templates/shopify/sections/baseline-section.liquid +661 -0
- package/templates/shopify/sections/blog.liquid +36 -0
- package/templates/shopify/sections/cart.liquid +65 -0
- package/templates/shopify/sections/collection.liquid +54 -0
- package/templates/shopify/sections/collections.liquid +83 -0
- package/templates/shopify/sections/custom-section.liquid +60 -0
- package/templates/shopify/sections/footer-group.json +25 -0
- package/templates/shopify/sections/footer.liquid +57 -0
- package/templates/shopify/sections/header-group.json +22 -0
- package/templates/shopify/sections/page.liquid +18 -0
- package/templates/shopify/sections/password.liquid +36 -0
- package/templates/shopify/sections/product.liquid +60 -0
- package/templates/shopify/sections/search.liquid +73 -0
- package/templates/shopify/snippets/accordion-item.figma.ts +34 -0
- package/templates/shopify/snippets/accordion-item.liquid +36 -0
- package/templates/shopify/snippets/accordion.figma.ts +37 -0
- package/templates/shopify/snippets/accordion.liquid +169 -0
- package/templates/shopify/snippets/alert.figma.ts +31 -0
- package/templates/shopify/snippets/alert.liquid +104 -0
- package/templates/shopify/snippets/avatar-group.figma.ts +17 -0
- package/templates/shopify/snippets/avatar-group.liquid +66 -0
- package/templates/shopify/snippets/avatar.figma.ts +24 -0
- package/templates/shopify/snippets/avatar.liquid +143 -0
- package/templates/shopify/snippets/badge.figma.ts +355 -0
- package/templates/shopify/snippets/badge.liquid +111 -0
- package/templates/shopify/snippets/baseline-schemes.liquid +44 -0
- package/templates/shopify/snippets/baseline-tokens.liquid +712 -0
- package/templates/shopify/snippets/breadcrumb.figma.ts +12 -0
- package/templates/shopify/snippets/breadcrumb.liquid +124 -0
- package/templates/shopify/snippets/button-group.liquid +148 -0
- package/templates/shopify/snippets/button.liquid +144 -0
- package/templates/shopify/snippets/card.figma.ts +43 -0
- package/templates/shopify/snippets/card.liquid +196 -0
- package/templates/shopify/snippets/carousel-item.liquid +18 -0
- package/templates/shopify/snippets/carousel.figma.ts +28 -0
- package/templates/shopify/snippets/carousel.liquid +121 -0
- package/templates/shopify/snippets/checkbox.liquid +147 -0
- package/templates/shopify/snippets/container.liquid +52 -0
- package/templates/shopify/snippets/css-variables.liquid +18 -0
- package/templates/shopify/snippets/dialog.figma.ts +36 -0
- package/templates/shopify/snippets/dialog.liquid +217 -0
- package/templates/shopify/snippets/field-separator.liquid +68 -0
- package/templates/shopify/snippets/field.liquid +187 -0
- package/templates/shopify/snippets/icon.liquid +101 -0
- package/templates/shopify/snippets/image.liquid +64 -0
- package/templates/shopify/snippets/input-group.liquid +196 -0
- package/templates/shopify/snippets/input.liquid +126 -0
- package/templates/shopify/snippets/item-group.liquid +31 -0
- package/templates/shopify/snippets/item.figma.ts +40 -0
- package/templates/shopify/snippets/item.liquid +162 -0
- package/templates/shopify/snippets/media.figma.ts +33 -0
- package/templates/shopify/snippets/media.liquid +273 -0
- package/templates/shopify/snippets/meta-tags.liquid +105 -0
- package/templates/shopify/snippets/meter.figma.ts +24 -0
- package/templates/shopify/snippets/meter.liquid +118 -0
- package/templates/shopify/snippets/native-select.liquid +141 -0
- package/templates/shopify/snippets/navigation-menu-item.figma.ts +23 -0
- package/templates/shopify/snippets/navigation-menu-item.liquid +40 -0
- package/templates/shopify/snippets/navigation-menu-link.figma.ts +27 -0
- package/templates/shopify/snippets/navigation-menu-link.liquid +31 -0
- package/templates/shopify/snippets/navigation-menu.figma.ts +12 -0
- package/templates/shopify/snippets/navigation-menu.liquid +300 -0
- package/templates/shopify/snippets/pagination.figma.ts +13 -0
- package/templates/shopify/snippets/pagination.liquid +208 -0
- package/templates/shopify/snippets/popover.figma.ts +41 -0
- package/templates/shopify/snippets/popover.liquid +203 -0
- package/templates/shopify/snippets/progress.figma.ts +26 -0
- package/templates/shopify/snippets/progress.liquid +114 -0
- package/templates/shopify/snippets/radio.liquid +145 -0
- package/templates/shopify/snippets/sheet.figma.ts +37 -0
- package/templates/shopify/snippets/sheet.liquid +197 -0
- package/templates/shopify/snippets/sidebar-menu-item.liquid +34 -0
- package/templates/shopify/snippets/sidebar-menu-sub-link.liquid +17 -0
- package/templates/shopify/snippets/sidebar-menu.liquid +139 -0
- package/templates/shopify/snippets/spinner.liquid +42 -0
- package/templates/shopify/snippets/switch.liquid +180 -0
- package/templates/shopify/snippets/tab.figma.ts +353 -0
- package/templates/shopify/snippets/tab.liquid +33 -0
- package/templates/shopify/snippets/tabs.figma.ts +21 -0
- package/templates/shopify/snippets/tabs.liquid +260 -0
- package/templates/shopify/snippets/text-styles.liquid +45 -0
- package/templates/shopify/snippets/textarea.liquid +103 -0
- package/templates/shopify/snippets/toggle-group.figma.ts +30 -0
- package/templates/shopify/snippets/toggle-group.liquid +46 -0
- package/templates/shopify/snippets/toggle.figma.ts +357 -0
- package/templates/shopify/snippets/toggle.liquid +104 -0
- package/templates/shopify/snippets/typeset.liquid +498 -0
- package/templates/shopify/src/carousel.js +94 -0
- package/templates/shopify/templates/404.json +20 -0
- package/templates/shopify/templates/article.json +20 -0
- package/templates/shopify/templates/blog.json +20 -0
- package/templates/shopify/templates/cart.json +20 -0
- package/templates/shopify/templates/collection.json +20 -0
- package/templates/shopify/templates/gift_card.liquid +73 -0
- package/templates/shopify/templates/index.json +18 -0
- package/templates/shopify/templates/list-collections.json +20 -0
- package/templates/shopify/templates/page.json +20 -0
- package/templates/shopify/templates/password.json +21 -0
- package/templates/shopify/templates/product.json +20 -0
- package/templates/shopify/templates/search.json +20 -0
- package/templates/skills/baseline-client-tokens/SKILL.md +74 -0
- package/templates/wordpress/.ddev/commands/web/seed +258 -3
- package/templates/wordpress/.ddev/config.yaml +10 -7
- package/templates/wordpress/.ddev/seed/gravityforms-contact.json +1 -0
- package/templates/wordpress/README.md +37 -39
- package/templates/wordpress/auth.json.example +1 -1
- package/templates/wordpress/composer.json +88 -84
- package/templates/wordpress/theme/README.md +3 -0
- package/templates/wordpress/theme/acf-json/.gitkeep +0 -0
- package/templates/wordpress/theme/acf-json/group_baseline_alert.json +83 -0
- package/templates/wordpress/theme/acf-json/group_baseline_avatar.json +82 -0
- package/templates/wordpress/theme/acf-json/group_baseline_avatar_group.json +35 -0
- package/templates/wordpress/theme/acf-json/group_baseline_badge.json +93 -0
- package/templates/wordpress/theme/acf-json/group_baseline_carousel.json +21 -0
- package/templates/wordpress/theme/acf-json/group_baseline_carousel_slide.json +16 -0
- package/templates/wordpress/theme/acf-json/group_baseline_dialog.json +68 -0
- package/templates/wordpress/theme/acf-json/group_baseline_dialog_footer.json +23 -0
- package/templates/wordpress/theme/acf-json/group_baseline_item.json +101 -0
- package/templates/wordpress/theme/acf-json/group_baseline_item_group.json +26 -0
- package/templates/wordpress/theme/acf-json/group_baseline_sheet.json +104 -0
- package/templates/wordpress/theme/acf-json/group_baseline_sheet_footer.json +31 -0
- package/templates/wordpress/theme/assets/app.css +2 -0
- package/templates/wordpress/theme/assets/editor.css +2 -0
- package/templates/wordpress/theme/assets/images/placeholder.svg +1 -0
- package/templates/wordpress/theme/assets/js/carousel-editor.js +85 -0
- package/templates/wordpress/theme/assets/js/carousel.js +2 -0
- package/templates/wordpress/theme/assets/js/core-button-editor.js +243 -0
- package/templates/wordpress/theme/assets/js/core-layout-editor.js +144 -0
- package/templates/wordpress/theme/assets/js/core-navigation.js +11 -0
- package/templates/wordpress/theme/assets/js/media-editor.js +52 -0
- package/templates/wordpress/theme/assets/js/media.js +38 -0
- package/templates/wordpress/theme/assets/tokens.css +1030 -0
- package/templates/wordpress/theme/blocks/alert/alert.figma.ts +32 -0
- package/templates/wordpress/theme/blocks/alert/block.json +24 -0
- package/templates/wordpress/theme/blocks/alert/render.php +30 -0
- package/templates/wordpress/theme/blocks/avatar/block.json +24 -0
- package/templates/wordpress/theme/blocks/avatar/render.php +35 -0
- package/templates/wordpress/theme/blocks/avatar-group/avatar-group.figma.ts +16 -0
- package/templates/wordpress/theme/blocks/avatar-group/block.json +25 -0
- package/templates/wordpress/theme/blocks/avatar-group/render.php +27 -0
- package/templates/wordpress/theme/blocks/badge/badge.figma.ts +349 -0
- package/templates/wordpress/theme/blocks/badge/block.json +23 -0
- package/templates/wordpress/theme/blocks/badge/render.php +28 -0
- package/templates/wordpress/theme/blocks/carousel/block.json +25 -0
- package/templates/wordpress/theme/blocks/carousel/carousel.figma.ts +22 -0
- package/templates/wordpress/theme/blocks/carousel/render.php +54 -0
- package/templates/wordpress/theme/blocks/carousel-slide/block.json +24 -0
- package/templates/wordpress/theme/blocks/carousel-slide/render.php +13 -0
- package/templates/wordpress/theme/blocks/dialog/block.json +24 -0
- package/templates/wordpress/theme/blocks/dialog/dialog.figma.ts +36 -0
- package/templates/wordpress/theme/blocks/dialog/render.php +41 -0
- package/templates/wordpress/theme/blocks/dialog-footer/block.json +25 -0
- package/templates/wordpress/theme/blocks/dialog-footer/render.php +18 -0
- package/templates/wordpress/theme/blocks/item/block.json +25 -0
- package/templates/wordpress/theme/blocks/item/item.figma.ts +43 -0
- package/templates/wordpress/theme/blocks/item/render.php +38 -0
- package/templates/wordpress/theme/blocks/item-group/block.json +25 -0
- package/templates/wordpress/theme/blocks/item-group/item-group.figma.ts +28 -0
- package/templates/wordpress/theme/blocks/item-group/render.php +22 -0
- package/templates/wordpress/theme/blocks/sheet/block.json +24 -0
- package/templates/wordpress/theme/blocks/sheet/render.php +39 -0
- package/templates/wordpress/theme/blocks/sheet/sheet.figma.ts +38 -0
- package/templates/wordpress/theme/blocks/sheet-footer/block.json +25 -0
- package/templates/wordpress/theme/blocks/sheet-footer/render.php +18 -0
- package/templates/wordpress/theme/build-js.mjs +22 -0
- package/templates/wordpress/theme/code-connect/accordion-item.figma.ts +47 -0
- package/templates/wordpress/theme/code-connect/accordion.figma.ts +37 -0
- package/templates/wordpress/theme/code-connect/avatar.figma.ts +25 -0
- package/templates/wordpress/theme/code-connect/breadcrumb.figma.ts +12 -0
- package/templates/wordpress/theme/code-connect/button.figma.ts +360 -0
- package/templates/wordpress/theme/code-connect/card.figma.ts +45 -0
- package/templates/wordpress/theme/code-connect/icon-button.figma.ts +359 -0
- package/templates/wordpress/theme/code-connect/navigation-menu.figma.ts +20 -0
- package/templates/wordpress/theme/code-connect/pagination.figma.ts +17 -0
- package/templates/wordpress/theme/code-connect/popover.figma.ts +42 -0
- package/templates/wordpress/theme/code-connect/tabs.figma.ts +32 -0
- package/templates/wordpress/theme/code-connect/toggle-group.figma.ts +34 -0
- package/templates/wordpress/theme/code-connect/toggle.figma.ts +356 -0
- package/templates/wordpress/theme/composer.json +7 -0
- package/templates/wordpress/theme/footer.php +4 -0
- package/templates/wordpress/theme/functions.php +86 -0
- package/templates/wordpress/theme/header.php +17 -0
- package/templates/wordpress/theme/inc/acf.php +13 -0
- package/templates/wordpress/theme/inc/blocks.php +41 -0
- package/templates/wordpress/theme/inc/carousel.php +36 -0
- package/templates/wordpress/theme/inc/components/alert.php +83 -0
- package/templates/wordpress/theme/inc/components/avatar.php +111 -0
- package/templates/wordpress/theme/inc/components/badge.php +96 -0
- package/templates/wordpress/theme/inc/components/button.php +77 -0
- package/templates/wordpress/theme/inc/components/dialog.php +98 -0
- package/templates/wordpress/theme/inc/components/item.php +111 -0
- package/templates/wordpress/theme/inc/components/popover.php +125 -0
- package/templates/wordpress/theme/inc/components/sheet.php +88 -0
- package/templates/wordpress/theme/inc/components/toggle.php +127 -0
- package/templates/wordpress/theme/inc/core-button.php +96 -0
- package/templates/wordpress/theme/inc/core-card.php +30 -0
- package/templates/wordpress/theme/inc/core-layout.php +76 -0
- package/templates/wordpress/theme/inc/core-navigation.php +31 -0
- package/templates/wordpress/theme/inc/core-pagination.php +87 -0
- package/templates/wordpress/theme/inc/header.php +39 -0
- package/templates/wordpress/theme/inc/icons.generated.php +94 -0
- package/templates/wordpress/theme/inc/icons.php +70 -0
- package/templates/wordpress/theme/inc/looks.generated.php +18 -0
- package/templates/wordpress/theme/inc/media.php +183 -0
- package/templates/wordpress/theme/inc/sections.php +16 -0
- package/templates/wordpress/theme/index.php +24 -0
- package/templates/wordpress/theme/package-lock.json +1637 -0
- package/templates/wordpress/theme/package.json +23 -0
- package/templates/wordpress/theme/parts/header.html +23 -0
- package/templates/wordpress/theme/patterns/blog-card-grid.php +41 -0
- package/templates/wordpress/theme/patterns/card.php +46 -0
- package/templates/wordpress/theme/patterns/contact-centered.php +22 -0
- package/templates/wordpress/theme/patterns/cta-left.php +25 -0
- package/templates/wordpress/theme/patterns/faq-centered.php +36 -0
- package/templates/wordpress/theme/patterns/header-inline.php +33 -0
- package/templates/wordpress/theme/patterns/header-stacked.php +25 -0
- package/templates/wordpress/theme/patterns/hero-centered.php +28 -0
- package/templates/wordpress/theme/patterns/hero-split.php +41 -0
- package/templates/wordpress/theme/patterns/section.php +28 -0
- package/templates/wordpress/theme/src/app.css +45 -0
- package/templates/wordpress/theme/src/carousel.css +93 -0
- package/templates/wordpress/theme/src/carousel.js +94 -0
- package/templates/wordpress/theme/src/checkbox.css +102 -0
- package/templates/wordpress/theme/src/core-accordion.css +158 -0
- package/templates/wordpress/theme/src/core-avatar.css +68 -0
- package/templates/wordpress/theme/src/core-breadcrumbs.css +124 -0
- package/templates/wordpress/theme/src/core-button-editor.css +45 -0
- package/templates/wordpress/theme/src/core-button.css +155 -0
- package/templates/wordpress/theme/src/core-card.css +157 -0
- package/templates/wordpress/theme/src/core-layout.css +73 -0
- package/templates/wordpress/theme/src/core-navigation.css +290 -0
- package/templates/wordpress/theme/src/core-pagination.css +112 -0
- package/templates/wordpress/theme/src/core-table.css +88 -0
- package/templates/wordpress/theme/src/core-tabs.css +86 -0
- package/templates/wordpress/theme/src/dialog.css +29 -0
- package/templates/wordpress/theme/src/editor.css +65 -0
- package/templates/wordpress/theme/src/field.css +95 -0
- package/templates/wordpress/theme/src/fonts.css +3 -0
- package/templates/wordpress/theme/src/gravityforms.css +919 -0
- package/templates/wordpress/theme/src/header.css +80 -0
- package/templates/wordpress/theme/src/icons.generated.css +16 -0
- package/templates/wordpress/theme/src/input-group.css +105 -0
- package/templates/wordpress/theme/src/input.css +116 -0
- package/templates/wordpress/theme/src/item.css +7 -0
- package/templates/wordpress/theme/src/looks.generated.css +358 -0
- package/templates/wordpress/theme/src/media.css +160 -0
- package/templates/wordpress/theme/src/radio.css +88 -0
- package/templates/wordpress/theme/src/sections.css +80 -0
- package/templates/wordpress/theme/src/sheet.css +24 -0
- package/templates/wordpress/theme/src/switch.css +120 -0
- package/templates/wordpress/theme/src/text-styles.css +44 -0
- package/templates/wordpress/theme/src/textarea.css +61 -0
- package/templates/wordpress/theme/src/toggle-group.css +28 -0
- package/templates/wordpress/theme/src/typeset.css +510 -0
- package/templates/wordpress/theme/style.css +13 -0
- package/templates/wordpress/theme/theme.json +362 -0
- package/templates/wordpress/web/wp-config.php +38 -0
- package/templates/wordpress/wp-cli.yml +1 -0
- package/templates/next/.claude/skills/ai-elements/SKILL.md +0 -160
- package/templates/next/.claude/skills/ai-elements/references/agent.md +0 -134
- package/templates/next/.claude/skills/ai-elements/references/artifact.md +0 -84
- package/templates/next/.claude/skills/ai-elements/references/attachments.md +0 -190
- package/templates/next/.claude/skills/ai-elements/references/audio-player.md +0 -134
- package/templates/next/.claude/skills/ai-elements/references/canvas.md +0 -34
- package/templates/next/.claude/skills/ai-elements/references/chain-of-thought.md +0 -81
- package/templates/next/.claude/skills/ai-elements/references/checkpoint.md +0 -183
- package/templates/next/.claude/skills/ai-elements/references/code-block.md +0 -170
- package/templates/next/.claude/skills/ai-elements/references/commit.md +0 -177
- package/templates/next/.claude/skills/ai-elements/references/confirmation.md +0 -262
- package/templates/next/.claude/skills/ai-elements/references/connection.md +0 -34
- package/templates/next/.claude/skills/ai-elements/references/context.md +0 -126
- package/templates/next/.claude/skills/ai-elements/references/controls.md +0 -32
- package/templates/next/.claude/skills/ai-elements/references/conversation.md +0 -224
- package/templates/next/.claude/skills/ai-elements/references/edge.md +0 -52
- package/templates/next/.claude/skills/ai-elements/references/environment-variables.md +0 -102
- package/templates/next/.claude/skills/ai-elements/references/file-tree.md +0 -72
- package/templates/next/.claude/skills/ai-elements/references/image.md +0 -146
- package/templates/next/.claude/skills/ai-elements/references/inline-citation.md +0 -299
- package/templates/next/.claude/skills/ai-elements/references/jsx-preview.md +0 -104
- package/templates/next/.claude/skills/ai-elements/references/message.md +0 -237
- package/templates/next/.claude/skills/ai-elements/references/mic-selector.md +0 -189
- package/templates/next/.claude/skills/ai-elements/references/model-selector.md +0 -112
- package/templates/next/.claude/skills/ai-elements/references/node.md +0 -73
- package/templates/next/.claude/skills/ai-elements/references/open-in-chat.md +0 -67
- package/templates/next/.claude/skills/ai-elements/references/package-info.md +0 -95
- package/templates/next/.claude/skills/ai-elements/references/panel.md +0 -33
- package/templates/next/.claude/skills/ai-elements/references/persona.md +0 -166
- package/templates/next/.claude/skills/ai-elements/references/plan.md +0 -79
- package/templates/next/.claude/skills/ai-elements/references/prompt-input.md +0 -579
- package/templates/next/.claude/skills/ai-elements/references/queue.md +0 -172
- package/templates/next/.claude/skills/ai-elements/references/reasoning.md +0 -238
- package/templates/next/.claude/skills/ai-elements/references/sandbox.md +0 -129
- package/templates/next/.claude/skills/ai-elements/references/schema-display.md +0 -102
- package/templates/next/.claude/skills/ai-elements/references/shimmer.md +0 -48
- package/templates/next/.claude/skills/ai-elements/references/snippet.md +0 -64
- package/templates/next/.claude/skills/ai-elements/references/sources.md +0 -209
- package/templates/next/.claude/skills/ai-elements/references/speech-input.md +0 -163
- package/templates/next/.claude/skills/ai-elements/references/stack-trace.md +0 -224
- package/templates/next/.claude/skills/ai-elements/references/suggestion.md +0 -124
- package/templates/next/.claude/skills/ai-elements/references/task.md +0 -222
- package/templates/next/.claude/skills/ai-elements/references/terminal.md +0 -103
- package/templates/next/.claude/skills/ai-elements/references/test-results.md +0 -157
- package/templates/next/.claude/skills/ai-elements/references/tool.md +0 -285
- package/templates/next/.claude/skills/ai-elements/references/toolbar.md +0 -32
- package/templates/next/.claude/skills/ai-elements/references/transcription.md +0 -120
- package/templates/next/.claude/skills/ai-elements/references/voice-selector.md +0 -241
- package/templates/next/.claude/skills/ai-elements/references/web-preview.md +0 -200
- package/templates/next/.claude/skills/ai-elements/scripts/agent.tsx +0 -61
- package/templates/next/.claude/skills/ai-elements/scripts/artifact.tsx +0 -127
- package/templates/next/.claude/skills/ai-elements/scripts/attachments-inline.tsx +0 -128
- package/templates/next/.claude/skills/ai-elements/scripts/attachments-list.tsx +0 -95
- package/templates/next/.claude/skills/ai-elements/scripts/attachments.tsx +0 -85
- package/templates/next/.claude/skills/ai-elements/scripts/audio-player-remote.tsx +0 -35
- package/templates/next/.claude/skills/ai-elements/scripts/audio-player.tsx +0 -68
- package/templates/next/.claude/skills/ai-elements/scripts/chain-of-thought.tsx +0 -82
- package/templates/next/.claude/skills/ai-elements/scripts/checkpoint.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/code-block-dark.tsx +0 -46
- package/templates/next/.claude/skills/ai-elements/scripts/code-block.tsx +0 -120
- package/templates/next/.claude/skills/ai-elements/scripts/commit.tsx +0 -94
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-accepted.tsx +0 -40
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-rejected.tsx +0 -40
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-request.tsx +0 -54
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation.tsx +0 -55
- package/templates/next/.claude/skills/ai-elements/scripts/context.tsx +0 -45
- package/templates/next/.claude/skills/ai-elements/scripts/conversation.tsx +0 -177
- package/templates/next/.claude/skills/ai-elements/scripts/environment-variables.tsx +0 -62
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-basic.tsx +0 -18
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-expanded.tsx +0 -21
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-selection.tsx +0 -24
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree.tsx +0 -42
- package/templates/next/.claude/skills/ai-elements/scripts/image.tsx +0 -20
- package/templates/next/.claude/skills/ai-elements/scripts/inline-citation.tsx +0 -97
- package/templates/next/.claude/skills/ai-elements/scripts/jsx-preview.tsx +0 -104
- package/templates/next/.claude/skills/ai-elements/scripts/message.tsx +0 -365
- package/templates/next/.claude/skills/ai-elements/scripts/mic-selector.tsx +0 -49
- package/templates/next/.claude/skills/ai-elements/scripts/model-selector.tsx +0 -365
- package/templates/next/.claude/skills/ai-elements/scripts/open-in-chat.tsx +0 -33
- package/templates/next/.claude/skills/ai-elements/scripts/package-info.tsx +0 -51
- package/templates/next/.claude/skills/ai-elements/scripts/persona-command.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-glint.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-halo.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-mana.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-obsidian.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-opal.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/plan.tsx +0 -65
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-cursor.tsx +0 -502
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-tooltip.tsx +0 -44
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input.tsx +0 -267
- package/templates/next/.claude/skills/ai-elements/scripts/queue-prompt-input.tsx +0 -394
- package/templates/next/.claude/skills/ai-elements/scripts/queue.tsx +0 -295
- package/templates/next/.claude/skills/ai-elements/scripts/reasoning.tsx +0 -71
- package/templates/next/.claude/skills/ai-elements/scripts/sandbox.tsx +0 -178
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-basic.tsx +0 -9
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-body.tsx +0 -20
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-nested.tsx +0 -23
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-params.tsx +0 -16
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer-duration.tsx +0 -31
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer-elements.tsx +0 -43
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer.tsx +0 -17
- package/templates/next/.claude/skills/ai-elements/scripts/snippet-plain.tsx +0 -19
- package/templates/next/.claude/skills/ai-elements/scripts/snippet.tsx +0 -25
- package/templates/next/.claude/skills/ai-elements/scripts/sources-custom.tsx +0 -39
- package/templates/next/.claude/skills/ai-elements/scripts/sources.tsx +0 -32
- package/templates/next/.claude/skills/ai-elements/scripts/speech-input.tsx +0 -84
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-collapsed.tsx +0 -39
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-no-internal.tsx +0 -41
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace.tsx +0 -58
- package/templates/next/.claude/skills/ai-elements/scripts/suggestion-input.tsx +0 -144
- package/templates/next/.claude/skills/ai-elements/scripts/suggestion.tsx +0 -32
- package/templates/next/.claude/skills/ai-elements/scripts/task.tsx +0 -59
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-basic.tsx +0 -7
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-clear.tsx +0 -19
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-streaming.tsx +0 -38
- package/templates/next/.claude/skills/ai-elements/scripts/terminal.tsx +0 -82
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-basic.tsx +0 -27
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-errors.tsx +0 -51
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-suites.tsx +0 -40
- package/templates/next/.claude/skills/ai-elements/scripts/test-results.tsx +0 -102
- package/templates/next/.claude/skills/ai-elements/scripts/tool-input-available.tsx +0 -31
- package/templates/next/.claude/skills/ai-elements/scripts/tool-input-streaming.tsx +0 -30
- package/templates/next/.claude/skills/ai-elements/scripts/tool-output-available.tsx +0 -80
- package/templates/next/.claude/skills/ai-elements/scripts/tool-output-error.tsx +0 -44
- package/templates/next/.claude/skills/ai-elements/scripts/tool.tsx +0 -222
- package/templates/next/.claude/skills/ai-elements/scripts/transcription.tsx +0 -290
- package/templates/next/.claude/skills/ai-elements/scripts/voice-selector.tsx +0 -245
- package/templates/next/.claude/skills/ai-elements/scripts/web-preview.tsx +0 -115
- package/templates/next/.claude/skills/ai-sdk/SKILL.md +0 -78
- package/templates/next/.claude/skills/frontend-design/LICENSE.txt +0 -177
- package/templates/next/.claude/skills/frontend-design/SKILL.md +0 -55
- package/templates/next/.claude/skills/gc-implement-figma-page/SKILL.md +0 -93
- package/templates/next/.claude/skills/migrate-ai-sdk-v6-to-v7/SKILL.md +0 -108
- package/templates/next/.claude/skills/vercel-composition-patterns/AGENTS.md +0 -946
- package/templates/next/.claude/skills/vercel-composition-patterns/README.md +0 -60
- package/templates/next/.claude/skills/vercel-composition-patterns/SKILL.md +0 -89
- package/templates/next/.claude/skills/vercel-composition-patterns/metadata.json +0 -11
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/_sections.md +0 -29
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/_template.md +0 -24
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +0 -100
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-compound-components.md +0 -112
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +0 -87
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +0 -100
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +0 -42
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-context-interface.md +0 -191
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +0 -113
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-lift-state.md +0 -125
- package/templates/next/.claude/skills/vercel-react-best-practices/AGENTS.md +0 -3810
- package/templates/next/.claude/skills/vercel-react-best-practices/README.md +0 -123
- package/templates/next/.claude/skills/vercel-react-best-practices/SKILL.md +0 -149
- package/templates/next/.claude/skills/vercel-react-best-practices/metadata.json +0 -15
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/_sections.md +0 -46
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/_template.md +0 -28
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +0 -56
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +0 -37
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -82
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +0 -63
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -60
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +0 -105
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -149
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +0 -50
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +0 -34
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
- package/templates/next/.claude/skills/web-design-guidelines/SKILL.md +0 -39
- package/templates/next/CLAUDE.md +0 -42
- package/templates/next/README.md +0 -30
- package/templates/next/_gitignore +0 -4
- package/templates/next/app/layout.tsx +0 -44
- package/templates/next/globals.d.ts +0 -8
- package/templates/next/next.config.mjs +0 -6
- package/templates/next/package.json +0 -38
- package/templates/next/postcss.config.mjs +0 -5
- package/templates/next/skills-lock.json +0 -47
- package/templates/next/tsconfig.json +0 -36
- package/templates/shopify-theme/.claude/skills/gc-shopify-block/SKILL.md +0 -44
- package/templates/shopify-theme/.claude/skills/shopify-dev/SKILL.md +0 -51
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/log_skill_use.mjs +0 -205
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/search_docs.mjs +0 -272
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.ps1 +0 -361
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.sh +0 -527
- package/templates/shopify-theme/.claude/skills/shopify-liquid/SKILL.md +0 -343
- package/templates/shopify-theme/.claude/skills/shopify-liquid/blocks/hero-slide.liquid +0 -342
- package/templates/shopify-theme/.claude/skills/shopify-liquid/config/settings_schema.json +0 -1
- package/templates/shopify-theme/.claude/skills/shopify-liquid/featured-collection.liquid +0 -457
- package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.json +0 -10
- package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.schema.json +0 -103
- package/templates/shopify-theme/.claude/skills/shopify-liquid/package.json +0 -10
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/search_docs.mjs +0 -759
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.ps1 +0 -361
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.sh +0 -527
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/validate.mjs +0 -654
- package/templates/shopify-theme/.claude/skills/shopify-liquid/sections/hero-banner.liquid +0 -329
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/SKILL.md +0 -165
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/log_skill_use.mjs +0 -205
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.ps1 +0 -361
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.sh +0 -527
- package/templates/shopify-theme/.shopifyignore +0 -9
- package/templates/shopify-theme/CLAUDE.md +0 -51
- package/templates/shopify-theme/README.md +0 -92
- package/templates/shopify-theme/assets/baseline.css +0 -8390
- package/templates/shopify-theme/assets/swiper-element-bundle.min.js +0 -14
- package/templates/shopify-theme/blocks/_accordion.liquid +0 -59
- package/templates/shopify-theme/blocks/_carousel-slide.liquid +0 -24
- package/templates/shopify-theme/blocks/_modal-body.liquid +0 -18
- package/templates/shopify-theme/blocks/_modal-footer.liquid +0 -36
- package/templates/shopify-theme/blocks/_modal-header.liquid +0 -19
- package/templates/shopify-theme/blocks/_modal-media.liquid +0 -37
- package/templates/shopify-theme/blocks/accordion-group.liquid +0 -53
- package/templates/shopify-theme/blocks/alert.liquid +0 -92
- package/templates/shopify-theme/blocks/avatar-group.liquid +0 -51
- package/templates/shopify-theme/blocks/avatar.liquid +0 -56
- package/templates/shopify-theme/blocks/badge.liquid +0 -33
- package/templates/shopify-theme/blocks/breadcrumb.liquid +0 -45
- package/templates/shopify-theme/blocks/button.liquid +0 -51
- package/templates/shopify-theme/blocks/buttons.liquid +0 -41
- package/templates/shopify-theme/blocks/card.liquid +0 -67
- package/templates/shopify-theme/blocks/carousel.liquid +0 -55
- package/templates/shopify-theme/blocks/column.liquid +0 -33
- package/templates/shopify-theme/blocks/image.liquid +0 -37
- package/templates/shopify-theme/blocks/modal.liquid +0 -52
- package/templates/shopify-theme/blocks/popover.liquid +0 -24
- package/templates/shopify-theme/blocks/skeleton.liquid +0 -22
- package/templates/shopify-theme/blocks/spinner.liquid +0 -22
- package/templates/shopify-theme/blocks/split.liquid +0 -39
- package/templates/shopify-theme/blocks/tab.liquid +0 -19
- package/templates/shopify-theme/blocks/tabs.liquid +0 -78
- package/templates/shopify-theme/blocks/tags.liquid +0 -55
- package/templates/shopify-theme/blocks/text.liquid +0 -55
- package/templates/shopify-theme/blocks/tooltip.liquid +0 -50
- package/templates/shopify-theme/blocks/typography.liquid +0 -90
- package/templates/shopify-theme/config/settings_data.json +0 -4
- package/templates/shopify-theme/config/settings_schema.json +0 -10
- package/templates/shopify-theme/layout/theme.liquid +0 -21
- package/templates/shopify-theme/locales/en.default.json +0 -5
- package/templates/shopify-theme/locales/en.default.schema.json +0 -131
- package/templates/shopify-theme/package.json +0 -21
- package/templates/shopify-theme/scripts/sync-tokens.mjs +0 -32
- package/templates/shopify-theme/sections/baseline-components.liquid +0 -81
- package/templates/shopify-theme/skills-lock.json +0 -23
- package/templates/shopify-theme/snippets/lucide.liquid +0 -34
- package/templates/shopify-theme/snippets/pagination.liquid +0 -44
- package/templates/shopify-theme/templates/collection.json +0 -13
- package/templates/shopify-theme/templates/gift_card.liquid +0 -5
- package/templates/shopify-theme/templates/index.json +0 -135
- package/templates/shopify-theme/templates/list-collections.json +0 -13
- package/templates/shopify-theme/templates/product.json +0 -13
- package/templates/wordpress/.claude/CLAUDE.md +0 -37
- package/templates/wordpress/.claude/skills/wp-block-development/SKILL.md +0 -174
- package/templates/wordpress/.claude/skills/wp-block-development/references/attributes-and-serialization.md +0 -22
- package/templates/wordpress/.claude/skills/wp-block-development/references/block-json.md +0 -49
- package/templates/wordpress/.claude/skills/wp-block-development/references/creating-new-blocks.md +0 -46
- package/templates/wordpress/.claude/skills/wp-block-development/references/debugging.md +0 -36
- package/templates/wordpress/.claude/skills/wp-block-development/references/deprecations.md +0 -24
- package/templates/wordpress/.claude/skills/wp-block-development/references/dynamic-rendering.md +0 -23
- package/templates/wordpress/.claude/skills/wp-block-development/references/inner-blocks.md +0 -25
- package/templates/wordpress/.claude/skills/wp-block-development/references/registration.md +0 -30
- package/templates/wordpress/.claude/skills/wp-block-development/references/supports-and-wrappers.md +0 -18
- package/templates/wordpress/.claude/skills/wp-block-development/references/tooling-and-testing.md +0 -21
- package/templates/wordpress/.claude/skills/wp-block-development/scripts/list_blocks.mjs +0 -121
- package/templates/wordpress/.claude/skills/wp-block-themes/SKILL.md +0 -116
- package/templates/wordpress/.claude/skills/wp-block-themes/references/creating-new-block-theme.md +0 -37
- package/templates/wordpress/.claude/skills/wp-block-themes/references/debugging.md +0 -24
- package/templates/wordpress/.claude/skills/wp-block-themes/references/patterns.md +0 -18
- package/templates/wordpress/.claude/skills/wp-block-themes/references/style-variations.md +0 -14
- package/templates/wordpress/.claude/skills/wp-block-themes/references/templates-and-parts.md +0 -16
- package/templates/wordpress/.claude/skills/wp-block-themes/references/theme-json.md +0 -59
- package/templates/wordpress/.claude/skills/wp-block-themes/scripts/detect_block_themes.mjs +0 -117
- package/templates/wordpress/.claude/skills/wp-performance/SKILL.md +0 -146
- package/templates/wordpress/.claude/skills/wp-performance/references/autoload-options.md +0 -24
- package/templates/wordpress/.claude/skills/wp-performance/references/cron.md +0 -20
- package/templates/wordpress/.claude/skills/wp-performance/references/database.md +0 -20
- package/templates/wordpress/.claude/skills/wp-performance/references/http-api.md +0 -15
- package/templates/wordpress/.claude/skills/wp-performance/references/measurement.md +0 -21
- package/templates/wordpress/.claude/skills/wp-performance/references/object-cache.md +0 -24
- package/templates/wordpress/.claude/skills/wp-performance/references/query-monitor-headless.md +0 -38
- package/templates/wordpress/.claude/skills/wp-performance/references/server-timing.md +0 -22
- package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-doctor.md +0 -24
- package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-profile.md +0 -32
- package/templates/wordpress/.claude/skills/wp-performance/scripts/perf_inspect.mjs +0 -128
- package/templates/wordpress/.claude/skills/wp-plugin-development/SKILL.md +0 -112
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/data-and-cron.md +0 -19
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/debugging.md +0 -19
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/lifecycle.md +0 -33
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/security.md +0 -29
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/settings-api.md +0 -22
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/structure.md +0 -16
- package/templates/wordpress/.claude/skills/wp-plugin-development/scripts/detect_plugins.mjs +0 -122
- package/templates/wordpress/.claude/skills/wp-rest-api/SKILL.md +0 -114
- package/templates/wordpress/.claude/skills/wp-rest-api/references/authentication.md +0 -18
- package/templates/wordpress/.claude/skills/wp-rest-api/references/custom-content-types.md +0 -20
- package/templates/wordpress/.claude/skills/wp-rest-api/references/discovery-and-params.md +0 -20
- package/templates/wordpress/.claude/skills/wp-rest-api/references/responses-and-fields.md +0 -30
- package/templates/wordpress/.claude/skills/wp-rest-api/references/routes-and-endpoints.md +0 -36
- package/templates/wordpress/.claude/skills/wp-rest-api/references/schema.md +0 -22
- package/templates/wordpress/.ddev/docker-compose.packages.yaml +0 -14
- package/templates/wordpress/.ddev/docker-compose.redis.yaml +0 -11
- package/templates/wordpress/.env.example +0 -33
- package/templates/wordpress/CLAUDE.md +0 -34
- package/templates/wordpress/_gitignore +0 -33
- package/templates/wordpress/composer.lock +0 -1594
- package/templates/wordpress/package.json +0 -13
- package/templates/wordpress/scripts/seed.sh +0 -64
- package/templates/wordpress/skills-lock.json +0 -35
- package/templates/wordpress/wp-config.php +0 -89
- package/templates/wordpress/wp-content/index.php +0 -2
- package/templates/wordpress/wp-content/mu-plugins/baseline-bootstrap.php +0 -26
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Baseline Sheet for template code and the acf/sheet block (spec: components/sheet/spec.md). Dialog's machinery drawn as
|
|
4
|
+
* an edge panel: a native <dialog closedby="any"> opened by a Button with command="show-modal" commandfor (no JavaScript).
|
|
5
|
+
* Same markup and classes as the React Sheet (registry/src/ui/sheet/sheet.tsx):
|
|
6
|
+
*
|
|
7
|
+
* echo baseline_sheet(['id' => 'menu', 'trigger' => 'Menu', 'side' => 'left', 'title' => 'Menu', 'body' => $nav]);
|
|
8
|
+
*
|
|
9
|
+
* Class strings are static maps (ADR-0008), kept identical to React's.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
declare(strict_types=1);
|
|
13
|
+
|
|
14
|
+
const BASELINE_SHEET_CONTENT = 'group/sheet-content fixed m-0 max-h-none max-w-none p-0 hidden open:flex flex-col gap-(--bl-sheet-gap) border-0 border-border bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg outline-none opacity-0 open:opacity-100 open:translate-x-0 open:translate-y-0 starting:open:opacity-0 transition-[opacity,translate,display,overlay] transition-discrete duration-200 ease-in-out motion-reduce:transition-none backdrop:bg-(--overlay) supports-backdrop-filter:backdrop:backdrop-blur-xs backdrop:opacity-0 open:backdrop:opacity-100 starting:open:backdrop:opacity-0 backdrop:transition-[opacity,display,overlay] backdrop:transition-discrete backdrop:duration-150 motion-reduce:backdrop:transition-none';
|
|
15
|
+
|
|
16
|
+
const BASELINE_SHEET_SIDES = [
|
|
17
|
+
'right' => 'inset-y-0 right-0 left-auto h-full w-3/4 sm:max-w-(--bl-sheet-max-width) border-l-(length:--bl-sheet-border-width) translate-x-10 starting:open:translate-x-10',
|
|
18
|
+
'left' => 'inset-y-0 left-0 right-auto h-full w-3/4 sm:max-w-(--bl-sheet-max-width) border-r-(length:--bl-sheet-border-width) -translate-x-10 starting:open:-translate-x-10',
|
|
19
|
+
'top' => 'inset-x-0 top-0 bottom-auto h-auto w-full border-b-(length:--bl-sheet-border-width) -translate-y-10 starting:open:-translate-y-10',
|
|
20
|
+
'bottom' => 'inset-x-0 bottom-0 top-auto h-auto w-full border-t-(length:--bl-sheet-border-width) translate-y-10 starting:open:translate-y-10',
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
// The block editor shows the panel in place (a closed <dialog> would hide the blocks editors need to reach).
|
|
24
|
+
const BASELINE_SHEET_PREVIEW = 'relative flex w-full max-w-(--bl-sheet-max-width) flex-col gap-(--bl-sheet-gap) border-(length:--bl-sheet-border-width) border-border bg-popover text-sm text-popover-foreground shadow-lg';
|
|
25
|
+
|
|
26
|
+
const BASELINE_SHEET_HEADER = 'flex flex-col gap-(--bl-sheet-header-gap) p-(--bl-sheet-padding)';
|
|
27
|
+
const BASELINE_SHEET_TITLE = 'm-0 font-heading text-(length:--bl-sheet-title-font-size) leading-(--bl-sheet-title-line-height) font-(--bl-sheet-title-font-weight) text-foreground';
|
|
28
|
+
const BASELINE_SHEET_DESCRIPTION = 'm-0 text-(length:--bl-sheet-description-font-size) leading-(--bl-sheet-description-line-height) text-muted-foreground';
|
|
29
|
+
const BASELINE_SHEET_FOOTER = 'mt-auto flex flex-col gap-(--bl-sheet-footer-gap) p-(--bl-sheet-padding)';
|
|
30
|
+
const BASELINE_SHEET_CLOSE = 'absolute top-(--bl-sheet-close-inset) right-(--bl-sheet-close-inset)';
|
|
31
|
+
|
|
32
|
+
/** The footer: pushed to the bottom, buttons stacked. `$close_label` adds an outline button that closes the sheet. */
|
|
33
|
+
function baseline_sheet_footer(string $actions, string $close_label = '', string $root_attrs = ''): string
|
|
34
|
+
{
|
|
35
|
+
$close = $close_label === '' ? '' : '<form method="dialog" class="contents">'
|
|
36
|
+
. baseline_button(['label' => $close_label, 'variant' => 'outline', 'type' => 'submit']) . '</form>';
|
|
37
|
+
$root = $root_attrs !== '' ? $root_attrs : 'class="' . esc_attr(BASELINE_SHEET_FOOTER) . '"';
|
|
38
|
+
return '<div data-slot="sheet-footer" ' . $root . '>' . $actions . $close . '</div>';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @param array{
|
|
43
|
+
* id?: string, trigger?: string|false, trigger_variant?: string, trigger_size?: string, side?: string, title?: string,
|
|
44
|
+
* description?: string, body?: string, footer?: string, show_close?: bool, preview?: bool
|
|
45
|
+
* } $args `body` and `footer` are ready markup; `trigger` false leaves the trigger out; `preview` renders the panel in place
|
|
46
|
+
*/
|
|
47
|
+
function baseline_sheet(array $args): string
|
|
48
|
+
{
|
|
49
|
+
$id = sanitize_html_class((string) ($args['id'] ?? '')) ?: wp_unique_id('sheet-');
|
|
50
|
+
$side = (string) ($args['side'] ?? 'right');
|
|
51
|
+
$side = isset(BASELINE_SHEET_SIDES[$side]) ? $side : 'right';
|
|
52
|
+
$title = (string) ($args['title'] ?? '');
|
|
53
|
+
$desc = (string) ($args['description'] ?? '');
|
|
54
|
+
$preview = !empty($args['preview']);
|
|
55
|
+
|
|
56
|
+
$header = '';
|
|
57
|
+
if ($title !== '' || $desc !== '') {
|
|
58
|
+
$header = '<div data-slot="sheet-header" class="' . BASELINE_SHEET_HEADER . '">'
|
|
59
|
+
. ($title !== '' ? '<h2 id="' . esc_attr($id . '-title') . '" data-slot="sheet-title" class="' . BASELINE_SHEET_TITLE . '">' . esc_html($title) . '</h2>' : '')
|
|
60
|
+
. ($desc !== '' ? '<p id="' . esc_attr($id . '-description') . '" data-slot="sheet-description" class="' . BASELINE_SHEET_DESCRIPTION . '">' . esc_html($desc) . '</p>' : '')
|
|
61
|
+
. '</div>';
|
|
62
|
+
}
|
|
63
|
+
$close = '';
|
|
64
|
+
if ($args['show_close'] ?? true) {
|
|
65
|
+
$close = baseline_button([
|
|
66
|
+
'variant' => 'ghost',
|
|
67
|
+
'size' => 'sm',
|
|
68
|
+
'class' => 'is-icon-only has-icon ' . BASELINE_SHEET_CLOSE,
|
|
69
|
+
'children' => baseline_icon('close') . '<span class="sr-only">' . esc_html__('Close', 'baseline') . '</span>',
|
|
70
|
+
'attrs' => ['command' => 'close', 'commandfor' => $id, 'data-slot' => 'sheet-close'],
|
|
71
|
+
]);
|
|
72
|
+
}
|
|
73
|
+
$inner = $header . (string) ($args['body'] ?? '') . (string) ($args['footer'] ?? '') . $close;
|
|
74
|
+
$trigger = ($args['trigger'] ?? null) === false ? '' : baseline_button([
|
|
75
|
+
'label' => (string) ($args['trigger'] ?? __('Open', 'baseline')),
|
|
76
|
+
'variant' => (string) ($args['trigger_variant'] ?? 'outline'),
|
|
77
|
+
'size' => (string) ($args['trigger_size'] ?? 'md'),
|
|
78
|
+
'attrs' => ['command' => 'show-modal', 'commandfor' => $id, 'data-slot' => 'sheet-trigger'],
|
|
79
|
+
]);
|
|
80
|
+
|
|
81
|
+
if ($preview) {
|
|
82
|
+
return $trigger . '<div data-slot="sheet-content" data-side="' . esc_attr($side) . '" class="' . BASELINE_SHEET_PREVIEW . '">' . $inner . '</div>';
|
|
83
|
+
}
|
|
84
|
+
$labelled = $title !== '' ? ' aria-labelledby="' . esc_attr($id . '-title') . '"' : '';
|
|
85
|
+
$described = $desc !== '' ? ' aria-describedby="' . esc_attr($id . '-description') . '"' : '';
|
|
86
|
+
return $trigger . '<dialog id="' . esc_attr($id) . '" data-slot="sheet-content" data-side="' . esc_attr($side) . '" closedby="any"'
|
|
87
|
+
. $labelled . $described . ' class="' . BASELINE_SHEET_CONTENT . ' ' . BASELINE_SHEET_SIDES[$side] . '">' . $inner . '</dialog>';
|
|
88
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Baseline Toggle and Toggle Group for template code (specs: components/toggle/spec.md, components/toggle-group/spec.md).
|
|
4
|
+
* Emits the same markup and classes as the React components (registry/src/ui/toggle, toggle-group): a <label> drawn as
|
|
5
|
+
* a button around a visually hidden <input type="checkbox"> (a toggle), or radios sharing a name (a single-choice
|
|
6
|
+
* group) / checkboxes (multiple). Native (ADR-0030, user 2026-10-06): no JavaScript, and the choice submits with a form.
|
|
7
|
+
*
|
|
8
|
+
* echo baseline_toggle(['label' => 'Bold', 'name' => 'bold', 'pressed' => true]);
|
|
9
|
+
* echo baseline_toggle_group([
|
|
10
|
+
* 'name' => 'weight', 'variant' => 'outline', 'spacing' => 0, 'value' => ['normal'],
|
|
11
|
+
* 'items' => [['value' => 'light', 'label' => 'Light'], ['value' => 'normal', 'label' => 'Normal']],
|
|
12
|
+
* ]);
|
|
13
|
+
*
|
|
14
|
+
* Class strings are static (ADR-0008) and React's, except that icons are always baseline_icon()'s unsized svg, so
|
|
15
|
+
* they are sized with a plain [&_svg] (an escaped quote in a PHP string would not match the class Tailwind compiles).
|
|
16
|
+
* The input is .sr-only, which checkbox.css and radio.css exclude, so the element styling never draws it.
|
|
17
|
+
* Single choice keeps one selected once chosen (radio behaviour, accepted 2026-10-06). The joined group's corners and borders are src/toggle-group.css.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
declare(strict_types=1);
|
|
21
|
+
|
|
22
|
+
const BASELINE_TOGGLE_BASE = 'group/toggle relative inline-flex shrink-0 cursor-pointer items-center justify-center whitespace-nowrap select-none font-(--bl-toggle-font-weight) transition-all outline-none hover:bg-muted hover:text-foreground has-checked:bg-muted has-focus-visible:z-10 has-focus-visible:border-ring has-focus-visible:ring-(length:--bl-control-ring-width) has-focus-visible:ring-ring has-disabled:pointer-events-none has-disabled:opacity-50 has-[[aria-invalid=true]]:border-destructive has-[[aria-invalid=true]]:ring-(length:--bl-control-ring-width) has-[[aria-invalid=true]]:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0';
|
|
23
|
+
|
|
24
|
+
const BASELINE_TOGGLE_VARIANTS = [
|
|
25
|
+
'default' => 'bg-transparent',
|
|
26
|
+
'outline' => 'border-(length:--bl-toggle-border-width) border-input bg-transparent hover:bg-muted',
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const BASELINE_TOGGLE_SIZES = [
|
|
30
|
+
'sm' => 'h-(--bl-toggle-sm-height) min-w-(--bl-toggle-sm-height) gap-(--bl-toggle-sm-gap) px-(--bl-toggle-sm-padding-x) [--toggle-radius:var(--bl-toggle-sm-radius)] rounded-(--toggle-radius) text-(length:--bl-toggle-sm-font-size) leading-(--bl-toggle-sm-line-height) has-data-[icon=inline-start]:ps-(--bl-toggle-sm-padding-x-icon) has-data-[icon=inline-end]:pe-(--bl-toggle-sm-padding-x-icon) [&_svg]:size-(--bl-toggle-sm-icon-size)',
|
|
31
|
+
'md' => 'h-(--bl-toggle-md-height) min-w-(--bl-toggle-md-height) gap-(--bl-toggle-md-gap) px-(--bl-toggle-md-padding-x) [--toggle-radius:var(--bl-toggle-md-radius)] rounded-(--toggle-radius) text-(length:--bl-toggle-md-font-size) leading-(--bl-toggle-md-line-height) has-data-[icon=inline-start]:ps-(--bl-toggle-md-padding-x-icon) has-data-[icon=inline-end]:pe-(--bl-toggle-md-padding-x-icon) [&_svg]:size-(--bl-toggle-md-icon-size)',
|
|
32
|
+
'lg' => 'h-(--bl-toggle-lg-height) min-w-(--bl-toggle-lg-height) gap-(--bl-toggle-lg-gap) px-(--bl-toggle-lg-padding-x) [--toggle-radius:var(--bl-toggle-lg-radius)] rounded-(--toggle-radius) text-(length:--bl-toggle-lg-font-size) leading-(--bl-toggle-lg-line-height) has-data-[icon=inline-start]:ps-(--bl-toggle-lg-padding-x-icon) has-data-[icon=inline-end]:pe-(--bl-toggle-lg-padding-x-icon) [&_svg]:size-(--bl-toggle-lg-icon-size)',
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const BASELINE_TOGGLE_GROUP = 'group/toggle-group not-typeset flex w-fit flex-row items-center gap-(--bl-toggle-group-gap) data-[spacing=0]:gap-0 data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @param array{
|
|
39
|
+
* label?: string, children?: string, icon?: string, icon_position?: string, variant?: string, size?: string,
|
|
40
|
+
* pressed?: bool, disabled?: bool, name?: string, value?: string, type?: string, aria_label?: string, id?: string,
|
|
41
|
+
* class?: string, slot?: string
|
|
42
|
+
* } $args `children` is ready markup (it replaces label and icon); `icon` a Baseline system icon name; `type` "radio"
|
|
43
|
+
* for a single-choice group's item; `aria_label` names an icon-only toggle (it goes on the input).
|
|
44
|
+
*/
|
|
45
|
+
function baseline_toggle(array $args): string
|
|
46
|
+
{
|
|
47
|
+
$variant = array_key_exists((string) ($args['variant'] ?? ''), BASELINE_TOGGLE_VARIANTS) ? (string) $args['variant'] : 'default';
|
|
48
|
+
$size = array_key_exists((string) ($args['size'] ?? ''), BASELINE_TOGGLE_SIZES) ? (string) $args['size'] : 'md';
|
|
49
|
+
$type = ($args['type'] ?? 'checkbox') === 'radio' ? 'radio' : 'checkbox';
|
|
50
|
+
$label = (string) ($args['label'] ?? '');
|
|
51
|
+
|
|
52
|
+
$inner = (string) ($args['children'] ?? '');
|
|
53
|
+
if ($inner === '') {
|
|
54
|
+
$icon = '';
|
|
55
|
+
if (!empty($args['icon'])) {
|
|
56
|
+
$at = ($args['icon_position'] ?? 'start') === 'end' ? 'inline-end' : 'inline-start';
|
|
57
|
+
// no size-* class: the toggle's size sets the icon size (toggle/<size>/icon-size); data-icon tightens its side
|
|
58
|
+
$icon = baseline_icon((string) $args['icon'], 'shrink-0');
|
|
59
|
+
if ($label !== '') {
|
|
60
|
+
$icon = preg_replace('/^<svg\b/', '<svg data-icon="' . $at . '"', $icon, 1) ?? $icon;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
$text = $label !== '' ? esc_html($label) : '';
|
|
64
|
+
$inner = ($args['icon_position'] ?? 'start') === 'end' ? $text . $icon : $icon . $text;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
$input = '<input' . baseline_attrs([
|
|
68
|
+
'type' => $type,
|
|
69
|
+
'class' => 'sr-only',
|
|
70
|
+
'name' => $args['name'] ?? null,
|
|
71
|
+
'value' => $args['value'] ?? null,
|
|
72
|
+
'id' => $args['id'] ?? null,
|
|
73
|
+
'checked' => !empty($args['pressed']),
|
|
74
|
+
'disabled' => !empty($args['disabled']),
|
|
75
|
+
'aria-label' => $args['aria_label'] ?? null,
|
|
76
|
+
]) . '>';
|
|
77
|
+
|
|
78
|
+
$classes = trim(BASELINE_TOGGLE_BASE . ' not-typeset ' . BASELINE_TOGGLE_VARIANTS[$variant] . ' ' . BASELINE_TOGGLE_SIZES[$size] . ' ' . (string) ($args['class'] ?? ''));
|
|
79
|
+
return '<label data-slot="' . esc_attr((string) ($args['slot'] ?? 'toggle')) . '" data-variant="' . esc_attr($variant) . '" data-size="' . esc_attr($size) . '" class="' . esc_attr($classes) . '">' . $input . $inner . '</label>';
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @param array{
|
|
84
|
+
* items: array<int, array{value: string, label?: string, icon?: string, aria_label?: string, disabled?: bool, children?: string}>,
|
|
85
|
+
* name?: string, multiple?: bool, value?: string[], variant?: string, size?: string, spacing?: int,
|
|
86
|
+
* orientation?: string, disabled?: bool, aria_label?: string, class?: string
|
|
87
|
+
* } $args `value` lists the items on at first; single choice (the default) is radios sharing `name`.
|
|
88
|
+
*/
|
|
89
|
+
function baseline_toggle_group(array $args): string
|
|
90
|
+
{
|
|
91
|
+
$name = sanitize_html_class((string) ($args['name'] ?? '')) ?: wp_unique_id('toggle-group-');
|
|
92
|
+
$multiple = !empty($args['multiple']);
|
|
93
|
+
$value = array_map('strval', (array) ($args['value'] ?? []));
|
|
94
|
+
$spacing = (int) ($args['spacing'] ?? 2);
|
|
95
|
+
$orientation = ($args['orientation'] ?? 'horizontal') === 'vertical' ? 'vertical' : 'horizontal';
|
|
96
|
+
$variant = (string) ($args['variant'] ?? 'default');
|
|
97
|
+
$size = (string) ($args['size'] ?? 'md');
|
|
98
|
+
|
|
99
|
+
$items = '';
|
|
100
|
+
foreach ((array) ($args['items'] ?? []) as $item) {
|
|
101
|
+
$v = (string) ($item['value'] ?? '');
|
|
102
|
+
$items .= baseline_toggle([
|
|
103
|
+
'slot' => 'toggle-group-item',
|
|
104
|
+
'type' => $multiple ? 'checkbox' : 'radio',
|
|
105
|
+
'name' => $name,
|
|
106
|
+
'value' => $v,
|
|
107
|
+
'pressed' => in_array($v, $value, true),
|
|
108
|
+
'variant' => $variant,
|
|
109
|
+
'size' => $size,
|
|
110
|
+
'label' => $item['label'] ?? '',
|
|
111
|
+
'icon' => $item['icon'] ?? '',
|
|
112
|
+
'children' => $item['children'] ?? '',
|
|
113
|
+
'aria_label' => $item['aria_label'] ?? null,
|
|
114
|
+
'disabled' => !empty($item['disabled']) || !empty($args['disabled']),
|
|
115
|
+
'class' => 'shrink-0',
|
|
116
|
+
]);
|
|
117
|
+
}
|
|
118
|
+
return '<div role="group"' . baseline_attrs([
|
|
119
|
+
'data-slot' => 'toggle-group',
|
|
120
|
+
'data-variant' => $variant,
|
|
121
|
+
'data-size' => $size,
|
|
122
|
+
'data-spacing' => (string) $spacing,
|
|
123
|
+
'data-orientation' => $orientation,
|
|
124
|
+
'aria-label' => $args['aria_label'] ?? null,
|
|
125
|
+
'class' => trim(BASELINE_TOGGLE_GROUP . ' ' . (string) ($args['class'] ?? '')),
|
|
126
|
+
]) . '>' . $items . '</div>';
|
|
127
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* core/button IS the Baseline button on WordPress (ADR-0018, supersedes ADR-0016; icons: ADR-0020).
|
|
4
|
+
*
|
|
5
|
+
* - Variants are block styles. Core's own `fill` and `outline` ARE the Baseline `default` and `outline` variants;
|
|
6
|
+
* `secondary`, `ghost`, `link` and `destructive` are registered here (PHP, no JavaScript).
|
|
7
|
+
* - Size and icon are server-registered attributes (`baselineSize`, `baselineIcon`, `baselineIconPosition`,
|
|
8
|
+
* `baselineIconOnly`). WordPress lets the server definition win for core blocks, so the client needs no attribute
|
|
9
|
+
* declaration; the inspector controls live in assets/js/core-button-editor.js. Everything is applied at RENDER
|
|
10
|
+
* time (classes on the wrapper, the registered icon's SVG inside the link), so saved markup never changes and
|
|
11
|
+
* existing content keeps validating.
|
|
12
|
+
* - Base look: theme.json `styles.elements.button`; token-controlled panels are switched off in theme.json
|
|
13
|
+
* `settings.blocks`; the rest is src/core-button.css. Both read the button/* component tokens (ADR-0017).
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
declare(strict_types=1);
|
|
17
|
+
|
|
18
|
+
const BASELINE_BUTTON_SIZES = ['xs', 'sm', 'md', 'lg'];
|
|
19
|
+
/** Baseline variant => core/button block style name. */
|
|
20
|
+
const BASELINE_BUTTON_STYLES = [
|
|
21
|
+
'default' => 'fill',
|
|
22
|
+
'secondary' => 'secondary',
|
|
23
|
+
'outline' => 'outline',
|
|
24
|
+
'ghost' => 'ghost',
|
|
25
|
+
'link' => 'link',
|
|
26
|
+
'destructive' => 'destructive',
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
add_filter('register_block_type_args', static function (array $args, string $name): array {
|
|
30
|
+
if ($name === 'core/button') {
|
|
31
|
+
$args['attributes']['baselineSize'] = ['type' => 'string', 'enum' => BASELINE_BUTTON_SIZES, 'default' => 'md'];
|
|
32
|
+
$args['attributes']['baselineIcon'] = ['type' => 'string', 'default' => '']; // registered handle, e.g. baseline/chevron-down
|
|
33
|
+
$args['attributes']['baselineIconPosition'] = ['type' => 'string', 'enum' => ['start', 'end'], 'default' => 'start'];
|
|
34
|
+
$args['attributes']['baselineIconOnly'] = ['type' => 'boolean', 'default' => false];
|
|
35
|
+
}
|
|
36
|
+
return $args;
|
|
37
|
+
}, 10, 2);
|
|
38
|
+
|
|
39
|
+
/** The four variants core does not ship; `fill` and `outline` already exist and are restyled by src/core-button.css. */
|
|
40
|
+
add_action('init', static function (): void {
|
|
41
|
+
foreach (['secondary' => 'Secondary', 'ghost' => 'Ghost', 'link' => 'Link', 'destructive' => 'Destructive'] as $name => $label) {
|
|
42
|
+
register_block_style('core/button', ['name' => $name, 'label' => __($label, 'baseline')]);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Render-time axes: size class on the wrapper; icon SVG (from the registry) inside the link, before or after the
|
|
48
|
+
* text; icon-only keeps the text as the accessible name (visually hidden).
|
|
49
|
+
*/
|
|
50
|
+
add_filter('render_block_core/button', static function (string $content, array $block): string {
|
|
51
|
+
$attrs = $block['attrs'] ?? [];
|
|
52
|
+
$size = $attrs['baselineSize'] ?? 'md';
|
|
53
|
+
if (!in_array($size, BASELINE_BUTTON_SIZES, true)) {
|
|
54
|
+
$size = 'md';
|
|
55
|
+
}
|
|
56
|
+
// not-typeset: a button inside flowing content must not take typeset's link styling (ADR-0028)
|
|
57
|
+
$classes = ['is-size-' . $size, 'not-typeset'];
|
|
58
|
+
|
|
59
|
+
$icon = (string) ($attrs['baselineIcon'] ?? '');
|
|
60
|
+
$svg = $icon !== '' && function_exists('wp_get_icon') ? wp_get_icon($icon, ['size' => null, 'class' => 'wp-block-button__icon']) : '';
|
|
61
|
+
if ($svg !== '') {
|
|
62
|
+
$end = ($attrs['baselineIconPosition'] ?? 'start') === 'end';
|
|
63
|
+
$only = !empty($attrs['baselineIconOnly']);
|
|
64
|
+
$classes[] = 'has-icon';
|
|
65
|
+
if ($end) {
|
|
66
|
+
$classes[] = 'has-icon-end';
|
|
67
|
+
}
|
|
68
|
+
if ($only) {
|
|
69
|
+
$classes[] = 'is-icon-only';
|
|
70
|
+
}
|
|
71
|
+
$content = preg_replace_callback(
|
|
72
|
+
'/(<(a|button)\b[^>]*\bwp-block-button__link\b[^>]*>)(.*?)(<\/\2>)/s',
|
|
73
|
+
static function (array $m) use ($svg, $end, $only): string {
|
|
74
|
+
$text = '<span class="' . ($only ? 'sr-only' : 'wp-block-button__text') . '">' . $m[3] . '</span>';
|
|
75
|
+
return $m[1] . ($end ? $text . $svg : $svg . $text) . $m[4];
|
|
76
|
+
},
|
|
77
|
+
$content,
|
|
78
|
+
1
|
|
79
|
+
) ?? $content;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
$out = preg_replace('/(<div\b[^>]*\bclass=")([^"]*\bwp-block-button\b[^"]*)"/', '$1$2 ' . implode(' ', $classes) . '"', $content, 1);
|
|
83
|
+
return is_string($out) ? $out : $content;
|
|
84
|
+
}, 10, 2);
|
|
85
|
+
|
|
86
|
+
/** Editor script: Size + Icon controls and the editor-side classes; the icon collection is inlined for the picker. */
|
|
87
|
+
add_action('enqueue_block_editor_assets', static function (): void {
|
|
88
|
+
wp_enqueue_script(
|
|
89
|
+
'baseline-core-button',
|
|
90
|
+
BASELINE_URI . '/assets/js/core-button-editor.js',
|
|
91
|
+
['wp-hooks', 'wp-compose', 'wp-element', 'wp-components', 'wp-block-editor', 'wp-i18n'],
|
|
92
|
+
(string) filemtime(BASELINE_DIR . '/assets/js/core-button-editor.js'),
|
|
93
|
+
true
|
|
94
|
+
);
|
|
95
|
+
wp_add_inline_script('baseline-core-button', 'window.baselineIcons = ' . wp_json_encode(baseline_icons_for_editor()) . ';', 'before');
|
|
96
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Card on WordPress is core/group (spec: components/card/spec.md; ADR-0018: no core card block, but core/group carries
|
|
4
|
+
* the anatomy). Block styles name the regions; src/core-card.css ports the React Card's rules onto them:
|
|
5
|
+
*
|
|
6
|
+
* is-style-card / is-style-card-sm the root (md / sm spacing); every direct child is padded content
|
|
7
|
+
* is-style-card-header title (a heading), description (a paragraph), action (a core/buttons)
|
|
8
|
+
* is-style-card-header-bordered the same header with Figma's Bordered rule beneath it
|
|
9
|
+
* is-style-card-footer the muted, bordered footer; a Row group lays its buttons out, a Stack stacks them
|
|
10
|
+
*
|
|
11
|
+
* An image block as the first child is the full-bleed media. patterns/card.php inserts the whole card, so editors delete
|
|
12
|
+
* regions rather than assemble them. The styles show on every group, not only inside a card: harmless there, and hiding
|
|
13
|
+
* them would need editor JavaScript.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
declare(strict_types=1);
|
|
17
|
+
|
|
18
|
+
add_action('init', static function (): void {
|
|
19
|
+
$styles = [
|
|
20
|
+
'card' => __('Card', 'baseline'),
|
|
21
|
+
'card-sm' => __('Card (small)', 'baseline'),
|
|
22
|
+
'card-header' => __('Card header', 'baseline'),
|
|
23
|
+
'card-header-bordered' => __('Card header (bordered)', 'baseline'),
|
|
24
|
+
'card-footer' => __('Card footer', 'baseline'),
|
|
25
|
+
];
|
|
26
|
+
foreach ($styles as $name => $label) {
|
|
27
|
+
register_block_style('core/group', ['name' => $name, 'label' => $label]);
|
|
28
|
+
}
|
|
29
|
+
register_block_pattern_category('baseline', ['label' => __('GC Baseline', 'baseline')]);
|
|
30
|
+
});
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Layout on WordPress (B5; specs: components/section, container, columns, panel). Core blocks carry all four
|
|
4
|
+
* (ADR-0018), so this file only adds what core lacks:
|
|
5
|
+
*
|
|
6
|
+
* Section core/group, tagName section, align full. `baselineScheme` (server-registered, ADR-0018 §3) renders as
|
|
7
|
+
* data-scheme on the group, `baselineSurface` as has-surface-<mode> (Figma's Surface mode: muted for an
|
|
8
|
+
* announcement bar); padding top / bottom are the spacing presets theme.json generates from
|
|
9
|
+
* spacing/responsive/*.
|
|
10
|
+
* Container no block: core's constrained layout. Content = an unaligned child, Wide = alignwide, Full = alignfull;
|
|
11
|
+
* theme.json contentSize / wideSize read layout/*, the inline padding is the root padding.
|
|
12
|
+
* Columns core/columns. `baselineInvertOrder` renders as is-inverted-on-mobile: once stacked, the last column
|
|
13
|
+
* comes first. src/core-layout.css sets the gap and shows four columns as 2 x 2 until xl.
|
|
14
|
+
* Panel block style `panel` on core/group: Card's surface around a section's content.
|
|
15
|
+
*
|
|
16
|
+
* Render-time only: saved markup never changes, so content keeps validating (ADR-0018).
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
declare(strict_types=1);
|
|
20
|
+
|
|
21
|
+
const BASELINE_SCHEMES = ['scheme-1', 'scheme-2', 'error', 'success', 'warning'];
|
|
22
|
+
const BASELINE_SURFACES = ['muted', 'card', 'primary', 'secondary', 'accent', 'inverse'];
|
|
23
|
+
|
|
24
|
+
add_filter('register_block_type_args', static function (array $args, string $name): array {
|
|
25
|
+
if ($name === 'core/group') {
|
|
26
|
+
$args['attributes']['baselineScheme'] = ['type' => 'string', 'enum' => array_merge([''], BASELINE_SCHEMES), 'default' => ''];
|
|
27
|
+
$args['attributes']['baselineSurface'] = ['type' => 'string', 'enum' => array_merge([''], BASELINE_SURFACES), 'default' => ''];
|
|
28
|
+
}
|
|
29
|
+
if ($name === 'core/columns') {
|
|
30
|
+
$args['attributes']['baselineInvertOrder'] = ['type' => 'boolean', 'default' => false];
|
|
31
|
+
}
|
|
32
|
+
return $args;
|
|
33
|
+
}, 10, 2);
|
|
34
|
+
|
|
35
|
+
add_action('init', static function (): void {
|
|
36
|
+
register_block_style('core/group', ['name' => 'panel', 'label' => __('Panel', 'baseline')]);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
/** Adds an attribute string to the first opening tag of a block's markup. */
|
|
40
|
+
function baseline_first_tag_attr(string $content, string $attr): string
|
|
41
|
+
{
|
|
42
|
+
$out = preg_replace('/^(\s*<[a-z][a-z0-9-]*\b)/i', '$1 ' . $attr, $content, 1);
|
|
43
|
+
return is_string($out) ? $out : $content;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
add_filter('render_block_core/group', static function (string $content, array $block): string {
|
|
47
|
+
$scheme = (string) ($block['attrs']['baselineScheme'] ?? '');
|
|
48
|
+
$surface = (string) ($block['attrs']['baselineSurface'] ?? '');
|
|
49
|
+
if (in_array($surface, BASELINE_SURFACES, true)) {
|
|
50
|
+
$out = preg_replace('/(<[a-z][a-z0-9-]*\b[^>]*\bclass=")([^"]*\bwp-block-group\b[^"]*)"/i', '$1$2 has-surface-' . $surface . '"', $content, 1);
|
|
51
|
+
$content = is_string($out) ? $out : $content;
|
|
52
|
+
}
|
|
53
|
+
if (in_array($scheme, BASELINE_SCHEMES, true)) {
|
|
54
|
+
$content = baseline_first_tag_attr($content, 'data-scheme="' . esc_attr($scheme) . '"');
|
|
55
|
+
}
|
|
56
|
+
return $content;
|
|
57
|
+
}, 10, 2);
|
|
58
|
+
|
|
59
|
+
add_filter('render_block_core/columns', static function (string $content, array $block): string {
|
|
60
|
+
if (empty($block['attrs']['baselineInvertOrder'])) {
|
|
61
|
+
return $content;
|
|
62
|
+
}
|
|
63
|
+
$out = preg_replace('/(<div\b[^>]*\bclass=")([^"]*\bwp-block-columns\b[^"]*)"/', '$1$2 is-inverted-on-mobile"', $content, 1);
|
|
64
|
+
return is_string($out) ? $out : $content;
|
|
65
|
+
}, 10, 2);
|
|
66
|
+
|
|
67
|
+
/** Editor: the Scheme select (groups), the Invert order toggle (columns), the two ratio variations core lacks. */
|
|
68
|
+
add_action('enqueue_block_editor_assets', static function (): void {
|
|
69
|
+
wp_enqueue_script(
|
|
70
|
+
'baseline-core-layout',
|
|
71
|
+
BASELINE_URI . '/assets/js/core-layout-editor.js',
|
|
72
|
+
['wp-hooks', 'wp-compose', 'wp-element', 'wp-components', 'wp-block-editor', 'wp-blocks', 'wp-i18n', 'wp-dom-ready'],
|
|
73
|
+
(string) filemtime(BASELINE_DIR . '/assets/js/core-layout-editor.js'),
|
|
74
|
+
true
|
|
75
|
+
);
|
|
76
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* core/navigation IS the Baseline Navigation Menu on WordPress (ADR-0018; spec: components/navigation-menu/spec.md):
|
|
4
|
+
* src/core-navigation.css styles it, its mobile overlay as the Sidebar's Sheet (spec: components/sidebar/spec.md).
|
|
5
|
+
* This file adds `not-typeset` to the <nav>, so a menu placed in post content keeps its own look instead of typeset's
|
|
6
|
+
* list and link rules (ADR-0028), as core/button's render filter does; and, where the menu has an overlay, enqueues
|
|
7
|
+
* assets/js/core-navigation.js (a click on the dimmed page closes it).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
declare(strict_types=1);
|
|
11
|
+
|
|
12
|
+
add_action('wp_enqueue_scripts', static function (): void {
|
|
13
|
+
wp_register_script(
|
|
14
|
+
'baseline-core-navigation',
|
|
15
|
+
BASELINE_URI . '/assets/js/core-navigation.js',
|
|
16
|
+
[],
|
|
17
|
+
(string) filemtime(BASELINE_DIR . '/assets/js/core-navigation.js'),
|
|
18
|
+
['in_footer' => true, 'strategy' => 'defer']
|
|
19
|
+
);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
add_filter('render_block_core/navigation', static function (string $content): string {
|
|
23
|
+
$tags = new WP_HTML_Tag_Processor($content);
|
|
24
|
+
if ($tags->next_tag(['tag_name' => 'nav', 'class_name' => 'wp-block-navigation'])) {
|
|
25
|
+
$tags->add_class('not-typeset');
|
|
26
|
+
}
|
|
27
|
+
if ($tags->next_tag(['class_name' => 'wp-block-navigation__responsive-container'])) {
|
|
28
|
+
wp_enqueue_script('baseline-core-navigation');
|
|
29
|
+
}
|
|
30
|
+
return $tags->get_updated_html();
|
|
31
|
+
});
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Pagination on WordPress (spec: components/pagination/spec.md; ADR-0018): Previous and Next are always rendered, as in
|
|
4
|
+
* React and Shopify (user, 2026-10-02). Core drops Previous on the first page and Next on the last, which shifts the row;
|
|
5
|
+
* here the missing one comes back as a disabled link (no href, role="link", aria-disabled="true"), styled by
|
|
6
|
+
* src/core-pagination.css. A single page still renders nothing: a control is added only beside its counterpart.
|
|
7
|
+
*
|
|
8
|
+
* The looks themselves are generated (ADR-0031): src/looks.generated.css and inc/looks.generated.php.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
declare(strict_types=1);
|
|
12
|
+
|
|
13
|
+
/** Core's arrow characters by paginationArrow (get_query_pagination_arrow()); the stylesheet masks them as chevrons. */
|
|
14
|
+
function baseline_pagination_arrow(string $type, string $direction): string
|
|
15
|
+
{
|
|
16
|
+
$arrows = [
|
|
17
|
+
'arrow' => ['previous' => '←', 'next' => '→'],
|
|
18
|
+
'chevron' => ['previous' => '«', 'next' => '»'],
|
|
19
|
+
];
|
|
20
|
+
if (!isset($arrows[$type])) {
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
return sprintf(
|
|
24
|
+
'<span class="wp-block-query-pagination-%1$s-arrow is-arrow-%2$s" aria-hidden="true">%3$s</span>',
|
|
25
|
+
$direction,
|
|
26
|
+
esc_attr($type),
|
|
27
|
+
$arrows[$type][$direction]
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** core/query-pagination: put back the Previous or Next that core left out, as a disabled link in its place. */
|
|
32
|
+
add_filter('render_block_core/query-pagination', static function (string $content, array $block): string {
|
|
33
|
+
if (trim($content) === '') {
|
|
34
|
+
return $content;
|
|
35
|
+
}
|
|
36
|
+
$has = static fn (string $d): bool => str_contains($content, "wp-block-query-pagination-{$d}\"")
|
|
37
|
+
|| str_contains($content, "wp-block-query-pagination-{$d} ");
|
|
38
|
+
$inner = [];
|
|
39
|
+
foreach ($block['innerBlocks'] ?? [] as $child) {
|
|
40
|
+
$inner[$child['blockName'] ?? ''] = $child['attrs'] ?? [];
|
|
41
|
+
}
|
|
42
|
+
$arrow = (string) ($block['attrs']['paginationArrow'] ?? 'none');
|
|
43
|
+
$show_label = (bool) ($block['attrs']['showLabel'] ?? true);
|
|
44
|
+
$disabled = static function (string $direction) use ($inner, $arrow, $show_label): string {
|
|
45
|
+
$attrs = $inner["core/query-pagination-{$direction}"];
|
|
46
|
+
$label = !empty($attrs['label']) ? esc_html($attrs['label']) : ($direction === 'previous' ? __('Previous Page') : __('Next Page'));
|
|
47
|
+
$arrow_html = baseline_pagination_arrow($arrow, $direction);
|
|
48
|
+
$text = $show_label ? $label : '';
|
|
49
|
+
$body = $direction === 'previous' ? $arrow_html . $text : $text . $arrow_html;
|
|
50
|
+
return sprintf(
|
|
51
|
+
'<a class="wp-block-query-pagination-%1$s" role="link" aria-disabled="true"%2$s>%3$s</a>',
|
|
52
|
+
$direction,
|
|
53
|
+
$show_label ? '' : ' aria-label="' . $label . '"',
|
|
54
|
+
$body
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
$has_previous = $has('previous');
|
|
58
|
+
$has_next = $has('next');
|
|
59
|
+
if (!$has_previous && $has_next && isset($inner['core/query-pagination-previous'])) {
|
|
60
|
+
$content = preg_replace('/(<nav\b[^>]*>)/', '$1' . $disabled('previous'), $content, 1) ?? $content;
|
|
61
|
+
}
|
|
62
|
+
if ($has_previous && !$has_next && isset($inner['core/query-pagination-next'])) {
|
|
63
|
+
$pos = strrpos($content, '</nav>');
|
|
64
|
+
if ($pos !== false) {
|
|
65
|
+
$content = substr($content, 0, $pos) . $disabled('next') . substr($content, $pos);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return $content;
|
|
69
|
+
}, 10, 2);
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The classic paginate_links() output (the_posts_pagination(), paginate_comments_links()): the same, for the plain
|
|
73
|
+
* type. The list type is left as core prints it.
|
|
74
|
+
*/
|
|
75
|
+
add_filter('paginate_links_output', static function (string $output, array $args): string {
|
|
76
|
+
if ($output === '' || empty($args['prev_next']) || ($args['type'] ?? 'plain') !== 'plain' || (int) ($args['total'] ?? 1) < 2) {
|
|
77
|
+
return $output;
|
|
78
|
+
}
|
|
79
|
+
$current = (int) ($args['current'] ?? 1);
|
|
80
|
+
if ($current <= 1 && !str_contains($output, 'prev page-numbers')) {
|
|
81
|
+
$output = '<a class="prev page-numbers" role="link" aria-disabled="true">' . $args['prev_text'] . "</a>\n" . $output;
|
|
82
|
+
}
|
|
83
|
+
if ($current >= (int) $args['total'] && !str_contains($output, 'next page-numbers')) {
|
|
84
|
+
$output .= "\n" . '<a class="next page-numbers" role="link" aria-disabled="true">' . $args['next_text'] . '</a>';
|
|
85
|
+
}
|
|
86
|
+
return $output;
|
|
87
|
+
}, 10, 2);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* The site header on WordPress (B5; spec: components/header/spec.md). Core blocks only (ADR-0018): header.php renders
|
|
4
|
+
* the `header` template part (parts/header.html, editable in the Site Editor), and patterns/header-inline.php and
|
|
5
|
+
* header-stacked.php are the two Figma layouts an editor can swap in. src/header.css lays them out.
|
|
6
|
+
*
|
|
7
|
+
* Search in a Dialog (user, 2026-10-07): the `dialog` block style on core/search renders a ghost search button that
|
|
8
|
+
* opens a Baseline Dialog (baseline_dialog()) holding core's own search form, unchanged. No account link (user: almost
|
|
9
|
+
* never needed on WordPress) and no cart.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
declare(strict_types=1);
|
|
13
|
+
|
|
14
|
+
add_action('init', static function (): void {
|
|
15
|
+
register_block_style('core/search', ['name' => 'dialog', 'label' => __('In a dialog', 'baseline')]);
|
|
16
|
+
register_block_pattern_category('header', ['label' => __('Headers', 'baseline')]);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
add_filter('render_block_core/search', static function (string $content, array $block): string {
|
|
20
|
+
$class = (string) ($block['attrs']['className'] ?? '');
|
|
21
|
+
if (!preg_match('/(^|\s)is-style-dialog(\s|$)/', $class)) {
|
|
22
|
+
return $content;
|
|
23
|
+
}
|
|
24
|
+
$id = wp_unique_id('search-dialog-');
|
|
25
|
+
$trigger = baseline_button([
|
|
26
|
+
'variant' => 'ghost',
|
|
27
|
+
'size' => 'md',
|
|
28
|
+
'class' => 'is-icon-only has-icon',
|
|
29
|
+
'children' => baseline_icon('search') . '<span class="sr-only">' . esc_html__('Search', 'baseline') . '</span>',
|
|
30
|
+
'attrs' => ['command' => 'show-modal', 'commandfor' => $id, 'aria-label' => __('Search', 'baseline')],
|
|
31
|
+
]);
|
|
32
|
+
$dialog = baseline_dialog([
|
|
33
|
+
'id' => $id,
|
|
34
|
+
'trigger' => false,
|
|
35
|
+
'title' => __('Search', 'baseline'),
|
|
36
|
+
'body' => $content,
|
|
37
|
+
]);
|
|
38
|
+
return '<div class="bl-search-dialog not-typeset">' . $trigger . $dialog . '</div>';
|
|
39
|
+
}, 10, 2);
|