@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
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
# Confirmation
|
|
2
|
-
|
|
3
|
-
An alert-based component for managing tool execution approval workflows with request, accept, and reject states.
|
|
4
|
-
|
|
5
|
-
The `Confirmation` component provides a flexible system for displaying tool approval requests and their outcomes. Perfect for showing users when AI tools require approval before execution, and displaying the approval status afterward.
|
|
6
|
-
|
|
7
|
-
See `scripts/confirmation.tsx` for this example.
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npx ai-elements@latest add confirmation
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Usage with AI SDK
|
|
16
|
-
|
|
17
|
-
Build a chat UI with tool approval workflow where dangerous tools require user confirmation before execution.
|
|
18
|
-
|
|
19
|
-
Add the following component to your frontend:
|
|
20
|
-
|
|
21
|
-
```tsx title="app/page.tsx"
|
|
22
|
-
"use client";
|
|
23
|
-
|
|
24
|
-
import { useChat } from "@ai-sdk/react";
|
|
25
|
-
import { DefaultChatTransport, type ToolUIPart } from "ai";
|
|
26
|
-
import { useState } from "react";
|
|
27
|
-
import { CheckIcon, XIcon } from "lucide-react";
|
|
28
|
-
import { Button } from "@/components/ui/button";
|
|
29
|
-
import {
|
|
30
|
-
Confirmation,
|
|
31
|
-
ConfirmationTitle,
|
|
32
|
-
ConfirmationRequest,
|
|
33
|
-
ConfirmationAccepted,
|
|
34
|
-
ConfirmationRejected,
|
|
35
|
-
ConfirmationActions,
|
|
36
|
-
ConfirmationAction,
|
|
37
|
-
} from "@/components/ai-elements/confirmation";
|
|
38
|
-
import { MessageResponse } from "@/components/ai-elements/message";
|
|
39
|
-
|
|
40
|
-
type DeleteFileInput = {
|
|
41
|
-
filePath: string;
|
|
42
|
-
confirm: boolean;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
type DeleteFileToolUIPart = ToolUIPart<{
|
|
46
|
-
delete_file: {
|
|
47
|
-
input: DeleteFileInput;
|
|
48
|
-
output: { success: boolean; message: string };
|
|
49
|
-
};
|
|
50
|
-
}>;
|
|
51
|
-
|
|
52
|
-
const Example = () => {
|
|
53
|
-
const { messages, sendMessage, status, addToolApprovalResponse } = useChat({
|
|
54
|
-
transport: new DefaultChatTransport({
|
|
55
|
-
api: "/api/chat",
|
|
56
|
-
}),
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
const handleDeleteFile = () => {
|
|
60
|
-
sendMessage({ text: "Delete the file at /tmp/example.txt" });
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const latestMessage = messages[messages.length - 1];
|
|
64
|
-
const deleteTool = latestMessage?.parts?.find(
|
|
65
|
-
(part) => part.type === "tool-delete_file"
|
|
66
|
-
) as DeleteFileToolUIPart | undefined;
|
|
67
|
-
|
|
68
|
-
return (
|
|
69
|
-
<div className="max-w-4xl mx-auto p-6 relative size-full rounded-lg border h-[600px]">
|
|
70
|
-
<div className="flex flex-col h-full space-y-4">
|
|
71
|
-
<Button onClick={handleDeleteFile} disabled={status !== "ready"}>
|
|
72
|
-
Delete Example File
|
|
73
|
-
</Button>
|
|
74
|
-
|
|
75
|
-
{deleteTool?.approval && (
|
|
76
|
-
<Confirmation approval={deleteTool.approval} state={deleteTool.state}>
|
|
77
|
-
<ConfirmationRequest>
|
|
78
|
-
This tool wants to delete:{" "}
|
|
79
|
-
<code>{deleteTool.input?.filePath}</code>
|
|
80
|
-
<br />
|
|
81
|
-
Do you approve this action?
|
|
82
|
-
</ConfirmationRequest>
|
|
83
|
-
<ConfirmationAccepted>
|
|
84
|
-
<CheckIcon className="size-4" />
|
|
85
|
-
<span>You approved this tool execution</span>
|
|
86
|
-
</ConfirmationAccepted>
|
|
87
|
-
<ConfirmationRejected>
|
|
88
|
-
<XIcon className="size-4" />
|
|
89
|
-
<span>You rejected this tool execution</span>
|
|
90
|
-
</ConfirmationRejected>
|
|
91
|
-
<ConfirmationActions>
|
|
92
|
-
<ConfirmationAction
|
|
93
|
-
variant="outline"
|
|
94
|
-
onClick={() =>
|
|
95
|
-
addToolApprovalResponse({
|
|
96
|
-
id: deleteTool.approval!.id,
|
|
97
|
-
approved: false,
|
|
98
|
-
})
|
|
99
|
-
}
|
|
100
|
-
>
|
|
101
|
-
Reject
|
|
102
|
-
</ConfirmationAction>
|
|
103
|
-
<ConfirmationAction
|
|
104
|
-
variant="default"
|
|
105
|
-
onClick={() =>
|
|
106
|
-
addToolApprovalResponse({
|
|
107
|
-
id: deleteTool.approval!.id,
|
|
108
|
-
approved: true,
|
|
109
|
-
})
|
|
110
|
-
}
|
|
111
|
-
>
|
|
112
|
-
Approve
|
|
113
|
-
</ConfirmationAction>
|
|
114
|
-
</ConfirmationActions>
|
|
115
|
-
</Confirmation>
|
|
116
|
-
)}
|
|
117
|
-
|
|
118
|
-
{deleteTool?.output && (
|
|
119
|
-
<MessageResponse>
|
|
120
|
-
{deleteTool.output.success
|
|
121
|
-
? deleteTool.output.message
|
|
122
|
-
: `Error: ${deleteTool.output.message}`}
|
|
123
|
-
</MessageResponse>
|
|
124
|
-
)}
|
|
125
|
-
</div>
|
|
126
|
-
</div>
|
|
127
|
-
);
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
export default Example;
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
Add the following route to your backend:
|
|
134
|
-
|
|
135
|
-
```ts title="app/api/chat/route.tsx"
|
|
136
|
-
import { streamText, UIMessage, convertToModelMessages } from "ai";
|
|
137
|
-
import { z } from "zod";
|
|
138
|
-
|
|
139
|
-
// Allow streaming responses up to 30 seconds
|
|
140
|
-
export const maxDuration = 30;
|
|
141
|
-
|
|
142
|
-
export async function POST(req: Request) {
|
|
143
|
-
const { messages }: { messages: UIMessage[] } = await req.json();
|
|
144
|
-
|
|
145
|
-
const result = streamText({
|
|
146
|
-
model: "openai/gpt-4o",
|
|
147
|
-
messages: await convertToModelMessages(messages),
|
|
148
|
-
tools: {
|
|
149
|
-
delete_file: {
|
|
150
|
-
description: "Delete a file from the file system",
|
|
151
|
-
parameters: z.object({
|
|
152
|
-
filePath: z.string().describe("The path to the file to delete"),
|
|
153
|
-
confirm: z
|
|
154
|
-
.boolean()
|
|
155
|
-
.default(false)
|
|
156
|
-
.describe("Confirmation that the user wants to delete the file"),
|
|
157
|
-
}),
|
|
158
|
-
requireApproval: true, // Enable approval workflow
|
|
159
|
-
execute: async ({ filePath, confirm }) => {
|
|
160
|
-
if (!confirm) {
|
|
161
|
-
return {
|
|
162
|
-
success: false,
|
|
163
|
-
message: "Deletion not confirmed",
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Simulate file deletion
|
|
168
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
169
|
-
|
|
170
|
-
return {
|
|
171
|
-
success: true,
|
|
172
|
-
message: `Successfully deleted ${filePath}`,
|
|
173
|
-
};
|
|
174
|
-
},
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
return result.toUIMessageStreamResponse();
|
|
180
|
-
}
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
## Features
|
|
184
|
-
|
|
185
|
-
- Context-based state management for approval workflow
|
|
186
|
-
- Conditional rendering based on approval state
|
|
187
|
-
- Support for approval-requested, approval-responded, output-denied, and output-available states
|
|
188
|
-
- Built on shadcn/ui Alert and Button components
|
|
189
|
-
- TypeScript support with comprehensive type definitions
|
|
190
|
-
- Customizable styling with Tailwind CSS
|
|
191
|
-
- Keyboard navigation and accessibility support
|
|
192
|
-
- Theme-aware with automatic dark mode support
|
|
193
|
-
|
|
194
|
-
## Examples
|
|
195
|
-
|
|
196
|
-
### Approval Request State
|
|
197
|
-
|
|
198
|
-
Shows the approval request with action buttons when state is `approval-requested`.
|
|
199
|
-
|
|
200
|
-
See `scripts/confirmation-request.tsx` for this example.
|
|
201
|
-
|
|
202
|
-
### Approved State
|
|
203
|
-
|
|
204
|
-
Shows the accepted status when user approves and state is `approval-responded` or `output-available`.
|
|
205
|
-
|
|
206
|
-
See `scripts/confirmation-accepted.tsx` for this example.
|
|
207
|
-
|
|
208
|
-
### Rejected State
|
|
209
|
-
|
|
210
|
-
Shows the rejected status when user rejects and state is `output-denied`.
|
|
211
|
-
|
|
212
|
-
See `scripts/confirmation-rejected.tsx` for this example.
|
|
213
|
-
|
|
214
|
-
## Props
|
|
215
|
-
|
|
216
|
-
### `<Confirmation />`
|
|
217
|
-
|
|
218
|
-
| Prop | Type | Default | Description |
|
|
219
|
-
|------|------|---------|-------------|
|
|
220
|
-
| `approval` | `ToolUIPart[` | - | The approval object containing the approval ID and status. If not provided or undefined, the component will not render. |
|
|
221
|
-
| `state` | `ToolUIPart[` | - | The current state of the tool (input-streaming, input-available, approval-requested, approval-responded, output-denied, or output-available). Will not render for input-streaming or input-available states. |
|
|
222
|
-
| `className` | `string` | - | Additional CSS classes to apply to the Alert component. |
|
|
223
|
-
| `...props` | `React.ComponentProps<typeof Alert>` | - | Any other props are spread to the Alert component. |
|
|
224
|
-
|
|
225
|
-
### `<ConfirmationTitle />`
|
|
226
|
-
|
|
227
|
-
A styled description element for displaying a title or label within the confirmation alert.
|
|
228
|
-
|
|
229
|
-
| Prop | Type | Default | Description |
|
|
230
|
-
|------|------|---------|-------------|
|
|
231
|
-
| `...props` | `React.ComponentProps<typeof AlertDescription>` | - | Any other props are spread to the underlying AlertDescription component. |
|
|
232
|
-
|
|
233
|
-
### `<ConfirmationRequest />`
|
|
234
|
-
|
|
235
|
-
| Prop | Type | Default | Description |
|
|
236
|
-
|------|------|---------|-------------|
|
|
237
|
-
| `children` | `React.ReactNode` | - | The content to display when approval is requested. Only renders when state is |
|
|
238
|
-
|
|
239
|
-
### `<ConfirmationAccepted />`
|
|
240
|
-
|
|
241
|
-
| Prop | Type | Default | Description |
|
|
242
|
-
|------|------|---------|-------------|
|
|
243
|
-
| `children` | `React.ReactNode` | - | The content to display when approval is accepted. Only renders when approval.approved is true and state is |
|
|
244
|
-
|
|
245
|
-
### `<ConfirmationRejected />`
|
|
246
|
-
|
|
247
|
-
| Prop | Type | Default | Description |
|
|
248
|
-
|------|------|---------|-------------|
|
|
249
|
-
| `children` | `React.ReactNode` | - | The content to display when approval is rejected. Only renders when approval.approved is false and state is |
|
|
250
|
-
|
|
251
|
-
### `<ConfirmationActions />`
|
|
252
|
-
|
|
253
|
-
| Prop | Type | Default | Description |
|
|
254
|
-
|------|------|---------|-------------|
|
|
255
|
-
| `className` | `string` | - | Additional CSS classes to apply to the actions container. |
|
|
256
|
-
| `...props` | `React.ComponentProps<` | - | Any other props are spread to the div element. Only renders when state is |
|
|
257
|
-
|
|
258
|
-
### `<ConfirmationAction />`
|
|
259
|
-
|
|
260
|
-
| Prop | Type | Default | Description |
|
|
261
|
-
|------|------|---------|-------------|
|
|
262
|
-
| `...props` | `React.ComponentProps<typeof Button>` | - | Any other props are spread to the Button component. Styled with h-8 px-3 text-sm classes by default. |
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# Connection
|
|
2
|
-
|
|
3
|
-
A custom connection line component for React Flow-based canvases with animated bezier curve styling.
|
|
4
|
-
|
|
5
|
-
The `Connection` component provides a styled connection line for React Flow canvases. It renders an animated bezier curve with a circle indicator at the target end, using consistent theming through CSS variables.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npx ai-elements@latest add connection
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Features
|
|
16
|
-
|
|
17
|
-
- Smooth bezier curve animation for connection lines
|
|
18
|
-
- Visual indicator circle at the target position
|
|
19
|
-
- Theme-aware styling using CSS variables
|
|
20
|
-
- Cubic bezier curve calculation for natural flow
|
|
21
|
-
- Lightweight implementation with minimal props
|
|
22
|
-
- Full TypeScript support with React Flow types
|
|
23
|
-
- Compatible with React Flow's connection system
|
|
24
|
-
|
|
25
|
-
## Props
|
|
26
|
-
|
|
27
|
-
### `<Connection />`
|
|
28
|
-
|
|
29
|
-
| Prop | Type | Default | Description |
|
|
30
|
-
|------|------|---------|-------------|
|
|
31
|
-
| `fromX` | `number` | - | The x-coordinate of the connection start point. |
|
|
32
|
-
| `fromY` | `number` | - | The y-coordinate of the connection start point. |
|
|
33
|
-
| `toX` | `number` | - | The x-coordinate of the connection end point. |
|
|
34
|
-
| `toY` | `number` | - | The y-coordinate of the connection end point. |
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
# Context
|
|
2
|
-
|
|
3
|
-
A compound component system for displaying AI model context window usage, token consumption, and cost estimation.
|
|
4
|
-
|
|
5
|
-
The `Context` component provides a comprehensive view of AI model usage through a compound component system. It displays context window utilization, token consumption breakdown (input, output, reasoning, cache), and cost estimation in an interactive hover card interface.
|
|
6
|
-
|
|
7
|
-
See `scripts/context.tsx` for this example.
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npx ai-elements@latest add context
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Features
|
|
16
|
-
|
|
17
|
-
- **Compound Component Architecture**: Flexible composition of context display elements
|
|
18
|
-
- **Visual Progress Indicator**: Circular SVG progress ring showing context usage percentage
|
|
19
|
-
- **Token Breakdown**: Detailed view of input, output, reasoning, and cached tokens
|
|
20
|
-
- **Cost Estimation**: Real-time cost calculation using the `tokenlens` library
|
|
21
|
-
- **Intelligent Formatting**: Automatic token count formatting (K, M, B suffixes)
|
|
22
|
-
- **Interactive Hover Card**: Detailed information revealed on hover
|
|
23
|
-
- **Context Provider Pattern**: Clean data flow through React Context API
|
|
24
|
-
- **TypeScript Support**: Full type definitions for all components
|
|
25
|
-
- **Accessible Design**: Proper ARIA labels and semantic HTML
|
|
26
|
-
- **Theme Integration**: Uses currentColor for automatic theme adaptation
|
|
27
|
-
|
|
28
|
-
## Props
|
|
29
|
-
|
|
30
|
-
### `<Context />`
|
|
31
|
-
|
|
32
|
-
| Prop | Type | Default | Description |
|
|
33
|
-
|------|------|---------|-------------|
|
|
34
|
-
| `maxTokens` | `number` | - | The total context window size in tokens. |
|
|
35
|
-
| `usedTokens` | `number` | - | The number of tokens currently used. |
|
|
36
|
-
| `usage` | `LanguageModelUsage` | - | Detailed token usage breakdown from the AI SDK (input, output, reasoning, cached tokens). |
|
|
37
|
-
| `modelId` | `ModelId` | - | Model identifier for cost calculation (e.g., |
|
|
38
|
-
| `...props` | `ComponentProps<HoverCard>` | - | Any other props are spread to the HoverCard component. |
|
|
39
|
-
|
|
40
|
-
### `<ContextTrigger />`
|
|
41
|
-
|
|
42
|
-
| Prop | Type | Default | Description |
|
|
43
|
-
|------|------|---------|-------------|
|
|
44
|
-
| `children` | `React.ReactNode` | - | Custom trigger element. If not provided, renders a default button with percentage and icon. |
|
|
45
|
-
| `...props` | `ComponentProps<Button>` | - | Props spread to the default button element. |
|
|
46
|
-
|
|
47
|
-
### `<ContextContent />`
|
|
48
|
-
|
|
49
|
-
| Prop | Type | Default | Description |
|
|
50
|
-
|------|------|---------|-------------|
|
|
51
|
-
| `className` | `string` | - | Additional CSS classes for the hover card content. |
|
|
52
|
-
| `...props` | `ComponentProps<HoverCardContent>` | - | Props spread to the HoverCardContent component. |
|
|
53
|
-
|
|
54
|
-
### `<ContextContentHeader />`
|
|
55
|
-
|
|
56
|
-
| Prop | Type | Default | Description |
|
|
57
|
-
|------|------|---------|-------------|
|
|
58
|
-
| `children` | `React.ReactNode` | - | Custom header content. If not provided, renders percentage and token count with progress bar. |
|
|
59
|
-
| `...props` | `ComponentProps<div>` | - | Props spread to the header div element. |
|
|
60
|
-
|
|
61
|
-
### `<ContextContentBody />`
|
|
62
|
-
|
|
63
|
-
| Prop | Type | Default | Description |
|
|
64
|
-
|------|------|---------|-------------|
|
|
65
|
-
| `children` | `React.ReactNode` | - | Body content, typically containing usage breakdown components. |
|
|
66
|
-
| `...props` | `ComponentProps<div>` | - | Props spread to the body div element. |
|
|
67
|
-
|
|
68
|
-
### `<ContextContentFooter />`
|
|
69
|
-
|
|
70
|
-
| Prop | Type | Default | Description |
|
|
71
|
-
|------|------|---------|-------------|
|
|
72
|
-
| `children` | `React.ReactNode` | - | Custom footer content. If not provided, renders total cost when modelId is provided. |
|
|
73
|
-
| `...props` | `ComponentProps<div>` | - | Props spread to the footer div element. |
|
|
74
|
-
|
|
75
|
-
### Usage Components
|
|
76
|
-
|
|
77
|
-
All usage components (`ContextInputUsage`, `ContextOutputUsage`, `ContextReasoningUsage`, `ContextCacheUsage`) share the same props:
|
|
78
|
-
|
|
79
|
-
| Prop | Type | Default | Description |
|
|
80
|
-
|------|------|---------|-------------|
|
|
81
|
-
| `children` | `React.ReactNode` | - | Custom content. If not provided, renders token count and cost for the respective usage type. |
|
|
82
|
-
| `className` | `string` | - | Additional CSS classes. |
|
|
83
|
-
| `...props` | `ComponentProps<div>` | - | Props spread to the div element. |
|
|
84
|
-
|
|
85
|
-
## Component Architecture
|
|
86
|
-
|
|
87
|
-
The Context component uses a compound component pattern with React Context for data sharing:
|
|
88
|
-
|
|
89
|
-
1. **`<Context>`** - Root provider component that holds all context data
|
|
90
|
-
2. **`<ContextTrigger>`** - Interactive trigger element (default: button with percentage)
|
|
91
|
-
3. **`<ContextContent>`** - Hover card content container
|
|
92
|
-
4. **`<ContextContentHeader>`** - Header section with progress visualization
|
|
93
|
-
5. **`<ContextContentBody>`** - Body section for usage breakdowns
|
|
94
|
-
6. **`<ContextContentFooter>`** - Footer section for total cost
|
|
95
|
-
7. **Usage Components** - Individual token usage displays (Input, Output, Reasoning, Cache)
|
|
96
|
-
|
|
97
|
-
## Token Formatting
|
|
98
|
-
|
|
99
|
-
The component uses `Intl.NumberFormat` with compact notation for automatic formatting:
|
|
100
|
-
|
|
101
|
-
- Under 1,000: Shows exact count (e.g., "842")
|
|
102
|
-
- 1,000+: Shows with K suffix (e.g., "32K")
|
|
103
|
-
- 1,000,000+: Shows with M suffix (e.g., "1.5M")
|
|
104
|
-
- 1,000,000,000+: Shows with B suffix (e.g., "2.1B")
|
|
105
|
-
|
|
106
|
-
## Cost Calculation
|
|
107
|
-
|
|
108
|
-
When a `modelId` is provided, the component automatically calculates costs using the `tokenlens` library:
|
|
109
|
-
|
|
110
|
-
- **Input tokens**: Cost based on model's input pricing
|
|
111
|
-
- **Output tokens**: Cost based on model's output pricing
|
|
112
|
-
- **Reasoning tokens**: Special pricing for reasoning-capable models
|
|
113
|
-
- **Cached tokens**: Reduced pricing for cached input tokens
|
|
114
|
-
- **Total cost**: Sum of all token type costs
|
|
115
|
-
|
|
116
|
-
Costs are formatted using `Intl.NumberFormat` with USD currency.
|
|
117
|
-
|
|
118
|
-
## Styling
|
|
119
|
-
|
|
120
|
-
The component uses Tailwind CSS classes and follows your design system:
|
|
121
|
-
|
|
122
|
-
- Progress indicator uses `currentColor` for theme adaptation
|
|
123
|
-
- Hover card has customizable width and padding
|
|
124
|
-
- Footer has a secondary background for visual separation
|
|
125
|
-
- All text sizes use the `text-xs` class for consistency
|
|
126
|
-
- Muted foreground colors for secondary information
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Controls
|
|
2
|
-
|
|
3
|
-
A styled controls component for React Flow-based canvases with zoom and fit view functionality.
|
|
4
|
-
|
|
5
|
-
The `Controls` component provides interactive zoom and fit view controls for React Flow canvases. It includes a modern, themed design with backdrop blur and card styling.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npx ai-elements@latest add controls
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Features
|
|
16
|
-
|
|
17
|
-
- Zoom in/out controls
|
|
18
|
-
- Fit view button to center and scale content
|
|
19
|
-
- Rounded pill design with backdrop blur
|
|
20
|
-
- Theme-aware card background
|
|
21
|
-
- Subtle drop shadow for depth
|
|
22
|
-
- Full TypeScript support
|
|
23
|
-
- Compatible with all React Flow control features
|
|
24
|
-
|
|
25
|
-
## Props
|
|
26
|
-
|
|
27
|
-
### `<Controls />`
|
|
28
|
-
|
|
29
|
-
| Prop | Type | Default | Description |
|
|
30
|
-
|------|------|---------|-------------|
|
|
31
|
-
| `className` | `string` | - | Additional CSS classes to apply to the controls. |
|
|
32
|
-
| `...props` | `ComponentProps<typeof Controls>` | - | Any other props from @xyflow/react Controls component (showZoom, showFitView, showInteractive, position, etc.). |
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
# Conversation
|
|
2
|
-
|
|
3
|
-
Wraps messages and automatically scrolls to the bottom. Also includes a scroll button that appears when not at the bottom.
|
|
4
|
-
|
|
5
|
-
The `Conversation` component wraps messages and automatically scrolls to the bottom. Also includes a scroll button that appears when not at the bottom.
|
|
6
|
-
|
|
7
|
-
<Preview path="conversation" className="p-0" />
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npx ai-elements@latest add conversation
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Usage with AI SDK
|
|
16
|
-
|
|
17
|
-
Build a simple conversational UI with `Conversation` and [`PromptInput`](/components/prompt-input):
|
|
18
|
-
|
|
19
|
-
Add the following component to your frontend:
|
|
20
|
-
|
|
21
|
-
```tsx title="app/page.tsx"
|
|
22
|
-
"use client";
|
|
23
|
-
|
|
24
|
-
import {
|
|
25
|
-
Conversation,
|
|
26
|
-
ConversationContent,
|
|
27
|
-
ConversationDownload,
|
|
28
|
-
ConversationEmptyState,
|
|
29
|
-
ConversationScrollButton,
|
|
30
|
-
} from "@/components/ai-elements/conversation";
|
|
31
|
-
import {
|
|
32
|
-
Message,
|
|
33
|
-
MessageContent,
|
|
34
|
-
MessageResponse,
|
|
35
|
-
} from "@/components/ai-elements/message";
|
|
36
|
-
import {
|
|
37
|
-
PromptInput,
|
|
38
|
-
type PromptInputMessage,
|
|
39
|
-
PromptInputTextarea,
|
|
40
|
-
PromptInputSubmit,
|
|
41
|
-
} from "@/components/ai-elements/prompt-input";
|
|
42
|
-
import { MessageSquare } from "lucide-react";
|
|
43
|
-
import { useState } from "react";
|
|
44
|
-
import { useChat } from "@ai-sdk/react";
|
|
45
|
-
|
|
46
|
-
const ConversationDemo = () => {
|
|
47
|
-
const [input, setInput] = useState("");
|
|
48
|
-
const { messages, sendMessage, status } = useChat();
|
|
49
|
-
|
|
50
|
-
const handleSubmit = (message: PromptInputMessage) => {
|
|
51
|
-
if (message.text.trim()) {
|
|
52
|
-
sendMessage({ text: message.text });
|
|
53
|
-
setInput("");
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
return (
|
|
58
|
-
<div className="max-w-4xl mx-auto p-6 relative size-full rounded-lg border h-[600px]">
|
|
59
|
-
<div className="flex flex-col h-full">
|
|
60
|
-
<Conversation>
|
|
61
|
-
<ConversationContent>
|
|
62
|
-
{messages.length === 0 ? (
|
|
63
|
-
<ConversationEmptyState
|
|
64
|
-
icon={<MessageSquare className="size-12" />}
|
|
65
|
-
title="Start a conversation"
|
|
66
|
-
description="Type a message below to begin chatting"
|
|
67
|
-
/>
|
|
68
|
-
) : (
|
|
69
|
-
messages.map((message) => (
|
|
70
|
-
<Message from={message.role} key={message.id}>
|
|
71
|
-
<MessageContent>
|
|
72
|
-
{message.parts.map((part, i) => {
|
|
73
|
-
switch (part.type) {
|
|
74
|
-
case "text": // we don't use any reasoning or tool calls in this example
|
|
75
|
-
return (
|
|
76
|
-
<MessageResponse key={`${message.id}-${i}`}>
|
|
77
|
-
{part.text}
|
|
78
|
-
</MessageResponse>
|
|
79
|
-
);
|
|
80
|
-
default:
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
})}
|
|
84
|
-
</MessageContent>
|
|
85
|
-
</Message>
|
|
86
|
-
))
|
|
87
|
-
)}
|
|
88
|
-
</ConversationContent>
|
|
89
|
-
<ConversationDownload messages={messages} />
|
|
90
|
-
<ConversationScrollButton />
|
|
91
|
-
</Conversation>
|
|
92
|
-
|
|
93
|
-
<PromptInput
|
|
94
|
-
onSubmit={handleSubmit}
|
|
95
|
-
className="mt-4 w-full max-w-2xl mx-auto relative"
|
|
96
|
-
>
|
|
97
|
-
<PromptInputTextarea
|
|
98
|
-
value={input}
|
|
99
|
-
placeholder="Say something..."
|
|
100
|
-
onChange={(e) => setInput(e.currentTarget.value)}
|
|
101
|
-
className="pr-12"
|
|
102
|
-
/>
|
|
103
|
-
<PromptInputSubmit
|
|
104
|
-
status={status === "streaming" ? "streaming" : "ready"}
|
|
105
|
-
disabled={!input.trim()}
|
|
106
|
-
className="absolute bottom-1 right-1"
|
|
107
|
-
/>
|
|
108
|
-
</PromptInput>
|
|
109
|
-
</div>
|
|
110
|
-
</div>
|
|
111
|
-
);
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
export default ConversationDemo;
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Add the following route to your backend:
|
|
118
|
-
|
|
119
|
-
```tsx title="api/chat/route.ts"
|
|
120
|
-
import { streamText, UIMessage, convertToModelMessages } from "ai";
|
|
121
|
-
|
|
122
|
-
// Allow streaming responses up to 30 seconds
|
|
123
|
-
export const maxDuration = 30;
|
|
124
|
-
|
|
125
|
-
export async function POST(req: Request) {
|
|
126
|
-
const { messages }: { messages: UIMessage[] } = await req.json();
|
|
127
|
-
|
|
128
|
-
const result = streamText({
|
|
129
|
-
model: "openai/gpt-4o",
|
|
130
|
-
messages: await convertToModelMessages(messages),
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
return result.toUIMessageStreamResponse();
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Features
|
|
138
|
-
|
|
139
|
-
- Automatic scrolling to the bottom when new messages are added
|
|
140
|
-
- Smooth scrolling behavior with configurable animation
|
|
141
|
-
- Scroll button that appears when not at the bottom
|
|
142
|
-
- Download conversation as Markdown
|
|
143
|
-
- Responsive design with customizable padding and spacing
|
|
144
|
-
- Flexible content layout with consistent message spacing
|
|
145
|
-
- Accessible with proper ARIA roles for screen readers
|
|
146
|
-
- Customizable styling through className prop
|
|
147
|
-
- Support for any number of child message components
|
|
148
|
-
|
|
149
|
-
## Props
|
|
150
|
-
|
|
151
|
-
### `<Conversation />`
|
|
152
|
-
|
|
153
|
-
| Prop | Type | Default | Description |
|
|
154
|
-
|------|------|---------|-------------|
|
|
155
|
-
| `contextRef` | `React.Ref<StickToBottomContext>` | - | Optional ref to access the StickToBottom context object. |
|
|
156
|
-
| `instance` | `StickToBottomInstance` | - | Optional instance for controlling the StickToBottom component. |
|
|
157
|
-
| `children` | `((context: StickToBottomContext) => ReactNode) | ReactNode` | - | Render prop or ReactNode for custom rendering with context. |
|
|
158
|
-
| `...props` | `Omit<React.HTMLAttributes<HTMLDivElement>, ` | - | Any other props are spread to the root div. |
|
|
159
|
-
|
|
160
|
-
### `<ConversationContent />`
|
|
161
|
-
|
|
162
|
-
| Prop | Type | Default | Description |
|
|
163
|
-
|------|------|---------|-------------|
|
|
164
|
-
| `children` | `((context: StickToBottomContext) => ReactNode) | ReactNode` | - | Render prop or ReactNode for custom rendering with context. |
|
|
165
|
-
| `...props` | `Omit<React.HTMLAttributes<HTMLDivElement>, ` | - | Any other props are spread to the root div. |
|
|
166
|
-
|
|
167
|
-
### `<ConversationEmptyState />`
|
|
168
|
-
|
|
169
|
-
| Prop | Type | Default | Description |
|
|
170
|
-
|------|------|---------|-------------|
|
|
171
|
-
| `title` | `string` | - | The title text to display. |
|
|
172
|
-
| `description` | `string` | - | The description text to display. |
|
|
173
|
-
| `icon` | `React.ReactNode` | - | Optional icon to display above the text. |
|
|
174
|
-
| `children` | `React.ReactNode` | - | Optional additional content to render below the text. |
|
|
175
|
-
| `...props` | `ComponentProps<` | - | Any other props are spread to the root div. |
|
|
176
|
-
|
|
177
|
-
### `<ConversationScrollButton />`
|
|
178
|
-
|
|
179
|
-
| Prop | Type | Default | Description |
|
|
180
|
-
|------|------|---------|-------------|
|
|
181
|
-
| `...props` | `ComponentProps<typeof Button>` | - | Any other props are spread to the underlying shadcn/ui Button component. |
|
|
182
|
-
|
|
183
|
-
### `<ConversationDownload />`
|
|
184
|
-
|
|
185
|
-
A button that downloads the conversation as a Markdown file.
|
|
186
|
-
|
|
187
|
-
```tsx
|
|
188
|
-
import { ConversationDownload } from "@/components/ai-elements/conversation";
|
|
189
|
-
|
|
190
|
-
<Conversation>
|
|
191
|
-
<ConversationContent>
|
|
192
|
-
{messages.map(...)}
|
|
193
|
-
</ConversationContent>
|
|
194
|
-
<ConversationDownload messages={messages} />
|
|
195
|
-
<ConversationScrollButton />
|
|
196
|
-
</Conversation>
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
| Prop | Type | Default | Description |
|
|
200
|
-
|------|------|---------|-------------|
|
|
201
|
-
| `messages` | `UIMessage[]` | Required | Array of messages to include in the download. |
|
|
202
|
-
| `filename` | `string` | - | The filename for the downloaded file. |
|
|
203
|
-
| `formatMessage` | `(message: UIMessage, index: number) => string` | - | Custom function to format each message in the output. |
|
|
204
|
-
| `...props` | `Omit<ComponentProps<typeof Button>, ` | - | Any other props are spread to the underlying shadcn/ui Button component. |
|
|
205
|
-
|
|
206
|
-
### `messagesToMarkdown`
|
|
207
|
-
|
|
208
|
-
A utility function to convert messages to Markdown format. Useful for custom download implementations.
|
|
209
|
-
|
|
210
|
-
```tsx
|
|
211
|
-
import { messagesToMarkdown } from "@/components/ai-elements/conversation";
|
|
212
|
-
|
|
213
|
-
const markdown = messagesToMarkdown(messages);
|
|
214
|
-
|
|
215
|
-
// With custom formatter
|
|
216
|
-
const customMarkdown = messagesToMarkdown(
|
|
217
|
-
messages,
|
|
218
|
-
(msg, i) =>
|
|
219
|
-
`[${msg.role}]: ${msg.parts
|
|
220
|
-
.filter((p) => p.type === "text")
|
|
221
|
-
.map((p) => p.text)
|
|
222
|
-
.join("")}`
|
|
223
|
-
);
|
|
224
|
-
```
|