@wix/agent-skills 1.0.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/LICENSE +21 -0
- package/README.md +111 -0
- package/package.json +29 -0
- package/skills/wix-app/SKILL.md +344 -0
- package/skills/wix-app/references/APP_IDENTIFIERS.md +35 -0
- package/skills/wix-app/references/APP_MARKET_REVIEW.md +311 -0
- package/skills/wix-app/references/APP_VALIDATION.md +171 -0
- package/skills/wix-app/references/BACKEND_API.md +233 -0
- package/skills/wix-app/references/BACKEND_EVENT.md +116 -0
- package/skills/wix-app/references/CODE_QUALITY.md +33 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +587 -0
- package/skills/wix-app/references/DASHBOARD_MENU_PLUGIN.md +157 -0
- package/skills/wix-app/references/DASHBOARD_MODAL.md +283 -0
- package/skills/wix-app/references/DASHBOARD_PAGE.md +403 -0
- package/skills/wix-app/references/DASHBOARD_PLUGIN.md +205 -0
- package/skills/wix-app/references/DATA_COLLECTION.md +451 -0
- package/skills/wix-app/references/DOCUMENTATION.md +42 -0
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +65 -0
- package/skills/wix-app/references/EMBEDDED_SCRIPT.md +468 -0
- package/skills/wix-app/references/EXTENSION_REGISTRATION.md +96 -0
- package/skills/wix-app/references/SERVICE_PLUGIN.md +235 -0
- package/skills/wix-app/references/SITE_PLUGIN.md +436 -0
- package/skills/wix-app/references/STORES_VERSIONING.md +334 -0
- package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +84 -0
- package/skills/wix-app/references/custom-element-widget/SETTINGS_PANEL.md +345 -0
- package/skills/wix-app/references/dashboard-menu-plugin/blog-slots.md +71 -0
- package/skills/wix-app/references/dashboard-menu-plugin/bookings-slots.md +58 -0
- package/skills/wix-app/references/dashboard-menu-plugin/crm-slots.md +8 -0
- package/skills/wix-app/references/dashboard-menu-plugin/ecommerce-slots.md +17 -0
- package/skills/wix-app/references/dashboard-menu-plugin/events-slots.md +29 -0
- package/skills/wix-app/references/dashboard-menu-plugin/restaurants-slots.md +27 -0
- package/skills/wix-app/references/dashboard-menu-plugin/stores-slots.md +35 -0
- package/skills/wix-app/references/dashboard-page/API_SPEC.md +138 -0
- package/skills/wix-app/references/dashboard-page/DASHBOARD_API.md +573 -0
- package/skills/wix-app/references/dashboard-page/DYNAMIC_PARAMETERS.md +269 -0
- package/skills/wix-app/references/dashboard-page/ECOM_NAVIGATION.md +164 -0
- package/skills/wix-app/references/dashboard-plugin/SLOTS.md +294 -0
- package/skills/wix-app/references/data-collection/WIX_DATA.md +270 -0
- package/skills/wix-app/references/data-collection/extension-template.ts +107 -0
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +138 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +454 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +165 -0
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +576 -0
- package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +170 -0
- package/skills/wix-app/references/editor-react-component/EDIT-FLOW.md +6 -0
- package/skills/wix-app/references/editor-react-component/PARTS.md +25 -0
- package/skills/wix-app/references/editor-react-component/PROPS-VS-CSS.md +203 -0
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +167 -0
- package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +137 -0
- package/skills/wix-app/references/service-plugin/ADDITIONAL-FEES.md +112 -0
- package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +118 -0
- package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +87 -0
- package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +86 -0
- package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +135 -0
- package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +79 -0
- package/skills/wix-app/references/service-plugin/VALIDATIONS.md +68 -0
- package/skills/wix-app/references/site-plugin/EXAMPLES.md +311 -0
- package/skills/wix-app/references/site-plugin/SLOTS.md +263 -0
- package/skills/wix-design-system/SKILL.md +129 -0
- package/skills/wix-design-system/references/file-structure.md +56 -0
- package/skills/wix-design-system/scripts/wds.cjs +531 -0
- package/skills/wix-headless/SKILL.md +418 -0
- package/skills/wix-headless/references/DISCOVERY.md +332 -0
- package/skills/wix-headless/references/ORCHESTRATION.md +269 -0
- package/skills/wix-headless/references/SETUP.md +154 -0
- package/skills/wix-headless/references/blog/BLOG_CONTENT.md +152 -0
- package/skills/wix-headless/references/blog/BLOG_PAGES.md +299 -0
- package/skills/wix-headless/references/blog/BLOG_SETUP.md +218 -0
- package/skills/wix-headless/references/blog/INSTRUCTIONS.md +32 -0
- package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +373 -0
- package/skills/wix-headless/references/cms/FAQ_KNOWLEDGE_BASE.md +229 -0
- package/skills/wix-headless/references/cms/INSTRUCTIONS.md +40 -0
- package/skills/wix-headless/references/cms/PORTFOLIO.md +454 -0
- package/skills/wix-headless/references/cms/RESOURCE_LIBRARY.md +356 -0
- package/skills/wix-headless/references/cms/TEAM_DIRECTORY.md +299 -0
- package/skills/wix-headless/references/commands/install-app.md +42 -0
- package/skills/wix-headless/references/commands/known-apps.json +5 -0
- package/skills/wix-headless/references/commands/mcp-bootstrap.md +28 -0
- package/skills/wix-headless/references/designer/INSTRUCTIONS.md +828 -0
- package/skills/wix-headless/references/ecom/CART_PAGES.md +120 -0
- package/skills/wix-headless/references/ecom/CART_WIRING.md +103 -0
- package/skills/wix-headless/references/ecom/COMPONENTS_CSS.md +132 -0
- package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +59 -0
- package/skills/wix-headless/references/forms/CONTACT_FORM.md +477 -0
- package/skills/wix-headless/references/forms/INSTRUCTIONS.md +43 -0
- package/skills/wix-headless/references/gift-cards/COMPONENTS.md +119 -0
- package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +51 -0
- package/skills/wix-headless/references/gift-cards/PAGES.md +129 -0
- package/skills/wix-headless/references/images/INSTRUCTIONS.md +359 -0
- package/skills/wix-headless/references/shared/BUILD_NOISE.md +8 -0
- package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +185 -0
- package/skills/wix-headless/references/shared/IMPLEMENTER.md +155 -0
- package/skills/wix-headless/references/shared/MCP_PREFIX.md +105 -0
- package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +97 -0
- package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +423 -0
- package/skills/wix-headless/references/shared/STYLING.md +117 -0
- package/skills/wix-headless/references/stores/BACK_IN_STOCK.md +178 -0
- package/skills/wix-headless/references/stores/CATEGORY_PAGES.md +86 -0
- package/skills/wix-headless/references/stores/COMPONENTS_CSS.md +129 -0
- package/skills/wix-headless/references/stores/HOME_AND_NAV.md +227 -0
- package/skills/wix-headless/references/stores/INSTRUCTIONS.md +96 -0
- package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +249 -0
- package/skills/wix-headless/references/stores/PRODUCT_PAGES.md +213 -0
- package/skills/wix-headless/references/stores/SHARED_WIRING.md +164 -0
- package/skills/wix-headless/references/verticals/_schema.json +160 -0
- package/skills/wix-headless/references/verticals/_schema.md +185 -0
- package/skills/wix-headless/references/verticals/blog.md +125 -0
- package/skills/wix-headless/references/verticals/cms.md +121 -0
- package/skills/wix-headless/references/verticals/ecom.md +96 -0
- package/skills/wix-headless/references/verticals/forms.md +106 -0
- package/skills/wix-headless/references/verticals/gift-cards.md +121 -0
- package/skills/wix-headless/references/verticals/stores.md +167 -0
- package/skills/wix-headless/scripts/check-manifest.mjs +198 -0
- package/skills/wix-headless/scripts/copy-utility-templates.mjs +153 -0
- package/skills/wix-headless/scripts/emit-design-tokens.mjs +77 -0
- package/skills/wix-headless/scripts/finalize-run-json.mjs +141 -0
- package/skills/wix-headless/scripts/init-site-json.mjs +63 -0
- package/skills/wix-headless/scripts/patch-decorative-slots.mjs +124 -0
- package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +190 -0
- package/skills/wix-headless/scripts/preview.sh +45 -0
- package/skills/wix-headless/scripts/release.sh +73 -0
- package/skills/wix-headless/scripts/scaffold.sh +53 -0
- package/skills/wix-headless/scripts/seed-utilities.sh +55 -0
- package/skills/wix-headless/shared-utilities/analytics.ts +40 -0
- package/skills/wix-headless/shared-utilities/ricos.ts +179 -0
- package/skills/wix-headless/shared-utilities/wix-image.ts +72 -0
- package/skills/wix-headless/templates/ecom/CartBadge.tsx +84 -0
- package/skills/wix-headless/templates/ecom/CartView.tsx +543 -0
- package/skills/wix-headless/templates/ecom/cart.astro +13 -0
- package/skills/wix-headless/templates/ecom/components-ecom.css +215 -0
- package/skills/wix-headless/templates/ecom/discounts.ts +71 -0
- package/skills/wix-headless/templates/ecom/thank-you.astro +24 -0
- package/skills/wix-headless/templates/gift-cards/GiftCardPurchase.tsx +172 -0
- package/skills/wix-headless/templates/gift-cards/_home-teaser-snippet.astro +42 -0
- package/skills/wix-headless/templates/gift-cards/_nav-snippet.astro +11 -0
- package/skills/wix-headless/templates/gift-cards/components-gift-cards.css +219 -0
- package/skills/wix-headless/templates/gift-cards/gift-cards.astro +51 -0
- package/skills/wix-headless/templates/gift-cards/gift-cards.ts +75 -0
- package/skills/wix-headless/templates/stores/AddToCartButton.tsx +77 -0
- package/skills/wix-headless/templates/stores/BackInStockForm.tsx +176 -0
- package/skills/wix-headless/templates/stores/CategoryRail.astro +69 -0
- package/skills/wix-headless/templates/stores/ProductCard.astro +79 -0
- package/skills/wix-headless/templates/stores/ProductPurchase.tsx +397 -0
- package/skills/wix-headless/templates/stores/SeoTags.astro +21 -0
- package/skills/wix-headless/templates/stores/back-in-stock.ts +67 -0
- package/skills/wix-headless/templates/stores/categories.ts +155 -0
- package/skills/wix-headless/templates/stores/category/[slug].astro +130 -0
- package/skills/wix-headless/templates/stores/components-stores.css +295 -0
- package/skills/wix-headless/templates/stores/products/[slug].astro +128 -0
- package/skills/wix-headless/templates/stores/products/index.astro +101 -0
- package/skills/wix-manage/SKILL.md +280 -0
- package/skills/wix-manage/references/app-installation/install-wix-apps.md +155 -0
- package/skills/wix-manage/references/app-installation/list-installed-apps.md +124 -0
- package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +226 -0
- package/skills/wix-manage/references/bookings/booking-service-policy-setup.md +95 -0
- package/skills/wix-manage/references/bookings/booking-system-integration-gaps.md +416 -0
- package/skills/wix-manage/references/bookings/bookings-staff-setup.md +255 -0
- package/skills/wix-manage/references/bookings/create-and-update-booking-services.md +462 -0
- package/skills/wix-manage/references/bookings/end-to-end-booking-flow.md +278 -0
- package/skills/wix-manage/references/bookings/external-calendar-integration.md +258 -0
- package/skills/wix-manage/references/bookings/multi-resource-service-creation.md +231 -0
- package/skills/wix-manage/references/calendar/configure-default-business-hours.md +226 -0
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +422 -0
- package/skills/wix-manage/references/cms/cms-data-operations-extended.md +263 -0
- package/skills/wix-manage/references/cms/cms-ecommerce-catalog-integration.md +136 -0
- package/skills/wix-manage/references/cms/cms-references-and-relationships.md +160 -0
- package/skills/wix-manage/references/cms/cms-schema-management.md +143 -0
- package/skills/wix-manage/references/contacts/bulk-delete-contacts.md +73 -0
- package/skills/wix-manage/references/contacts/bulk-label-and-unlabel-contacts.md +67 -0
- package/skills/wix-manage/references/domains/domain-search-and-purchase.md +434 -0
- package/skills/wix-manage/references/ecommerce/api-recommendation-tracking.md +420 -0
- package/skills/wix-manage/references/ecommerce/flow-add-free-shipping.md +267 -0
- package/skills/wix-manage/references/ecommerce/flow-bundle-and-save.md +290 -0
- package/skills/wix-manage/references/ecommerce/flow-fix-coverage-gaps.md +300 -0
- package/skills/wix-manage/references/ecommerce/flow-optimize-shipping-rates.md +364 -0
- package/skills/wix-manage/references/ecommerce/flow-seasonal-promotion.md +315 -0
- package/skills/wix-manage/references/ecommerce/flow-stock-mover.md +308 -0
- package/skills/wix-manage/references/ecommerce/flow-upsell-boost.md +271 -0
- package/skills/wix-manage/references/ecommerce/goal-clear-inventory.md +118 -0
- package/skills/wix-manage/references/ecommerce/goal-drive-cross-sells.md +122 -0
- package/skills/wix-manage/references/ecommerce/goal-increase-aov.md +132 -0
- package/skills/wix-manage/references/ecommerce/goal-reduce-cart-abandonment.md +148 -0
- package/skills/wix-manage/references/ecommerce/goal-seasonal-revenue.md +146 -0
- package/skills/wix-manage/references/ecommerce/guardrail-discount-conflicts.md +118 -0
- package/skills/wix-manage/references/ecommerce/guardrail-margin-protection.md +88 -0
- package/skills/wix-manage/references/ecommerce/guardrail-rate-pricing-sanity.md +108 -0
- package/skills/wix-manage/references/ecommerce/guardrail-shipping-health.md +124 -0
- package/skills/wix-manage/references/ecommerce/recipe-apply-shipping-recommendations.md +299 -0
- package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +582 -0
- package/skills/wix-manage/references/ecommerce/setup-coupons.md +338 -0
- package/skills/wix-manage/references/ecommerce/setup-discount-rules.md +444 -0
- package/skills/wix-manage/references/ecommerce/setup-shipping-rates.md +86 -0
- package/skills/wix-manage/references/ecommerce/setup-shipping-regions.md +56 -0
- package/skills/wix-manage/references/ecommerce/setup-store-pickup-location.md +209 -0
- package/skills/wix-manage/references/ecommerce/skill-graph.md +139 -0
- package/skills/wix-manage/references/ecommerce/troubleshoot-checkout-delivery-dropoff.md +124 -0
- package/skills/wix-manage/references/ecommerce/troubleshoot-discount-not-applying.md +95 -0
- package/skills/wix-manage/references/events/list-events.md +203 -0
- package/skills/wix-manage/references/forms/create-form.md +260 -0
- package/skills/wix-manage/references/get-paid/create-payment-links.md +212 -0
- package/skills/wix-manage/references/get-paid/how-to-setup-wix-payments.md +57 -0
- package/skills/wix-manage/references/get-paid/payment-links-for-bookings.md +101 -0
- package/skills/wix-manage/references/media/upload-media-to-wix.md +216 -0
- package/skills/wix-manage/references/pricing-plans/create-and-update-pricing-plans.md +77 -0
- package/skills/wix-manage/references/pricing-plans/pricing-plans-bookings-integration.md +166 -0
- package/skills/wix-manage/references/restaurants/wix-restaurants-setup.md +336 -0
- package/skills/wix-manage/references/rich-content/ricos-converter-service.md +295 -0
- package/skills/wix-manage/references/site-properties/change-payment-currency-site-properties.md +59 -0
- package/skills/wix-manage/references/sites/create-site-from-template.md +183 -0
- package/skills/wix-manage/references/sites/query-sites.md +125 -0
- package/skills/wix-manage/references/stores/add-store-pages-to-site.md +57 -0
- package/skills/wix-manage/references/stores/bulk-create-products-with-options.md +1041 -0
- package/skills/wix-manage/references/stores/create-product-catalog-v1.md +125 -0
- package/skills/wix-manage/references/stores/create-product-from-image.md +824 -0
- package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +566 -0
- package/skills/wix-manage/references/stores/find-products-query-and-search-catalog-v3.md +194 -0
- package/skills/wix-manage/references/stores/query-products-catalog-v1.md +80 -0
- package/skills/wix-manage/references/stores/setup-online-store-catalog-v3.md +99 -0
- package/skills/wix-manage/references/stores/update-product-pre-order.md +213 -0
- package/skills/wix-manage/references/stores/update-product-with-options.md +318 -0
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
|
|
2
|
+
# Wix Data Collection Builder
|
|
3
|
+
|
|
4
|
+
Creates CMS data collections for Wix CLI apps. The data collections extension allows your app to automatically create CMS collections when it's installed on a site. Collections store structured data that can be accessed from dashboard pages, site pages, backend code, and external applications.
|
|
5
|
+
|
|
6
|
+
**Important:** This extension automatically enables the site's code editor, which is required for the Wix Data APIs to work. Without this extension, apps using Data APIs would need the Wix user to manually enable the code editor on their site, which isn't guaranteed. With the data collections extension, your app can reliably use Data APIs to read and write data in the collections.
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## App Namespace Handling
|
|
10
|
+
|
|
11
|
+
**App namespace is REQUIRED** for data collections to work. The namespace scopes your collection IDs to prevent conflicts between apps.
|
|
12
|
+
|
|
13
|
+
### Implementation Behavior
|
|
14
|
+
|
|
15
|
+
**If app namespace is provided in the prompt:**
|
|
16
|
+
- Use it in all code examples: `<actual-namespace>/collection-suffix`
|
|
17
|
+
|
|
18
|
+
**If app namespace is NOT provided:**
|
|
19
|
+
- Use the placeholder `<app-namespace>` in all code examples: `<app-namespace>/collection-suffix`
|
|
20
|
+
- Add to Manual Action Items: "Replace `<app-namespace>` with your actual app namespace from Wix Dev Center"
|
|
21
|
+
|
|
22
|
+
### Collection ID Format
|
|
23
|
+
|
|
24
|
+
- **In extension definition (`idSuffix`):** Use just the suffix, e.g., `"products"`
|
|
25
|
+
- **In API calls:** Use the full scoped ID: `"<app-namespace>/products"` — MUST match `idSuffix` exactly (case-sensitive, no camelCase/PascalCase transformation)
|
|
26
|
+
- **In `referencedCollectionId`:** Use the `idSuffix` only (not the full scoped ID) — the system resolves it automatically
|
|
27
|
+
- Example: If `idSuffix` is `"product-recommendations"`, API calls use `"<app-namespace>/product-recommendations"` NOT `"<app-namespace>/productRecommendations"`
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## File Structure
|
|
31
|
+
|
|
32
|
+
In Wix CLI apps, all CMS collections are defined in a single file:
|
|
33
|
+
|
|
34
|
+
**File:** `src/extensions/data/extensions.ts`
|
|
35
|
+
|
|
36
|
+
This file uses the `extensions.genericExtension()` pattern from `@wix/astro/builders` to register all collections:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { extensions } from "@wix/astro/builders";
|
|
40
|
+
|
|
41
|
+
export const dataExtension = extensions.genericExtension({
|
|
42
|
+
compId: "{{GENERATE_UUID}}",
|
|
43
|
+
compName: "data-extension",
|
|
44
|
+
compType: "DATA_COMPONENT",
|
|
45
|
+
compData: {
|
|
46
|
+
dataComponent: {
|
|
47
|
+
collections: [
|
|
48
|
+
// All collections defined here
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**CRITICAL:** The `compId` must be a unique, static UUID string. Generate a fresh UUID v4 for each app - do NOT use `randomUUID()` or copy UUIDs from examples. After creating or modifying this file, follow [Extension Registration reference](EXTENSION_REGISTRATION.md) for UUID generation and to register the extension in `src/extensions.ts` (required for collections to work).
|
|
56
|
+
|
|
57
|
+
**Key points:**
|
|
58
|
+
|
|
59
|
+
- Single file contains all collections
|
|
60
|
+
- Uses `extensions.genericExtension()` from `@wix/astro/builders`
|
|
61
|
+
- Each collection includes: `idSuffix`, `displayName`, `displayField`, `fields`, `dataPermissions`, and optionally `initialData`
|
|
62
|
+
- `displayField` specifies which field the CMS displays when referencing items in this collection from other collections
|
|
63
|
+
- Collections are generated by merging operations (INSERT, UPDATE, DELETE) with existing collections
|
|
64
|
+
- See [extension template](data-collection/extension-template.ts) for complete structure
|
|
65
|
+
|
|
66
|
+
## Field Types
|
|
67
|
+
|
|
68
|
+
| Type | Description | Use Case |
|
|
69
|
+
| ----------------- | -------------------------------- | ---------------------- |
|
|
70
|
+
| `TEXT` | Single-line text | Names, titles |
|
|
71
|
+
| `RICH_TEXT` | Formatted HTML text | Blog content |
|
|
72
|
+
| `RICH_CONTENT` | Rich content with embedded media | Complex blog posts |
|
|
73
|
+
| `NUMBER` | Decimal numbers | Prices, quantities |
|
|
74
|
+
| `BOOLEAN` | True/false | Toggles, flags |
|
|
75
|
+
| `DATE` | Date only | Birthdays |
|
|
76
|
+
| `DATETIME` | Date with time | Timestamps |
|
|
77
|
+
| `TIME` | Time only | Schedules |
|
|
78
|
+
| `IMAGE` | Single image | Thumbnails |
|
|
79
|
+
| `DOCUMENT` | File attachment | PDFs |
|
|
80
|
+
| `VIDEO` | Video file | Media |
|
|
81
|
+
| `AUDIO` | Audio file | Podcasts |
|
|
82
|
+
| `MEDIA_GALLERY` | Multiple media | Galleries |
|
|
83
|
+
| `REFERENCE` | Link to one item | Author → User |
|
|
84
|
+
| `MULTI_REFERENCE` | Link to many items | Post → Tags |
|
|
85
|
+
| `ADDRESS` | Structured address | Locations |
|
|
86
|
+
| `URL` | URL validation | Links |
|
|
87
|
+
| `PAGE_LINK` | Link to Wix page | Internal navigation |
|
|
88
|
+
| `LANGUAGE` | Language code | Multi-language content |
|
|
89
|
+
| `OBJECT` | JSON object | Flexible data |
|
|
90
|
+
| `ARRAY` | Array of values | Generic arrays |
|
|
91
|
+
| `ARRAY_STRING` | Array of strings | Tags list |
|
|
92
|
+
| `ARRAY_DOCUMENT` | Array of documents | File collections |
|
|
93
|
+
| `ANY` | Any type | Most flexible |
|
|
94
|
+
|
|
95
|
+
**CRITICAL: OBJECT fields require `objectOptions`.** When using `type: "OBJECT"`, you MUST include the `objectOptions` property — the API will reject OBJECT fields without it. Use an empty object `{}` if you don't need schema validation:
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"key": "settings",
|
|
100
|
+
"displayName": "Settings",
|
|
101
|
+
"type": "OBJECT",
|
|
102
|
+
"objectOptions": {}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
For structured objects, define nested fields inside `objectOptions.fields`:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"key": "triggerRules",
|
|
111
|
+
"displayName": "Trigger Rules",
|
|
112
|
+
"type": "OBJECT",
|
|
113
|
+
"objectOptions": {
|
|
114
|
+
"fields": [
|
|
115
|
+
{ "key": "url", "displayName": "URL Condition", "type": "TEXT" },
|
|
116
|
+
{
|
|
117
|
+
"key": "scrollDepth",
|
|
118
|
+
"displayName": "Scroll Depth %",
|
|
119
|
+
"type": "NUMBER"
|
|
120
|
+
},
|
|
121
|
+
{ "key": "dateStart", "displayName": "Start Date", "type": "DATE" }
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Field Properties
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"key": "email",
|
|
132
|
+
"displayName": "Email Address",
|
|
133
|
+
"type": "TEXT",
|
|
134
|
+
"required": true,
|
|
135
|
+
"unique": true,
|
|
136
|
+
"defaultValue": null,
|
|
137
|
+
"description": "User's primary email"
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
| Property | Description |
|
|
142
|
+
| -------------- | ---------------------------- |
|
|
143
|
+
| `key` | Field identifier (camelCase) |
|
|
144
|
+
| `displayName` | Label shown in CMS |
|
|
145
|
+
| `type` | Field data type |
|
|
146
|
+
| `required` | Must have value |
|
|
147
|
+
| `unique` | No duplicates allowed |
|
|
148
|
+
| `defaultValue` | Initial value |
|
|
149
|
+
| `description` | Help text |
|
|
150
|
+
|
|
151
|
+
## Naming Conventions
|
|
152
|
+
|
|
153
|
+
- **Field keys:** `lowerCamelCase`, ASCII only (e.g., `productName`, `isActive`, `createdAt`)
|
|
154
|
+
- **Collection IDs (`idSuffix`):** `lower-kebab-case` or `lower_underscore` (e.g., `product-categories`, `blog_posts`)
|
|
155
|
+
- **Display names:** Human-readable, can contain spaces (e.g., `"Product Name"`, `"Is Active"`)
|
|
156
|
+
|
|
157
|
+
## System Fields (Automatic)
|
|
158
|
+
|
|
159
|
+
Every collection includes: `_id`, `_createdDate`, `_updatedDate`, `_owner`
|
|
160
|
+
|
|
161
|
+
## Permissions
|
|
162
|
+
|
|
163
|
+
Access levels control who can read, create, update, and delete items in collections.
|
|
164
|
+
|
|
165
|
+
| Level | Description |
|
|
166
|
+
| -------------------- | -------------------------------------------------- |
|
|
167
|
+
| `UNDEFINED` | Not set (inherits defaults) |
|
|
168
|
+
| `ANYONE` | Public access (including visitors) |
|
|
169
|
+
| `SITE_MEMBER` | Any signed-in user (members and collaborators) |
|
|
170
|
+
| `SITE_MEMBER_AUTHOR` | Signed-in users, but members only access own items |
|
|
171
|
+
| `CMS_EDITOR` | Site collaborators with CMS Access permission |
|
|
172
|
+
| `PRIVILEGED` | CMS administrators and privileged users |
|
|
173
|
+
|
|
174
|
+
**Common patterns:**
|
|
175
|
+
|
|
176
|
+
- Public content (default, recommended): `read: ANYONE, write: PRIVILEGED`
|
|
177
|
+
- User-generated content: `read: SITE_MEMBER, write: SITE_MEMBER_AUTHOR`
|
|
178
|
+
- Editorial workflow: `read: ANYONE, write: CMS_EDITOR`
|
|
179
|
+
- Private/admin: `read: PRIVILEGED, write: PRIVILEGED`
|
|
180
|
+
|
|
181
|
+
**Permission hierarchy** (most to least restrictive): `PRIVILEGED` > `CMS_EDITOR` > `SITE_MEMBER_AUTHOR` > `SITE_MEMBER` > `ANYONE` > `UNDEFINED`
|
|
182
|
+
|
|
183
|
+
### Context-Based Permission Rules
|
|
184
|
+
|
|
185
|
+
**CRITICAL: Permissions must match where and how the data is accessed.** The consumer of the data determines the minimum permission level — setting permissions more restrictive than the access context will cause runtime failures (empty results or permission-denied errors).
|
|
186
|
+
|
|
187
|
+
**Determine permissions by asking: "Who interacts with this data, and from where?"**
|
|
188
|
+
|
|
189
|
+
| Access Context | Who Sees / Uses It | Implication |
|
|
190
|
+
|---|---|---|
|
|
191
|
+
| **Custom element widget** (`CUSTOM_ELEMENT_WIDGET`) | Any site visitor (public) | Reads must be `ANYONE`. If the widget accepts input (e.g., reviews, submissions), inserts must also be `ANYONE` or `SITE_MEMBER`. |
|
|
192
|
+
| **Embedded Script** | Any site visitor (public) | Same as custom element widget — reads must be `ANYONE`. Writes depend on whether visitors can submit data. |
|
|
193
|
+
| **Dashboard Page** (`DASHBOARD_PAGE`) | Site owner / collaborators only | Can use `CMS_EDITOR` or `PRIVILEGED` for all operations since only authorized users access the dashboard. |
|
|
194
|
+
| **Backend code (site-side)** | Runs in visitor context | If called from page code or site-side modules, the caller has visitor-level permissions — data must be readable/writable at the appropriate public level. |
|
|
195
|
+
| **Backend code (elevated)** | Runs with `auth.elevate()` from `@wix/essentials` | Can bypass permissions, but the collection still needs correct defaults for any non-elevated callers. |
|
|
196
|
+
|
|
197
|
+
**How to apply this:**
|
|
198
|
+
|
|
199
|
+
1. **Identify every place the collection is read or written** — custom element widgets, dashboard pages, embedded scripts, backend APIs.
|
|
200
|
+
2. **Use the least restrictive context as the floor.** If a custom element widget reads the data AND a dashboard page also reads it, `itemRead` must be `ANYONE` (because the widget is public).
|
|
201
|
+
3. **Apply per-operation.** A collection can have `itemRead: ANYONE` (widget displays it) but `itemInsert: CMS_EDITOR` (only dashboard users add items). Each operation is independent.
|
|
202
|
+
|
|
203
|
+
**Examples by blueprint type:**
|
|
204
|
+
|
|
205
|
+
- **Dashboard manages data, custom element widget displays it:** `itemRead: ANYONE`, `itemInsert: CMS_EDITOR`, `itemUpdate: CMS_EDITOR`, `itemRemove: CMS_EDITOR`
|
|
206
|
+
- **Custom element widget collects user submissions (e.g., reviews), dashboard moderates:** `itemRead: ANYONE`, `itemInsert: ANYONE`, `itemUpdate: CMS_EDITOR`, `itemRemove: CMS_EDITOR`
|
|
207
|
+
- **Members-only widget reads data, members can submit:** `itemRead: SITE_MEMBER`, `itemInsert: SITE_MEMBER`, `itemUpdate: SITE_MEMBER_AUTHOR`, `itemRemove: CMS_EDITOR`
|
|
208
|
+
- **Dashboard-only (no public surface):** `itemRead: CMS_EDITOR`, `itemInsert: CMS_EDITOR`, `itemUpdate: CMS_EDITOR`, `itemRemove: CMS_EDITOR`
|
|
209
|
+
|
|
210
|
+
**Anti-pattern:** Setting `itemRead: PRIVILEGED` on a collection that a custom element widget queries — the widget will return empty results for all visitors because they lack privileged access.
|
|
211
|
+
|
|
212
|
+
## Relationships
|
|
213
|
+
|
|
214
|
+
**One-to-One / Many-to-One (REFERENCE):**
|
|
215
|
+
|
|
216
|
+
```json
|
|
217
|
+
{
|
|
218
|
+
"key": "category",
|
|
219
|
+
"displayName": "Category",
|
|
220
|
+
"type": "REFERENCE",
|
|
221
|
+
"referenceOptions": {
|
|
222
|
+
"referencedCollectionId": "categories"
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Many-to-Many (MULTI_REFERENCE):**
|
|
228
|
+
|
|
229
|
+
```json
|
|
230
|
+
{
|
|
231
|
+
"key": "tags",
|
|
232
|
+
"displayName": "Tags",
|
|
233
|
+
"type": "MULTI_REFERENCE",
|
|
234
|
+
"multiReferenceOptions": {
|
|
235
|
+
"referencedCollectionId": "tags"
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**CRITICAL Constraints:**
|
|
241
|
+
|
|
242
|
+
- REFERENCE/MULTI_REFERENCE fields can ONLY link to other custom CMS collections defined in your app
|
|
243
|
+
- The `referencedCollectionId` MUST be the `idSuffix` of another collection in the same plan
|
|
244
|
+
- **NEVER use REFERENCE fields to link to Wix business entities** (Products, Orders, Contacts, Members, etc.)
|
|
245
|
+
- Use Wix SDK APIs to access Wix business entities instead
|
|
246
|
+
|
|
247
|
+
## Collection Operations
|
|
248
|
+
|
|
249
|
+
Collections support three operation types for modifying collections:
|
|
250
|
+
|
|
251
|
+
### INSERT
|
|
252
|
+
|
|
253
|
+
Creates a new collection or replaces an existing one with the same `idSuffix`.
|
|
254
|
+
|
|
255
|
+
**Use when:** Creating a new collection or completely replacing an existing collection.
|
|
256
|
+
|
|
257
|
+
### UPDATE
|
|
258
|
+
|
|
259
|
+
Modifies an existing collection by merging new data with existing fields.
|
|
260
|
+
|
|
261
|
+
**Use when:** Adding fields, updating permissions, or modifying collection properties.
|
|
262
|
+
|
|
263
|
+
**Behavior:**
|
|
264
|
+
|
|
265
|
+
- If collection exists: Merges new data with existing collection
|
|
266
|
+
- If collection doesn't exist: Treats update as insert (creates new collection)
|
|
267
|
+
|
|
268
|
+
### DELETE
|
|
269
|
+
|
|
270
|
+
Removes a collection from the app.
|
|
271
|
+
|
|
272
|
+
**Use when:** Removing a collection that is no longer needed.
|
|
273
|
+
|
|
274
|
+
**Behavior:**
|
|
275
|
+
|
|
276
|
+
- Removes the collection from `src/extensions/data/extensions.ts`
|
|
277
|
+
- If all collections are deleted, the entire file is deleted
|
|
278
|
+
|
|
279
|
+
**Merge logic:** Operations are applied using a Map keyed by `idSuffix`. Existing collections are loaded into the Map first, then each operation modifies it: INSERT sets/replaces, UPDATE merges with existing (or creates if missing), DELETE removes. The final Map values become the output collections.
|
|
280
|
+
|
|
281
|
+
## App Version Updates
|
|
282
|
+
|
|
283
|
+
Changes to your data collections extension require releasing a new major version of your app. When a user updates to the new major version, their collections are updated as follows:
|
|
284
|
+
|
|
285
|
+
- **Adding a new collection:** The new collection is created on the site.
|
|
286
|
+
- **Removing a collection:** If the old app version defined a collection and the new version doesn't, the collection is removed from the site.
|
|
287
|
+
- **Modifying a collection schema:** Field additions, removals, and type changes are applied to the collection. Existing data is preserved.
|
|
288
|
+
|
|
289
|
+
**Important notes:**
|
|
290
|
+
|
|
291
|
+
- Collection changes only affect users who update to the new major version. Users who don't update retain their current collections.
|
|
292
|
+
- Collection changes take up to 5 minutes to propagate after an update.
|
|
293
|
+
- **Initial data is only imported when a collection is first created.** If a collection already contains data, `initialData` is ignored during updates.
|
|
294
|
+
|
|
295
|
+
## Wix CLI-Specific Constraints
|
|
296
|
+
|
|
297
|
+
### Embedded Script Parameters vs Collections
|
|
298
|
+
|
|
299
|
+
**CRITICAL: NEVER create CMS collections to store configuration for embedded scripts.**
|
|
300
|
+
|
|
301
|
+
All embedded script configuration must go through embedded script parameters (`embeddedScriptParameters`), not CMS collections.
|
|
302
|
+
|
|
303
|
+
**DO NOT create collections for:**
|
|
304
|
+
|
|
305
|
+
- Colors, messages, headlines, text content
|
|
306
|
+
- Coupon codes, display settings
|
|
307
|
+
- UI customization (positions, sizes, styles)
|
|
308
|
+
- Timing settings, feature toggles
|
|
309
|
+
- Display frequencies, thresholds
|
|
310
|
+
- Minimums/maximums
|
|
311
|
+
- **ANY configuration that controls how an embedded script behaves or appears**
|
|
312
|
+
|
|
313
|
+
**Examples of configuration (use parameters, NOT collections):**
|
|
314
|
+
|
|
315
|
+
- Popup headline → embedded script parameter
|
|
316
|
+
- Coupon code → embedded script parameter
|
|
317
|
+
- Background color → embedded script parameter
|
|
318
|
+
- Display position → embedded script parameter
|
|
319
|
+
- Show/hide toggles → embedded script parameter
|
|
320
|
+
|
|
321
|
+
**CMS collections should ONLY be created for:**
|
|
322
|
+
|
|
323
|
+
- Business data (products, orders, inventory, etc.)
|
|
324
|
+
- User-generated content (reviews, comments, submissions)
|
|
325
|
+
- Event logs (if explicitly requested for analytics/tracking)
|
|
326
|
+
- Multi-record relational data that is NOT configuration
|
|
327
|
+
|
|
328
|
+
**Decision Rule:**
|
|
329
|
+
|
|
330
|
+
- If it controls HOW the embedded script works or looks → it's configuration → use embedded script parameters
|
|
331
|
+
- If it's business data or user-generated content → it's data → use CMS collections
|
|
332
|
+
|
|
333
|
+
### Custom Element Widget Settings vs Collections
|
|
334
|
+
|
|
335
|
+
**CRITICAL: custom element widgets have a built-in settings panel (`panel.tsx`) that handles ALL widget configuration.**
|
|
336
|
+
|
|
337
|
+
**For CUSTOM_ELEMENT_WIDGET-only blueprints (no DASHBOARD_PAGE or other extensions):**
|
|
338
|
+
|
|
339
|
+
- **ALWAYS return `collections: []` (empty array)**
|
|
340
|
+
- The widget panel handles everything
|
|
341
|
+
- **NEVER create collections to store widget configuration data**
|
|
342
|
+
|
|
343
|
+
**Configuration handled by widget panel (NOT collections):**
|
|
344
|
+
|
|
345
|
+
- Target date/time for countdown → widget panel
|
|
346
|
+
- Display colors, fonts, sizes → widget panel
|
|
347
|
+
- Headlines, labels, messages → widget panel
|
|
348
|
+
- Feature toggles, show/hide options → widget panel
|
|
349
|
+
- Numeric settings (delays, intervals, thresholds) → widget panel
|
|
350
|
+
|
|
351
|
+
**Only create collections for CUSTOM_ELEMENT_WIDGET when ALL of these conditions are met:**
|
|
352
|
+
|
|
353
|
+
1. The blueprint ALSO includes a DASHBOARD_PAGE extension that needs to manage data the widget displays
|
|
354
|
+
2. OR the widget explicitly needs to display MULTIPLE records of user-generated/business data (not configuration)
|
|
355
|
+
3. AND the data is NOT configuration (dates, colors, settings, display options are ALWAYS configuration)
|
|
356
|
+
|
|
357
|
+
### Anti-Patterns
|
|
358
|
+
|
|
359
|
+
**Don't create aggregated fields.** If you have individual `rating` fields, calculate averages dynamically — don't store computed values like `averageRating`.
|
|
360
|
+
|
|
361
|
+
**Don't duplicate configuration.** If embedded script parameters already hold `{ headline, color }`, don't also create a CMS collection with the same data.
|
|
362
|
+
|
|
363
|
+
**Don't create single-value collections.** A collection with one field like `{ theme: "dark" }` should be an embedded script parameter or widget setting instead.
|
|
364
|
+
|
|
365
|
+
### Initial Data Rules
|
|
366
|
+
|
|
367
|
+
Each item in `initialData` must match the collection schema exactly:
|
|
368
|
+
|
|
369
|
+
- Field keys must be `lowerCamelCase` and match the schema
|
|
370
|
+
- `TEXT` → string, `NUMBER` → number, `BOOLEAN` → boolean
|
|
371
|
+
- `DATE`/`DATETIME` → use `{ "$date": "2024-01-15T10:30:00.000Z" }` format
|
|
372
|
+
- `REFERENCE` → provide the `idSuffix` of the referenced collection
|
|
373
|
+
- Required fields must always have values
|
|
374
|
+
|
|
375
|
+
## Examples
|
|
376
|
+
|
|
377
|
+
### Simple Collection with Initial Data
|
|
378
|
+
|
|
379
|
+
**Request:** "Create a collection for handling fees with example data"
|
|
380
|
+
|
|
381
|
+
**Generated file:** `src/extensions/data/extensions.ts`
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
import { extensions } from "@wix/astro/builders";
|
|
385
|
+
|
|
386
|
+
export const dataExtension = extensions.genericExtension({
|
|
387
|
+
compId: "{{GENERATE_UUID}}",
|
|
388
|
+
compName: "data-extension",
|
|
389
|
+
compType: "DATA_COMPONENT",
|
|
390
|
+
compData: {
|
|
391
|
+
dataComponent: {
|
|
392
|
+
collections: [
|
|
393
|
+
{
|
|
394
|
+
schemaUrl: "https://www.wix.com/",
|
|
395
|
+
idSuffix: "additional-fees",
|
|
396
|
+
displayName: "Additional Fees",
|
|
397
|
+
displayField: "title",
|
|
398
|
+
fields: [
|
|
399
|
+
{ key: "title", displayName: "Fee Title", type: "TEXT" },
|
|
400
|
+
{ key: "amount", displayName: "Fee Amount", type: "NUMBER" },
|
|
401
|
+
],
|
|
402
|
+
dataPermissions: {
|
|
403
|
+
itemRead: "ANYONE",
|
|
404
|
+
itemInsert: "PRIVILEGED",
|
|
405
|
+
itemUpdate: "PRIVILEGED",
|
|
406
|
+
itemRemove: "PRIVILEGED",
|
|
407
|
+
},
|
|
408
|
+
initialData: [
|
|
409
|
+
{ title: "Handling Fee", amount: 5 },
|
|
410
|
+
{ title: "Gift Wrapping", amount: 3.5 },
|
|
411
|
+
],
|
|
412
|
+
},
|
|
413
|
+
],
|
|
414
|
+
},
|
|
415
|
+
},
|
|
416
|
+
});
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### Collection with Reference Relationship
|
|
420
|
+
|
|
421
|
+
**Request:** "Create collections for products and categories with relationships"
|
|
422
|
+
|
|
423
|
+
**Collections:**
|
|
424
|
+
|
|
425
|
+
- `categories` - Category definitions
|
|
426
|
+
- `products` - Products that reference categories
|
|
427
|
+
|
|
428
|
+
Both collections are defined in the same `src/extensions/data/extensions.ts` file, with the `products` collection using a REFERENCE field to link to `categories`. See the [extension template](data-collection/extension-template.ts) for a complete multi-collection example.
|
|
429
|
+
|
|
430
|
+
## Common Patterns
|
|
431
|
+
|
|
432
|
+
**Soft Delete:** Add `isDeleted` (BOOLEAN, default: false)
|
|
433
|
+
|
|
434
|
+
**Status/Workflow:** Add `status` (TEXT) with values like draft/pending/published
|
|
435
|
+
|
|
436
|
+
**URL Slug:** Add `slug` (TEXT, unique) for SEO-friendly URLs
|
|
437
|
+
|
|
438
|
+
**Owner Tracking:** Add `createdBy` (REFERENCE → custom collection, not Members)
|
|
439
|
+
|
|
440
|
+
**Note:** For owner tracking, create a custom collection for users rather than referencing Wix Members directly.
|
|
441
|
+
|
|
442
|
+
## Reference Documentation
|
|
443
|
+
|
|
444
|
+
- [Wix Data SDK Reference](data-collection/WIX_DATA.md) - Complete reference for reading and writing data using `@wix/data`
|
|
445
|
+
- [extension-template.ts](data-collection/extension-template.ts) - Template for `src/extensions/data/extensions.ts`
|
|
446
|
+
|
|
447
|
+
### Public Documentation
|
|
448
|
+
|
|
449
|
+
- [About Data Collections Extensions](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/backend-extensions/data-collections/about-data-collections-extensions) - When to use the extension, implementation options, and app version update behavior
|
|
450
|
+
- [Add a Data Collections Extension in the App Dashboard](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/backend-extensions/data-collections/add-a-data-collections-extension-in-the-app-dashboard) - Step-by-step guide to configuring collections via the app dashboard JSON editor, with example configuration
|
|
451
|
+
- [Data Collections Extension JSON Reference](https://dev.wix.com/docs/api-reference/business-solutions/cms/collection-management/data-collections-extension/introduction) - Complete JSON schema and field definitions for the data collections extension
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Wix CLI Extension Documentation
|
|
2
|
+
|
|
3
|
+
All information in the wix-app skill is based on official Wix CLI documentation. This file contains links to detailed documentation for each extension type.
|
|
4
|
+
|
|
5
|
+
## Main Documentation
|
|
6
|
+
|
|
7
|
+
- [About Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/about-extensions) - Overview of extensions in the Wix CLI
|
|
8
|
+
- [About the extensions.ts File](https://dev.wix.com/docs/wix-cli/guides/extensions/about-the-extensions-ts-file) - How to register extensions
|
|
9
|
+
|
|
10
|
+
## Dashboard Extensions
|
|
11
|
+
|
|
12
|
+
- [About Dashboard Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/about-dashboard-extensions) - Overview of dashboard extension types
|
|
13
|
+
- [Add Dashboard Page Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-pages/add-dashboard-page-extensions) - How to create dashboard pages
|
|
14
|
+
- [Dashboard Page Extension Files and Code](https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-pages/dashboard-page-extension-files-and-code) - File structure and code examples
|
|
15
|
+
- [Add Dashboard Modal Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-modals/add-dashboard-modal-extensions) - How to create dashboard modals
|
|
16
|
+
- [Dashboard Modal Extension Files and Code](https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-modals/dashboard-modal-extensions-files-and-code) - File structure and code examples
|
|
17
|
+
- [Add Dashboard Plugin Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-plugins/add-dashboard-plugin-extensions) - How to create dashboard plugins
|
|
18
|
+
- [Dashboard Plugin Extension Files and Code](https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-plugins/dashboard-plugin-extension-files-and-code) - File structure and code examples
|
|
19
|
+
- [Add Dashboard Menu Plugin Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-menu-plugins/add-dashboard-menu-plugin-extensions) - How to create dashboard menu plugins
|
|
20
|
+
- [Dashboard Menu Plugin Extension Files and Code](https://dev.wix.com/docs/wix-cli/guides/extensions/dashboard-extensions/dashboard-menu-plugins/dashboard-menu-plugin-extension-files-and-code) - File structure and code examples
|
|
21
|
+
|
|
22
|
+
## Backend Extensions
|
|
23
|
+
|
|
24
|
+
- [About Backend Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/backend-extensions/about-backend-extensions) - Overview of backend extension types and limits
|
|
25
|
+
- [Add Service Plugin Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/backend-extensions/service-plugins/add-service-plugin-extensions) - How to create service plugins
|
|
26
|
+
- [Service Plugin Extension Files and Code](https://dev.wix.com/docs/wix-cli/guides/extensions/backend-extensions/service-plugins/service-plugin-extension-files-and-code) - File structure and code examples
|
|
27
|
+
- [Add Event Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/backend-extensions/events/add-event-extensions) - How to create event extensions
|
|
28
|
+
- [Event Extension Files and Code](https://dev.wix.com/docs/wix-cli/guides/extensions/backend-extensions/events/event-extension-files-and-code) - File structure and code examples
|
|
29
|
+
- [About HTTP Endpoints](https://dev.wix.com/docs/wix-cli/guides/development/http-endpoints/about-http-endpoints) - Overview of Astro endpoints
|
|
30
|
+
- [Add HTTP Endpoints to Your Project](https://dev.wix.com/docs/wix-cli/guides/development/http-endpoints/add-http-endpoints-to-your-project) - How to create backend endpoints
|
|
31
|
+
|
|
32
|
+
## Site Extensions
|
|
33
|
+
|
|
34
|
+
- [About Site Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/about-site-extensions) - Overview of site extension types
|
|
35
|
+
- [Add Custom Element Widget Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/site-widgets/add-a-site-widget-extension) - How to create custom element widgets
|
|
36
|
+
- [Custom Element Widget Extension Files and Code](https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/site-widgets/site-widget-extension-files-and-code) - File structure and code examples
|
|
37
|
+
- [Identify the App Instance in a Custom Element Widget](https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/site-widgets/identify-the-app-instance-in-a-site-widget) - How to identify app instances
|
|
38
|
+
- [Add Site Plugin Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/site-plugins/add-a-site-plugin-extension) - How to create site plugins
|
|
39
|
+
- [Site Plugin Extension Files and Code](https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/site-plugins/site-plugin-extension-files-and-code) - File structure and code examples
|
|
40
|
+
- [About Embedded Scripts](https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/embedded-scripts/about-embedded-scripts) - Overview of embedded scripts
|
|
41
|
+
- [Add Embedded Script Extensions](https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/embedded-scripts/add-an-embedded-script-extension) - How to create embedded scripts
|
|
42
|
+
- [Embedded Script Extension Files and Code](https://dev.wix.com/docs/wix-cli/guides/extensions/site-extensions/embedded-scripts/embedded-script-extension-files-and-code) - File structure and code examples
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Wix Editor React Component Builder
|
|
2
|
+
|
|
3
|
+
Creates production-quality Editor React components that would be used in Harmony Editor for Wix CLI applications. Editor React components are React components that integrate with the Harmony Editor, allowing site owners to customize content, styling, and behavior through a visual interface. **Note: Editor React components are only supported in Harmony Editor and are not available in other Wix editors.**
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
Editor React components consist of the following template files (replace `<componentName>` with the actual component name in kebab-case):
|
|
8
|
+
|
|
9
|
+
### `<componentName>.tsx`
|
|
10
|
+
|
|
11
|
+
The React component file. Contains the component's UI logic, JSX structure, and TypeScript props interface.
|
|
12
|
+
|
|
13
|
+
### `<componentName>.module.css`
|
|
14
|
+
|
|
15
|
+
CSS Module file for the component. Contains all styles scoped to the component.
|
|
16
|
+
|
|
17
|
+
### `component.tsx`
|
|
18
|
+
|
|
19
|
+
Entry point for the component. Imports the default prop values defined in `<componentName>.tsx` and wires them up so the component renders correctly when first added to the stage.
|
|
20
|
+
|
|
21
|
+
### `<componentName>.generated.ts`
|
|
22
|
+
|
|
23
|
+
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:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
npx wix build && npx wix generate manifest
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### `<componentName>.extension.ts`
|
|
30
|
+
|
|
31
|
+
File where you can override the generated manifest from `<componentName>.generated.ts`. Only include overrides that appear in the boilerplate component — do not add extra overrides beyond what the boilerplate provides.
|
|
32
|
+
|
|
33
|
+
## Workflow
|
|
34
|
+
|
|
35
|
+
1. If `src/site/components/component-name/` does not yet exist, run
|
|
36
|
+
`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. Skip this
|
|
37
|
+
step when iterating on an existing component — re-running it would
|
|
38
|
+
return "an extension already exist" error.
|
|
39
|
+
2. Run the following script to verify that the component dependencies are installed properly:
|
|
40
|
+
`[[ -d "node_modules/@wix/react-component-schema" && -d "node_modules/@wix/react-component-utils" && -d "node_modules/@wix/editor-react-types" ]] || ([ -f yarn.lock ] && yarn add @wix/react-component-schema @wix/react-component-utils @wix/editor-react-types || npm install @wix/react-component-schema @wix/react-component-utils @wix/editor-react-types)`
|
|
41
|
+
3. Edit the generated react and CSS files in
|
|
42
|
+
`src/site/components/ComponentName/`.
|
|
43
|
+
4. Run `npx wix build && npx wix generate manifest` so the editor picks up
|
|
44
|
+
the new/updated prop schema. This command regenerates manifest
|
|
45
|
+
parts for all components.
|
|
46
|
+
5. Update `Component.extensions.ts` file according to [`editor-react-component/COMPONENT-CONFIGURATION.md`](editor-react-component/COMPONENT-CONFIGURATION.md)
|
|
47
|
+
|
|
48
|
+
Reference: when modifying an _existing_ component, follow
|
|
49
|
+
[`editor-react-component/EDIT-FLOW.md`](editor-react-component/EDIT-FLOW.md).
|
|
50
|
+
|
|
51
|
+
## React guidelines
|
|
52
|
+
|
|
53
|
+
Core rules and workflow: [`editor-react-component/REACT-GUIDELINES.md`](editor-react-component/REACT-GUIDELINES.md).
|
|
54
|
+
|
|
55
|
+
Topic-focused references (rules + patterns + common mistakes in one place):
|
|
56
|
+
|
|
57
|
+
- [`editor-react-component/ACCESSIBILITY.md`](editor-react-component/ACCESSIBILITY.md) — ARIA/a11y rules and patterns
|
|
58
|
+
- [`editor-react-component/DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md) — RTL/LTR rules and patterns
|
|
59
|
+
- [`editor-react-component/PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md) — What should be a React prop vs CSS
|
|
60
|
+
- [`editor-react-component/COMPONENT-API.md`](editor-react-component/COMPONENT-API.md) — Props structure, elementProps, data types, file splitting, containers, array props
|
|
61
|
+
- [`editor-react-component/REACT-PATTERNS.md`](editor-react-component/REACT-PATTERNS.md) — SSR-safe patterns, CSS rules, remaining common mistakes
|
|
62
|
+
|
|
63
|
+
## CSS guidelines
|
|
64
|
+
|
|
65
|
+
Reference: [`editor-react-component/CSS-GUIDELINES.md`](editor-react-component/CSS-GUIDELINES.md).
|