@wix/agent-skills 1.15.0 → 1.16.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 +5 -1
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +4 -1
- package/skills/wix-app/references/APP_TOOLS.md +134 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +1 -1
- package/skills/wix-app/references/DASHBOARD_PAGE.md +0 -10
- package/skills/wix-app/references/DATA_COLLECTION.md +6 -4
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +28 -7
- package/skills/wix-app/references/SERVICE_PLUGIN.md +12 -10
- package/skills/wix-app/references/STORES_VERSIONING.md +9 -211
- package/skills/wix-app/references/app-tools/TOOLS.md +75 -0
- package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +5 -0
- package/skills/wix-app/references/dashboard-page/DASHBOARD_API.md +2 -2
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +172 -0
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +138 -0
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +172 -0
- package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +29 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +1 -1
- package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +57 -0
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +33 -2
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +5 -3
- package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +18 -1
- package/skills/wix-app/references/editor-react-component/PARTS.md +15 -2
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +4 -3
- package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +13 -9
- package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +4 -0
- package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +4 -0
- package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +3 -1
- package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +4 -0
- package/skills/wix-app/references/service-plugin/TOOLS_PROVIDER.md +54 -0
- package/skills/wix-app/references/stores/CATEGORIES.md +22 -0
- package/skills/wix-app/references/stores/GET_PRODUCT.md +99 -0
- package/skills/wix-app/references/stores/INVENTORY.md +37 -0
- package/skills/wix-app/references/stores/QUERY.md +119 -0
- package/skills/wix-app/references/stores/WRITE.md +55 -0
- package/skills/wix-docs/SKILL.md +35 -3
- package/skills/wix-headless/SKILL.md +9 -2
- package/skills/wix-headless/entry/bootstrap.mjs +2 -2
- package/skills/wix-headless/entry/skill.md +0 -2
- package/skills/wix-headless/references/CAPABILITIES.md +6 -4
- package/skills/wix-headless/references/CONTENT.md +36 -0
- package/skills/wix-headless/references/DESIGN.md +54 -0
- package/skills/wix-headless/references/DISCOVERY.md +25 -1
- package/skills/wix-headless/references/FEEDBACK.md +16 -5
- package/skills/wix-headless/references/IMAGE_GENERATION.md +10 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +2 -0
- package/skills/wix-headless/references/SEED.md +3 -1
- package/skills/wix-headless/references/SETUP.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +3 -2
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +42 -2
- package/skills/wix-headless/references/inline-recipes/setup-bookings.md +5 -1
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +1 -1
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +33 -8
- package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +3 -1
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +73 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +38 -2
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +20 -1
- package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +1 -1
- package/skills/wix-headless/references/managed/CONNECT.md +2 -2
- package/skills/wix-headless/references/managed/CREATE.md +15 -1
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +47 -0
- package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +8 -0
- package/skills/wix-headless/references/stripe/DEPLOYMENT.md +8 -0
- package/skills/wix-manage/SKILL.md +131 -12
- package/skills/wix-manage/references/analytics/analytics-dashboard-navigation.md +41 -0
- package/skills/wix-manage/references/analytics/query-site-analytics.md +66 -9
- package/skills/wix-manage/references/app-installation/app-installation-dashboard-navigation.md +28 -0
- package/skills/wix-manage/references/app-installation/install-wix-apps.md +3 -0
- package/skills/wix-manage/references/blog/blog-dashboard-navigation.md +56 -0
- package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +31 -6
- package/skills/wix-manage/references/bookings/booking-service-policy-setup.md +3 -1
- package/skills/wix-manage/references/bookings/bookings-dashboard-navigation.md +63 -0
- package/skills/wix-manage/references/bookings/create-booking-service-from-prompt.md +6 -5
- package/skills/wix-manage/references/bookings/create-course-service.md +30 -5
- package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +85 -42
- package/skills/wix-manage/references/cms/cms-dashboard-navigation.md +44 -0
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +31 -3
- package/skills/wix-manage/references/cms/cms-publishing-flow.md +287 -0
- package/skills/wix-manage/references/cms/cms-schema-management.md +33 -1
- package/skills/wix-manage/references/contacts/contacts-dashboard-navigation.md +46 -0
- package/skills/wix-manage/references/contacts/create-a-contact.md +82 -0
- package/skills/wix-manage/references/contacts/update-a-contact.md +119 -0
- package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +82 -0
- package/skills/wix-manage/references/dashboard-navigation/routes.json +1733 -0
- package/skills/wix-manage/references/domains/domains-dashboard-navigation.md +32 -0
- package/skills/wix-manage/references/ecommerce/ecom-pricing.md +4 -4
- package/skills/wix-manage/references/ecommerce/ecom-shipping.md +1 -1
- package/skills/wix-manage/references/ecommerce/gift-cards/ecom-gift-cards-goal-sell-gift-cards.md +338 -0
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-create-discount-rule.md +42 -78
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-bundle-and-save.md +1 -1
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-stock-mover.md +1 -1
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-upsell-boost.md +1 -1
- package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +90 -92
- package/skills/wix-manage/references/events/create-wix-event.md +176 -0
- package/skills/wix-manage/references/events/manage-wix-events.md +174 -0
- package/skills/wix-manage/references/forms/forms-dashboard-navigation.md +44 -0
- package/skills/wix-manage/references/get-paid/get-paid-dashboard-navigation.md +52 -0
- package/skills/wix-manage/references/get-paid/how-to-setup-wix-payments.md +30 -7
- package/skills/wix-manage/references/google-ads/billing-and-payment.md +80 -0
- package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +212 -0
- package/skills/wix-manage/references/google-ads/get-campaign-suggestions.md +110 -0
- package/skills/wix-manage/references/google-ads/google-ads-dashboard-navigation.md +25 -0
- package/skills/wix-manage/references/google-ads/install-and-create-account.md +155 -0
- package/skills/wix-manage/references/google-ads/manage-campaign-lifecycle.md +63 -0
- package/skills/wix-manage/references/google-ads/query-campaign-analytics.md +155 -0
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +225 -144
- package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +19 -10
- package/skills/wix-manage/references/marketing/marketing-dashboard-navigation.md +52 -0
- package/skills/wix-manage/references/pricing-plans/create-and-update-pricing-plans.md +99 -1
- package/skills/wix-manage/references/pricing-plans/pricing-plans-dashboard-navigation.md +45 -0
- package/skills/wix-manage/references/restaurants/restaurants-dashboard-navigation.md +68 -0
- package/skills/wix-manage/references/restaurants/wix-restaurants-setup.md +94 -125
- package/skills/wix-manage/references/site-properties/change-payment-currency-site-properties.md +48 -9
- package/skills/wix-manage/references/site-properties/site-properties-dashboard-navigation.md +31 -0
- package/skills/wix-manage/references/sites/create-headless-site.md +52 -0
- package/skills/wix-manage/references/sites/create-site-from-template.md +2 -25
- package/skills/wix-manage/references/sites/site-import.md +243 -0
- package/skills/wix-manage/references/sites/sites-dashboard-navigation.md +29 -0
- package/skills/wix-manage/references/stores/add-store-pages-to-site.md +17 -1
- package/skills/wix-manage/references/stores/create-product-from-image.md +8 -6
- package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +16 -10
- package/skills/wix-manage/references/stores/find-products-query-and-search-catalog-v3.md +26 -8
- package/skills/wix-manage/references/stores/stores-dashboard-navigation.md +65 -0
- package/skills/wix-manage/references/stores/update-product-with-options.md +39 -7
- package/skills/wix-replatform/.publish-manifest.json +8 -0
- package/skills/wix-replatform/SKILL.md +693 -0
- package/skills/wix-replatform/lib/artifact-freshness.js +215 -0
- package/skills/wix-replatform/lib/completion-report.js +200 -0
- package/skills/wix-replatform/lib/config-env.js +59 -0
- package/skills/wix-replatform/lib/execution-manifest.js +185 -0
- package/skills/wix-replatform/lib/execution-state.js +173 -0
- package/skills/wix-replatform/lib/import-recovery.js +313 -0
- package/skills/wix-replatform/lib/local-state.js +642 -0
- package/skills/wix-replatform/lib/orchestration-preflight.js +143 -0
- package/skills/wix-replatform/lib/orchestration-router.js +122 -0
- package/skills/wix-replatform/lib/orchestration-state.js +455 -0
- package/skills/wix-replatform/lib/progress-log.js +224 -0
- package/skills/wix-replatform/lib/progress-log.sh +140 -0
- package/skills/wix-replatform/lib/url-preservation-state.js +391 -0
- package/skills/wix-replatform/resources/rp-discovery/SKILL.md +184 -0
- package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +529 -0
- package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +316 -0
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +64 -0
- package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +1114 -0
- package/skills/wix-replatform/resources/rp-mapper/SKILL.md +430 -0
- package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +217 -0
- package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +148 -0
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +378 -0
- package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +183 -0
- package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +478 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +136 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fingerprint.js +310 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +1081 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +618 -0
- package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +949 -0
- package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +196 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +66 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +60 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +95 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +82 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +256 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +249 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +444 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +774 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +71 -0
- package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +632 -0
- package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +330 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +21 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +39 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +36 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +131 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +21 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +97 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +528 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +53 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +84 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +25 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +90 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +64 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +141 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +384 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +260 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +238 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +237 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +238 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +2219 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +31 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +100 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +107 -0
- package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +344 -0
- package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +250 -0
- package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1927 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +83 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +141 -0
- package/skills/wix-replatform/scripts/artifact-freshness.js +76 -0
- package/skills/wix-replatform/scripts/execution-manifest-validate.js +43 -0
- package/skills/wix-replatform/scripts/execution-state-prepare.js +128 -0
- package/skills/wix-replatform/scripts/orchestration-preflight.js +48 -0
- package/skills/wix-replatform/scripts/orchestration-route.js +46 -0
- package/skills/wix-replatform/scripts/orchestration-state.js +245 -0
- package/skills/wix-vibe-headless/SKILL.md +54 -25
- package/skills/wix-vibe-headless/install/deploy.cjs +95 -0
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +34 -0
- package/skills/wix-vibe-headless/platforms/README.md +26 -0
- package/skills/wix-vibe-headless/platforms/base44.md +177 -0
- package/skills/wix-vibe-headless/platforms/generic.md +122 -0
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +230 -119
- package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +43 -0
- package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +25 -0
- package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +35 -0
- package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +38 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +40 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +54 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +65 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +50 -0
- package/skills/wix-vibe-headless/references/blog/seed/SEED.md +103 -0
- package/skills/wix-vibe-headless/references/blog/seed/seed-blog.js +270 -0
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +260 -145
- package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +65 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +47 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +13 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +126 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +108 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +58 -0
- package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +95 -0
- package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +94 -0
- package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +89 -0
- package/skills/wix-vibe-headless/references/bookings/{wix-bookings-checkout.js → app/rest/wix-bookings-checkout.js} +1 -1
- package/skills/wix-vibe-headless/references/bookings/{wix-bookings-services.js → app/rest/wix-bookings-services.js} +90 -12
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +117 -0
- package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.js +333 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +169 -147
- package/skills/wix-vibe-headless/references/cms/app/collection.config.js +31 -0
- package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +18 -0
- package/skills/wix-vibe-headless/references/cms/{wix-cms.js → app/rest/wix-cms.js} +47 -2
- package/skills/wix-vibe-headless/references/cms/seed/SEED.md +145 -0
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +228 -131
- package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +23 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +43 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +13 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +29 -0
- package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +57 -0
- package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +78 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +27 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +54 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +40 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +81 -0
- package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +48 -0
- package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +36 -0
- package/skills/wix-vibe-headless/references/events/{wix-events-browse.js → app/rest/wix-events-browse.js} +3 -2
- package/skills/wix-vibe-headless/references/events/seed/SEED.md +107 -0
- package/skills/wix-vibe-headless/references/events/seed/seed-events.js +251 -0
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +276 -188
- package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +101 -0
- package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +33 -0
- package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +21 -0
- package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +29 -0
- package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +54 -0
- package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +77 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +36 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +32 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +35 -0
- package/skills/wix-vibe-headless/references/members/{wix-members-auth.js → app/rest/wix-members-auth.js} +6 -3
- package/skills/wix-vibe-headless/references/members/install/Register.jsx +22 -0
- package/skills/wix-vibe-headless/references/members/seed/SEED.md +22 -0
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +233 -104
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +31 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +39 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +29 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +35 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +27 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +25 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +39 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +27 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +60 -0
- package/skills/wix-vibe-headless/references/portfolio/{wix-portfolio.js → app/rest/wix-portfolio.js} +84 -55
- package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +94 -0
- package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.js +236 -0
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +240 -117
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +35 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +48 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +16 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +35 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +25 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +28 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +30 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +30 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +53 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +28 -0
- package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +86 -0
- package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.js +251 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +248 -124
- package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +81 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +71 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +43 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +21 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +60 -0
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +63 -0
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +32 -0
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +73 -0
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +28 -0
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +102 -0
- package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +180 -0
- package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.js +452 -0
- package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +56 -0
- package/skills/wix-vibe-headless/references/shared/{wix-client.js → app/rest/wix-client.js} +6 -8
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +6 -0
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +263 -148
- package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +20 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +150 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +167 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +51 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +54 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +119 -0
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +71 -0
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +109 -0
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +98 -0
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +27 -0
- package/skills/wix-vibe-headless/references/storefront/app/pages/ProductDetail.jsx +139 -0
- package/skills/wix-vibe-headless/references/storefront/app/pages/Shop.jsx +75 -0
- package/skills/wix-vibe-headless/references/storefront/{wix-store-cart.js → app/rest/wix-store-cart.js} +1 -1
- package/skills/wix-vibe-headless/references/storefront/{wix-store-catalog.js → app/rest/wix-store-catalog.js} +25 -2
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +111 -0
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +299 -0
- /package/skills/wix-vibe-headless/references/blog/{wix-blog.js → app/rest/wix-blog.js} +0 -0
- /package/skills/wix-vibe-headless/references/events/{wix-events-registration.js → app/rest/wix-events-registration.js} +0 -0
- /package/skills/wix-vibe-headless/references/pricing-plans/{wix-pricing-plans.js → app/rest/wix-pricing-plans.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-menu.js → app/rest/wix-restaurants-menu.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-ordering.js → app/rest/wix-restaurants-ordering.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-reservations.js → app/rest/wix-restaurants-reservations.js} +0 -0
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Agent skills for building Wix app extensions, managing Wix business solutions, d
|
|
|
10
10
|
|
|
11
11
|
### Claude Code Plugin
|
|
12
12
|
|
|
13
|
-
In [Claude Code](https://docs.anthropic.com/en/docs/claude-code), run:
|
|
13
|
+
In [Claude Code](https://docs.anthropic.com/en/docs/claude-code), run:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
16
|
/plugin marketplace add wix/skills
|
|
@@ -91,6 +91,10 @@ When a major bump is required (a breaking change in the underlying `wix-cli`), t
|
|
|
91
91
|
|
|
92
92
|
Run the [`release-bump`](.github/workflows/release-bump.yml) workflow from the **Actions** tab and pick a `version_strategy`. The rest is automatic — the bump PR auto-merges once checks pass and [`release.yml`](.github/workflows/release.yml) publishes to npm via Trusted Publishing.
|
|
93
93
|
|
|
94
|
+
## Serving (`www.wix.com/skills`)
|
|
95
|
+
|
|
96
|
+
Besides the npm package, skills are served as raw markdown / `.tgz` at `https://www.wix.com/skills/<name>` (also `dev.wix.com/skills`), directly from this repo's `main` branch with no build step. Responses are cached, so a merge to `main` reflects there within a few minutes.
|
|
97
|
+
|
|
94
98
|
## Contributing
|
|
95
99
|
|
|
96
100
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on adding new skills.
|
package/package.json
CHANGED
package/skills/wix-app/SKILL.md
CHANGED
|
@@ -77,12 +77,13 @@ Helps build extensions for Wix CLI applications. Covers all extension types: das
|
|
|
77
77
|
- Anywhere on site (with editor manifest) → Editor React component
|
|
78
78
|
- Wix business solution page → Site Plugin
|
|
79
79
|
- During business flow → Service Plugin
|
|
80
|
+
- Exposing tools to the Wix AI assistant → App Tools
|
|
80
81
|
- After event occurs → Backend Event Extension
|
|
81
82
|
|
|
82
83
|
## Decision Flow (Not sure?)
|
|
83
84
|
|
|
84
85
|
- **Admin:** Single-collection CRUD admin page? → **Auto Patterns Dashboard (DEFAULT)**. Custom React page (multi-collection / custom logic / embedded scripts / external APIs / explicit user request)? → Dashboard Page. Need popup/form? → Dashboard Modal. Extending Wix app dashboard with a visual widget? → Dashboard Plugin. Adding a menu item to a Wix app dashboard's more-actions or bulk-actions menu? → Dashboard Menu Plugin. **Modal constraint:** Dashboard Pages cannot use `<Modal />`; use a separate Dashboard Modal extension and `dashboard.openModal()`.
|
|
85
|
-
- **Backend:** During business flow (checkout/shipping/tax)? → Service Plugin. After event (webhooks/sync)? → Backend Event Extension. Custom HTTP endpoints? → Backend API. Need CMS collections for app data? → Data Collection.
|
|
86
|
+
- **Backend:** During business flow (checkout/shipping/tax)? → Service Plugin. Exposing tools to the Wix AI assistant? → App Tools (requires both `APP_TOOLS` declaration + `TOOLS_PROVIDER_CONFIG` handler — see [APP_TOOLS.md](references/APP_TOOLS.md)). After event (webhooks/sync)? → Backend Event Extension. Custom HTTP endpoints? → Backend API. Need CMS collections for app data? → Data Collection.
|
|
86
87
|
- **Site:** User places anywhere (standalone)? → custom element widget. Editor React component with editor manifest (styling, content, elements)? → Editor React component. Fixed slot on Wix app page? → Site Plugin. Scripts/analytics only? → Embedded Script.
|
|
87
88
|
|
|
88
89
|
---
|
|
@@ -96,6 +97,7 @@ Helps build extensions for Wix CLI applications. Covers all extension types: das
|
|
|
96
97
|
| Dashboard Plugin | Dashboard | `DASHBOARD_PLUGIN` | [DASHBOARD_PLUGIN.md](references/DASHBOARD_PLUGIN.md) |
|
|
97
98
|
| Dashboard Menu Plugin | Dashboard | `DASHBOARD_MENU_PLUGIN` | [DASHBOARD_MENU_PLUGIN.md](references/DASHBOARD_MENU_PLUGIN.md) |
|
|
98
99
|
| Service Plugin | Backend | `SERVICE_PLUGIN` | [SERVICE_PLUGIN.md](references/SERVICE_PLUGIN.md) |
|
|
100
|
+
| App Tools (AI assistant tools) | Backend | `APP_TOOLS`, then `SERVICE_PLUGIN` with `pluginType: TOOLS_PROVIDER_CONFIG` | [APP_TOOLS.md](references/APP_TOOLS.md) |
|
|
99
101
|
| Backend Event Extension | Backend | `EVENT` | [BACKEND_EVENT.md](references/BACKEND_EVENT.md) |
|
|
100
102
|
| Backend API | Backend | — (manual, see banner below) | [BACKEND_API.md](references/BACKEND_API.md) |
|
|
101
103
|
| Data Collection | Backend | `DATA_COLLECTION` | [DATA_COLLECTION.md](references/DATA_COLLECTION.md) |
|
|
@@ -215,6 +217,7 @@ Use the Extension Types Reference Table and decision content above. State extens
|
|
|
215
217
|
- Wix Data → `references/data-collection/WIX_DATA.md`
|
|
216
218
|
- Dashboard SDK → `references/dashboard-page/DASHBOARD_API.md`
|
|
217
219
|
- Service Plugin SPIs → read `references/SERVICE_PLUGIN.md` together with the matching `references/service-plugin/<NAME>.md` leaf
|
|
220
|
+
- App Tools (AI assistant tools) → read `references/APP_TOOLS.md`; it links to `references/app-tools/TOOLS.md` (declaration) and `references/service-plugin/TOOLS_PROVIDER.md` (handler)
|
|
218
221
|
4. **Verify the specific method/event exists** in references
|
|
219
222
|
5. **ONLY use MCP discovery if NOT found** in reference files
|
|
220
223
|
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# App Tools — Overview
|
|
2
|
+
|
|
3
|
+
App Tools lets your app expose custom tools that the Wix AI assistant can discover and invoke on behalf of site collaborators. It requires **two extensions working together**:
|
|
4
|
+
|
|
5
|
+
| Extension | What it does | Reference |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| `APP_TOOLS` | Declares your tools (names, descriptions, schemas) so the AI assistant knows they exist | [app-tools/TOOLS.md](app-tools/TOOLS.md) |
|
|
8
|
+
| `TOOLS_PROVIDER_CONFIG` | The service plugin handler Wix calls at runtime when the AI assistant invokes a tool | [service-plugin/TOOLS_PROVIDER.md](service-plugin/TOOLS_PROVIDER.md) |
|
|
9
|
+
|
|
10
|
+
## How they connect
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
Developer declares tools in APP_TOOLS
|
|
14
|
+
↓
|
|
15
|
+
AI assistant reads declarations to understand available tools
|
|
16
|
+
↓
|
|
17
|
+
User interacts with Wix AI assistant
|
|
18
|
+
↓
|
|
19
|
+
AI assistant invokes your toolsProvider service plugin (runTool handler)
|
|
20
|
+
↓
|
|
21
|
+
Your handler routes on methodName, runs business logic, returns response
|
|
22
|
+
↓
|
|
23
|
+
AI assistant uses the response to answer the user
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The `methodName` field is the **linking key**: it must match exactly between the `APP_TOOLS` declaration and the `switch` (or routing map) in your `runTool` handler.
|
|
27
|
+
|
|
28
|
+
## Quick Start
|
|
29
|
+
|
|
30
|
+
### Step 1: Scaffold both extensions via the CLI
|
|
31
|
+
|
|
32
|
+
> **Adding another tool to an existing setup?** Skip this step. Add the new tool entry to your existing `APP_TOOLS` `.extension.ts` file and add a matching `case` to your existing `runTool` handler — no new extensions needed.
|
|
33
|
+
|
|
34
|
+
Run these two commands once — the CLI generates all files and updates `src/extensions.ts` automatically:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
wix generate --params '{"extensionType":"APP_TOOLS","name":"my-tools"}'
|
|
38
|
+
wix generate --params '{"extensionType":"SERVICE_PLUGIN","pluginType":"TOOLS_PROVIDER_CONFIG","name":"my-tools-provider"}'
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Step 2: Declare your tools (`APP_TOOLS`)
|
|
42
|
+
|
|
43
|
+
Open the generated `src/extensions/backend/app-tools/my-tools/my-tools.extension.ts` and replace the stub tool with your own. Read [app-tools/TOOLS.md](app-tools/TOOLS.md) for the full field reference and constraints.
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import { extensions } from '@wix/astro/builders';
|
|
47
|
+
|
|
48
|
+
export default extensions.appTools({
|
|
49
|
+
id: '<generated-uuid>',
|
|
50
|
+
name: 'my-tools',
|
|
51
|
+
tools: [
|
|
52
|
+
{
|
|
53
|
+
methodName: 'get-order-status',
|
|
54
|
+
description: 'Returns the current fulfillment status, shipping carrier, and tracking number for a customer order. Use this tool when a collaborator or customer asks where their order is, whether it has shipped, when it will arrive, or needs a tracking number. Requires a valid orderId.',
|
|
55
|
+
requestSchema: {
|
|
56
|
+
type: 'object',
|
|
57
|
+
properties: {
|
|
58
|
+
orderId: { type: 'string' }
|
|
59
|
+
},
|
|
60
|
+
required: ['orderId']
|
|
61
|
+
},
|
|
62
|
+
responseSchema: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
status: { type: 'string' }
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
activated: true
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Step 3: Implement the runtime handler (`TOOLS_PROVIDER_CONFIG`)
|
|
75
|
+
|
|
76
|
+
Open the generated `src/extensions/backend/service-plugins/my-tools-provider/my-tools-provider.ts` and implement the `runTool` logic. Read [service-plugin/TOOLS_PROVIDER.md](service-plugin/TOOLS_PROVIDER.md) for the full implementation guide.
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
import { toolsProvider } from '@wix/app-tools/service-plugins';
|
|
80
|
+
|
|
81
|
+
toolsProvider.provideHandlers({
|
|
82
|
+
runTool: async ({ request, metadata }) => {
|
|
83
|
+
const { methodName, payload } = request;
|
|
84
|
+
|
|
85
|
+
switch (methodName) {
|
|
86
|
+
case 'get-order-status': {
|
|
87
|
+
const orderId = payload?.['orderId'];
|
|
88
|
+
if (typeof orderId !== 'string' || !orderId) {
|
|
89
|
+
throw new Error('orderId is required');
|
|
90
|
+
}
|
|
91
|
+
// your logic here
|
|
92
|
+
return { response: { status: 'shipped' } };
|
|
93
|
+
}
|
|
94
|
+
default:
|
|
95
|
+
throw new Error(`Unknown tool: ${methodName}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Writing Good Descriptions
|
|
102
|
+
|
|
103
|
+
The `description` field is the primary signal the AI assistant uses to decide whether your tool is relevant to a user's request. A one-liner like `"Returns order status"` works technically but limits relevance matching.
|
|
104
|
+
|
|
105
|
+
Write descriptions as a short prompt — 2–4 sentences covering:
|
|
106
|
+
1. **What it does** — the action and data it returns.
|
|
107
|
+
2. **When to use it** — the user intents or phrases that should trigger it (e.g. "where is my order", "has this shipped", "tracking number").
|
|
108
|
+
3. **Key inputs** — mention required parameters so the AI knows what to ask for.
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
// narrow — easy to miss
|
|
112
|
+
'Returns order status.'
|
|
113
|
+
|
|
114
|
+
// wide — reliably matched
|
|
115
|
+
'Returns the current fulfillment status, shipping carrier, and tracking number for a customer order.
|
|
116
|
+
Use this tool when a collaborator or customer asks where their order is, whether it has shipped,
|
|
117
|
+
when it will arrive, or needs a tracking number. Requires a valid orderId.'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Checklist
|
|
121
|
+
|
|
122
|
+
- [ ] Tool declarations filled in the generated `.extension.ts` (replace the stub `myMethod`)
|
|
123
|
+
- [ ] Set `activated: true` on every tool you want the AI assistant to invoke (`activated: false` tools are declared but never called)
|
|
124
|
+
- [ ] `runTool` handler covers every `methodName` that has `activated: true`
|
|
125
|
+
- [ ] Inputs validated defensively (schemas are advisory, not enforced by Wix)
|
|
126
|
+
- [ ] Wix API calls wrapped with `auth.elevate` from `@wix/essentials`
|
|
127
|
+
- [ ] App built (`wix build`) and released (`wix release`) — changes don't take effect until released
|
|
128
|
+
|
|
129
|
+
## Important Notes
|
|
130
|
+
|
|
131
|
+
- The `requestSchema` and `responseSchema` in `APP_TOOLS` are **advisory** — the AI assistant uses them for context. Wix does NOT validate the `payload` against the schema before calling your handler.
|
|
132
|
+
- Only tools with `activated: true` are invoked by the AI assistant.
|
|
133
|
+
- Both extensions must be registered and the app must be released before the feature is live.
|
|
134
|
+
- The `methodName` must be unique within an `APP_TOOLS` extension (1–30 characters).
|
|
@@ -102,7 +102,7 @@ The CLI scaffolds the builder file with sensible defaults — edit it only to cu
|
|
|
102
102
|
| Field | Type | Default | Purpose |
|
|
103
103
|
|---|---|---|---|
|
|
104
104
|
| `id` | UUID | generated | Extension ID. Don't change after scaffolding. |
|
|
105
|
-
| `name` | string | from scaffold param | Display name. |
|
|
105
|
+
| `name` | string | from scaffold param | Display name. **Maximum 30 characters** — longer names cause a platform validation error on deployment. |
|
|
106
106
|
| `tagName` | kebab-case | derived from `folder` | Custom-element tag the widget is registered under. Used by the Editor and by `customElements.define()`. |
|
|
107
107
|
| `width.defaultWidth` | number (px) | `450` | Initial width when the widget is added to a page. |
|
|
108
108
|
| `width.allowStretch` | boolean | `true` | Whether the site owner can stretch the widget to the page width. |
|
|
@@ -75,16 +75,6 @@ When building a dashboard page to configure an embedded script, see [Dynamic Par
|
|
|
75
75
|
- All parameters must be saved as strings (convert booleans/numbers to strings)
|
|
76
76
|
- Use `withProviders` wrapper when dynamic parameters are present
|
|
77
77
|
|
|
78
|
-
## Optional builder fields
|
|
79
|
-
|
|
80
|
-
The CLI scaffolds the builder with `id`, `title`, `routePath`, and `component`. To customize sidebar placement and routing, edit the generated builder file to set:
|
|
81
|
-
|
|
82
|
-
- `additionalRoutes` (string[]): extra routes leading to this page.
|
|
83
|
-
- `sidebar.disabled` (boolean, default false): hide page from sidebar.
|
|
84
|
-
- `sidebar.priority` (number): sidebar ordering; lower is higher priority.
|
|
85
|
-
- `sidebar.whenActive.selectedPageId` (string): which page appears selected when this page is active.
|
|
86
|
-
- `sidebar.whenActive.hideSidebar` (boolean): hide sidebar when this page is active.
|
|
87
|
-
|
|
88
78
|
## Examples
|
|
89
79
|
|
|
90
80
|
### Data Management Table
|
|
@@ -45,7 +45,7 @@ export default {
|
|
|
45
45
|
displayName: '<CollectionName>',
|
|
46
46
|
displayField: 'title', // Field shown when referencing items
|
|
47
47
|
fields: [ /* field definitions */ ],
|
|
48
|
-
dataPermissions: {
|
|
48
|
+
dataPermissions: { itemRead: 'ANYONE', itemInsert: 'PRIVILEGED', itemUpdate: 'PRIVILEGED', itemRemove: 'PRIVILEGED' },
|
|
49
49
|
indexes: [],
|
|
50
50
|
initialData: [],
|
|
51
51
|
} satisfies DataCollection;
|
|
@@ -80,18 +80,20 @@ export default {
|
|
|
80
80
|
| `ARRAY_DOCUMENT` | Array of documents | File collections |
|
|
81
81
|
| `ANY` | Any type | Most flexible |
|
|
82
82
|
|
|
83
|
-
**CRITICAL: OBJECT fields require `objectOptions
|
|
83
|
+
**CRITICAL: OBJECT fields require `objectOptions` with a `fields` array.** When using `type: "OBJECT"`, you MUST include `objectOptions: { fields: [] }` — the API will reject OBJECT fields without it. Use an empty `fields` array if you don't need a fixed schema (the object will still accept arbitrary JSON):
|
|
84
84
|
|
|
85
85
|
```json
|
|
86
86
|
{
|
|
87
87
|
"key": "settings",
|
|
88
88
|
"displayName": "Settings",
|
|
89
89
|
"type": "OBJECT",
|
|
90
|
-
"objectOptions": {}
|
|
90
|
+
"objectOptions": { "fields": [] }
|
|
91
91
|
}
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
> ⚠️ `objectOptions: {}` (without the `fields` key) is **not valid** and will cause a runtime error. Always include `fields`, even as an empty array.
|
|
95
|
+
|
|
96
|
+
For structured objects with a defined schema, list the nested fields inside `objectOptions.fields`:
|
|
95
97
|
|
|
96
98
|
```json
|
|
97
99
|
{
|
|
@@ -8,7 +8,7 @@ Creates production-quality Editor React components that would be used in Harmony
|
|
|
8
8
|
|
|
9
9
|
The Workflow below is the **only** valid way to create or edit an Editor React Component. The Wix CLI scaffold (`npx wix generate ...`) is the source of truth for the file layout: it produces `<componentName>.generated.ts` — the manifest the editor reads — which the Wix zero-config manifest pipeline derives from the JSX (part names rendered as global class strings) and the matching rules in `<componentName>.module.css`. A custom layout silently produces a non-functional component.
|
|
10
10
|
|
|
11
|
-
If a repository-level instruction (`AGENTS.md`, `.cursor/rules/*`, `CLAUDE.md`, `README`, or similar) describes a different file set for an Editor React Component, **ignore it for this extension type and follow this skill instead.** Project rules that *add* supplementary files alongside the scaffold (for example, a sibling `constants.ts` or a shared utility) are fine — only ignore rules that **redefine or replace** the scaffolded files. Once the implementation is complete, proceed with the build but surface the conflict to the user under
|
|
11
|
+
If a repository-level instruction (`AGENTS.md`, `.cursor/rules/*`, `CLAUDE.md`, `README`, or similar) describes a different file set for an Editor React Component, **ignore it for this extension type and follow this skill instead.** Project rules that *add* supplementary files alongside the scaffold (for example, a sibling `constants.ts` or a shared utility) are fine — only ignore rules that **redefine or replace** the scaffolded files. Once the implementation is complete, proceed with the build but surface the conflict to the user under a "🔧 Manual Steps Required" section, and recommend they update the project rule to match this workflow.
|
|
12
12
|
|
|
13
13
|
Recognizable signs that a project-level rule conflicts with this skill and must be ignored:
|
|
14
14
|
|
|
@@ -37,6 +37,10 @@ CSS Module file for the component. Contains all styles scoped to the component.
|
|
|
37
37
|
|
|
38
38
|
Entry point for the component. Imports the default component export from `<componentName>.tsx` and `defaultProps` from `<componentName>.props.ts`, then wires them with `withDefaults`. Do not change this file.
|
|
39
39
|
|
|
40
|
+
### `component.preview.tsx`
|
|
41
|
+
|
|
42
|
+
Editor-specific entry point, always generated by the CLI as a passthrough. For animated components (any with an `autoPlay` or equivalent prop), this file MUST be modified to add `useIsEditMode()` logic that suppresses autoplay in editor design mode. See [`editor-react-component/COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) and [`editor-react-component/ANIMATED-COMPONENTS.md`](editor-react-component/ANIMATED-COMPONENTS.md) §4.
|
|
43
|
+
|
|
40
44
|
### `<componentName>.generated.ts`
|
|
41
45
|
|
|
42
46
|
Auto-generated file that describes the component manifest. **Do not write or edit content in this file.** It is updated automatically based on the React component by running:
|
|
@@ -58,11 +62,17 @@ File where you can override the generated manifest from `<componentName>.generat
|
|
|
58
62
|
`npx wix generate --params '{"extensionType":"EDITOR_REACT_COMPONENT","name":"ComponentName","folder":"component-name","description":"A brief description of what the component does"}'` to scaffold it. The scaffold creates the files under `src/extensions/site/components/<folder>/` and registers the component in `src/extensions.ts`; edit them there (not under `src/site/components/`). Skip this
|
|
59
63
|
step when iterating on an existing component — re-running it would
|
|
60
64
|
return "an extension already exist" error.
|
|
61
|
-
2. Run the following script to verify that
|
|
62
|
-
`
|
|
63
|
-
3. Edit the generated
|
|
64
|
-
`src/extensions/site/components/component-name/`.
|
|
65
|
-
|
|
65
|
+
2. Run the following script to verify that all component creation and review dependencies are installed properly:
|
|
66
|
+
`node -e "const fs=require('fs'),path=require('path'),ps=['@wix/react-component-schema','@wix/react-component-utils','@wix/editor-react-types','@babel/parser','@babel/traverse','@babel/types','eslint','eslint-plugin-jsx-a11y','@typescript-eslint/parser','@types/eslint-plugin-jsx-a11y'];const missing=ps.filter(p=>!(require.resolve.paths(p)||[]).some(d=>fs.existsSync(path.join(d,p,'package.json'))));if(missing.length){console.error('Missing dependencies: '+missing.join(', '));process.exit(1)}" || { d="$PWD"; while [ "$d" != "/" ] && [ ! -f "$d/yarn.lock" ]; do d="${d%/*}"; done; if [ -f "$d/yarn.lock" ]; then yarn add @wix/react-component-schema @wix/react-component-utils @wix/editor-react-types && yarn add -D @babel/parser @babel/traverse @babel/types eslint eslint-plugin-jsx-a11y @typescript-eslint/parser @types/eslint-plugin-jsx-a11y; else npm install @wix/react-component-schema @wix/react-component-utils @wix/editor-react-types && npm install --save-dev @babel/parser @babel/traverse @babel/types eslint eslint-plugin-jsx-a11y @typescript-eslint/parser @types/eslint-plugin-jsx-a11y; fi; }`
|
|
67
|
+
3. Edit the generated React and CSS files in
|
|
68
|
+
`src/extensions/site/components/component-name/`. Apply
|
|
69
|
+
[`editor-react-component/DESIGN-STATES.md`](editor-react-component/DESIGN-STATES.md) while
|
|
70
|
+
authoring: every interactive named part must use interactive markup and
|
|
71
|
+
pair each native state selector with its prefixed global modifier (for
|
|
72
|
+
example, `.cta:global(.component-name-cta--hover), .cta:hover`). A
|
|
73
|
+
pseudo-class without the matching global modifier is incomplete.
|
|
74
|
+
4. **MANDATORY** — execute the full A11y Review on the edited component per [`editor-react-component/A11Y-REVIEW.md`](editor-react-component/A11Y-REVIEW.md). Run both scanners over the component's `.tsx`/`.jsx` files, complete the Phase 3 manual semantic review, fix confirmed findings, and re-run the scanners after fixes. Reading the reference without executing these steps is not a review. Do not proceed to the build or report completion until the review is complete.
|
|
75
|
+
5. Run `npx wix build && npx wix generate manifest` so the editor picks up
|
|
66
76
|
the new/updated prop schema. This command regenerates manifest
|
|
67
77
|
parts for all components. Design-states emission requires
|
|
68
78
|
`@wix/cli` ≥ 1.1.215 (native and class-triggered states work from
|
|
@@ -70,7 +80,13 @@ File where you can override the generated manifest from `<componentName>.generat
|
|
|
70
80
|
design state is missing from `<componentName>.generated.ts`, the installed
|
|
71
81
|
CLI is older than required — tell the user, and let them decide whether to
|
|
72
82
|
upgrade.
|
|
73
|
-
|
|
83
|
+
6. Update `Component.extensions.ts` file according to [`editor-react-component/COMPONENT-CONFIGURATION.md`](editor-react-component/COMPONENT-CONFIGURATION.md)
|
|
84
|
+
|
|
85
|
+
If the component's primary content is a **playable animation** (Lottie/JSON,
|
|
86
|
+
animated GIF/SVG, canvas/WebGL loop, video-like surface), or has an `autoPlay`
|
|
87
|
+
(or equivalent) prop, it MUST include an on-stage play/pause control **and** the
|
|
88
|
+
generated `component.preview.tsx` MUST be modified to suppress autoplay in the
|
|
89
|
+
editor — follow [`editor-react-component/ANIMATED-COMPONENTS.md`](editor-react-component/ANIMATED-COMPONENTS.md).
|
|
74
90
|
|
|
75
91
|
Reference: when modifying an _existing_ component, follow
|
|
76
92
|
[`editor-react-component/EDIT-FLOW.md`](editor-react-component/EDIT-FLOW.md).
|
|
@@ -82,13 +98,18 @@ Core rules and workflow: [`editor-react-component/REACT-GUIDELINES.md`](editor-r
|
|
|
82
98
|
Topic-focused references (rules + patterns + common mistakes in one place):
|
|
83
99
|
|
|
84
100
|
- [`editor-react-component/ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md) — ARIA/a11y rules and patterns
|
|
101
|
+
- [`editor-react-component/A11Y-REVIEW.md`](editor-react-component/A11Y-REVIEW.md) — Automated a11y scan + triage workflow to run after editing
|
|
85
102
|
- [`editor-react-component/DESIGN-STATES.md`](editor-react-component/DESIGN-STATES.md) — Which design states a part supports (heuristic) and how to author them
|
|
86
103
|
- [`editor-react-component/DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md) — RTL/LTR rules and patterns
|
|
87
104
|
- [`editor-react-component/PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md) — What should be a React prop vs CSS
|
|
88
105
|
- [`editor-react-component/COMPONENT-API.md`](editor-react-component/COMPONENT-API.md) — Props structure, elementProps, data types, file splitting, containers, array props
|
|
106
|
+
- [`editor-react-component/ANIMATED-COMPONENTS.md`](editor-react-component/ANIMATED-COMPONENTS.md) — Play/pause control and autoplay for animated/playable components
|
|
107
|
+
- [`editor-react-component/COMPONENT-PREVIEW.md`](editor-react-component/COMPONENT-PREVIEW.md) — Editor-specific entry point (`component.preview.tsx`), `useIsEditMode()`, when to modify
|
|
89
108
|
- [`editor-react-component/REACT-PATTERNS.md`](editor-react-component/REACT-PATTERNS.md) — SSR-safe patterns, CSS rules, remaining common mistakes
|
|
90
109
|
|
|
91
110
|
## CSS guidelines
|
|
92
111
|
|
|
93
112
|
Reference: [`editor-react-component/CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md).
|
|
94
113
|
|
|
114
|
+
For branded or themed components, also apply: [`editor-react-component/BRANDED-COMPONENTS.md`](editor-react-component/BRANDED-COMPONENTS.md).
|
|
115
|
+
|
|
@@ -7,16 +7,18 @@ Service plugins are a set of APIs defined by Wix that let you inject custom logi
|
|
|
7
7
|
|
|
8
8
|
Use `wix generate --params` with `extensionType: SERVICE_PLUGIN`. `pluginType` is one of:
|
|
9
9
|
|
|
10
|
-
| Value | SPI |
|
|
11
|
-
| --- | --- |
|
|
12
|
-
| `ECOM_ADDITIONAL_FEES` | Additional Fees |
|
|
13
|
-
| `ECOM_SHIPPING_RATES` | Shipping Rates |
|
|
14
|
-
| `ECOM_DISCOUNTS_TRIGGER` | Discount Triggers |
|
|
15
|
-
| `ECOM_VALIDATIONS` | Validations |
|
|
16
|
-
| `ECOM_PAYMENT_SETTINGS` | Payment Settings |
|
|
17
|
-
| `GIFT_CARDS_PROVIDER` | Gift Cards Provider |
|
|
18
|
-
| `STAFF_SORTING_PROVIDER` | Bookings Staff Sorting |
|
|
19
|
-
| `REALTIME_PERMISSIONS_PROVIDER` | Realtime Permissions Provider |
|
|
10
|
+
| Value | SPI | Singular |
|
|
11
|
+
| --- | --- | --- |
|
|
12
|
+
| `ECOM_ADDITIONAL_FEES` | Additional Fees | No |
|
|
13
|
+
| `ECOM_SHIPPING_RATES` | Shipping Rates | **Yes** |
|
|
14
|
+
| `ECOM_DISCOUNTS_TRIGGER` | Discount Triggers | **Yes** |
|
|
15
|
+
| `ECOM_VALIDATIONS` | Validations | No |
|
|
16
|
+
| `ECOM_PAYMENT_SETTINGS` | Payment Settings | No |
|
|
17
|
+
| `GIFT_CARDS_PROVIDER` | Gift Cards Provider | **Yes** |
|
|
18
|
+
| `STAFF_SORTING_PROVIDER` | Bookings Staff Sorting | No |
|
|
19
|
+
| `REALTIME_PERMISSIONS_PROVIDER` | Realtime Permissions Provider | No |
|
|
20
|
+
|
|
21
|
+
> **Singular types** — `ECOM_SHIPPING_RATES`, `ECOM_DISCOUNTS_TRIGGER`, and `GIFT_CARDS_PROVIDER` are **singular**: only one component of each type is allowed per app. Never scaffold or include two components of the same singular type in the same app payload.
|
|
20
22
|
|
|
21
23
|
`name` must be lowercase alphanumeric + hyphens, max 19 characters. The CLI generates the folder, `plugin.ts`, the builder file, the UUID, and the `src/extensions.ts` registration with the appropriate builder method for the SPI type. Some SPI types (e.g., `ECOM_SHIPPING_RATES`) get a `description` placeholder field in the generated builder — replace it with your real copy.
|
|
22
24
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
# Wix Stores Catalog Versioning (V1 / V3)
|
|
3
2
|
|
|
4
3
|
Wix Stores has two catalog versions that are **NOT backwards compatible**. Apps **must support both** — single-version apps cannot list in the App Market and break on new sites.
|
|
@@ -82,214 +81,6 @@ Handle `STORES_NOT_INSTALLED` gracefully — return empty results, do not throw.
|
|
|
82
81
|
|
|
83
82
|
---
|
|
84
83
|
|
|
85
|
-
## Copy-Paste Recipes
|
|
86
|
-
|
|
87
|
-
Each recipe handles both versions. `V3Product` and V1 `Product` types are **not** re-exported from `@wix/stores` top-level — let TS infer or use structural types.
|
|
88
|
-
|
|
89
|
-
### List products with pagination
|
|
90
|
-
|
|
91
|
-
Both versions expose a fluent query builder, but the paging method differs:
|
|
92
|
-
|
|
93
|
-
| Aspect | V1 (`products.queryProducts()`) | V3 (`productsV3.queryProducts()`) |
|
|
94
|
-
|--------|--------------------------------|----------------------------------|
|
|
95
|
-
| API style | Fluent builder: `.skip().limit().find()` | Fluent builder: `.skipTo(cursor).limit().find()` |
|
|
96
|
-
| Pagination | Offset (`.skip(n)`) | Cursor (`.skipTo(cursor)`) |
|
|
97
|
-
| Result `items` | `res.items` (V1 `Product[]`) | `res.items` (V3 `Product[]`) |
|
|
98
|
-
| Total count | `res.totalCount` | **None** — V3 only has `cursors.next` + `hasNext()` |
|
|
99
|
-
| `hasNext` | `res.hasNext()` (method) | `res.hasNext()` (method) |
|
|
100
|
-
| Next cursor | n/a | `res.cursors.next` (string) |
|
|
101
|
-
|
|
102
|
-
```typescript
|
|
103
|
-
import { catalogVersioning, products, productsV3 } from '@wix/stores';
|
|
104
|
-
|
|
105
|
-
export interface ProductsPage {
|
|
106
|
-
products: unknown[]; // narrow at call site
|
|
107
|
-
nextCursor: string | null; // V3 only
|
|
108
|
-
hasNext: boolean;
|
|
109
|
-
totalCount: number | null; // V1 only
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export async function listProductsPage(
|
|
113
|
-
limit: number,
|
|
114
|
-
cursorOrSkip: string | number | undefined,
|
|
115
|
-
): Promise<ProductsPage> {
|
|
116
|
-
const v = await getVersion();
|
|
117
|
-
if (v === 'STORES_NOT_INSTALLED') {
|
|
118
|
-
return { products: [], nextCursor: null, hasNext: false, totalCount: 0 };
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (v === 'V3_CATALOG') {
|
|
122
|
-
let builder = productsV3.queryProducts().limit(limit);
|
|
123
|
-
if (typeof cursorOrSkip === 'string') builder = builder.skipTo(cursorOrSkip);
|
|
124
|
-
// Do NOT chain a sort — see gotcha #10.
|
|
125
|
-
const res = await builder.find();
|
|
126
|
-
return {
|
|
127
|
-
products: res.items,
|
|
128
|
-
nextCursor: res.cursors.next ?? null,
|
|
129
|
-
hasNext: res.hasNext(),
|
|
130
|
-
totalCount: null,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
const skip = typeof cursorOrSkip === 'number' ? cursorOrSkip : 0;
|
|
135
|
-
const res = await products.queryProducts().skip(skip).limit(limit).find();
|
|
136
|
-
return {
|
|
137
|
-
products: res.items,
|
|
138
|
-
nextCursor: null,
|
|
139
|
-
hasNext: res.hasNext(),
|
|
140
|
-
totalCount: res.totalCount ?? null,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
> **Two ways to call V3 `queryProducts`:** the canonical builder shown above, and a direct-call form `productsV3.queryProducts({ cursorPaging: { limit, cursor } })` returning a `Promise<{ products, pagingMetadata }>`. Both compile and run, but the builder is more idiomatic and matches V1's shape.
|
|
146
|
-
|
|
147
|
-
### Display price/stock without fetching variants
|
|
148
|
-
|
|
149
|
-
V3 `queryProducts` does not return variants. Read product-level rollup fields instead:
|
|
150
|
-
|
|
151
|
-
```typescript
|
|
152
|
-
function displayPrice(p: { actualPriceRange?: { minValue?: { amount?: string }; maxValue?: { amount?: string } } }): string {
|
|
153
|
-
const min = p.actualPriceRange?.minValue?.amount;
|
|
154
|
-
const max = p.actualPriceRange?.maxValue?.amount;
|
|
155
|
-
if (!min) return '—';
|
|
156
|
-
return max && max !== min ? `${min} – ${max}` : min;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function stockLabel(status: string | undefined): string {
|
|
160
|
-
switch (status) {
|
|
161
|
-
case 'IN_STOCK': return 'In Stock';
|
|
162
|
-
case 'OUT_OF_STOCK': return 'Out of Stock';
|
|
163
|
-
case 'PARTIALLY_OUT_OF_STOCK': return 'Limited';
|
|
164
|
-
case 'PREORDER': return 'Pre-order';
|
|
165
|
-
default: return '—';
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
// V1 path: product.stock.inventoryStatus (same UPPER_SNAKE_CASE values)
|
|
169
|
-
// V3 path: product.inventory.availabilityStatus (adds PREORDER)
|
|
170
|
-
// SKU lives on the variant — show "—" in lists, or use Read-Only Variants API.
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Get a single product
|
|
174
|
-
|
|
175
|
-
```typescript
|
|
176
|
-
if (v === 'V3_CATALOG') {
|
|
177
|
-
const product = await productsV3.getProduct(id); // returns Product directly
|
|
178
|
-
return product;
|
|
179
|
-
}
|
|
180
|
-
const { product } = await products.getProduct(id); // V1 wraps in { product }
|
|
181
|
-
return product;
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### Create a product (single-variant, with price)
|
|
185
|
-
|
|
186
|
-
```typescript
|
|
187
|
-
if (v === 'V3_CATALOG') {
|
|
188
|
-
const product = await productsV3.createProduct({
|
|
189
|
-
name: 'My Product',
|
|
190
|
-
productType: 'PHYSICAL', // UPPER_CASE
|
|
191
|
-
variantsInfo: {
|
|
192
|
-
variants: [{
|
|
193
|
-
price: { actualPrice: { amount: '19.99' } }, // string, on the variant
|
|
194
|
-
sku: 'SKU-001',
|
|
195
|
-
}],
|
|
196
|
-
},
|
|
197
|
-
});
|
|
198
|
-
return product;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const { product } = await products.createProduct({
|
|
202
|
-
name: 'My Product',
|
|
203
|
-
productType: 'physical', // lower-case
|
|
204
|
-
priceData: { price: 19.99 }, // number, on the product
|
|
205
|
-
sku: 'SKU-001',
|
|
206
|
-
});
|
|
207
|
-
return product;
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### Update a product (V3 needs `revision`)
|
|
211
|
-
|
|
212
|
-
```typescript
|
|
213
|
-
if (v === 'V3_CATALOG') {
|
|
214
|
-
// Signature: updateProduct(_id, productFields). Returns Product directly.
|
|
215
|
-
const current = await productsV3.getProduct(id);
|
|
216
|
-
if (current.revision == null) throw new Error(`Product ${id} has no revision`);
|
|
217
|
-
return await productsV3.updateProduct(id, {
|
|
218
|
-
revision: current.revision, // narrowed — required under exactOptionalPropertyTypes
|
|
219
|
-
name: 'New name',
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
// V1: updateProduct(id, productFields). Returns { product }.
|
|
223
|
-
const { product } = await products.updateProduct(id, { name: 'New name' });
|
|
224
|
-
return product;
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### Delete a product
|
|
228
|
-
|
|
229
|
-
```typescript
|
|
230
|
-
if (v === 'V3_CATALOG') await productsV3.deleteProduct(id);
|
|
231
|
-
else await products.deleteProduct(id);
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### Inventory: increment stock
|
|
235
|
-
|
|
236
|
-
```typescript
|
|
237
|
-
import { inventory, inventoryItemsV3 } from '@wix/stores';
|
|
238
|
-
|
|
239
|
-
if (v === 'V3_CATALOG') {
|
|
240
|
-
// Per-variant; flat shape.
|
|
241
|
-
await inventoryItemsV3.bulkIncrementInventoryItems([
|
|
242
|
-
{ inventoryItemId, incrementBy: 5 },
|
|
243
|
-
]);
|
|
244
|
-
} else {
|
|
245
|
-
// Per-product (variant optional).
|
|
246
|
-
await inventory.incrementInventory([
|
|
247
|
-
{ productId, variantId, incrementBy: 5 },
|
|
248
|
-
]);
|
|
249
|
-
}
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
To find a V3 inventory item ID, use `inventoryItemsV3.searchInventoryItems` filtered by `productId` / `variantId`.
|
|
253
|
-
|
|
254
|
-
### Query inventory
|
|
255
|
-
|
|
256
|
-
```typescript
|
|
257
|
-
if (v === 'V3_CATALOG') {
|
|
258
|
-
const res = await inventoryItemsV3.queryInventoryItems().eq('productId', productId).find();
|
|
259
|
-
return res.items;
|
|
260
|
-
}
|
|
261
|
-
// V1: filter is a JSON-stringified expression.
|
|
262
|
-
const res = await inventory.queryInventory({
|
|
263
|
-
query: { filter: JSON.stringify({ productId }) },
|
|
264
|
-
});
|
|
265
|
-
return res.inventoryItems;
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
### Collections (V1) ↔ Categories (V3)
|
|
269
|
-
|
|
270
|
-
```typescript
|
|
271
|
-
// V1 write ops (createCollection, updateCollection, addProductsToCollection, …)
|
|
272
|
-
// live on the `products` namespace, NOT `collections`. The `collections` namespace is read-only.
|
|
273
|
-
import { products } from '@wix/stores';
|
|
274
|
-
import { categories } from '@wix/categories';
|
|
275
|
-
|
|
276
|
-
if (v === 'V3_CATALOG') {
|
|
277
|
-
// V3 createCategory(category, options). treeReference is REQUIRED and goes in `options`.
|
|
278
|
-
// For Wix Stores categories: appNamespace MUST be the literal "@wix/stores", treeKey is null.
|
|
279
|
-
const category = await categories.createCategory(
|
|
280
|
-
{ name: 'Sale' },
|
|
281
|
-
{ treeReference: { appNamespace: '@wix/stores', treeKey: null } },
|
|
282
|
-
);
|
|
283
|
-
return category;
|
|
284
|
-
}
|
|
285
|
-
const { collection } = await products.createCollection({ name: 'Sale' }); // V1 returns { collection }
|
|
286
|
-
return collection;
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
V3 categories are tree-structured. Reference them on a product via `directCategories[]`, not `collectionIds[]`. **All Stores category API calls must pass `treeReference: { appNamespace: '@wix/stores', treeKey: null }` in `options`** — applies to `createCategory`, `updateCategory`, `queryCategories`, etc.
|
|
290
|
-
|
|
291
|
-
---
|
|
292
|
-
|
|
293
84
|
## V1 → V3 Field Mapping (most common)
|
|
294
85
|
|
|
295
86
|
For the full table see the [Catalog V1 to V3 Migration Guide](https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/catalog-v1-to-v3-migration-guide?apiView=SDK).
|
|
@@ -311,6 +102,7 @@ For the full table see the [Catalog V1 to V3 Migration Guide](https://dev.wix.co
|
|
|
311
102
|
| `collectionIds[i]` | `directCategories[i].id` |
|
|
312
103
|
| `ribbon`, `brand` (string) | `ribbon.name`, `brand.name` (managed via `ribbonsV3` / `brandsV3`) |
|
|
313
104
|
| `media.mainMedia.image.url` (main image URL) | `media.main.image ?? media.main.url` — in V3, `ProductMedia.image` is a `string` (Wix-hosted URL), `url` is a `string` (external URL); check both |
|
|
105
|
+
| `lastUpdated` | `updatedDate` |
|
|
314
106
|
|
|
315
107
|
**Pricing model** — V1 had a `discount` object; V3 removed it. Discounts are now expressed by the relationship between two fields on the variant: `actualPrice` (required, what the customer pays) vs `compareAtPrice` (optional, original price shown struck through). With discount: V1 `price`/`discountedPrice` → V3 `compareAtPrice`/`actualPrice`. Without discount: V1 `price` → V3 `actualPrice`, leave `compareAtPrice` empty.
|
|
316
108
|
|
|
@@ -330,6 +122,12 @@ Payload changes: V1 `changedFields` → V3 `modifiedFields`. Top-level `entityId
|
|
|
330
122
|
|
|
331
123
|
---
|
|
332
124
|
|
|
333
|
-
##
|
|
125
|
+
## Detailed references
|
|
126
|
+
|
|
127
|
+
- [stores/QUERY.md](stores/QUERY.md) — list/query products, pagination, price and stock display
|
|
128
|
+
- [stores/GET_PRODUCT.md](stores/GET_PRODUCT.md) — getProduct, options/choices, modifiers, variant choices
|
|
129
|
+
- [stores/WRITE.md](stores/WRITE.md) — create, update, delete products
|
|
130
|
+
- [stores/INVENTORY.md](stores/INVENTORY.md) — inventory read and write operations
|
|
131
|
+
- [stores/CATEGORIES.md](stores/CATEGORIES.md) — collections (V1) ↔ categories (V3)
|
|
334
132
|
|
|
335
|
-
|
|
133
|
+
For methods not listed here, use `SearchWixSDKDocumentation` then `ReadFullDocsArticle`. Always return the required permission scopes to the user.
|