@wix/agent-skills 1.14.0 → 1.15.1

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.
Files changed (268) hide show
  1. package/README.md +12 -1
  2. package/package.json +1 -1
  3. package/skills/README.md +23 -0
  4. package/skills/wix-app/SKILL.md +10 -2
  5. package/skills/wix-app/references/AUTO_PATTERNS_DASHBOARD.md +326 -0
  6. package/skills/wix-app/references/CODE_QUALITY.md +1 -0
  7. package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +124 -115
  8. package/skills/wix-app/references/DASHBOARD_PAGE.md +3 -0
  9. package/skills/wix-app/references/DATA_COLLECTION.md +5 -3
  10. package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +25 -9
  11. package/skills/wix-app/references/SITE_PLUGIN.md +1 -1
  12. package/skills/wix-app/references/STORES_VERSIONING.md +9 -211
  13. package/skills/wix-app/references/auto-patterns-dashboard/action-cell.md +115 -0
  14. package/skills/wix-app/references/auto-patterns-dashboard/app-config-structure.md +264 -0
  15. package/skills/wix-app/references/auto-patterns-dashboard/app-context.md +37 -0
  16. package/skills/wix-app/references/auto-patterns-dashboard/bulk-actions.md +86 -0
  17. package/skills/wix-app/references/auto-patterns-dashboard/collection-page-actions.md +119 -0
  18. package/skills/wix-app/references/auto-patterns-dashboard/collection-page.md +103 -0
  19. package/skills/wix-app/references/auto-patterns-dashboard/custom-actions-override.md +76 -0
  20. package/skills/wix-app/references/auto-patterns-dashboard/custom-columns-override.md +82 -0
  21. package/skills/wix-app/references/auto-patterns-dashboard/custom-components-override.md +89 -0
  22. package/skills/wix-app/references/auto-patterns-dashboard/custom-header-override.md +124 -0
  23. package/skills/wix-app/references/auto-patterns-dashboard/custom-sections-override.md +91 -0
  24. package/skills/wix-app/references/auto-patterns-dashboard/custom-slots-override.md +71 -0
  25. package/skills/wix-app/references/auto-patterns-dashboard/entity-page-actions.md +70 -0
  26. package/skills/wix-app/references/auto-patterns-dashboard/entity-page-view-actions.md +73 -0
  27. package/skills/wix-app/references/auto-patterns-dashboard/entity-page.md +98 -0
  28. package/skills/wix-app/references/auto-patterns-dashboard/example-patterns.json +278 -0
  29. package/skills/wix-app/references/auto-patterns-dashboard/pages-configuration.md +94 -0
  30. package/skills/wix-app/references/auto-patterns-dashboard/resolved-action.md +43 -0
  31. package/skills/wix-app/references/auto-patterns-dashboard/sdk-utilities.md +66 -0
  32. package/skills/wix-app/references/auto-patterns-dashboard/views.md +76 -0
  33. package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +5 -0
  34. package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +1 -14
  35. package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +151 -0
  36. package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +54 -29
  37. package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +2 -2
  38. package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +57 -0
  39. package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +23 -105
  40. package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +127 -0
  41. package/skills/wix-app/references/editor-react-component/PARTS.md +2 -1
  42. package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +18 -16
  43. package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +25 -53
  44. package/skills/wix-app/references/stores/CATEGORIES.md +22 -0
  45. package/skills/wix-app/references/stores/GET_PRODUCT.md +99 -0
  46. package/skills/wix-app/references/stores/INVENTORY.md +37 -0
  47. package/skills/wix-app/references/stores/QUERY.md +87 -0
  48. package/skills/wix-app/references/stores/WRITE.md +55 -0
  49. package/skills/wix-app/scripts/generate-auto-patterns.js +510 -0
  50. package/skills/wix-auth/SKILL.md +12 -0
  51. package/skills/wix-auth/references/device-flow.md +140 -0
  52. package/skills/wix-docs/SKILL.md +188 -0
  53. package/skills/wix-docs/references/API_SPEC_SEARCH.md +213 -0
  54. package/skills/wix-docs/references/EXTRACTING.md +120 -0
  55. package/skills/wix-headless/SKILL.md +89 -130
  56. package/skills/wix-headless/entry/bootstrap.mjs +93 -0
  57. package/skills/wix-headless/entry/skill.md +76 -0
  58. package/skills/wix-headless/references/AI_FEATURES.md +178 -0
  59. package/skills/wix-headless/references/CAPABILITIES.md +86 -0
  60. package/skills/wix-headless/references/DISCOVERY.md +34 -56
  61. package/skills/wix-headless/references/DOC_DISCOVERY.md +37 -0
  62. package/skills/wix-headless/references/FEEDBACK.md +129 -0
  63. package/skills/wix-headless/references/IMAGE_GENERATION.md +69 -0
  64. package/skills/wix-headless/references/SDK_HANDOFF.md +99 -0
  65. package/skills/wix-headless/references/SEED.md +45 -187
  66. package/skills/wix-headless/references/SETUP.md +32 -103
  67. package/skills/wix-headless/references/astro.md +98 -0
  68. package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +196 -0
  69. package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +236 -0
  70. package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +279 -0
  71. package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +163 -0
  72. package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +203 -0
  73. package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +222 -0
  74. package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +124 -0
  75. package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +160 -0
  76. package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +118 -0
  77. package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +132 -0
  78. package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +124 -0
  79. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +188 -0
  80. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +213 -0
  81. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +161 -0
  82. package/skills/wix-headless/references/inline-recipes/setup-blog.md +175 -0
  83. package/skills/wix-headless/references/inline-recipes/setup-bookings.md +232 -0
  84. package/skills/wix-headless/references/inline-recipes/setup-cms.md +200 -0
  85. package/skills/wix-headless/references/inline-recipes/setup-events.md +196 -0
  86. package/skills/wix-headless/references/inline-recipes/setup-forms.md +174 -0
  87. package/skills/wix-headless/references/inline-recipes/setup-online-store.md +192 -0
  88. package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +155 -0
  89. package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +229 -0
  90. package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +73 -0
  91. package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +197 -0
  92. package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +136 -0
  93. package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +152 -0
  94. package/skills/wix-headless/references/managed/AUTHENTICATION.md +57 -0
  95. package/skills/wix-headless/references/managed/CONNECT.md +74 -0
  96. package/skills/wix-headless/references/managed/CREATE.md +130 -0
  97. package/skills/wix-headless/references/managed/DEPLOYMENT.md +79 -0
  98. package/skills/wix-headless/references/non-astro.md +59 -0
  99. package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +22 -0
  100. package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +15 -0
  101. package/skills/wix-headless/references/stripe/AUTHENTICATION.md +55 -0
  102. package/skills/wix-headless/references/stripe/DEPLOYMENT.md +71 -0
  103. package/skills/wix-manage/SKILL.md +29 -3
  104. package/skills/wix-manage/references/analytics/query-site-analytics.md +298 -0
  105. package/skills/wix-manage/references/app-installation/install-wix-apps.md +3 -0
  106. package/skills/wix-manage/references/bookings/create-and-update-booking-services.md +1 -1
  107. package/skills/wix-manage/references/bookings/create-booking-service-from-prompt.md +6 -5
  108. package/skills/wix-manage/references/bookings/create-course-service.md +30 -5
  109. package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +299 -0
  110. package/skills/wix-manage/references/cms/cms-schema-management.md +6 -0
  111. package/skills/wix-manage/references/get-paid/how-to-setup-wix-payments.md +30 -7
  112. package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +517 -0
  113. package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +218 -0
  114. package/skills/wix-manage/references/rich-content/author-ricos-rich-content.md +249 -0
  115. package/skills/wix-manage/references/sites/site-import.md +270 -0
  116. package/skills/wix-manage/references/stores/create-product-from-image.md +8 -6
  117. package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +57 -0
  118. package/skills/wix-vibe-headless/SKILL.md +142 -0
  119. package/skills/wix-vibe-headless/platforms/README.md +22 -0
  120. package/skills/wix-vibe-headless/platforms/base44.md +142 -0
  121. package/skills/wix-vibe-headless/platforms/generic.md +87 -0
  122. package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +128 -0
  123. package/skills/wix-vibe-headless/references/blog/wix-blog.js +217 -0
  124. package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +157 -0
  125. package/skills/wix-vibe-headless/references/bookings/wix-bookings-checkout.js +147 -0
  126. package/skills/wix-vibe-headless/references/bookings/wix-bookings-services.js +217 -0
  127. package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +154 -0
  128. package/skills/wix-vibe-headless/references/cms/wix-cms.js +186 -0
  129. package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +142 -0
  130. package/skills/wix-vibe-headless/references/events/wix-events-browse.js +136 -0
  131. package/skills/wix-vibe-headless/references/events/wix-events-registration.js +187 -0
  132. package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +211 -0
  133. package/skills/wix-vibe-headless/references/members/wix-members-auth.js +387 -0
  134. package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +111 -0
  135. package/skills/wix-vibe-headless/references/portfolio/wix-portfolio.js +223 -0
  136. package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +127 -0
  137. package/skills/wix-vibe-headless/references/pricing-plans/wix-pricing-plans.js +157 -0
  138. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +138 -0
  139. package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-menu.js +224 -0
  140. package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-ordering.js +156 -0
  141. package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-reservations.js +107 -0
  142. package/skills/wix-vibe-headless/references/shared/wix-client.js +186 -0
  143. package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +164 -0
  144. package/skills/wix-vibe-headless/references/storefront/wix-store-cart.js +147 -0
  145. package/skills/wix-vibe-headless/references/storefront/wix-store-catalog.js +146 -0
  146. package/skills/wix-headless/references/BUILD-astro.md +0 -253
  147. package/skills/wix-headless/references/BUILD-own-build.md +0 -167
  148. package/skills/wix-headless/references/BUILD.md +0 -105
  149. package/skills/wix-headless/references/DESIGN_SYSTEM.md +0 -165
  150. package/skills/wix-headless/references/DISCOVERY-connect.md +0 -55
  151. package/skills/wix-headless/references/DISCOVERY-create.md +0 -238
  152. package/skills/wix-headless/references/PLAN-connect.md +0 -19
  153. package/skills/wix-headless/references/PLAN-create.md +0 -17
  154. package/skills/wix-headless/references/PLAN.md +0 -92
  155. package/skills/wix-headless/references/astro/blog/BLOG_PAGES.md +0 -300
  156. package/skills/wix-headless/references/astro/blog/BLOG_SETUP.md +0 -218
  157. package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +0 -45
  158. package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +0 -77
  159. package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +0 -214
  160. package/skills/wix-headless/references/astro/cms/FAQ_KNOWLEDGE_BASE.md +0 -231
  161. package/skills/wix-headless/references/astro/cms/PORTFOLIO.md +0 -453
  162. package/skills/wix-headless/references/astro/cms/RESOURCE_LIBRARY.md +0 -354
  163. package/skills/wix-headless/references/astro/cms/TEAM_DIRECTORY.md +0 -299
  164. package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +0 -351
  165. package/skills/wix-headless/references/astro/ecom/CART_PAGES.md +0 -119
  166. package/skills/wix-headless/references/astro/ecom/CART_WIRING.md +0 -103
  167. package/skills/wix-headless/references/astro/ecom/COMPONENTS_CSS.md +0 -132
  168. package/skills/wix-headless/references/astro/forms/CONTACT_FORM.md +0 -463
  169. package/skills/wix-headless/references/astro/gift-cards/COMPONENTS.md +0 -119
  170. package/skills/wix-headless/references/astro/gift-cards/PAGES.md +0 -129
  171. package/skills/wix-headless/references/astro/stores/BACK_IN_STOCK.md +0 -178
  172. package/skills/wix-headless/references/astro/stores/CATEGORY_PAGES.md +0 -85
  173. package/skills/wix-headless/references/astro/stores/COMPONENTS_CSS.md +0 -129
  174. package/skills/wix-headless/references/astro/stores/HOME_AND_NAV.md +0 -229
  175. package/skills/wix-headless/references/astro/stores/PRODUCT_PAGES.md +0 -215
  176. package/skills/wix-headless/references/astro/stores/SHARED_WIRING.md +0 -165
  177. package/skills/wix-headless/references/astro/templates/Layout.astro +0 -132
  178. package/skills/wix-headless/references/astro/templates/astro.config.mjs +0 -41
  179. package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +0 -374
  180. package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +0 -136
  181. package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +0 -25
  182. package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +0 -71
  183. package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +0 -54
  184. package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +0 -49
  185. package/skills/wix-headless/references/astro/templates/bookings/bookingDriver.ts +0 -245
  186. package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +0 -424
  187. package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +0 -176
  188. package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +0 -181
  189. package/skills/wix-headless/references/astro/templates/ecom/CartBadge.tsx +0 -84
  190. package/skills/wix-headless/references/astro/templates/ecom/CartView.tsx +0 -543
  191. package/skills/wix-headless/references/astro/templates/ecom/cart.astro +0 -13
  192. package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +0 -302
  193. package/skills/wix-headless/references/astro/templates/ecom/discounts.ts +0 -71
  194. package/skills/wix-headless/references/astro/templates/ecom/thank-you.astro +0 -24
  195. package/skills/wix-headless/references/astro/templates/gift-cards/GiftCardPurchase.tsx +0 -172
  196. package/skills/wix-headless/references/astro/templates/gift-cards/_home-teaser-snippet.astro +0 -42
  197. package/skills/wix-headless/references/astro/templates/gift-cards/_nav-snippet.astro +0 -11
  198. package/skills/wix-headless/references/astro/templates/gift-cards/components-gift-cards.css +0 -220
  199. package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.astro +0 -51
  200. package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.ts +0 -75
  201. package/skills/wix-headless/references/astro/templates/global.css +0 -288
  202. package/skills/wix-headless/references/astro/templates/stores/AddToCartButton.tsx +0 -77
  203. package/skills/wix-headless/references/astro/templates/stores/BackInStockForm.tsx +0 -176
  204. package/skills/wix-headless/references/astro/templates/stores/CategoryRail.astro +0 -69
  205. package/skills/wix-headless/references/astro/templates/stores/ProductCard.astro +0 -79
  206. package/skills/wix-headless/references/astro/templates/stores/ProductPurchase.tsx +0 -397
  207. package/skills/wix-headless/references/astro/templates/stores/SeoTags.astro +0 -21
  208. package/skills/wix-headless/references/astro/templates/stores/back-in-stock.ts +0 -67
  209. package/skills/wix-headless/references/astro/templates/stores/categories.ts +0 -155
  210. package/skills/wix-headless/references/astro/templates/stores/category/[slug].astro +0 -130
  211. package/skills/wix-headless/references/astro/templates/stores/components-stores.css +0 -400
  212. package/skills/wix-headless/references/astro/templates/stores/products/[slug].astro +0 -128
  213. package/skills/wix-headless/references/astro/templates/stores/products/index.astro +0 -101
  214. package/skills/wix-headless/references/blog/BLOG_CONTENT.md +0 -161
  215. package/skills/wix-headless/references/blog/INSTRUCTIONS.md +0 -32
  216. package/skills/wix-headless/references/bookings/FLOW.md +0 -246
  217. package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +0 -95
  218. package/skills/wix-headless/references/bookings/SERVICES_DATA.md +0 -355
  219. package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +0 -176
  220. package/skills/wix-headless/references/cms/INSTRUCTIONS.md +0 -71
  221. package/skills/wix-headless/references/commands/known-apps.json +0 -6
  222. package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +0 -142
  223. package/skills/wix-headless/references/custom/INSTRUCTIONS.md +0 -88
  224. package/skills/wix-headless/references/custom/blog/WIRING.md +0 -52
  225. package/skills/wix-headless/references/custom/bookings/WIRING.md +0 -197
  226. package/skills/wix-headless/references/custom/cms/WIRING.md +0 -97
  227. package/skills/wix-headless/references/custom/ecom/WIRING.md +0 -67
  228. package/skills/wix-headless/references/custom/forms/WIRING.md +0 -101
  229. package/skills/wix-headless/references/custom/stores/WIRING.md +0 -80
  230. package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +0 -59
  231. package/skills/wix-headless/references/forms/INSTRUCTIONS.md +0 -43
  232. package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +0 -51
  233. package/skills/wix-headless/references/images/INSTRUCTIONS.md +0 -357
  234. package/skills/wix-headless/references/seed-recipes.md +0 -49
  235. package/skills/wix-headless/references/shared/AGENTS_MD.md +0 -47
  236. package/skills/wix-headless/references/shared/AUTHENTICATION.md +0 -108
  237. package/skills/wix-headless/references/shared/BUILD_NOISE.md +0 -8
  238. package/skills/wix-headless/references/shared/DESIGN_MD.md +0 -84
  239. package/skills/wix-headless/references/shared/DOCS_SEARCH.md +0 -41
  240. package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +0 -186
  241. package/skills/wix-headless/references/shared/IMPLEMENTER.md +0 -206
  242. package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +0 -97
  243. package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +0 -143
  244. package/skills/wix-headless/references/shared/STYLING.md +0 -140
  245. package/skills/wix-headless/references/stores/INSTRUCTIONS.md +0 -126
  246. package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +0 -252
  247. package/skills/wix-headless/references/verticals/_schema.json +0 -74
  248. package/skills/wix-headless/references/verticals/_schema.md +0 -95
  249. package/skills/wix-headless/references/verticals/blog.md +0 -31
  250. package/skills/wix-headless/references/verticals/bookings.md +0 -41
  251. package/skills/wix-headless/references/verticals/cms.md +0 -30
  252. package/skills/wix-headless/references/verticals/ecom.md +0 -25
  253. package/skills/wix-headless/references/verticals/forms.md +0 -26
  254. package/skills/wix-headless/references/verticals/gift-cards.md +0 -24
  255. package/skills/wix-headless/references/verticals/stores.md +0 -33
  256. package/skills/wix-headless/scripts/check-manifest.mjs +0 -335
  257. package/skills/wix-headless/scripts/compose.mjs +0 -520
  258. package/skills/wix-headless/scripts/emit-design-tokens.mjs +0 -157
  259. package/skills/wix-headless/scripts/flatten.sh +0 -61
  260. package/skills/wix-headless/scripts/generate-images.mjs +0 -242
  261. package/skills/wix-headless/scripts/patch-decorative-slots.mjs +0 -154
  262. package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +0 -190
  263. package/skills/wix-headless/scripts/scaffold.sh +0 -139
  264. package/skills/wix-headless/scripts/seed-utilities.sh +0 -93
  265. package/skills/wix-headless/scripts/write-decorative-json.mjs +0 -62
  266. package/skills/wix-headless/shared-utilities/analytics.ts +0 -40
  267. package/skills/wix-headless/shared-utilities/ricos.ts +0 -179
  268. package/skills/wix-headless/shared-utilities/wix-image.ts +0 -72
@@ -1,220 +0,0 @@
1
- /* Gift Cards pack — scoped CSS.
2
- *
3
- * Imported by Layout.astro alongside other components-*.css files. Covers:
4
- * 1. Buy form (`.gift-card-form` + fields)
5
- * 2. /gift-cards landing page sections
6
- * 3. Home teaser block
7
- *
8
- * Reuses tokens declared by the designer foundation: --color-cream,
9
- * --color-cream-deep, --color-ink, --color-ink-soft, --color-muted,
10
- * --color-rule, --color-paper, --color-bark/espresso/gold-deep,
11
- * --radius-sm, --font-body, --font-display. (Spacing uses Tailwind's numeric
12
- * scale — gap-4, py-24 — not a design token.) If a token isn't in your design
13
- * system, fall back to a
14
- * sibling token; do NOT invent new ones.
15
- */
16
-
17
- /* -------------------------------------------------------------------------- */
18
- /* Buy form */
19
- /* -------------------------------------------------------------------------- */
20
-
21
- .gift-card-form {
22
- display: flex;
23
- flex-direction: column;
24
- gap: 1.5rem;
25
- margin-top: 1.5rem;
26
- }
27
-
28
- .gift-card-fieldset {
29
- border: none;
30
- padding: 0;
31
- margin: 0;
32
- }
33
-
34
- .gift-card-amounts {
35
- display: flex;
36
- flex-wrap: wrap;
37
- gap: 0.75rem;
38
- margin-top: 0.75rem;
39
- }
40
-
41
- .gift-card-grid {
42
- display: grid;
43
- grid-template-columns: 1fr 1fr;
44
- gap: 1rem;
45
- }
46
-
47
- .gift-card-field {
48
- display: flex;
49
- flex-direction: column;
50
- gap: 0.4rem;
51
- position: relative;
52
- }
53
-
54
- .gift-card-field-wide {
55
- grid-column: 1 / -1;
56
- }
57
-
58
- .gift-card-field input,
59
- .gift-card-field textarea {
60
- font-family: var(--font-body);
61
- font-size: 0.9375rem;
62
- line-height: 1.5;
63
- color: var(--color-ink);
64
- background: var(--color-cream);
65
- border: 1px solid var(--color-rule);
66
- border-radius: var(--radius-sm);
67
- padding: 0.65rem 0.8rem;
68
- transition: border-color 0.2s ease;
69
- }
70
-
71
- .gift-card-field input:focus,
72
- .gift-card-field textarea:focus {
73
- outline: none;
74
- border-color: var(--color-ink);
75
- }
76
-
77
- .gift-card-field textarea {
78
- resize: vertical;
79
- min-height: 5rem;
80
- }
81
-
82
- .gift-card-counter {
83
- position: absolute;
84
- right: 0;
85
- bottom: -1.2rem;
86
- font-family: var(--font-body);
87
- font-size: 0.6875rem;
88
- color: var(--color-muted);
89
- }
90
-
91
- .gift-card-error {
92
- font-family: var(--font-body);
93
- font-size: 0.875rem;
94
- color: var(--color-gold-deep, #a04a3c);
95
- margin: 0;
96
- }
97
-
98
- /* -------------------------------------------------------------------------- */
99
- /* /gift-cards landing page */
100
- /* -------------------------------------------------------------------------- */
101
-
102
- .gift-card-page {
103
- max-width: 80rem;
104
- margin: 0 auto;
105
- padding: 4rem 1.5rem 6rem;
106
- }
107
-
108
- .gift-card-grid-wrap {
109
- display: grid;
110
- grid-template-columns: 1fr;
111
- gap: 3rem;
112
- align-items: start;
113
- }
114
-
115
- @media (min-width: 768px) {
116
- .gift-card-grid-wrap {
117
- grid-template-columns: 1fr 1fr;
118
- gap: 6rem;
119
- }
120
- }
121
-
122
- .gift-card-hero-image {
123
- background: var(--color-cream-deep, var(--color-paper, var(--color-cream)));
124
- border-radius: var(--radius-sm);
125
- overflow: hidden;
126
- aspect-ratio: 1 / 1;
127
- display: flex;
128
- align-items: center;
129
- justify-content: center;
130
- }
131
-
132
- .gift-card-hero-image img {
133
- width: 100%;
134
- height: 100%;
135
- object-fit: cover;
136
- }
137
-
138
- .gift-card-body {
139
- max-width: 36rem;
140
- }
141
-
142
- .gift-card-body h1 {
143
- margin: 1rem 0 1rem;
144
- }
145
-
146
- .gift-card-lede {
147
- font-family: var(--font-body);
148
- font-size: 1.0625rem;
149
- line-height: 1.7;
150
- color: var(--color-ink-soft);
151
- max-width: 48ch;
152
- margin: 0 0 2rem;
153
- }
154
-
155
- .gift-card-fineprint {
156
- margin-top: 1.5rem;
157
- font-family: var(--font-body);
158
- font-size: 0.8125rem;
159
- line-height: 1.6;
160
- color: var(--color-muted);
161
- max-width: 44ch;
162
- }
163
-
164
- /* -------------------------------------------------------------------------- */
165
- /* Home teaser */
166
- /* -------------------------------------------------------------------------- */
167
-
168
- .gift-card-teaser {
169
- padding: 6rem 1.5rem;
170
- background: var(--color-cream-deep, var(--color-paper, var(--color-cream)));
171
- }
172
-
173
- .gift-card-teaser-link {
174
- display: grid;
175
- grid-template-columns: 1fr;
176
- gap: 3rem;
177
- max-width: 80rem;
178
- margin: 0 auto;
179
- align-items: center;
180
- text-decoration: none;
181
- color: var(--color-ink);
182
- }
183
-
184
- @media (min-width: 768px) {
185
- .gift-card-teaser-link {
186
- grid-template-columns: 1fr 1fr;
187
- gap: 6rem;
188
- }
189
- }
190
-
191
- .gift-card-teaser-image {
192
- aspect-ratio: 4 / 3;
193
- overflow: hidden;
194
- border-radius: var(--radius-sm);
195
- background: var(--color-cream);
196
- }
197
-
198
- .gift-card-teaser-image img {
199
- width: 100%;
200
- height: 100%;
201
- object-fit: cover;
202
- transition: transform 0.6s ease;
203
- }
204
-
205
- .gift-card-teaser-link:hover .gift-card-teaser-image img {
206
- transform: scale(1.02);
207
- }
208
-
209
- .gift-card-teaser-body h2 {
210
- margin: 1rem 0 1rem;
211
- }
212
-
213
- .gift-card-teaser-lede {
214
- font-family: var(--font-body);
215
- font-size: 1.0625rem;
216
- line-height: 1.7;
217
- color: var(--color-ink-soft);
218
- max-width: 44ch;
219
- margin: 0 0 1.5rem;
220
- }
@@ -1,51 +0,0 @@
1
- ---
2
- import Layout from "../layouts/Layout.astro";
3
- import GiftCardPurchase from "../components/GiftCardPurchase.tsx";
4
- import { getGiftCardProduct } from "../utils/gift-cards";
5
- import { resolveWixImageUrl } from "../utils/wix-image";
6
-
7
- // The probe returns null if the Wix Gift Card app is uninstalled, revoked,
8
- // or the dashboard's eGift Card template hasn't been configured. Redirect
9
- // rather than rendering an empty page — keeps stale links from showing a
10
- // broken UI.
11
- const product = await getGiftCardProduct();
12
- if (!product) return Astro.redirect("/", 302);
13
-
14
- const heroImage = resolveWixImageUrl(product.image, 800, 800);
15
- ---
16
-
17
- <Layout
18
- title={product.name}
19
- description={product.description}
20
- >
21
- <section class="py-16 md:py-24">
22
- <div class="max-w-wide mx-auto px-8 grid grid-cols-1 md:grid-cols-2 gap-12 md:gap-24 items-center">
23
- <div class="aspect-square bg-cream rounded-sm overflow-hidden">
24
- {heroImage && (
25
- <img
26
- src={heroImage}
27
- alt={product.image?.altText || product.name}
28
- loading="lazy"
29
- decoding="async"
30
- width={product.image?.width ?? 800}
31
- height={product.image?.height ?? 800}
32
- class="w-full h-full object-cover"
33
- />
34
- )}
35
- </div>
36
-
37
- <div class="flex flex-col gap-6">
38
- <p class="eyebrow">A gift, considered</p>
39
- <h1 class="font-display text-5xl leading-tight">{product.name}</h1>
40
- <p class="text-ink-soft leading-relaxed">{product.description}</p>
41
-
42
- <GiftCardPurchase product={product} client:load />
43
-
44
- <p class="text-mute text-sm leading-relaxed">
45
- Sent by email to your recipient with a redeemable code. Redeemed at
46
- checkout against any product on the site.
47
- </p>
48
- </div>
49
- </div>
50
- </section>
51
- </Layout>
@@ -1,75 +0,0 @@
1
- // Wix Gift Card app — eGift Card template fetch.
2
- //
3
- // The dashboard's Catalog → Gift Cards screen configures a single eGift Card
4
- // "product" with preset denominations. That product is queryable via a public
5
- // REST endpoint (POST /gift-cards/v1/gift-card-products/query). The JS SDK
6
- // auto-package @wix/auto_sdk_ecom_gift-vouchers only exposes redemption
7
- // methods (getGiftCard / redeemGiftCard / voidTransaction), so we hit REST
8
- // directly using @wix/essentials httpClient.fetchWithAuth.
9
- //
10
- // The buy flow uses the standard cart: currentCart.addToCurrentCart with a
11
- // catalogReference whose appId is WIX_GIFT_CARDS_APP_ID below. After payment,
12
- // Wix's gift-card backend automatically issues a redeemable gift card with
13
- // source: "ORDER" and emails the recipient — no follow-up API call needed.
14
- //
15
- // The appId is observable on installed sites and stable across sites. If Wix
16
- // ever rotates it, update this constant; both the runtime probe and the buy
17
- // flow will fail together (and the page hides gracefully — same as "app
18
- // uninstalled").
19
-
20
- import { httpClient } from "@wix/essentials";
21
-
22
- export const WIX_GIFT_CARDS_APP_ID = "d80111c5-a0f4-47a8-b63a-65b54d774a27";
23
-
24
- export interface GiftCardImage {
25
- id?: string;
26
- url?: string;
27
- height?: number;
28
- width?: number;
29
- altText?: string;
30
- }
31
-
32
- export interface GiftCardPresetVariant {
33
- id: string;
34
- price: { amount: string; formattedAmount: string; convertedAmount?: string; formattedConvertedAmount?: string };
35
- value: { amount: string; formattedAmount: string; convertedAmount?: string; formattedConvertedAmount?: string };
36
- }
37
-
38
- export interface GiftCardProduct {
39
- id: string;
40
- revision?: string;
41
- name: string;
42
- description: string;
43
- image?: GiftCardImage;
44
- expirationType?: string;
45
- presetVariants: GiftCardPresetVariant[];
46
- }
47
-
48
- const ENDPOINT = "https://www.wixapis.com/gift-cards/v1/gift-card-products/query";
49
-
50
- // Module-level memoization. Navigation, the home teaser, and /gift-cards all
51
- // call getGiftCardProduct() in the same request — coalesce them into one
52
- // fetch by holding the in-flight promise at module scope.
53
- let cached: Promise<GiftCardProduct | null> | null = null;
54
-
55
- export async function getGiftCardProduct(): Promise<GiftCardProduct | null> {
56
- if (cached) return cached;
57
- cached = (async () => {
58
- try {
59
- const res = await httpClient.fetchWithAuth(ENDPOINT, {
60
- method: "POST",
61
- headers: { "Content-Type": "application/json" },
62
- body: JSON.stringify({ query: { paging: { limit: 1 } } }),
63
- });
64
- if (!res.ok) return null;
65
- const data = await res.json();
66
- const products = data?.giftCardProducts;
67
- if (!Array.isArray(products) || products.length === 0) return null;
68
- return products[0] as GiftCardProduct;
69
- } catch (err) {
70
- console.error("[gift-cards] queryGiftCardProducts failed:", err);
71
- return null;
72
- }
73
- })();
74
- return cached;
75
- }
@@ -1,288 +0,0 @@
1
- /* ── Composer skeleton: src/styles/global.css ──────────────────────────────
2
- The fixed bulk below is LITERAL — do not re-author it. Composer's only edit
3
- is to replace the {{theme}} block with the @theme palette derived from the
4
- inlined designTokens (see compose.mjs). Everything outside
5
- {{theme}} references the stable token vocabulary via var(--token) / built-in
6
- utilities and is brand-agnostic; ship it byte-for-byte.
7
- ─────────────────────────────────────────────────────────────────────────── */
8
-
9
- @import "tailwindcss";
10
-
11
- @theme {
12
- /* {{theme}} — Composer substitutes the full palette here from designTokens:
13
- every --color-*, --font-*, --container-*, and --radius-* line. The
14
- required-token set (enforced by compose.mjs) MUST all be present, or
15
- components render unstyled. Spacing is NOT a token here — it uses
16
- Tailwind's built-in numeric scale (gap-4, py-24, …); never add a named
17
- --spacing-* scale, since that namespace also powers the width utilities
18
- (max-w-*/w-*) and would shadow them. */
19
- }
20
-
21
- /* Reading-width helper so prose pages center without guessing Tailwind sizes. */
22
- @utility container-reading {
23
- max-width: var(--container-prose);
24
- margin-inline: auto;
25
- }
26
-
27
- /* Shared button primitive — declared with @utility so the variants below can
28
- @apply it (a plain contract class is NOT @apply-able in Tailwind v4). */
29
- @utility btn {
30
- @apply inline-flex items-center justify-center px-6 py-4 rounded-md font-medium;
31
- transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease;
32
- }
33
-
34
- @layer base {
35
- * {
36
- box-sizing: border-box;
37
- }
38
- html {
39
- -webkit-text-size-adjust: 100%;
40
- }
41
- body {
42
- margin: 0;
43
- background: var(--color-paper);
44
- color: var(--color-ink);
45
- font-family: var(--font-body);
46
- line-height: 1.6;
47
- -webkit-font-smoothing: antialiased;
48
- }
49
- h1, h2, h3, h4, h5, h6 {
50
- font-family: var(--font-display);
51
- line-height: 1.15;
52
- margin: 0;
53
- }
54
- p {
55
- margin: 0;
56
- }
57
- a {
58
- color: inherit;
59
- text-decoration: none;
60
- }
61
- button {
62
- font: inherit;
63
- cursor: pointer;
64
- }
65
- input, textarea, select {
66
- font: inherit;
67
- }
68
- img {
69
- display: block;
70
- max-width: 100%;
71
- height: auto;
72
- }
73
- ul, ol {
74
- margin: 0;
75
- padding: 0;
76
- list-style: none;
77
- }
78
- }
79
-
80
- /* ── Button family — used on every page in every vertical ─────────────────── */
81
- .btn-primary {
82
- @apply btn;
83
- background: var(--color-ink);
84
- color: var(--color-paper);
85
- }
86
- .btn-primary:hover:not(:disabled) {
87
- background: var(--color-accent);
88
- }
89
- .btn-primary:disabled {
90
- opacity: 0.5;
91
- cursor: not-allowed;
92
- }
93
- .btn-secondary {
94
- @apply btn;
95
- background: transparent;
96
- color: var(--color-ink);
97
- border: 1px solid var(--color-rule);
98
- }
99
- .btn-secondary:hover:not(:disabled) {
100
- border-color: var(--color-accent);
101
- color: var(--color-accent);
102
- }
103
- .btn-secondary:disabled {
104
- opacity: 0.5;
105
- cursor: not-allowed;
106
- }
107
- .btn-ghost {
108
- @apply btn;
109
- background: transparent;
110
- color: var(--color-ink);
111
- }
112
- .btn-ghost:hover:not(:disabled) {
113
- background: var(--color-paper-warm);
114
- }
115
- .btn-ghost:disabled {
116
- opacity: 0.5;
117
- cursor: not-allowed;
118
- }
119
-
120
- /* ── Cross-cutting decorative patterns ────────────────────────────────────── */
121
- [data-decorative-slot] {
122
- position: relative;
123
- overflow: hidden;
124
- }
125
- [data-decorative-slot] > img {
126
- width: 100%;
127
- height: 100%;
128
- object-fit: cover;
129
- }
130
- .editorial-rule {
131
- border: 0;
132
- height: 1px;
133
- background: var(--color-accent);
134
- opacity: 0.6;
135
- margin-block: 1.5rem;
136
- }
137
-
138
- /* ── Universal site chrome ────────────────────────────────────────────────── */
139
- .site-nav {
140
- position: sticky;
141
- top: 0;
142
- z-index: 50;
143
- background: color-mix(in srgb, var(--color-paper) 88%, transparent);
144
- backdrop-filter: saturate(1.1) blur(8px);
145
- border-bottom: 1px solid var(--color-rule);
146
- }
147
- .site-footer {
148
- border-top: 1px solid var(--color-rule);
149
- background: var(--color-paper-warm);
150
- color: var(--color-mute);
151
- }
152
-
153
- /* ── View Transitions wiring (paired with Layout.astro <script>) ──────────────
154
- Disable the default ClientRouter root cross-fade; the progress bar + grid-dim
155
- carry navigation feedback instead. Do not split into a separate file. */
156
- ::view-transition-old(root),
157
- ::view-transition-new(root) {
158
- animation: none;
159
- mix-blend-mode: normal;
160
- }
161
-
162
- .nav-progress {
163
- position: fixed;
164
- top: 0;
165
- left: 0;
166
- right: 0;
167
- height: 2px;
168
- background: var(--color-accent, currentColor);
169
- transform: scaleX(0);
170
- transform-origin: left;
171
- z-index: 1000;
172
- pointer-events: none;
173
- opacity: 0;
174
- }
175
- .nav-progress[data-state="loading"] {
176
- opacity: 1;
177
- transform: scaleX(0.85);
178
- transition: transform 1.6s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 120ms ease;
179
- }
180
- .nav-progress[data-state="done"] {
181
- opacity: 0;
182
- transform: scaleX(1);
183
- transition: transform 200ms ease, opacity 240ms ease 60ms;
184
- }
185
-
186
- /* Dim the product grid while ClientRouter fetches/swaps for immediate feedback. */
187
- body[data-navigating="true"] .product-grid {
188
- opacity: 0.55;
189
- transition: opacity 140ms ease;
190
- pointer-events: none;
191
- }
192
- .product-grid {
193
- transition: opacity 200ms ease;
194
- }
195
-
196
- /* ── Navigation submenu + CategoryRail/pagination (stores pack) ───────────────
197
- These reference declared tokens and stay inert when stores is not loaded (no
198
- markup uses them), so they ship unconditionally as fixed bulk. */
199
- .site-nav-item.has-submenu {
200
- position: relative;
201
- }
202
- .site-nav-submenu {
203
- position: absolute;
204
- top: 100%;
205
- left: 0;
206
- min-width: 12rem;
207
- display: flex;
208
- flex-direction: column;
209
- gap: 0.25rem;
210
- padding: 0.75rem;
211
- background: var(--color-paper);
212
- border: 1px solid var(--color-rule);
213
- border-radius: var(--radius-md);
214
- opacity: 0;
215
- visibility: hidden;
216
- transform: translateY(4px);
217
- transition: opacity 160ms ease, transform 160ms ease, visibility 160ms;
218
- }
219
- .site-nav-item.has-submenu:hover .site-nav-submenu,
220
- .site-nav-item.has-submenu:focus-within .site-nav-submenu {
221
- opacity: 1;
222
- visibility: visible;
223
- transform: translateY(0);
224
- }
225
- .site-nav-sublink {
226
- font-size: 0.875rem;
227
- color: var(--color-ink-soft, var(--color-mute));
228
- padding-block: 0.25rem;
229
- }
230
- .site-nav-sublink:hover,
231
- .site-nav-sublink[aria-current="page"] {
232
- color: var(--color-accent);
233
- }
234
-
235
- .category-rail {
236
- background: var(--color-paper-warm);
237
- border-bottom: 1px solid var(--color-rule);
238
- }
239
- .category-rail-inner {
240
- display: flex;
241
- flex-wrap: wrap;
242
- gap: 0.75rem;
243
- padding-block: 1rem;
244
- }
245
- .category-pill {
246
- display: inline-flex;
247
- align-items: center;
248
- padding: 0.25rem 1rem;
249
- border: 1px solid var(--color-rule);
250
- border-radius: var(--radius-sm);
251
- font-size: 0.8125rem;
252
- text-transform: uppercase;
253
- letter-spacing: 0.06em;
254
- color: var(--color-ink-soft, var(--color-ink));
255
- transition: border-color 160ms ease, color 160ms ease, background-color 160ms ease;
256
- }
257
- .category-pill:hover {
258
- border-color: var(--color-accent);
259
- color: var(--color-accent);
260
- }
261
- .category-pill[aria-current="page"] {
262
- background: var(--color-ink);
263
- color: var(--color-paper);
264
- border-color: var(--color-ink);
265
- }
266
- .pagination {
267
- margin-block: 2rem;
268
- }
269
- .pagination-inner {
270
- display: flex;
271
- justify-content: space-between;
272
- gap: 1rem;
273
- }
274
- .pagination-link {
275
- color: var(--color-ink);
276
- }
277
- .pagination-link:hover {
278
- color: var(--color-accent);
279
- }
280
- .pagination-link.is-disabled {
281
- opacity: 0.4;
282
- pointer-events: none;
283
- }
284
- .breadcrumbs {
285
- font-size: 0.8125rem;
286
- color: var(--color-mute);
287
- margin-bottom: 0.75rem;
288
- }
@@ -1,77 +0,0 @@
1
- import { useState } from "react";
2
- import { currentCart } from "@wix/ecom";
3
- import { trackEvent } from "../utils/analytics";
4
-
5
- const WIX_STORES_APP_ID = "215238eb-22a5-4c36-9e7b-e7c08025e04e";
6
-
7
- interface AddToCartButtonProps {
8
- productId: string;
9
- productName: string;
10
- price?: number;
11
- currency?: string;
12
- variantId?: string;
13
- variantName?: string;
14
- quantity?: number;
15
- disabled?: boolean;
16
- // Modifier selections, already flattened by ProductPurchase. Shapes:
17
- // modifierChoices: { [modifier.key]: choice.key }
18
- // customTextFields: { [modifier.freeTextSettings.key]: "<user input>" }
19
- modifierChoices?: Record<string, string>;
20
- customTextFields?: Record<string, string>;
21
- }
22
-
23
- export default function AddToCartButton({
24
- productId, productName, price, currency,
25
- variantId, variantName, quantity = 1, disabled,
26
- modifierChoices, customTextFields,
27
- }: AddToCartButtonProps) {
28
- const [status, setStatus] = useState<"idle" | "added">("idle");
29
-
30
- const handleAddToCart = async () => {
31
- // Optimistic: show success immediately, fire API in background
32
- setStatus("added");
33
- setTimeout(() => setStatus("idle"), 2000);
34
- window.dispatchEvent(new CustomEvent("cart-updated", { detail: { delta: quantity } }));
35
-
36
- try {
37
- // Build catalogReference.options per Wix Stores Catalog V3 contract:
38
- // { variantId, options: { [modifier.key]: choice.key }, customTextFields: { … } }
39
- const catalogOptions: Record<string, unknown> = {};
40
- if (variantId) catalogOptions.variantId = variantId;
41
- if (modifierChoices && Object.keys(modifierChoices).length > 0) {
42
- catalogOptions.options = modifierChoices;
43
- }
44
- if (customTextFields && Object.keys(customTextFields).length > 0) {
45
- catalogOptions.customTextFields = customTextFields;
46
- }
47
- const { cart } = await currentCart.addToCurrentCart({
48
- lineItems: [{
49
- catalogReference: {
50
- appId: WIX_STORES_APP_ID,
51
- catalogItemId: productId,
52
- options: Object.keys(catalogOptions).length > 0 ? catalogOptions : undefined,
53
- },
54
- quantity,
55
- }],
56
- });
57
- window.dispatchEvent(new CustomEvent("cart-updated", { detail: { cart } }));
58
- trackEvent("AddToCart", {
59
- id: productId, name: productName, price, currency,
60
- quantity, variant: variantName, origin: "Product Page",
61
- });
62
- } catch {
63
- setStatus("idle");
64
- window.dispatchEvent(new CustomEvent("cart-updated", { detail: {} }));
65
- }
66
- };
67
-
68
- return (
69
- <button
70
- onClick={handleAddToCart}
71
- disabled={disabled || status === "added"}
72
- className="add-to-cart-btn"
73
- >
74
- {disabled ? "Select Options" : status === "added" ? "Added \u2713" : "Add to Cart"}
75
- </button>
76
- );
77
- }