@wix/agent-skills 1.14.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.
Files changed (247) hide show
  1. package/README.md +4 -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/EDITOR_REACT_COMPONENT.md +23 -9
  10. package/skills/wix-app/references/SITE_PLUGIN.md +1 -1
  11. package/skills/wix-app/references/auto-patterns-dashboard/action-cell.md +115 -0
  12. package/skills/wix-app/references/auto-patterns-dashboard/app-config-structure.md +264 -0
  13. package/skills/wix-app/references/auto-patterns-dashboard/app-context.md +37 -0
  14. package/skills/wix-app/references/auto-patterns-dashboard/bulk-actions.md +86 -0
  15. package/skills/wix-app/references/auto-patterns-dashboard/collection-page-actions.md +119 -0
  16. package/skills/wix-app/references/auto-patterns-dashboard/collection-page.md +103 -0
  17. package/skills/wix-app/references/auto-patterns-dashboard/custom-actions-override.md +76 -0
  18. package/skills/wix-app/references/auto-patterns-dashboard/custom-columns-override.md +82 -0
  19. package/skills/wix-app/references/auto-patterns-dashboard/custom-components-override.md +89 -0
  20. package/skills/wix-app/references/auto-patterns-dashboard/custom-header-override.md +124 -0
  21. package/skills/wix-app/references/auto-patterns-dashboard/custom-sections-override.md +91 -0
  22. package/skills/wix-app/references/auto-patterns-dashboard/custom-slots-override.md +71 -0
  23. package/skills/wix-app/references/auto-patterns-dashboard/entity-page-actions.md +70 -0
  24. package/skills/wix-app/references/auto-patterns-dashboard/entity-page-view-actions.md +73 -0
  25. package/skills/wix-app/references/auto-patterns-dashboard/entity-page.md +98 -0
  26. package/skills/wix-app/references/auto-patterns-dashboard/example-patterns.json +278 -0
  27. package/skills/wix-app/references/auto-patterns-dashboard/pages-configuration.md +94 -0
  28. package/skills/wix-app/references/auto-patterns-dashboard/resolved-action.md +43 -0
  29. package/skills/wix-app/references/auto-patterns-dashboard/sdk-utilities.md +66 -0
  30. package/skills/wix-app/references/auto-patterns-dashboard/views.md +76 -0
  31. package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +1 -14
  32. package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +54 -29
  33. package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +2 -2
  34. package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +17 -105
  35. package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +127 -0
  36. package/skills/wix-app/references/editor-react-component/PARTS.md +2 -1
  37. package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +15 -15
  38. package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +25 -53
  39. package/skills/wix-app/scripts/generate-auto-patterns.js +510 -0
  40. package/skills/wix-auth/SKILL.md +12 -0
  41. package/skills/wix-auth/references/device-flow.md +140 -0
  42. package/skills/wix-docs/SKILL.md +188 -0
  43. package/skills/wix-docs/references/API_SPEC_SEARCH.md +213 -0
  44. package/skills/wix-docs/references/EXTRACTING.md +120 -0
  45. package/skills/wix-headless/SKILL.md +84 -130
  46. package/skills/wix-headless/entry/bootstrap.mjs +93 -0
  47. package/skills/wix-headless/entry/skill.md +78 -0
  48. package/skills/wix-headless/references/AI_FEATURES.md +178 -0
  49. package/skills/wix-headless/references/CAPABILITIES.md +84 -0
  50. package/skills/wix-headless/references/DISCOVERY.md +34 -56
  51. package/skills/wix-headless/references/DOC_DISCOVERY.md +37 -0
  52. package/skills/wix-headless/references/FEEDBACK.md +118 -0
  53. package/skills/wix-headless/references/IMAGE_GENERATION.md +69 -0
  54. package/skills/wix-headless/references/SDK_HANDOFF.md +97 -0
  55. package/skills/wix-headless/references/SEED.md +44 -188
  56. package/skills/wix-headless/references/SETUP.md +32 -103
  57. package/skills/wix-headless/references/astro.md +98 -0
  58. package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +196 -0
  59. package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +236 -0
  60. package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +279 -0
  61. package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +163 -0
  62. package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +203 -0
  63. package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +222 -0
  64. package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +124 -0
  65. package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +160 -0
  66. package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +118 -0
  67. package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +132 -0
  68. package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +124 -0
  69. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +188 -0
  70. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +173 -0
  71. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +161 -0
  72. package/skills/wix-headless/references/inline-recipes/setup-blog.md +175 -0
  73. package/skills/wix-headless/references/inline-recipes/setup-bookings.md +228 -0
  74. package/skills/wix-headless/references/inline-recipes/setup-cms.md +200 -0
  75. package/skills/wix-headless/references/inline-recipes/setup-events.md +196 -0
  76. package/skills/wix-headless/references/inline-recipes/setup-forms.md +174 -0
  77. package/skills/wix-headless/references/inline-recipes/setup-online-store.md +176 -0
  78. package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +153 -0
  79. package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +229 -0
  80. package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +161 -0
  81. package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +117 -0
  82. package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +152 -0
  83. package/skills/wix-headless/references/managed/AUTHENTICATION.md +57 -0
  84. package/skills/wix-headless/references/managed/CONNECT.md +74 -0
  85. package/skills/wix-headless/references/managed/CREATE.md +130 -0
  86. package/skills/wix-headless/references/managed/DEPLOYMENT.md +57 -0
  87. package/skills/wix-headless/references/non-astro.md +59 -0
  88. package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +22 -0
  89. package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +7 -0
  90. package/skills/wix-headless/references/stripe/AUTHENTICATION.md +55 -0
  91. package/skills/wix-headless/references/stripe/DEPLOYMENT.md +63 -0
  92. package/skills/wix-manage/SKILL.md +24 -1
  93. package/skills/wix-manage/references/analytics/query-site-analytics.md +241 -0
  94. package/skills/wix-manage/references/bookings/create-and-update-booking-services.md +1 -1
  95. package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +265 -0
  96. package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +436 -0
  97. package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +209 -0
  98. package/skills/wix-manage/references/rich-content/author-ricos-rich-content.md +249 -0
  99. package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +51 -0
  100. package/skills/wix-vibe-headless/SKILL.md +136 -0
  101. package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +128 -0
  102. package/skills/wix-vibe-headless/references/blog/wix-blog.js +217 -0
  103. package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +153 -0
  104. package/skills/wix-vibe-headless/references/bookings/wix-bookings-checkout.js +147 -0
  105. package/skills/wix-vibe-headless/references/bookings/wix-bookings-services.js +215 -0
  106. package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +154 -0
  107. package/skills/wix-vibe-headless/references/cms/wix-cms.js +186 -0
  108. package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +142 -0
  109. package/skills/wix-vibe-headless/references/events/wix-events-browse.js +135 -0
  110. package/skills/wix-vibe-headless/references/events/wix-events-registration.js +187 -0
  111. package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +211 -0
  112. package/skills/wix-vibe-headless/references/members/wix-members-auth.js +387 -0
  113. package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +111 -0
  114. package/skills/wix-vibe-headless/references/portfolio/wix-portfolio.js +194 -0
  115. package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +127 -0
  116. package/skills/wix-vibe-headless/references/pricing-plans/wix-pricing-plans.js +157 -0
  117. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +138 -0
  118. package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-menu.js +224 -0
  119. package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-ordering.js +156 -0
  120. package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-reservations.js +107 -0
  121. package/skills/wix-vibe-headless/references/shared/wix-client.js +186 -0
  122. package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +155 -0
  123. package/skills/wix-vibe-headless/references/storefront/wix-store-cart.js +147 -0
  124. package/skills/wix-vibe-headless/references/storefront/wix-store-catalog.js +142 -0
  125. package/skills/wix-headless/references/BUILD-astro.md +0 -253
  126. package/skills/wix-headless/references/BUILD-own-build.md +0 -167
  127. package/skills/wix-headless/references/BUILD.md +0 -105
  128. package/skills/wix-headless/references/DESIGN_SYSTEM.md +0 -165
  129. package/skills/wix-headless/references/DISCOVERY-connect.md +0 -55
  130. package/skills/wix-headless/references/DISCOVERY-create.md +0 -238
  131. package/skills/wix-headless/references/PLAN-connect.md +0 -19
  132. package/skills/wix-headless/references/PLAN-create.md +0 -17
  133. package/skills/wix-headless/references/PLAN.md +0 -92
  134. package/skills/wix-headless/references/astro/blog/BLOG_PAGES.md +0 -300
  135. package/skills/wix-headless/references/astro/blog/BLOG_SETUP.md +0 -218
  136. package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +0 -45
  137. package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +0 -77
  138. package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +0 -214
  139. package/skills/wix-headless/references/astro/cms/FAQ_KNOWLEDGE_BASE.md +0 -231
  140. package/skills/wix-headless/references/astro/cms/PORTFOLIO.md +0 -453
  141. package/skills/wix-headless/references/astro/cms/RESOURCE_LIBRARY.md +0 -354
  142. package/skills/wix-headless/references/astro/cms/TEAM_DIRECTORY.md +0 -299
  143. package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +0 -351
  144. package/skills/wix-headless/references/astro/ecom/CART_PAGES.md +0 -119
  145. package/skills/wix-headless/references/astro/ecom/CART_WIRING.md +0 -103
  146. package/skills/wix-headless/references/astro/ecom/COMPONENTS_CSS.md +0 -132
  147. package/skills/wix-headless/references/astro/forms/CONTACT_FORM.md +0 -463
  148. package/skills/wix-headless/references/astro/gift-cards/COMPONENTS.md +0 -119
  149. package/skills/wix-headless/references/astro/gift-cards/PAGES.md +0 -129
  150. package/skills/wix-headless/references/astro/stores/BACK_IN_STOCK.md +0 -178
  151. package/skills/wix-headless/references/astro/stores/CATEGORY_PAGES.md +0 -85
  152. package/skills/wix-headless/references/astro/stores/COMPONENTS_CSS.md +0 -129
  153. package/skills/wix-headless/references/astro/stores/HOME_AND_NAV.md +0 -229
  154. package/skills/wix-headless/references/astro/stores/PRODUCT_PAGES.md +0 -215
  155. package/skills/wix-headless/references/astro/stores/SHARED_WIRING.md +0 -165
  156. package/skills/wix-headless/references/astro/templates/Layout.astro +0 -132
  157. package/skills/wix-headless/references/astro/templates/astro.config.mjs +0 -41
  158. package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +0 -374
  159. package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +0 -136
  160. package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +0 -25
  161. package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +0 -71
  162. package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +0 -54
  163. package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +0 -49
  164. package/skills/wix-headless/references/astro/templates/bookings/bookingDriver.ts +0 -245
  165. package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +0 -424
  166. package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +0 -176
  167. package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +0 -181
  168. package/skills/wix-headless/references/astro/templates/ecom/CartBadge.tsx +0 -84
  169. package/skills/wix-headless/references/astro/templates/ecom/CartView.tsx +0 -543
  170. package/skills/wix-headless/references/astro/templates/ecom/cart.astro +0 -13
  171. package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +0 -302
  172. package/skills/wix-headless/references/astro/templates/ecom/discounts.ts +0 -71
  173. package/skills/wix-headless/references/astro/templates/ecom/thank-you.astro +0 -24
  174. package/skills/wix-headless/references/astro/templates/gift-cards/GiftCardPurchase.tsx +0 -172
  175. package/skills/wix-headless/references/astro/templates/gift-cards/_home-teaser-snippet.astro +0 -42
  176. package/skills/wix-headless/references/astro/templates/gift-cards/_nav-snippet.astro +0 -11
  177. package/skills/wix-headless/references/astro/templates/gift-cards/components-gift-cards.css +0 -220
  178. package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.astro +0 -51
  179. package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.ts +0 -75
  180. package/skills/wix-headless/references/astro/templates/global.css +0 -288
  181. package/skills/wix-headless/references/astro/templates/stores/AddToCartButton.tsx +0 -77
  182. package/skills/wix-headless/references/astro/templates/stores/BackInStockForm.tsx +0 -176
  183. package/skills/wix-headless/references/astro/templates/stores/CategoryRail.astro +0 -69
  184. package/skills/wix-headless/references/astro/templates/stores/ProductCard.astro +0 -79
  185. package/skills/wix-headless/references/astro/templates/stores/ProductPurchase.tsx +0 -397
  186. package/skills/wix-headless/references/astro/templates/stores/SeoTags.astro +0 -21
  187. package/skills/wix-headless/references/astro/templates/stores/back-in-stock.ts +0 -67
  188. package/skills/wix-headless/references/astro/templates/stores/categories.ts +0 -155
  189. package/skills/wix-headless/references/astro/templates/stores/category/[slug].astro +0 -130
  190. package/skills/wix-headless/references/astro/templates/stores/components-stores.css +0 -400
  191. package/skills/wix-headless/references/astro/templates/stores/products/[slug].astro +0 -128
  192. package/skills/wix-headless/references/astro/templates/stores/products/index.astro +0 -101
  193. package/skills/wix-headless/references/blog/BLOG_CONTENT.md +0 -161
  194. package/skills/wix-headless/references/blog/INSTRUCTIONS.md +0 -32
  195. package/skills/wix-headless/references/bookings/FLOW.md +0 -246
  196. package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +0 -95
  197. package/skills/wix-headless/references/bookings/SERVICES_DATA.md +0 -355
  198. package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +0 -176
  199. package/skills/wix-headless/references/cms/INSTRUCTIONS.md +0 -71
  200. package/skills/wix-headless/references/commands/known-apps.json +0 -6
  201. package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +0 -142
  202. package/skills/wix-headless/references/custom/INSTRUCTIONS.md +0 -88
  203. package/skills/wix-headless/references/custom/blog/WIRING.md +0 -52
  204. package/skills/wix-headless/references/custom/bookings/WIRING.md +0 -197
  205. package/skills/wix-headless/references/custom/cms/WIRING.md +0 -97
  206. package/skills/wix-headless/references/custom/ecom/WIRING.md +0 -67
  207. package/skills/wix-headless/references/custom/forms/WIRING.md +0 -101
  208. package/skills/wix-headless/references/custom/stores/WIRING.md +0 -80
  209. package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +0 -59
  210. package/skills/wix-headless/references/forms/INSTRUCTIONS.md +0 -43
  211. package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +0 -51
  212. package/skills/wix-headless/references/images/INSTRUCTIONS.md +0 -357
  213. package/skills/wix-headless/references/seed-recipes.md +0 -49
  214. package/skills/wix-headless/references/shared/AGENTS_MD.md +0 -47
  215. package/skills/wix-headless/references/shared/AUTHENTICATION.md +0 -108
  216. package/skills/wix-headless/references/shared/BUILD_NOISE.md +0 -8
  217. package/skills/wix-headless/references/shared/DESIGN_MD.md +0 -84
  218. package/skills/wix-headless/references/shared/DOCS_SEARCH.md +0 -41
  219. package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +0 -186
  220. package/skills/wix-headless/references/shared/IMPLEMENTER.md +0 -206
  221. package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +0 -97
  222. package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +0 -143
  223. package/skills/wix-headless/references/shared/STYLING.md +0 -140
  224. package/skills/wix-headless/references/stores/INSTRUCTIONS.md +0 -126
  225. package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +0 -252
  226. package/skills/wix-headless/references/verticals/_schema.json +0 -74
  227. package/skills/wix-headless/references/verticals/_schema.md +0 -95
  228. package/skills/wix-headless/references/verticals/blog.md +0 -31
  229. package/skills/wix-headless/references/verticals/bookings.md +0 -41
  230. package/skills/wix-headless/references/verticals/cms.md +0 -30
  231. package/skills/wix-headless/references/verticals/ecom.md +0 -25
  232. package/skills/wix-headless/references/verticals/forms.md +0 -26
  233. package/skills/wix-headless/references/verticals/gift-cards.md +0 -24
  234. package/skills/wix-headless/references/verticals/stores.md +0 -33
  235. package/skills/wix-headless/scripts/check-manifest.mjs +0 -335
  236. package/skills/wix-headless/scripts/compose.mjs +0 -520
  237. package/skills/wix-headless/scripts/emit-design-tokens.mjs +0 -157
  238. package/skills/wix-headless/scripts/flatten.sh +0 -61
  239. package/skills/wix-headless/scripts/generate-images.mjs +0 -242
  240. package/skills/wix-headless/scripts/patch-decorative-slots.mjs +0 -154
  241. package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +0 -190
  242. package/skills/wix-headless/scripts/scaffold.sh +0 -139
  243. package/skills/wix-headless/scripts/seed-utilities.sh +0 -93
  244. package/skills/wix-headless/scripts/write-decorative-json.mjs +0 -62
  245. package/skills/wix-headless/shared-utilities/analytics.ts +0 -40
  246. package/skills/wix-headless/shared-utilities/ricos.ts +0 -179
  247. 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
- }