@wix/agent-skills 1.13.0 → 1.15.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 +4 -1
- package/package.json +1 -1
- package/skills/README.md +23 -0
- package/skills/wix-app/SKILL.md +10 -2
- package/skills/wix-app/references/AUTO_PATTERNS_DASHBOARD.md +326 -0
- package/skills/wix-app/references/CODE_QUALITY.md +1 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +124 -115
- package/skills/wix-app/references/DASHBOARD_PAGE.md +3 -0
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +23 -9
- package/skills/wix-app/references/SITE_PLUGIN.md +1 -1
- package/skills/wix-app/references/auto-patterns-dashboard/action-cell.md +115 -0
- package/skills/wix-app/references/auto-patterns-dashboard/app-config-structure.md +264 -0
- package/skills/wix-app/references/auto-patterns-dashboard/app-context.md +37 -0
- package/skills/wix-app/references/auto-patterns-dashboard/bulk-actions.md +86 -0
- package/skills/wix-app/references/auto-patterns-dashboard/collection-page-actions.md +119 -0
- package/skills/wix-app/references/auto-patterns-dashboard/collection-page.md +103 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-actions-override.md +76 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-columns-override.md +82 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-components-override.md +89 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-header-override.md +124 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-sections-override.md +91 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-slots-override.md +71 -0
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page-actions.md +70 -0
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page-view-actions.md +73 -0
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page.md +98 -0
- package/skills/wix-app/references/auto-patterns-dashboard/example-patterns.json +278 -0
- package/skills/wix-app/references/auto-patterns-dashboard/pages-configuration.md +94 -0
- package/skills/wix-app/references/auto-patterns-dashboard/resolved-action.md +43 -0
- package/skills/wix-app/references/auto-patterns-dashboard/sdk-utilities.md +66 -0
- package/skills/wix-app/references/auto-patterns-dashboard/views.md +76 -0
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +1 -14
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +54 -29
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +2 -2
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +17 -105
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +127 -0
- package/skills/wix-app/references/editor-react-component/PARTS.md +2 -1
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +15 -15
- package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +25 -53
- package/skills/wix-app/scripts/generate-auto-patterns.js +510 -0
- package/skills/wix-auth/SKILL.md +12 -0
- package/skills/wix-auth/references/device-flow.md +140 -0
- package/skills/wix-docs/SKILL.md +188 -0
- package/skills/wix-docs/references/API_SPEC_SEARCH.md +213 -0
- package/skills/wix-docs/references/EXTRACTING.md +120 -0
- package/skills/wix-headless/SKILL.md +84 -130
- package/skills/wix-headless/entry/bootstrap.mjs +93 -0
- package/skills/wix-headless/entry/skill.md +78 -0
- package/skills/wix-headless/references/AI_FEATURES.md +178 -0
- package/skills/wix-headless/references/CAPABILITIES.md +84 -0
- package/skills/wix-headless/references/DISCOVERY.md +34 -56
- package/skills/wix-headless/references/DOC_DISCOVERY.md +37 -0
- package/skills/wix-headless/references/FEEDBACK.md +118 -0
- package/skills/wix-headless/references/IMAGE_GENERATION.md +69 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +97 -0
- package/skills/wix-headless/references/SEED.md +44 -188
- package/skills/wix-headless/references/SETUP.md +32 -103
- package/skills/wix-headless/references/astro.md +98 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +196 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +236 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +279 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +163 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +203 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +222 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +124 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +160 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +118 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +132 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +124 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +188 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +173 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +161 -0
- package/skills/wix-headless/references/inline-recipes/setup-blog.md +175 -0
- package/skills/wix-headless/references/inline-recipes/setup-bookings.md +228 -0
- package/skills/wix-headless/references/inline-recipes/setup-cms.md +200 -0
- package/skills/wix-headless/references/inline-recipes/setup-events.md +196 -0
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +174 -0
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +176 -0
- package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +153 -0
- package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +229 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +161 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +117 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +152 -0
- package/skills/wix-headless/references/managed/AUTHENTICATION.md +57 -0
- package/skills/wix-headless/references/managed/CONNECT.md +74 -0
- package/skills/wix-headless/references/managed/CREATE.md +130 -0
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +57 -0
- package/skills/wix-headless/references/non-astro.md +59 -0
- package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +22 -0
- package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +7 -0
- package/skills/wix-headless/references/stripe/AUTHENTICATION.md +55 -0
- package/skills/wix-headless/references/stripe/DEPLOYMENT.md +63 -0
- package/skills/wix-manage/SKILL.md +24 -1
- package/skills/wix-manage/references/analytics/query-site-analytics.md +241 -0
- package/skills/wix-manage/references/bookings/create-and-update-booking-services.md +1 -1
- package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +265 -0
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +436 -0
- package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +209 -0
- package/skills/wix-manage/references/rich-content/author-ricos-rich-content.md +249 -0
- package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +51 -0
- package/skills/wix-vibe-headless/SKILL.md +136 -0
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +128 -0
- package/skills/wix-vibe-headless/references/blog/wix-blog.js +217 -0
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +153 -0
- package/skills/wix-vibe-headless/references/bookings/wix-bookings-checkout.js +147 -0
- package/skills/wix-vibe-headless/references/bookings/wix-bookings-services.js +215 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +154 -0
- package/skills/wix-vibe-headless/references/cms/wix-cms.js +186 -0
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +142 -0
- package/skills/wix-vibe-headless/references/events/wix-events-browse.js +135 -0
- package/skills/wix-vibe-headless/references/events/wix-events-registration.js +187 -0
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +211 -0
- package/skills/wix-vibe-headless/references/members/wix-members-auth.js +387 -0
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +111 -0
- package/skills/wix-vibe-headless/references/portfolio/wix-portfolio.js +194 -0
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +127 -0
- package/skills/wix-vibe-headless/references/pricing-plans/wix-pricing-plans.js +157 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +138 -0
- package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-menu.js +224 -0
- package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-ordering.js +156 -0
- package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-reservations.js +107 -0
- package/skills/wix-vibe-headless/references/shared/wix-client.js +186 -0
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +155 -0
- package/skills/wix-vibe-headless/references/storefront/wix-store-cart.js +147 -0
- package/skills/wix-vibe-headless/references/storefront/wix-store-catalog.js +142 -0
- package/skills/wix-headless/references/BUILD-astro.md +0 -244
- package/skills/wix-headless/references/BUILD-own-build.md +0 -167
- package/skills/wix-headless/references/BUILD.md +0 -105
- package/skills/wix-headless/references/DESIGN_SYSTEM.md +0 -165
- package/skills/wix-headless/references/DISCOVERY-connect.md +0 -55
- package/skills/wix-headless/references/DISCOVERY-create.md +0 -238
- package/skills/wix-headless/references/PLAN-connect.md +0 -19
- package/skills/wix-headless/references/PLAN-create.md +0 -17
- package/skills/wix-headless/references/PLAN.md +0 -92
- package/skills/wix-headless/references/astro/blog/BLOG_PAGES.md +0 -300
- package/skills/wix-headless/references/astro/blog/BLOG_SETUP.md +0 -218
- package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +0 -45
- package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +0 -77
- package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +0 -214
- package/skills/wix-headless/references/astro/cms/FAQ_KNOWLEDGE_BASE.md +0 -231
- package/skills/wix-headless/references/astro/cms/PORTFOLIO.md +0 -453
- package/skills/wix-headless/references/astro/cms/RESOURCE_LIBRARY.md +0 -354
- package/skills/wix-headless/references/astro/cms/TEAM_DIRECTORY.md +0 -299
- package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +0 -351
- package/skills/wix-headless/references/astro/ecom/CART_PAGES.md +0 -119
- package/skills/wix-headless/references/astro/ecom/CART_WIRING.md +0 -103
- package/skills/wix-headless/references/astro/ecom/COMPONENTS_CSS.md +0 -132
- package/skills/wix-headless/references/astro/forms/CONTACT_FORM.md +0 -463
- package/skills/wix-headless/references/astro/gift-cards/COMPONENTS.md +0 -119
- package/skills/wix-headless/references/astro/gift-cards/PAGES.md +0 -129
- package/skills/wix-headless/references/astro/stores/BACK_IN_STOCK.md +0 -178
- package/skills/wix-headless/references/astro/stores/CATEGORY_PAGES.md +0 -85
- package/skills/wix-headless/references/astro/stores/COMPONENTS_CSS.md +0 -129
- package/skills/wix-headless/references/astro/stores/HOME_AND_NAV.md +0 -229
- package/skills/wix-headless/references/astro/stores/PRODUCT_PAGES.md +0 -215
- package/skills/wix-headless/references/astro/stores/SHARED_WIRING.md +0 -165
- package/skills/wix-headless/references/astro/templates/Footer.astro +0 -27
- package/skills/wix-headless/references/astro/templates/Layout.astro +0 -132
- package/skills/wix-headless/references/astro/templates/Navigation.astro +0 -38
- package/skills/wix-headless/references/astro/templates/astro.config.mjs +0 -41
- package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +0 -374
- package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +0 -136
- package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +0 -25
- package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +0 -71
- package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +0 -54
- package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +0 -49
- package/skills/wix-headless/references/astro/templates/bookings/bookingDriver.ts +0 -245
- package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +0 -424
- package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +0 -176
- package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +0 -181
- package/skills/wix-headless/references/astro/templates/ecom/CartBadge.tsx +0 -84
- package/skills/wix-headless/references/astro/templates/ecom/CartView.tsx +0 -543
- package/skills/wix-headless/references/astro/templates/ecom/cart.astro +0 -13
- package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +0 -302
- package/skills/wix-headless/references/astro/templates/ecom/discounts.ts +0 -71
- package/skills/wix-headless/references/astro/templates/ecom/thank-you.astro +0 -24
- package/skills/wix-headless/references/astro/templates/gift-cards/GiftCardPurchase.tsx +0 -172
- package/skills/wix-headless/references/astro/templates/gift-cards/_home-teaser-snippet.astro +0 -42
- package/skills/wix-headless/references/astro/templates/gift-cards/_nav-snippet.astro +0 -11
- package/skills/wix-headless/references/astro/templates/gift-cards/components-gift-cards.css +0 -220
- package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.astro +0 -51
- package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.ts +0 -75
- package/skills/wix-headless/references/astro/templates/global.css +0 -288
- package/skills/wix-headless/references/astro/templates/index.astro +0 -56
- package/skills/wix-headless/references/astro/templates/stores/AddToCartButton.tsx +0 -77
- package/skills/wix-headless/references/astro/templates/stores/BackInStockForm.tsx +0 -176
- package/skills/wix-headless/references/astro/templates/stores/CategoryRail.astro +0 -69
- package/skills/wix-headless/references/astro/templates/stores/ProductCard.astro +0 -79
- package/skills/wix-headless/references/astro/templates/stores/ProductPurchase.tsx +0 -397
- package/skills/wix-headless/references/astro/templates/stores/SeoTags.astro +0 -21
- package/skills/wix-headless/references/astro/templates/stores/back-in-stock.ts +0 -67
- package/skills/wix-headless/references/astro/templates/stores/categories.ts +0 -155
- package/skills/wix-headless/references/astro/templates/stores/category/[slug].astro +0 -130
- package/skills/wix-headless/references/astro/templates/stores/components-stores.css +0 -400
- package/skills/wix-headless/references/astro/templates/stores/products/[slug].astro +0 -128
- package/skills/wix-headless/references/astro/templates/stores/products/index.astro +0 -101
- package/skills/wix-headless/references/blog/BLOG_CONTENT.md +0 -161
- package/skills/wix-headless/references/blog/INSTRUCTIONS.md +0 -32
- package/skills/wix-headless/references/bookings/FLOW.md +0 -246
- package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +0 -95
- package/skills/wix-headless/references/bookings/SERVICES_DATA.md +0 -355
- package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +0 -176
- package/skills/wix-headless/references/cms/INSTRUCTIONS.md +0 -71
- package/skills/wix-headless/references/commands/known-apps.json +0 -6
- package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +0 -142
- package/skills/wix-headless/references/custom/INSTRUCTIONS.md +0 -88
- package/skills/wix-headless/references/custom/blog/WIRING.md +0 -52
- package/skills/wix-headless/references/custom/bookings/WIRING.md +0 -197
- package/skills/wix-headless/references/custom/cms/WIRING.md +0 -97
- package/skills/wix-headless/references/custom/ecom/WIRING.md +0 -67
- package/skills/wix-headless/references/custom/forms/WIRING.md +0 -101
- package/skills/wix-headless/references/custom/stores/WIRING.md +0 -80
- package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +0 -59
- package/skills/wix-headless/references/forms/INSTRUCTIONS.md +0 -43
- package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +0 -51
- package/skills/wix-headless/references/images/INSTRUCTIONS.md +0 -357
- package/skills/wix-headless/references/seed-recipes.md +0 -49
- package/skills/wix-headless/references/shared/AGENTS_MD.md +0 -47
- package/skills/wix-headless/references/shared/AUTHENTICATION.md +0 -108
- package/skills/wix-headless/references/shared/BUILD_NOISE.md +0 -8
- package/skills/wix-headless/references/shared/DESIGN_MD.md +0 -84
- package/skills/wix-headless/references/shared/DOCS_SEARCH.md +0 -41
- package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +0 -186
- package/skills/wix-headless/references/shared/IMPLEMENTER.md +0 -206
- package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +0 -97
- package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +0 -143
- package/skills/wix-headless/references/shared/STYLING.md +0 -141
- package/skills/wix-headless/references/stores/INSTRUCTIONS.md +0 -126
- package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +0 -252
- package/skills/wix-headless/references/verticals/_schema.json +0 -74
- package/skills/wix-headless/references/verticals/_schema.md +0 -95
- package/skills/wix-headless/references/verticals/blog.md +0 -31
- package/skills/wix-headless/references/verticals/bookings.md +0 -41
- package/skills/wix-headless/references/verticals/cms.md +0 -30
- package/skills/wix-headless/references/verticals/ecom.md +0 -25
- package/skills/wix-headless/references/verticals/forms.md +0 -26
- package/skills/wix-headless/references/verticals/gift-cards.md +0 -24
- package/skills/wix-headless/references/verticals/stores.md +0 -33
- package/skills/wix-headless/scripts/check-manifest.mjs +0 -335
- package/skills/wix-headless/scripts/compose.mjs +0 -525
- package/skills/wix-headless/scripts/emit-design-tokens.mjs +0 -157
- package/skills/wix-headless/scripts/flatten.sh +0 -61
- package/skills/wix-headless/scripts/generate-images.mjs +0 -242
- package/skills/wix-headless/scripts/patch-decorative-slots.mjs +0 -148
- package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +0 -190
- package/skills/wix-headless/scripts/scaffold.sh +0 -139
- package/skills/wix-headless/scripts/seed-utilities.sh +0 -93
- package/skills/wix-headless/scripts/write-decorative-json.mjs +0 -62
- package/skills/wix-headless/shared-utilities/analytics.ts +0 -40
- package/skills/wix-headless/shared-utilities/ricos.ts +0 -179
- package/skills/wix-headless/shared-utilities/wix-image.ts +0 -72
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
{
|
|
2
|
+
"pages": [
|
|
3
|
+
{
|
|
4
|
+
"id": "additional-fees-collection",
|
|
5
|
+
"type": "collectionPage",
|
|
6
|
+
"appMainPage": true,
|
|
7
|
+
"collectionPage": {
|
|
8
|
+
"route": {
|
|
9
|
+
"path": "/"
|
|
10
|
+
},
|
|
11
|
+
"title": {
|
|
12
|
+
"text": "Additional Fees Configuration",
|
|
13
|
+
"hideTotal": false
|
|
14
|
+
},
|
|
15
|
+
"subtitle": {
|
|
16
|
+
"text": "Manage and configure additional fees for checkout"
|
|
17
|
+
},
|
|
18
|
+
"actions": {
|
|
19
|
+
"primaryActions": {
|
|
20
|
+
"type": "action",
|
|
21
|
+
"action": {
|
|
22
|
+
"item": {
|
|
23
|
+
"id": "create-additional-fees",
|
|
24
|
+
"type": "create",
|
|
25
|
+
"label": "Add New Fee",
|
|
26
|
+
"collection": {
|
|
27
|
+
"collectionId": "@mirivo/mirivo-private-app-for-test2011/additional-fees",
|
|
28
|
+
"entityTypeSource": "cms"
|
|
29
|
+
},
|
|
30
|
+
"create": {
|
|
31
|
+
"mode": "page",
|
|
32
|
+
"page": {
|
|
33
|
+
"id": "additional-fees-entity"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"components": [
|
|
41
|
+
{
|
|
42
|
+
"type": "collection",
|
|
43
|
+
"layout": [
|
|
44
|
+
{
|
|
45
|
+
"type": "Table",
|
|
46
|
+
"table": {
|
|
47
|
+
"columns": [
|
|
48
|
+
{
|
|
49
|
+
"id": "feeTitle",
|
|
50
|
+
"name": "Title",
|
|
51
|
+
"width": "200px",
|
|
52
|
+
"sortable": true
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "feeAmount",
|
|
56
|
+
"name": "Amount",
|
|
57
|
+
"width": "100px",
|
|
58
|
+
"sortable": true
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "feeType",
|
|
62
|
+
"name": "Type",
|
|
63
|
+
"width": "200px",
|
|
64
|
+
"sortable": true
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "isActive",
|
|
68
|
+
"name": "Active",
|
|
69
|
+
"width": "100px",
|
|
70
|
+
"sortable": true
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"customColumns": {
|
|
74
|
+
"enabled": true
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"entityPageId": "additional-fees-entity",
|
|
80
|
+
"collection": {
|
|
81
|
+
"collectionId": "@mirivo/mirivo-private-app-for-test2011/additional-fees",
|
|
82
|
+
"entityTypeSource": "cms"
|
|
83
|
+
},
|
|
84
|
+
"toolbarTitle": {
|
|
85
|
+
"title": "Additional Fees",
|
|
86
|
+
"subtitle": {
|
|
87
|
+
"text": "Configure fees applied during checkout process"
|
|
88
|
+
},
|
|
89
|
+
"showTotal": true
|
|
90
|
+
},
|
|
91
|
+
"filters": {
|
|
92
|
+
"items": [
|
|
93
|
+
{
|
|
94
|
+
"id": "feeAmount-filter",
|
|
95
|
+
"fieldId": "feeAmount",
|
|
96
|
+
"displayName": "Fee Amount",
|
|
97
|
+
"tagLabel": "Fee Amount",
|
|
98
|
+
"numberConfig": {
|
|
99
|
+
"allowedDecimals": true
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "isActive-filter",
|
|
104
|
+
"fieldId": "isActive",
|
|
105
|
+
"displayName": "Is Active",
|
|
106
|
+
"tagLabel": "Is Active"
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
"emptyState": {
|
|
111
|
+
"title": "No Additional Fees Configured",
|
|
112
|
+
"subtitle": "Start by adding your first additional fee for checkout",
|
|
113
|
+
"addNewCta": {
|
|
114
|
+
"id": "create-additional-fees",
|
|
115
|
+
"text": "Create First Fee"
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"actionCell": {
|
|
119
|
+
"primaryAction": {
|
|
120
|
+
"item": {
|
|
121
|
+
"id": "edit-additional-fees",
|
|
122
|
+
"type": "update",
|
|
123
|
+
"update": {
|
|
124
|
+
"mode": "page",
|
|
125
|
+
"page": {
|
|
126
|
+
"id": "additional-fees-entity"
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"secondaryActions": {
|
|
132
|
+
"items": [
|
|
133
|
+
{
|
|
134
|
+
"id": "delete-additional-fees",
|
|
135
|
+
"type": "delete",
|
|
136
|
+
"label": "Delete",
|
|
137
|
+
"delete": {
|
|
138
|
+
"mode": "modal",
|
|
139
|
+
"modal": {
|
|
140
|
+
"title": {
|
|
141
|
+
"text": "Remove Additional Fee"
|
|
142
|
+
},
|
|
143
|
+
"description": {
|
|
144
|
+
"text": "Are you sure you want to delete this additional fee? This will remove it from future checkouts."
|
|
145
|
+
},
|
|
146
|
+
"feedback": {
|
|
147
|
+
"successToast": {
|
|
148
|
+
"text": "Additional fee deleted successfully"
|
|
149
|
+
},
|
|
150
|
+
"errorToast": {
|
|
151
|
+
"text": "Failed to delete additional fee"
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"bulkActionToolbar": {
|
|
161
|
+
"primaryActions": [
|
|
162
|
+
{
|
|
163
|
+
"type": "action",
|
|
164
|
+
"action": {
|
|
165
|
+
"item": {
|
|
166
|
+
"id": "bulk-delete-additional-fees",
|
|
167
|
+
"type": "bulkDelete",
|
|
168
|
+
"bulkDelete": {
|
|
169
|
+
"mode": "modal",
|
|
170
|
+
"modal": {
|
|
171
|
+
"title": {
|
|
172
|
+
"text": "Remove Multiple Fees"
|
|
173
|
+
},
|
|
174
|
+
"description": {
|
|
175
|
+
"text": "Are you sure you want to delete the selected additional fees? This will remove them from future checkouts."
|
|
176
|
+
},
|
|
177
|
+
"feedback": {
|
|
178
|
+
"successToast": {
|
|
179
|
+
"text": "Selected additional fees deleted successfully"
|
|
180
|
+
},
|
|
181
|
+
"errorToast": {
|
|
182
|
+
"text": "Failed to delete selected additional fees"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"id": "additional-fees-entity",
|
|
198
|
+
"type": "entityPage",
|
|
199
|
+
"entityPage": {
|
|
200
|
+
"route": {
|
|
201
|
+
"path": "/additional-fee/:entityId",
|
|
202
|
+
"params": {
|
|
203
|
+
"id": "entityId"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"title": {
|
|
207
|
+
"text": "Fee Details"
|
|
208
|
+
},
|
|
209
|
+
"subtitle": {
|
|
210
|
+
"text": "View and edit additional fee configuration"
|
|
211
|
+
},
|
|
212
|
+
"parentPageId": "additional-fees-collection",
|
|
213
|
+
"layout": {
|
|
214
|
+
"main": [
|
|
215
|
+
{
|
|
216
|
+
"type": "card",
|
|
217
|
+
"card": {
|
|
218
|
+
"title": {
|
|
219
|
+
"text": "Fee Information"
|
|
220
|
+
},
|
|
221
|
+
"subtitle": {
|
|
222
|
+
"text": "Basic details for the additional fee"
|
|
223
|
+
},
|
|
224
|
+
"children": [
|
|
225
|
+
{
|
|
226
|
+
"type": "field",
|
|
227
|
+
"field": {
|
|
228
|
+
"span": 12,
|
|
229
|
+
"fieldId": "feeTitle"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"type": "field",
|
|
234
|
+
"field": {
|
|
235
|
+
"span": 12,
|
|
236
|
+
"fieldId": "feeAmount"
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"type": "field",
|
|
241
|
+
"field": {
|
|
242
|
+
"span": 12,
|
|
243
|
+
"fieldId": "feeType"
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
]
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
],
|
|
250
|
+
"sidebar": [
|
|
251
|
+
{
|
|
252
|
+
"type": "card",
|
|
253
|
+
"card": {
|
|
254
|
+
"title": {
|
|
255
|
+
"text": "Fee Status"
|
|
256
|
+
},
|
|
257
|
+
"subtitle": {
|
|
258
|
+
"text": "Activation and usage settings"
|
|
259
|
+
},
|
|
260
|
+
"children": [
|
|
261
|
+
{
|
|
262
|
+
"type": "field",
|
|
263
|
+
"field": {
|
|
264
|
+
"span": 12,
|
|
265
|
+
"fieldId": "isActive"
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
]
|
|
272
|
+
},
|
|
273
|
+
"collectionId": "@mirivo/mirivo-private-app-for-test2011/additional-fees",
|
|
274
|
+
"entityTypeSource": "cms"
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Pages Configuration Rules
|
|
2
|
+
|
|
3
|
+
## Type Definitions
|
|
4
|
+
```typescript
|
|
5
|
+
interface PageConfig {
|
|
6
|
+
id: string; // Unique ID
|
|
7
|
+
type: 'collectionPage' | 'entityPage';
|
|
8
|
+
appMainPage?: boolean; // EXACTLY ONE page must have true
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface CollectionPage extends PageConfig {
|
|
12
|
+
type: 'collectionPage';
|
|
13
|
+
collectionPage: {
|
|
14
|
+
route: { path: '/' };
|
|
15
|
+
components: [{
|
|
16
|
+
entityPageId: string; // REQUIRED: Links to entity page ID
|
|
17
|
+
// ... component config
|
|
18
|
+
}];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface EntityPage extends PageConfig {
|
|
23
|
+
type: 'entityPage';
|
|
24
|
+
entityPage: {
|
|
25
|
+
parentPageId: string; // REQUIRED: Links to collection page ID
|
|
26
|
+
route: {
|
|
27
|
+
path: string; // MUST be '/[segment]/:entityId'
|
|
28
|
+
params: { id: 'entityId' };
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface StickyConfig {
|
|
34
|
+
stickyColumns?: number; // Count of columns to stick from left
|
|
35
|
+
columns: Array<{
|
|
36
|
+
reorderDisabled?: boolean; // Recommended for sticky cols
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Validation Logic
|
|
42
|
+
- **IF** `pages` array length != 2 **THEN** Invalid (Must be exactly 2).
|
|
43
|
+
- **IF** `appMainPage: true` count != 1 **THEN** Invalid (Must be exactly 1).
|
|
44
|
+
- **IF** `type: 'entityPage'` **THEN** `route.path` MUST match `/[segment]/:entityId`.
|
|
45
|
+
- **IF** `route.path` is `/:entityId` **THEN** Invalid (Conflict with root).
|
|
46
|
+
- **IF** `stickyColumns` is set **THEN** value must be > 0 AND <= total columns.
|
|
47
|
+
|
|
48
|
+
## Implementation Rules
|
|
49
|
+
- **MUST** generate exactly one `collectionPage` and one `entityPage`.
|
|
50
|
+
- **MUST** link pages bidirectionally:
|
|
51
|
+
- `collectionPage` references `entityPageId` (in component).
|
|
52
|
+
- `entityPage` references `parentPageId` (in page config).
|
|
53
|
+
- **MUST** use `entityId` as the dynamic parameter name.
|
|
54
|
+
- **MUST** use position-based stickiness (first N columns).
|
|
55
|
+
- **SHOULD** set `reorderDisabled: true` for sticky columns to prevent user breakage.
|
|
56
|
+
|
|
57
|
+
## Canonical Example
|
|
58
|
+
```typescript
|
|
59
|
+
[
|
|
60
|
+
{
|
|
61
|
+
id: 'product-list',
|
|
62
|
+
type: 'collectionPage',
|
|
63
|
+
appMainPage: true,
|
|
64
|
+
collectionPage: {
|
|
65
|
+
route: { path: '/' },
|
|
66
|
+
components: [{
|
|
67
|
+
type: 'collection',
|
|
68
|
+
entityPageId: 'product-details', // Link to Entity Page
|
|
69
|
+
layout: [{
|
|
70
|
+
type: 'Table',
|
|
71
|
+
table: {
|
|
72
|
+
stickyColumns: 1,
|
|
73
|
+
columns: [
|
|
74
|
+
{ id: 'name', name: 'Name', reorderDisabled: true }, // Sticky & Locked
|
|
75
|
+
{ id: 'price', name: 'Price' }
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
}]
|
|
79
|
+
}]
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'product-details',
|
|
84
|
+
type: 'entityPage',
|
|
85
|
+
entityPage: {
|
|
86
|
+
parentPageId: 'product-list', // Link to Collection Page
|
|
87
|
+
route: {
|
|
88
|
+
path: '/product/:entityId', // Correct format
|
|
89
|
+
params: { id: 'entityId' }
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ResolvedAction Rules
|
|
2
|
+
|
|
3
|
+
## Type Definitions
|
|
4
|
+
```typescript
|
|
5
|
+
interface ResolvedAction {
|
|
6
|
+
label: string; // Display text
|
|
7
|
+
icon: IconElement; // React Icon Component
|
|
8
|
+
onClick: () => void; // async handlers compile due to TS void-return bivariance
|
|
9
|
+
biName?: string; // type-optional; project convention is to ALWAYS set it (see Implementation Rules)
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
hidden?: boolean;
|
|
12
|
+
tooltip?: string;
|
|
13
|
+
skin?: string; // recommended values: 'standard' | 'inverted' | 'premium' | 'dark' | 'destructive'
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Validation Logic
|
|
18
|
+
- **IF** `disabled` is true **THEN** `tooltip` is **RECOMMENDED**.
|
|
19
|
+
- **IF** implementing a custom action **THEN** return object MUST match `ResolvedAction`.
|
|
20
|
+
- **IF** `biName` is provided **THEN** value MUST match configuration `biName`.
|
|
21
|
+
|
|
22
|
+
## Implementation Rules
|
|
23
|
+
- **MUST** include `label`, `icon`, `onClick`, and `biName`.
|
|
24
|
+
- **MUST** use valid icon element (e.g. `<Icon />`).
|
|
25
|
+
- **MUST** handle async `onClick` operations properly (use try/catch or SDK helpers).
|
|
26
|
+
- **SHOULD** use `hidden` for permission checks.
|
|
27
|
+
- **SHOULD** use `skin="destructive"` for delete/dangerous actions.
|
|
28
|
+
|
|
29
|
+
## Canonical Example
|
|
30
|
+
```typescript
|
|
31
|
+
// Resolver Function Return Value
|
|
32
|
+
return {
|
|
33
|
+
label: 'Export',
|
|
34
|
+
icon: <Download />,
|
|
35
|
+
biName: 'export-action',
|
|
36
|
+
onClick: async () => {
|
|
37
|
+
// Action logic
|
|
38
|
+
},
|
|
39
|
+
disabled: !hasData,
|
|
40
|
+
tooltip: !hasData ? 'No data to export' : undefined,
|
|
41
|
+
skin: 'standard'
|
|
42
|
+
};
|
|
43
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# SDK Utilities Rules
|
|
2
|
+
|
|
3
|
+
## Type Definitions
|
|
4
|
+
```typescript
|
|
5
|
+
interface AutoPatternsSDK {
|
|
6
|
+
closeModal: () => void;
|
|
7
|
+
getOptimisticActions: (collectionId: string) => OptimisticActions;
|
|
8
|
+
getSchema: (collectionId: string) => SchemaConfig | undefined;
|
|
9
|
+
refreshCollection: () => void;
|
|
10
|
+
collectionId: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface OptimisticActions {
|
|
14
|
+
createOne: (item: any, params: OptimisticParams) => void;
|
|
15
|
+
createMany: (items: any[], params: OptimisticParams) => void;
|
|
16
|
+
updateOne: (item: any, params: OptimisticParams) => void;
|
|
17
|
+
updateMany: (items: any[], params: OptimisticParams) => void;
|
|
18
|
+
updateAll: (transformFn: (item: any) => Partial<any>, params: OptimisticParams) => void;
|
|
19
|
+
deleteOne: (item: any, params: DeleteParams) => void;
|
|
20
|
+
deleteMany: (items: any[], params: DeleteParams) => void;
|
|
21
|
+
deleteAll: (params: DeleteParams) => void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface OptimisticParams {
|
|
25
|
+
submit: (items: any[]) => Promise<any>;
|
|
26
|
+
successToast: string | ToastConfig;
|
|
27
|
+
errorToast: (error: Error, actions: { retry: () => void }) => string | ToastConfig;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type DeleteParams = OptimisticParams & { showUndoToast: true };
|
|
31
|
+
|
|
32
|
+
interface ToastConfig {
|
|
33
|
+
message: string; // Must use 'message' (not 'text')
|
|
34
|
+
action?: { text: string; onClick: () => void };
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Validation Logic
|
|
39
|
+
- **IF** using `delete*` operations **THEN** `showUndoToast: true` is **REQUIRED**.
|
|
40
|
+
- **IF** returning `ToastConfig` **THEN** use `message` property (NOT `text`).
|
|
41
|
+
- **IF** using schema in submit **THEN** check `schema` existence first (can be undefined).
|
|
42
|
+
|
|
43
|
+
## Implementation Rules
|
|
44
|
+
- **MUST** use `optimisticActions` for data mutations (create/update/delete).
|
|
45
|
+
- **MUST** handle async submit failures in `errorToast`.
|
|
46
|
+
- **MUST** use `sdk.collectionId` for current context.
|
|
47
|
+
- **NEVER** use OptimisticActions for read-only operations.
|
|
48
|
+
|
|
49
|
+
## Canonical Example
|
|
50
|
+
```typescript
|
|
51
|
+
const optimisticActions = sdk.getOptimisticActions(sdk.collectionId);
|
|
52
|
+
const schema = sdk.getSchema(sdk.collectionId);
|
|
53
|
+
|
|
54
|
+
optimisticActions.updateOne(item, {
|
|
55
|
+
submit: async (items) => {
|
|
56
|
+
// Check schema existence
|
|
57
|
+
if (!schema) return items[0];
|
|
58
|
+
return await schema.actions.update(items[0]);
|
|
59
|
+
},
|
|
60
|
+
successToast: 'Item updated successfully',
|
|
61
|
+
errorToast: (err, { retry }) => ({
|
|
62
|
+
message: 'Update failed', // Use 'message'
|
|
63
|
+
action: { text: 'Retry', onClick: retry }
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
```
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Views Configuration Rules
|
|
2
|
+
|
|
3
|
+
## Type Definitions
|
|
4
|
+
```typescript
|
|
5
|
+
interface ViewsConfig {
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
presets?: ViewsPreset | CategoriesPreset;
|
|
8
|
+
saveViewModalProps?: { placeholderName?: string; learnMore?: { url?: string } };
|
|
9
|
+
viewsDropdownProps?: {
|
|
10
|
+
showTotal?: boolean;
|
|
11
|
+
hideAllItemsView?: boolean;
|
|
12
|
+
customAllItemsViewLabel?: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface ViewsPreset {
|
|
17
|
+
type: 'views';
|
|
18
|
+
views: PresetView[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface CategoriesPreset {
|
|
22
|
+
type: 'categories';
|
|
23
|
+
categories: {
|
|
24
|
+
id: string;
|
|
25
|
+
label: string;
|
|
26
|
+
views: PresetView[];
|
|
27
|
+
icon?: { tooltipContent: string; size?: 'small' | 'medium' };
|
|
28
|
+
}[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
interface PresetView {
|
|
32
|
+
id: string; // Forbidden: predefined-views, saved-views, all-items-view
|
|
33
|
+
label: string;
|
|
34
|
+
isDefaultView?: boolean;
|
|
35
|
+
columnPreferences?: { id: string; direction?: 'asc' | 'desc'; show?: boolean }[];
|
|
36
|
+
filters?: Record<string, AutoFilterValue>; // Key matches filter config ID
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Validation Logic
|
|
41
|
+
- **IF** `views.enabled` is false **THEN** all other settings ignored.
|
|
42
|
+
- **IF** controlling columns in views **THEN** `table.customColumns.enabled` MUST be true.
|
|
43
|
+
- **IF** setting `columnPreferences` **THEN** must list ALL visible columns if reordering/hiding.
|
|
44
|
+
- **IF** setting filters **THEN** keys MUST match defined filter IDs.
|
|
45
|
+
|
|
46
|
+
## Implementation Rules
|
|
47
|
+
- **MUST** set `enabled: true` to activate.
|
|
48
|
+
- **MUST** use valid filter structures (Date/Number/Boolean/Enum/Reference) matching `AppConfig`.
|
|
49
|
+
- **MUST** avoid reserved IDs (`predefined-views`, `saved-views`, `all-items-view`).
|
|
50
|
+
- **SHOULD** set `isDefaultView: true` on exactly one preset if default override needed.
|
|
51
|
+
|
|
52
|
+
## Canonical Example
|
|
53
|
+
```typescript
|
|
54
|
+
views: {
|
|
55
|
+
enabled: true,
|
|
56
|
+
presets: {
|
|
57
|
+
type: 'categories',
|
|
58
|
+
categories: [{
|
|
59
|
+
id: 'status-cat',
|
|
60
|
+
label: 'By Status',
|
|
61
|
+
views: [{
|
|
62
|
+
id: 'active-items',
|
|
63
|
+
label: 'Active Only',
|
|
64
|
+
isDefaultView: true,
|
|
65
|
+
filters: {
|
|
66
|
+
'status-filter': { filterType: 'boolean', value: [{ id: 'checked', name: 'Active' }] }
|
|
67
|
+
},
|
|
68
|
+
columnPreferences: [
|
|
69
|
+
{ id: 'name', show: true },
|
|
70
|
+
{ id: 'status', show: true, direction: 'asc' }
|
|
71
|
+
]
|
|
72
|
+
}]
|
|
73
|
+
}]
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
@@ -13,20 +13,6 @@ Rules and patterns for ARIA accessibility support in Editor React components.
|
|
|
13
13
|
- The `A11y` type includes: `ariaLabel`, `ariaDescribedBy`, `ariaLabelledBy`, `role`, `ariaHidden`, `ariaLive`, and all other ARIA attributes.
|
|
14
14
|
- Users provide ARIA values through the `a11y` prop: `<Component a11y={{ ariaLabel: "..." }} />`
|
|
15
15
|
|
|
16
|
-
### Stable IDs for Element Relationships
|
|
17
|
-
|
|
18
|
-
ARIA relationships (`aria-controls`, `aria-labelledby`, `aria-describedby`) and `htmlFor` need element ids. Generate them with `useStableId` from `@wix/react-component-utils` — passing the `id` prop as the override — never `Math.random()`, a manual counter, or a bare `React.useId()` (those break SSR/hydration). See [`SSR.md`](SSR.md) for the full rule.
|
|
19
|
-
|
|
20
|
-
```tsx
|
|
21
|
-
import { useStableId } from '@wix/react-component-utils';
|
|
22
|
-
|
|
23
|
-
const rootId = useStableId(id);
|
|
24
|
-
const panelId = `${rootId}-panel`;
|
|
25
|
-
|
|
26
|
-
<button aria-controls={panelId}>{label}</button>
|
|
27
|
-
<div id={panelId} role="tabpanel">{content}</div>
|
|
28
|
-
```
|
|
29
|
-
|
|
30
16
|
### ARIA Label Rules
|
|
31
17
|
|
|
32
18
|
ARIA labels are user-facing content and must NEVER be hardcoded as string literals in JSX.
|
|
@@ -150,3 +136,4 @@ export interface TabsProps {
|
|
|
150
136
|
```
|
|
151
137
|
|
|
152
138
|
**Why:** The `A11y` type from `@wix/editor-react-types` provides a standardized way to handle ALL ARIA attributes (ariaLabel, ariaDescribedBy, ariaLabelledBy, role, ariaHidden, ariaLive, etc.). Individual ARIA props fragment the API and make it harder to use.
|
|
139
|
+
|