@wix/agent-skills 1.25.0 → 1.27.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 (812) hide show
  1. package/README.md +1 -0
  2. package/package.json +1 -1
  3. package/skills/wix-app/SKILL.md +18 -17
  4. package/skills/wix-app/references/BUSINESS_MANAGER_THEME.md +1 -2
  5. package/skills/wix-app/references/BUSINESS_MANAGER_TOKENS.md +1 -1
  6. package/skills/wix-app/references/DASHBOARD_PAGE.md +12 -12
  7. package/skills/wix-app/references/WIX_PATTERNS_DOCS.md +3 -2
  8. package/skills/wix-app/references/dashboard-page/DRAFT_TEMPLATE.md +75 -66
  9. package/skills/wix-app/references/dashboard-page/UX_SUCCESS_MODEL.md +4 -5
  10. package/skills/wix-app/references/data-collection/LIFECYCLE.md +6 -4
  11. package/skills/wix-headless-kit/SKILL.md +31 -14
  12. package/skills/wix-headless-kit/guides/existing-site.md +12 -5
  13. package/skills/wix-headless-kit/install/attach.mjs +55 -10
  14. package/skills/wix-headless-kit/install/check.mjs +5 -5
  15. package/skills/wix-headless-kit/install/deploy.mjs +7 -3
  16. package/skills/wix-headless-kit/install/templates.mjs +21 -17
  17. package/skills/wix-headless-templates/SKILL.md +43 -0
  18. package/skills/wix-headless-templates/blank/project/README.md +15 -0
  19. package/skills/wix-headless-templates/blank/project/astro.config.mjs +20 -0
  20. package/skills/wix-headless-templates/blank/project/package.json +34 -0
  21. package/skills/wix-headless-templates/blank/project/public/favicon.svg +9 -0
  22. package/skills/wix-headless-templates/blank/project/src/assets/astro.svg +1 -0
  23. package/skills/wix-headless-templates/blank/project/src/assets/background.svg +1 -0
  24. package/skills/wix-headless-templates/blank/project/src/assets/wix.svg +18 -0
  25. package/skills/wix-headless-templates/blank/project/src/components/Hero.astro +77 -0
  26. package/skills/wix-headless-templates/blank/project/src/components/Welcome.astro +95 -0
  27. package/skills/wix-headless-templates/blank/project/src/layouts/Layout.astro +22 -0
  28. package/skills/wix-headless-templates/blank/project/src/pages/index.astro +8 -0
  29. package/skills/wix-headless-templates/blank/project/tsconfig.json +5 -0
  30. package/skills/wix-headless-templates/blog/INSTRUCTIONS.md +418 -0
  31. package/skills/wix-headless-templates/blog/app/components/blog/BlogFeedView.tsx +191 -0
  32. package/skills/wix-headless-templates/blog/app/components/blog/CommentsView.tsx +206 -0
  33. package/skills/wix-headless-templates/blog/app/components/blog/PostLikeButton.tsx +62 -0
  34. package/skills/wix-headless-templates/blog/app/components/blog/PostView.tsx +139 -0
  35. package/skills/wix-headless-templates/blog/app/components/blog/RichContent.tsx +42 -0
  36. package/skills/wix-headless-templates/blog/app/hooks/blog/useBlogFeed.ts +31 -0
  37. package/skills/wix-headless-templates/blog/app/hooks/blog/useComments.ts +26 -0
  38. package/skills/wix-headless-templates/blog/app/hooks/blog/usePost.ts +25 -0
  39. package/skills/wix-headless-templates/blog/app/wix/blog/authors-core.ts +51 -0
  40. package/skills/wix-headless-templates/blog/app/wix/blog/authors.ts +50 -0
  41. package/skills/wix-headless-templates/blog/app/wix/blog/blog-feed-store.ts +156 -0
  42. package/skills/wix-headless-templates/blog/app/wix/blog/comments-core.ts +189 -0
  43. package/skills/wix-headless-templates/blog/app/wix/blog/comments-store.ts +214 -0
  44. package/skills/wix-headless-templates/blog/app/wix/blog/comments.ts +84 -0
  45. package/skills/wix-headless-templates/blog/app/wix/blog/post-likes.ts +42 -0
  46. package/skills/wix-headless-templates/blog/app/wix/blog/post-store.ts +158 -0
  47. package/skills/wix-headless-templates/blog/app/wix/blog/posts-core.ts +347 -0
  48. package/skills/wix-headless-templates/blog/app/wix/blog/posts.ts +132 -0
  49. package/skills/wix-headless-templates/blog/app/wix/blog/taxonomy-core.ts +80 -0
  50. package/skills/wix-headless-templates/blog/app/wix/blog/taxonomy.ts +78 -0
  51. package/skills/wix-headless-templates/blog/app/wix/blog/types.ts +161 -0
  52. package/skills/wix-headless-templates/blog/app-astro/layouts/SiteLayout.astro +44 -0
  53. package/skills/wix-headless-templates/blog/app-astro/pages/blog/[...slug].astro +148 -0
  54. package/skills/wix-headless-templates/blog/app-astro/pages/blog/category/[slug].astro +97 -0
  55. package/skills/wix-headless-templates/blog/app-astro/pages/blog/tag/[slug].astro +51 -0
  56. package/skills/wix-headless-templates/blog/app-astro/pages/blog.astro +34 -0
  57. package/skills/wix-headless-templates/blog/project/README.md +15 -0
  58. package/skills/wix-headless-templates/blog/project/astro.config.mjs +22 -0
  59. package/skills/wix-headless-templates/blog/project/package-lock.json +14699 -0
  60. package/skills/wix-headless-templates/blog/project/package.json +39 -0
  61. package/skills/wix-headless-templates/blog/project/public/favicon.svg +9 -0
  62. package/skills/wix-headless-templates/blog/project/src/assets/astro.svg +1 -0
  63. package/skills/wix-headless-templates/blog/project/src/assets/background.svg +1 -0
  64. package/skills/wix-headless-templates/blog/project/src/assets/wix.svg +18 -0
  65. package/skills/wix-headless-templates/blog/project/src/components/Hero.astro +77 -0
  66. package/skills/wix-headless-templates/blog/project/src/components/Welcome.astro +95 -0
  67. package/skills/wix-headless-templates/blog/project/src/components/blog/BlogFeedView.tsx +191 -0
  68. package/skills/wix-headless-templates/blog/project/src/components/blog/CommentsView.tsx +206 -0
  69. package/skills/wix-headless-templates/blog/project/src/components/blog/PostLikeButton.tsx +62 -0
  70. package/skills/wix-headless-templates/blog/project/src/components/blog/PostView.tsx +139 -0
  71. package/skills/wix-headless-templates/blog/project/src/components/blog/RichContent.tsx +42 -0
  72. package/skills/wix-headless-templates/blog/project/src/hooks/blog/useBlogFeed.ts +31 -0
  73. package/skills/wix-headless-templates/blog/project/src/hooks/blog/useComments.ts +26 -0
  74. package/skills/wix-headless-templates/blog/project/src/hooks/blog/usePost.ts +25 -0
  75. package/skills/wix-headless-templates/blog/project/src/layouts/Layout.astro +22 -0
  76. package/skills/wix-headless-templates/blog/project/src/layouts/SiteLayout.astro +44 -0
  77. package/skills/wix-headless-templates/blog/project/src/pages/blog/[...slug].astro +148 -0
  78. package/skills/wix-headless-templates/blog/project/src/pages/blog/category/[slug].astro +97 -0
  79. package/skills/wix-headless-templates/blog/project/src/pages/blog/tag/[slug].astro +51 -0
  80. package/skills/wix-headless-templates/blog/project/src/pages/blog.astro +34 -0
  81. package/skills/wix-headless-templates/blog/project/src/pages/index.astro +8 -0
  82. package/skills/wix-headless-templates/blog/project/src/styles/global.css +57 -0
  83. package/skills/wix-headless-templates/blog/project/src/wix/blog/authors-core.ts +51 -0
  84. package/skills/wix-headless-templates/blog/project/src/wix/blog/authors.ts +50 -0
  85. package/skills/wix-headless-templates/blog/project/src/wix/blog/blog-feed-store.ts +156 -0
  86. package/skills/wix-headless-templates/blog/project/src/wix/blog/comments-core.ts +189 -0
  87. package/skills/wix-headless-templates/blog/project/src/wix/blog/comments-store.ts +214 -0
  88. package/skills/wix-headless-templates/blog/project/src/wix/blog/comments.ts +84 -0
  89. package/skills/wix-headless-templates/blog/project/src/wix/blog/post-likes.ts +42 -0
  90. package/skills/wix-headless-templates/blog/project/src/wix/blog/post-store.ts +158 -0
  91. package/skills/wix-headless-templates/blog/project/src/wix/blog/posts-core.ts +347 -0
  92. package/skills/wix-headless-templates/blog/project/src/wix/blog/posts.ts +132 -0
  93. package/skills/wix-headless-templates/blog/project/src/wix/blog/taxonomy-core.ts +80 -0
  94. package/skills/wix-headless-templates/blog/project/src/wix/blog/taxonomy.ts +78 -0
  95. package/skills/wix-headless-templates/blog/project/src/wix/blog/types.ts +161 -0
  96. package/skills/wix-headless-templates/blog/project/src/wix/config.ts +16 -0
  97. package/skills/wix-headless-templates/blog/project/src/wix/media.ts +106 -0
  98. package/skills/wix-headless-templates/blog/project/src/wix/money.ts +24 -0
  99. package/skills/wix-headless-templates/blog/project/src/wix/sdk.ts +89 -0
  100. package/skills/wix-headless-templates/blog/project/tsconfig.json +5 -0
  101. package/skills/wix-headless-templates/blog/rest/authors.ts +39 -0
  102. package/skills/wix-headless-templates/blog/rest/comments.ts +64 -0
  103. package/skills/wix-headless-templates/blog/rest/post-likes.ts +37 -0
  104. package/skills/wix-headless-templates/blog/rest/posts.ts +123 -0
  105. package/skills/wix-headless-templates/blog/rest/taxonomy.ts +79 -0
  106. package/skills/wix-headless-templates/blog/seed/SEED.md +81 -0
  107. package/skills/wix-headless-templates/blog/seed/read-site.mjs +33 -0
  108. package/skills/wix-headless-templates/blog/seed/seed-blog.mjs +337 -0
  109. package/skills/wix-headless-templates/bookings/INSTRUCTIONS.md +356 -0
  110. package/skills/wix-headless-templates/bookings/app/components/bookings/ServiceBookingView.tsx +369 -0
  111. package/skills/wix-headless-templates/bookings/app/components/bookings/ServicesView.tsx +193 -0
  112. package/skills/wix-headless-templates/bookings/app/hooks/bookings/useBookingFlow.ts +56 -0
  113. package/skills/wix-headless-templates/bookings/app/hooks/bookings/useServices.ts +23 -0
  114. package/skills/wix-headless-templates/bookings/app/wix/bookings/booking-core.ts +614 -0
  115. package/skills/wix-headless-templates/bookings/app/wix/bookings/booking-flow-store.ts +410 -0
  116. package/skills/wix-headless-templates/bookings/app/wix/bookings/booking.ts +227 -0
  117. package/skills/wix-headless-templates/bookings/app/wix/bookings/services-core.ts +366 -0
  118. package/skills/wix-headless-templates/bookings/app/wix/bookings/services-store.ts +213 -0
  119. package/skills/wix-headless-templates/bookings/app/wix/bookings/services.ts +100 -0
  120. package/skills/wix-headless-templates/bookings/app/wix/bookings/types.ts +236 -0
  121. package/skills/wix-headless-templates/bookings/app-astro/layouts/SiteLayout.astro +40 -0
  122. package/skills/wix-headless-templates/bookings/app-astro/pages/services/[slug].astro +81 -0
  123. package/skills/wix-headless-templates/bookings/app-astro/pages/services.astro +40 -0
  124. package/skills/wix-headless-templates/bookings/project/README.md +15 -0
  125. package/skills/wix-headless-templates/bookings/project/astro.config.mjs +22 -0
  126. package/skills/wix-headless-templates/bookings/project/package-lock.json +10546 -0
  127. package/skills/wix-headless-templates/bookings/project/package.json +41 -0
  128. package/skills/wix-headless-templates/bookings/project/public/favicon.svg +9 -0
  129. package/skills/wix-headless-templates/bookings/project/src/assets/astro.svg +1 -0
  130. package/skills/wix-headless-templates/bookings/project/src/assets/background.svg +1 -0
  131. package/skills/wix-headless-templates/bookings/project/src/assets/wix.svg +18 -0
  132. package/skills/wix-headless-templates/bookings/project/src/components/Hero.astro +77 -0
  133. package/skills/wix-headless-templates/bookings/project/src/components/Welcome.astro +95 -0
  134. package/skills/wix-headless-templates/bookings/project/src/components/bookings/ServiceBookingView.tsx +369 -0
  135. package/skills/wix-headless-templates/bookings/project/src/components/bookings/ServicesView.tsx +193 -0
  136. package/skills/wix-headless-templates/bookings/project/src/hooks/bookings/useBookingFlow.ts +56 -0
  137. package/skills/wix-headless-templates/bookings/project/src/hooks/bookings/useServices.ts +23 -0
  138. package/skills/wix-headless-templates/bookings/project/src/layouts/Layout.astro +22 -0
  139. package/skills/wix-headless-templates/bookings/project/src/layouts/SiteLayout.astro +40 -0
  140. package/skills/wix-headless-templates/bookings/project/src/pages/index.astro +8 -0
  141. package/skills/wix-headless-templates/bookings/project/src/pages/services/[slug].astro +81 -0
  142. package/skills/wix-headless-templates/bookings/project/src/pages/services.astro +40 -0
  143. package/skills/wix-headless-templates/bookings/project/src/styles/global.css +57 -0
  144. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/booking-core.ts +614 -0
  145. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/booking-flow-store.ts +410 -0
  146. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/booking.ts +227 -0
  147. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/services-core.ts +366 -0
  148. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/services-store.ts +213 -0
  149. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/services.ts +100 -0
  150. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/types.ts +236 -0
  151. package/skills/wix-headless-templates/bookings/project/src/wix/config.ts +16 -0
  152. package/skills/wix-headless-templates/bookings/project/src/wix/media.ts +106 -0
  153. package/skills/wix-headless-templates/bookings/project/src/wix/money.ts +24 -0
  154. package/skills/wix-headless-templates/bookings/project/src/wix/sdk.ts +89 -0
  155. package/skills/wix-headless-templates/bookings/project/tsconfig.json +5 -0
  156. package/skills/wix-headless-templates/bookings/rest/booking.ts +227 -0
  157. package/skills/wix-headless-templates/bookings/rest/services.ts +94 -0
  158. package/skills/wix-headless-templates/bookings/seed/SEED.md +109 -0
  159. package/skills/wix-headless-templates/bookings/seed/read-site.mjs +28 -0
  160. package/skills/wix-headless-templates/bookings/seed/seed-bookings.mjs +407 -0
  161. package/skills/wix-headless-templates/cms/INSTRUCTIONS.md +399 -0
  162. package/skills/wix-headless-templates/cms/app/hooks/cms/useCollection.ts +82 -0
  163. package/skills/wix-headless-templates/cms/app/hooks/cms/useItem.ts +37 -0
  164. package/skills/wix-headless-templates/cms/app/wix/cms/collection-store.ts +220 -0
  165. package/skills/wix-headless-templates/cms/app/wix/cms/collections-core.ts +41 -0
  166. package/skills/wix-headless-templates/cms/app/wix/cms/collections.ts +28 -0
  167. package/skills/wix-headless-templates/cms/app/wix/cms/item-store.ts +93 -0
  168. package/skills/wix-headless-templates/cms/app/wix/cms/items-core.ts +259 -0
  169. package/skills/wix-headless-templates/cms/app/wix/cms/items.ts +182 -0
  170. package/skills/wix-headless-templates/cms/app/wix/cms/types.ts +138 -0
  171. package/skills/wix-headless-templates/cms/app-astro/layouts/SiteLayout.astro +41 -0
  172. package/skills/wix-headless-templates/cms/project/README.md +15 -0
  173. package/skills/wix-headless-templates/cms/project/astro.config.mjs +22 -0
  174. package/skills/wix-headless-templates/cms/project/package-lock.json +9798 -0
  175. package/skills/wix-headless-templates/cms/project/package.json +37 -0
  176. package/skills/wix-headless-templates/cms/project/public/favicon.svg +9 -0
  177. package/skills/wix-headless-templates/cms/project/src/assets/astro.svg +1 -0
  178. package/skills/wix-headless-templates/cms/project/src/assets/background.svg +1 -0
  179. package/skills/wix-headless-templates/cms/project/src/assets/wix.svg +18 -0
  180. package/skills/wix-headless-templates/cms/project/src/components/Hero.astro +77 -0
  181. package/skills/wix-headless-templates/cms/project/src/components/Welcome.astro +95 -0
  182. package/skills/wix-headless-templates/cms/project/src/hooks/cms/useCollection.ts +82 -0
  183. package/skills/wix-headless-templates/cms/project/src/hooks/cms/useItem.ts +37 -0
  184. package/skills/wix-headless-templates/cms/project/src/layouts/Layout.astro +22 -0
  185. package/skills/wix-headless-templates/cms/project/src/layouts/SiteLayout.astro +41 -0
  186. package/skills/wix-headless-templates/cms/project/src/pages/index.astro +8 -0
  187. package/skills/wix-headless-templates/cms/project/src/styles/global.css +57 -0
  188. package/skills/wix-headless-templates/cms/project/src/wix/cms/collection-store.ts +220 -0
  189. package/skills/wix-headless-templates/cms/project/src/wix/cms/collections-core.ts +41 -0
  190. package/skills/wix-headless-templates/cms/project/src/wix/cms/collections.ts +28 -0
  191. package/skills/wix-headless-templates/cms/project/src/wix/cms/item-store.ts +93 -0
  192. package/skills/wix-headless-templates/cms/project/src/wix/cms/items-core.ts +259 -0
  193. package/skills/wix-headless-templates/cms/project/src/wix/cms/items.ts +182 -0
  194. package/skills/wix-headless-templates/cms/project/src/wix/cms/types.ts +138 -0
  195. package/skills/wix-headless-templates/cms/project/src/wix/config.ts +16 -0
  196. package/skills/wix-headless-templates/cms/project/src/wix/media.ts +106 -0
  197. package/skills/wix-headless-templates/cms/project/src/wix/money.ts +24 -0
  198. package/skills/wix-headless-templates/cms/project/src/wix/sdk.ts +89 -0
  199. package/skills/wix-headless-templates/cms/project/tsconfig.json +5 -0
  200. package/skills/wix-headless-templates/cms/rest/collections.ts +25 -0
  201. package/skills/wix-headless-templates/cms/rest/items.ts +189 -0
  202. package/skills/wix-headless-templates/cms/seed/SEED.md +116 -0
  203. package/skills/wix-headless-templates/cms/seed/read-site.mjs +20 -0
  204. package/skills/wix-headless-templates/cms/seed/seed-cms.mjs +321 -0
  205. package/skills/wix-headless-templates/compose.mjs +83 -0
  206. package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +349 -0
  207. package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +155 -0
  208. package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +46 -0
  209. package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +49 -0
  210. package/skills/wix-headless-templates/donations/app/hooks/donations/useCampaigns.ts +21 -0
  211. package/skills/wix-headless-templates/donations/app/hooks/donations/useDonation.ts +27 -0
  212. package/skills/wix-headless-templates/donations/app/hooks/donations/useDonationReceipt.ts +19 -0
  213. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns-store.ts +59 -0
  214. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +83 -0
  215. package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +95 -0
  216. package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +163 -0
  217. package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +466 -0
  218. package/skills/wix-headless-templates/donations/app/wix/donations/receipt-store.ts +55 -0
  219. package/skills/wix-headless-templates/donations/app/wix/donations/types.ts +121 -0
  220. package/skills/wix-headless-templates/donations/app-astro/components/donations/CampaignPage.astro +43 -0
  221. package/skills/wix-headless-templates/donations/app-astro/layouts/SiteLayout.astro +45 -0
  222. package/skills/wix-headless-templates/donations/app-astro/pages/donate/[id].astro +28 -0
  223. package/skills/wix-headless-templates/donations/app-astro/pages/donate/index.astro +51 -0
  224. package/skills/wix-headless-templates/donations/app-astro/pages/donate/thank-you.astro +13 -0
  225. package/skills/wix-headless-templates/donations/project/README.md +15 -0
  226. package/skills/wix-headless-templates/donations/project/astro.config.mjs +22 -0
  227. package/skills/wix-headless-templates/donations/project/package-lock.json +10266 -0
  228. package/skills/wix-headless-templates/donations/project/package.json +39 -0
  229. package/skills/wix-headless-templates/donations/project/public/favicon.svg +9 -0
  230. package/skills/wix-headless-templates/donations/project/src/assets/astro.svg +1 -0
  231. package/skills/wix-headless-templates/donations/project/src/assets/background.svg +1 -0
  232. package/skills/wix-headless-templates/donations/project/src/assets/wix.svg +18 -0
  233. package/skills/wix-headless-templates/donations/project/src/components/Hero.astro +77 -0
  234. package/skills/wix-headless-templates/donations/project/src/components/Welcome.astro +95 -0
  235. package/skills/wix-headless-templates/donations/project/src/components/donations/CampaignPage.astro +43 -0
  236. package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +155 -0
  237. package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +46 -0
  238. package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +49 -0
  239. package/skills/wix-headless-templates/donations/project/src/hooks/donations/useCampaigns.ts +21 -0
  240. package/skills/wix-headless-templates/donations/project/src/hooks/donations/useDonation.ts +27 -0
  241. package/skills/wix-headless-templates/donations/project/src/hooks/donations/useDonationReceipt.ts +19 -0
  242. package/skills/wix-headless-templates/donations/project/src/layouts/Layout.astro +22 -0
  243. package/skills/wix-headless-templates/donations/project/src/layouts/SiteLayout.astro +45 -0
  244. package/skills/wix-headless-templates/donations/project/src/pages/donate/[id].astro +28 -0
  245. package/skills/wix-headless-templates/donations/project/src/pages/donate/index.astro +51 -0
  246. package/skills/wix-headless-templates/donations/project/src/pages/donate/thank-you.astro +13 -0
  247. package/skills/wix-headless-templates/donations/project/src/pages/index.astro +8 -0
  248. package/skills/wix-headless-templates/donations/project/src/styles/global.css +57 -0
  249. package/skills/wix-headless-templates/donations/project/src/wix/config.ts +16 -0
  250. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns-store.ts +59 -0
  251. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +83 -0
  252. package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +95 -0
  253. package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +163 -0
  254. package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +466 -0
  255. package/skills/wix-headless-templates/donations/project/src/wix/donations/receipt-store.ts +55 -0
  256. package/skills/wix-headless-templates/donations/project/src/wix/donations/types.ts +121 -0
  257. package/skills/wix-headless-templates/donations/project/src/wix/media.ts +106 -0
  258. package/skills/wix-headless-templates/donations/project/src/wix/money.ts +24 -0
  259. package/skills/wix-headless-templates/donations/project/src/wix/sdk.ts +89 -0
  260. package/skills/wix-headless-templates/donations/project/tsconfig.json +5 -0
  261. package/skills/wix-headless-templates/donations/rest/campaigns.ts +76 -0
  262. package/skills/wix-headless-templates/donations/rest/donate.ts +90 -0
  263. package/skills/wix-headless-templates/donations/seed/SEED.md +90 -0
  264. package/skills/wix-headless-templates/donations/seed/read-site.mjs +33 -0
  265. package/skills/wix-headless-templates/donations/seed/seed-donations.mjs +250 -0
  266. package/skills/wix-headless-templates/events/INSTRUCTIONS.md +387 -0
  267. package/skills/wix-headless-templates/events/app/components/events/EventConfirmationView.tsx +139 -0
  268. package/skills/wix-headless-templates/events/app/components/events/EventRegistrationView.tsx +375 -0
  269. package/skills/wix-headless-templates/events/app/components/events/EventsView.tsx +134 -0
  270. package/skills/wix-headless-templates/events/app/hooks/events/useEventConfirmation.ts +21 -0
  271. package/skills/wix-headless-templates/events/app/hooks/events/useEventRegistration.ts +40 -0
  272. package/skills/wix-headless-templates/events/app/hooks/events/useEvents.ts +24 -0
  273. package/skills/wix-headless-templates/events/app/wix/events/events-core.ts +379 -0
  274. package/skills/wix-headless-templates/events/app/wix/events/events-store.ts +175 -0
  275. package/skills/wix-headless-templates/events/app/wix/events/events.ts +124 -0
  276. package/skills/wix-headless-templates/events/app/wix/events/order-store.ts +143 -0
  277. package/skills/wix-headless-templates/events/app/wix/events/orders-core.ts +86 -0
  278. package/skills/wix-headless-templates/events/app/wix/events/orders.ts +30 -0
  279. package/skills/wix-headless-templates/events/app/wix/events/registration-core.ts +415 -0
  280. package/skills/wix-headless-templates/events/app/wix/events/registration-store.ts +237 -0
  281. package/skills/wix-headless-templates/events/app/wix/events/registration.ts +109 -0
  282. package/skills/wix-headless-templates/events/app/wix/events/types.ts +249 -0
  283. package/skills/wix-headless-templates/events/app-astro/layouts/SiteLayout.astro +40 -0
  284. package/skills/wix-headless-templates/events/app-astro/pages/event-confirmation.astro +12 -0
  285. package/skills/wix-headless-templates/events/app-astro/pages/events/[slug].astro +104 -0
  286. package/skills/wix-headless-templates/events/app-astro/pages/events.astro +23 -0
  287. package/skills/wix-headless-templates/events/project/README.md +15 -0
  288. package/skills/wix-headless-templates/events/project/astro.config.mjs +22 -0
  289. package/skills/wix-headless-templates/events/project/package-lock.json +10497 -0
  290. package/skills/wix-headless-templates/events/project/package.json +39 -0
  291. package/skills/wix-headless-templates/events/project/public/favicon.svg +9 -0
  292. package/skills/wix-headless-templates/events/project/src/assets/astro.svg +1 -0
  293. package/skills/wix-headless-templates/events/project/src/assets/background.svg +1 -0
  294. package/skills/wix-headless-templates/events/project/src/assets/wix.svg +18 -0
  295. package/skills/wix-headless-templates/events/project/src/components/Hero.astro +77 -0
  296. package/skills/wix-headless-templates/events/project/src/components/Welcome.astro +95 -0
  297. package/skills/wix-headless-templates/events/project/src/components/events/EventConfirmationView.tsx +139 -0
  298. package/skills/wix-headless-templates/events/project/src/components/events/EventRegistrationView.tsx +375 -0
  299. package/skills/wix-headless-templates/events/project/src/components/events/EventsView.tsx +134 -0
  300. package/skills/wix-headless-templates/events/project/src/hooks/events/useEventConfirmation.ts +21 -0
  301. package/skills/wix-headless-templates/events/project/src/hooks/events/useEventRegistration.ts +40 -0
  302. package/skills/wix-headless-templates/events/project/src/hooks/events/useEvents.ts +24 -0
  303. package/skills/wix-headless-templates/events/project/src/layouts/Layout.astro +22 -0
  304. package/skills/wix-headless-templates/events/project/src/layouts/SiteLayout.astro +40 -0
  305. package/skills/wix-headless-templates/events/project/src/pages/event-confirmation.astro +12 -0
  306. package/skills/wix-headless-templates/events/project/src/pages/events/[slug].astro +104 -0
  307. package/skills/wix-headless-templates/events/project/src/pages/events.astro +23 -0
  308. package/skills/wix-headless-templates/events/project/src/pages/index.astro +8 -0
  309. package/skills/wix-headless-templates/events/project/src/styles/global.css +57 -0
  310. package/skills/wix-headless-templates/events/project/src/wix/config.ts +16 -0
  311. package/skills/wix-headless-templates/events/project/src/wix/events/events-core.ts +379 -0
  312. package/skills/wix-headless-templates/events/project/src/wix/events/events-store.ts +175 -0
  313. package/skills/wix-headless-templates/events/project/src/wix/events/events.ts +124 -0
  314. package/skills/wix-headless-templates/events/project/src/wix/events/order-store.ts +143 -0
  315. package/skills/wix-headless-templates/events/project/src/wix/events/orders-core.ts +86 -0
  316. package/skills/wix-headless-templates/events/project/src/wix/events/orders.ts +30 -0
  317. package/skills/wix-headless-templates/events/project/src/wix/events/registration-core.ts +415 -0
  318. package/skills/wix-headless-templates/events/project/src/wix/events/registration-store.ts +237 -0
  319. package/skills/wix-headless-templates/events/project/src/wix/events/registration.ts +109 -0
  320. package/skills/wix-headless-templates/events/project/src/wix/events/types.ts +249 -0
  321. package/skills/wix-headless-templates/events/project/src/wix/media.ts +106 -0
  322. package/skills/wix-headless-templates/events/project/src/wix/money.ts +24 -0
  323. package/skills/wix-headless-templates/events/project/src/wix/sdk.ts +89 -0
  324. package/skills/wix-headless-templates/events/project/tsconfig.json +5 -0
  325. package/skills/wix-headless-templates/events/rest/events.ts +112 -0
  326. package/skills/wix-headless-templates/events/rest/orders.ts +28 -0
  327. package/skills/wix-headless-templates/events/rest/registration.ts +96 -0
  328. package/skills/wix-headless-templates/events/seed/SEED.md +115 -0
  329. package/skills/wix-headless-templates/events/seed/read-site.mjs +26 -0
  330. package/skills/wix-headless-templates/events/seed/seed-events.mjs +322 -0
  331. package/skills/wix-headless-templates/faq/INSTRUCTIONS.md +317 -0
  332. package/skills/wix-headless-templates/faq/app/components/faq/FaqAccordion.tsx +159 -0
  333. package/skills/wix-headless-templates/faq/app/components/faq/FaqCategoryNav.tsx +46 -0
  334. package/skills/wix-headless-templates/faq/app/components/faq/FaqSearch.tsx +56 -0
  335. package/skills/wix-headless-templates/faq/app/hooks/faq/useFaq.ts +53 -0
  336. package/skills/wix-headless-templates/faq/app/wix/faq/faq-core.ts +428 -0
  337. package/skills/wix-headless-templates/faq/app/wix/faq/faq-store.ts +212 -0
  338. package/skills/wix-headless-templates/faq/app/wix/faq/faq.ts +72 -0
  339. package/skills/wix-headless-templates/faq/app/wix/faq/types.ts +63 -0
  340. package/skills/wix-headless-templates/faq/app-astro/layouts/SiteLayout.astro +40 -0
  341. package/skills/wix-headless-templates/faq/app-astro/pages/faq.astro +39 -0
  342. package/skills/wix-headless-templates/faq/project/README.md +15 -0
  343. package/skills/wix-headless-templates/faq/project/astro.config.mjs +22 -0
  344. package/skills/wix-headless-templates/faq/project/package-lock.json +8837 -0
  345. package/skills/wix-headless-templates/faq/project/package.json +37 -0
  346. package/skills/wix-headless-templates/faq/project/public/favicon.svg +9 -0
  347. package/skills/wix-headless-templates/faq/project/src/assets/astro.svg +1 -0
  348. package/skills/wix-headless-templates/faq/project/src/assets/background.svg +1 -0
  349. package/skills/wix-headless-templates/faq/project/src/assets/wix.svg +18 -0
  350. package/skills/wix-headless-templates/faq/project/src/components/Hero.astro +77 -0
  351. package/skills/wix-headless-templates/faq/project/src/components/Welcome.astro +95 -0
  352. package/skills/wix-headless-templates/faq/project/src/components/faq/FaqAccordion.tsx +159 -0
  353. package/skills/wix-headless-templates/faq/project/src/components/faq/FaqCategoryNav.tsx +46 -0
  354. package/skills/wix-headless-templates/faq/project/src/components/faq/FaqSearch.tsx +56 -0
  355. package/skills/wix-headless-templates/faq/project/src/hooks/faq/useFaq.ts +53 -0
  356. package/skills/wix-headless-templates/faq/project/src/layouts/Layout.astro +22 -0
  357. package/skills/wix-headless-templates/faq/project/src/layouts/SiteLayout.astro +40 -0
  358. package/skills/wix-headless-templates/faq/project/src/pages/faq.astro +39 -0
  359. package/skills/wix-headless-templates/faq/project/src/pages/index.astro +8 -0
  360. package/skills/wix-headless-templates/faq/project/src/styles/global.css +57 -0
  361. package/skills/wix-headless-templates/faq/project/src/wix/config.ts +16 -0
  362. package/skills/wix-headless-templates/faq/project/src/wix/faq/faq-core.ts +428 -0
  363. package/skills/wix-headless-templates/faq/project/src/wix/faq/faq-store.ts +212 -0
  364. package/skills/wix-headless-templates/faq/project/src/wix/faq/faq.ts +72 -0
  365. package/skills/wix-headless-templates/faq/project/src/wix/faq/types.ts +63 -0
  366. package/skills/wix-headless-templates/faq/project/src/wix/media.ts +106 -0
  367. package/skills/wix-headless-templates/faq/project/src/wix/money.ts +24 -0
  368. package/skills/wix-headless-templates/faq/project/src/wix/sdk.ts +89 -0
  369. package/skills/wix-headless-templates/faq/project/tsconfig.json +5 -0
  370. package/skills/wix-headless-templates/faq/rest/faq.ts +71 -0
  371. package/skills/wix-headless-templates/faq/seed/SEED.md +104 -0
  372. package/skills/wix-headless-templates/faq/seed/read-site.mjs +23 -0
  373. package/skills/wix-headless-templates/faq/seed/seed-faq.mjs +302 -0
  374. package/skills/wix-headless-templates/forms/INSTRUCTIONS.md +417 -0
  375. package/skills/wix-headless-templates/forms/app/hooks/forms/useWixForm.ts +108 -0
  376. package/skills/wix-headless-templates/forms/app/wix/forms/address-templates.generated.ts +13 -0
  377. package/skills/wix-headless-templates/forms/app/wix/forms/form-store.ts +533 -0
  378. package/skills/wix-headless-templates/forms/app/wix/forms/forms-core.ts +671 -0
  379. package/skills/wix-headless-templates/forms/app/wix/forms/forms.ts +57 -0
  380. package/skills/wix-headless-templates/forms/app/wix/forms/submissions-core.ts +423 -0
  381. package/skills/wix-headless-templates/forms/app/wix/forms/submissions.ts +95 -0
  382. package/skills/wix-headless-templates/forms/app/wix/forms/types.ts +284 -0
  383. package/skills/wix-headless-templates/forms/project/README.md +15 -0
  384. package/skills/wix-headless-templates/forms/project/astro.config.mjs +22 -0
  385. package/skills/wix-headless-templates/forms/project/package-lock.json +9102 -0
  386. package/skills/wix-headless-templates/forms/project/package.json +37 -0
  387. package/skills/wix-headless-templates/forms/project/public/favicon.svg +9 -0
  388. package/skills/wix-headless-templates/forms/project/src/assets/astro.svg +1 -0
  389. package/skills/wix-headless-templates/forms/project/src/assets/background.svg +1 -0
  390. package/skills/wix-headless-templates/forms/project/src/assets/wix.svg +18 -0
  391. package/skills/wix-headless-templates/forms/project/src/components/Hero.astro +77 -0
  392. package/skills/wix-headless-templates/forms/project/src/components/Welcome.astro +95 -0
  393. package/skills/wix-headless-templates/forms/project/src/hooks/forms/useWixForm.ts +108 -0
  394. package/skills/wix-headless-templates/forms/project/src/layouts/Layout.astro +22 -0
  395. package/skills/wix-headless-templates/forms/project/src/pages/index.astro +8 -0
  396. package/skills/wix-headless-templates/forms/project/src/styles/global.css +57 -0
  397. package/skills/wix-headless-templates/forms/project/src/wix/config.ts +16 -0
  398. package/skills/wix-headless-templates/forms/project/src/wix/forms/address-templates.generated.ts +13 -0
  399. package/skills/wix-headless-templates/forms/project/src/wix/forms/form-store.ts +533 -0
  400. package/skills/wix-headless-templates/forms/project/src/wix/forms/forms-core.ts +671 -0
  401. package/skills/wix-headless-templates/forms/project/src/wix/forms/forms.ts +57 -0
  402. package/skills/wix-headless-templates/forms/project/src/wix/forms/submissions-core.ts +423 -0
  403. package/skills/wix-headless-templates/forms/project/src/wix/forms/submissions.ts +95 -0
  404. package/skills/wix-headless-templates/forms/project/src/wix/forms/types.ts +284 -0
  405. package/skills/wix-headless-templates/forms/project/src/wix/media.ts +106 -0
  406. package/skills/wix-headless-templates/forms/project/src/wix/money.ts +24 -0
  407. package/skills/wix-headless-templates/forms/project/src/wix/sdk.ts +89 -0
  408. package/skills/wix-headless-templates/forms/project/tsconfig.json +5 -0
  409. package/skills/wix-headless-templates/forms/rest/forms.ts +37 -0
  410. package/skills/wix-headless-templates/forms/rest/submissions.ts +83 -0
  411. package/skills/wix-headless-templates/forms/seed/SEED.md +225 -0
  412. package/skills/wix-headless-templates/forms/seed/read-site.mjs +53 -0
  413. package/skills/wix-headless-templates/forms/seed/seed-forms.mjs +574 -0
  414. package/skills/wix-headless-templates/forms/tooling/address-templates.mjs +96 -0
  415. package/skills/wix-headless-templates/members/INSTRUCTIONS.md +345 -0
  416. package/skills/wix-headless-templates/members/app/components/members/AccountPage.tsx +16 -0
  417. package/skills/wix-headless-templates/members/app/components/members/AccountView.tsx +60 -0
  418. package/skills/wix-headless-templates/members/app/components/members/LoginForm.tsx +165 -0
  419. package/skills/wix-headless-templates/members/app/components/members/MemberMenu.tsx +78 -0
  420. package/skills/wix-headless-templates/members/app/components/members/RequireAuth.tsx +47 -0
  421. package/skills/wix-headless-templates/members/app/hooks/members/useMember.ts +67 -0
  422. package/skills/wix-headless-templates/members/app/wix/members/auth-core.ts +160 -0
  423. package/skills/wix-headless-templates/members/app/wix/members/auth.ts +117 -0
  424. package/skills/wix-headless-templates/members/app/wix/members/client.ts +27 -0
  425. package/skills/wix-headless-templates/members/app/wix/members/member-store.ts +133 -0
  426. package/skills/wix-headless-templates/members/app/wix/members/members-core.ts +43 -0
  427. package/skills/wix-headless-templates/members/app/wix/members/members.ts +29 -0
  428. package/skills/wix-headless-templates/members/app/wix/members/types.ts +21 -0
  429. package/skills/wix-headless-templates/members/app-astro/layouts/SiteLayout.astro +42 -0
  430. package/skills/wix-headless-templates/members/app-astro/pages/account.astro +9 -0
  431. package/skills/wix-headless-templates/members/app-astro/pages/login.astro +11 -0
  432. package/skills/wix-headless-templates/members/project/README.md +15 -0
  433. package/skills/wix-headless-templates/members/project/astro.config.mjs +22 -0
  434. package/skills/wix-headless-templates/members/project/package-lock.json +8892 -0
  435. package/skills/wix-headless-templates/members/project/package.json +37 -0
  436. package/skills/wix-headless-templates/members/project/public/favicon.svg +9 -0
  437. package/skills/wix-headless-templates/members/project/src/assets/astro.svg +1 -0
  438. package/skills/wix-headless-templates/members/project/src/assets/background.svg +1 -0
  439. package/skills/wix-headless-templates/members/project/src/assets/wix.svg +18 -0
  440. package/skills/wix-headless-templates/members/project/src/components/Hero.astro +77 -0
  441. package/skills/wix-headless-templates/members/project/src/components/Welcome.astro +95 -0
  442. package/skills/wix-headless-templates/members/project/src/components/members/AccountPage.tsx +16 -0
  443. package/skills/wix-headless-templates/members/project/src/components/members/AccountView.tsx +60 -0
  444. package/skills/wix-headless-templates/members/project/src/components/members/LoginForm.tsx +165 -0
  445. package/skills/wix-headless-templates/members/project/src/components/members/MemberMenu.tsx +78 -0
  446. package/skills/wix-headless-templates/members/project/src/components/members/RequireAuth.tsx +47 -0
  447. package/skills/wix-headless-templates/members/project/src/hooks/members/useMember.ts +67 -0
  448. package/skills/wix-headless-templates/members/project/src/layouts/Layout.astro +22 -0
  449. package/skills/wix-headless-templates/members/project/src/layouts/SiteLayout.astro +42 -0
  450. package/skills/wix-headless-templates/members/project/src/pages/account.astro +9 -0
  451. package/skills/wix-headless-templates/members/project/src/pages/index.astro +8 -0
  452. package/skills/wix-headless-templates/members/project/src/pages/login.astro +11 -0
  453. package/skills/wix-headless-templates/members/project/src/styles/global.css +57 -0
  454. package/skills/wix-headless-templates/members/project/src/wix/config.ts +16 -0
  455. package/skills/wix-headless-templates/members/project/src/wix/media.ts +106 -0
  456. package/skills/wix-headless-templates/members/project/src/wix/members/auth-core.ts +160 -0
  457. package/skills/wix-headless-templates/members/project/src/wix/members/auth.ts +117 -0
  458. package/skills/wix-headless-templates/members/project/src/wix/members/client.ts +27 -0
  459. package/skills/wix-headless-templates/members/project/src/wix/members/member-store.ts +133 -0
  460. package/skills/wix-headless-templates/members/project/src/wix/members/members-core.ts +43 -0
  461. package/skills/wix-headless-templates/members/project/src/wix/members/members.ts +29 -0
  462. package/skills/wix-headless-templates/members/project/src/wix/members/types.ts +21 -0
  463. package/skills/wix-headless-templates/members/project/src/wix/money.ts +24 -0
  464. package/skills/wix-headless-templates/members/project/src/wix/sdk.ts +89 -0
  465. package/skills/wix-headless-templates/members/project/tsconfig.json +5 -0
  466. package/skills/wix-headless-templates/members/rest/auth.ts +224 -0
  467. package/skills/wix-headless-templates/members/rest/members.ts +26 -0
  468. package/skills/wix-headless-templates/members/seed/SEED.md +39 -0
  469. package/skills/wix-headless-templates/members/seed/read-site.mjs +15 -0
  470. package/skills/wix-headless-templates/members/seed/seed-members.mjs +91 -0
  471. package/skills/wix-headless-templates/portfolio/INSTRUCTIONS.md +315 -0
  472. package/skills/wix-headless-templates/portfolio/app/components/portfolio/CollectionProjectsView.tsx +110 -0
  473. package/skills/wix-headless-templates/portfolio/app/components/portfolio/CollectionsView.tsx +90 -0
  474. package/skills/wix-headless-templates/portfolio/app/components/portfolio/GalleryMedia.tsx +35 -0
  475. package/skills/wix-headless-templates/portfolio/app/components/portfolio/ProjectDetailView.tsx +85 -0
  476. package/skills/wix-headless-templates/portfolio/app/hooks/portfolio/useCollectionProjects.ts +32 -0
  477. package/skills/wix-headless-templates/portfolio/app/hooks/portfolio/useCollections.ts +21 -0
  478. package/skills/wix-headless-templates/portfolio/app/hooks/portfolio/useProjectDetail.ts +31 -0
  479. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/collection-projects-store.ts +82 -0
  480. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/collections-store.ts +58 -0
  481. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/portfolio-core.ts +177 -0
  482. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/portfolio.ts +78 -0
  483. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/project-detail-store.ts +81 -0
  484. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/types.ts +55 -0
  485. package/skills/wix-headless-templates/portfolio/app-astro/layouts/SiteLayout.astro +40 -0
  486. package/skills/wix-headless-templates/portfolio/app-astro/pages/portfolio/[slug].astro +30 -0
  487. package/skills/wix-headless-templates/portfolio/app-astro/pages/portfolio.astro +21 -0
  488. package/skills/wix-headless-templates/portfolio/app-astro/pages/projects/[slug].astro +29 -0
  489. package/skills/wix-headless-templates/portfolio/project/README.md +15 -0
  490. package/skills/wix-headless-templates/portfolio/project/astro.config.mjs +22 -0
  491. package/skills/wix-headless-templates/portfolio/project/package-lock.json +8760 -0
  492. package/skills/wix-headless-templates/portfolio/project/package.json +37 -0
  493. package/skills/wix-headless-templates/portfolio/project/public/favicon.svg +9 -0
  494. package/skills/wix-headless-templates/portfolio/project/src/assets/astro.svg +1 -0
  495. package/skills/wix-headless-templates/portfolio/project/src/assets/background.svg +1 -0
  496. package/skills/wix-headless-templates/portfolio/project/src/assets/wix.svg +18 -0
  497. package/skills/wix-headless-templates/portfolio/project/src/components/Hero.astro +77 -0
  498. package/skills/wix-headless-templates/portfolio/project/src/components/Welcome.astro +95 -0
  499. package/skills/wix-headless-templates/portfolio/project/src/components/portfolio/CollectionProjectsView.tsx +110 -0
  500. package/skills/wix-headless-templates/portfolio/project/src/components/portfolio/CollectionsView.tsx +90 -0
  501. package/skills/wix-headless-templates/portfolio/project/src/components/portfolio/GalleryMedia.tsx +35 -0
  502. package/skills/wix-headless-templates/portfolio/project/src/components/portfolio/ProjectDetailView.tsx +85 -0
  503. package/skills/wix-headless-templates/portfolio/project/src/hooks/portfolio/useCollectionProjects.ts +32 -0
  504. package/skills/wix-headless-templates/portfolio/project/src/hooks/portfolio/useCollections.ts +21 -0
  505. package/skills/wix-headless-templates/portfolio/project/src/hooks/portfolio/useProjectDetail.ts +31 -0
  506. package/skills/wix-headless-templates/portfolio/project/src/layouts/Layout.astro +22 -0
  507. package/skills/wix-headless-templates/portfolio/project/src/layouts/SiteLayout.astro +40 -0
  508. package/skills/wix-headless-templates/portfolio/project/src/pages/index.astro +8 -0
  509. package/skills/wix-headless-templates/portfolio/project/src/pages/portfolio/[slug].astro +30 -0
  510. package/skills/wix-headless-templates/portfolio/project/src/pages/portfolio.astro +21 -0
  511. package/skills/wix-headless-templates/portfolio/project/src/pages/projects/[slug].astro +29 -0
  512. package/skills/wix-headless-templates/portfolio/project/src/styles/global.css +57 -0
  513. package/skills/wix-headless-templates/portfolio/project/src/wix/config.ts +16 -0
  514. package/skills/wix-headless-templates/portfolio/project/src/wix/media.ts +106 -0
  515. package/skills/wix-headless-templates/portfolio/project/src/wix/money.ts +24 -0
  516. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/collection-projects-store.ts +82 -0
  517. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/collections-store.ts +58 -0
  518. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/portfolio-core.ts +177 -0
  519. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/portfolio.ts +78 -0
  520. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/project-detail-store.ts +81 -0
  521. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/types.ts +55 -0
  522. package/skills/wix-headless-templates/portfolio/project/src/wix/sdk.ts +89 -0
  523. package/skills/wix-headless-templates/portfolio/project/tsconfig.json +5 -0
  524. package/skills/wix-headless-templates/portfolio/rest/portfolio.ts +75 -0
  525. package/skills/wix-headless-templates/portfolio/seed/SEED.md +86 -0
  526. package/skills/wix-headless-templates/portfolio/seed/read-site.mjs +20 -0
  527. package/skills/wix-headless-templates/portfolio/seed/seed-portfolio.mjs +253 -0
  528. package/skills/wix-headless-templates/pricing-plans/INSTRUCTIONS.md +376 -0
  529. package/skills/wix-headless-templates/pricing-plans/app/components/pricing-plans/PlanDetailView.tsx +54 -0
  530. package/skills/wix-headless-templates/pricing-plans/app/components/pricing-plans/PlansView.tsx +108 -0
  531. package/skills/wix-headless-templates/pricing-plans/app/components/pricing-plans/RequirePlan.tsx +87 -0
  532. package/skills/wix-headless-templates/pricing-plans/app/components/pricing-plans/SubscribeButton.tsx +41 -0
  533. package/skills/wix-headless-templates/pricing-plans/app/hooks/pricing-plans/usePlanAccess.ts +31 -0
  534. package/skills/wix-headless-templates/pricing-plans/app/hooks/pricing-plans/usePlanPurchase.ts +16 -0
  535. package/skills/wix-headless-templates/pricing-plans/app/hooks/pricing-plans/usePlans.ts +22 -0
  536. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plan-access-core.ts +29 -0
  537. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plan-access-store.ts +92 -0
  538. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plan-access.ts +37 -0
  539. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plan-purchase-store.ts +54 -0
  540. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plans-core.ts +212 -0
  541. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plans-store.ts +64 -0
  542. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plans.ts +54 -0
  543. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/purchase-core.ts +43 -0
  544. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/purchase.ts +22 -0
  545. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/types.ts +52 -0
  546. package/skills/wix-headless-templates/pricing-plans/app-astro/layouts/SiteLayout.astro +41 -0
  547. package/skills/wix-headless-templates/pricing-plans/app-astro/pages/plans/[slug].astro +43 -0
  548. package/skills/wix-headless-templates/pricing-plans/app-astro/pages/plans.astro +21 -0
  549. package/skills/wix-headless-templates/pricing-plans/project/README.md +15 -0
  550. package/skills/wix-headless-templates/pricing-plans/project/astro.config.mjs +22 -0
  551. package/skills/wix-headless-templates/pricing-plans/project/package-lock.json +9799 -0
  552. package/skills/wix-headless-templates/pricing-plans/project/package.json +38 -0
  553. package/skills/wix-headless-templates/pricing-plans/project/public/favicon.svg +9 -0
  554. package/skills/wix-headless-templates/pricing-plans/project/src/assets/astro.svg +1 -0
  555. package/skills/wix-headless-templates/pricing-plans/project/src/assets/background.svg +1 -0
  556. package/skills/wix-headless-templates/pricing-plans/project/src/assets/wix.svg +18 -0
  557. package/skills/wix-headless-templates/pricing-plans/project/src/components/Hero.astro +77 -0
  558. package/skills/wix-headless-templates/pricing-plans/project/src/components/Welcome.astro +95 -0
  559. package/skills/wix-headless-templates/pricing-plans/project/src/components/pricing-plans/PlanDetailView.tsx +54 -0
  560. package/skills/wix-headless-templates/pricing-plans/project/src/components/pricing-plans/PlansView.tsx +108 -0
  561. package/skills/wix-headless-templates/pricing-plans/project/src/components/pricing-plans/RequirePlan.tsx +87 -0
  562. package/skills/wix-headless-templates/pricing-plans/project/src/components/pricing-plans/SubscribeButton.tsx +41 -0
  563. package/skills/wix-headless-templates/pricing-plans/project/src/hooks/pricing-plans/usePlanAccess.ts +31 -0
  564. package/skills/wix-headless-templates/pricing-plans/project/src/hooks/pricing-plans/usePlanPurchase.ts +16 -0
  565. package/skills/wix-headless-templates/pricing-plans/project/src/hooks/pricing-plans/usePlans.ts +22 -0
  566. package/skills/wix-headless-templates/pricing-plans/project/src/layouts/Layout.astro +22 -0
  567. package/skills/wix-headless-templates/pricing-plans/project/src/layouts/SiteLayout.astro +41 -0
  568. package/skills/wix-headless-templates/pricing-plans/project/src/pages/index.astro +8 -0
  569. package/skills/wix-headless-templates/pricing-plans/project/src/pages/plans/[slug].astro +43 -0
  570. package/skills/wix-headless-templates/pricing-plans/project/src/pages/plans.astro +21 -0
  571. package/skills/wix-headless-templates/pricing-plans/project/src/styles/global.css +57 -0
  572. package/skills/wix-headless-templates/pricing-plans/project/src/wix/config.ts +16 -0
  573. package/skills/wix-headless-templates/pricing-plans/project/src/wix/media.ts +106 -0
  574. package/skills/wix-headless-templates/pricing-plans/project/src/wix/money.ts +24 -0
  575. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plan-access-core.ts +29 -0
  576. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plan-access-store.ts +92 -0
  577. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plan-access.ts +37 -0
  578. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plan-purchase-store.ts +54 -0
  579. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plans-core.ts +212 -0
  580. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plans-store.ts +64 -0
  581. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plans.ts +54 -0
  582. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/purchase-core.ts +43 -0
  583. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/purchase.ts +22 -0
  584. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/types.ts +52 -0
  585. package/skills/wix-headless-templates/pricing-plans/project/src/wix/sdk.ts +89 -0
  586. package/skills/wix-headless-templates/pricing-plans/project/tsconfig.json +5 -0
  587. package/skills/wix-headless-templates/pricing-plans/rest/plan-access.ts +31 -0
  588. package/skills/wix-headless-templates/pricing-plans/rest/plans.ts +58 -0
  589. package/skills/wix-headless-templates/pricing-plans/rest/purchase.ts +20 -0
  590. package/skills/wix-headless-templates/pricing-plans/seed/SEED.md +93 -0
  591. package/skills/wix-headless-templates/pricing-plans/seed/read-site.mjs +22 -0
  592. package/skills/wix-headless-templates/pricing-plans/seed/seed-pricing-plans.mjs +301 -0
  593. package/skills/wix-headless-templates/rentals/INSTRUCTIONS.md +309 -0
  594. package/skills/wix-headless-templates/rentals/app/components/rentals/RentalBookingView.tsx +195 -0
  595. package/skills/wix-headless-templates/rentals/app/components/rentals/RentalsView.tsx +89 -0
  596. package/skills/wix-headless-templates/rentals/app/hooks/rentals/useRentalFlow.ts +31 -0
  597. package/skills/wix-headless-templates/rentals/app/hooks/rentals/useRentals.ts +23 -0
  598. package/skills/wix-headless-templates/rentals/app/wix/rentals/rental-flow-store.ts +283 -0
  599. package/skills/wix-headless-templates/rentals/app/wix/rentals/rentals-core.ts +435 -0
  600. package/skills/wix-headless-templates/rentals/app/wix/rentals/rentals-store.ts +112 -0
  601. package/skills/wix-headless-templates/rentals/app/wix/rentals/rentals.ts +173 -0
  602. package/skills/wix-headless-templates/rentals/app/wix/rentals/types.ts +113 -0
  603. package/skills/wix-headless-templates/rentals/app-astro/layouts/SiteLayout.astro +40 -0
  604. package/skills/wix-headless-templates/rentals/app-astro/pages/rentals/[slug].astro +81 -0
  605. package/skills/wix-headless-templates/rentals/app-astro/pages/rentals.astro +24 -0
  606. package/skills/wix-headless-templates/rentals/project/README.md +15 -0
  607. package/skills/wix-headless-templates/rentals/project/astro.config.mjs +22 -0
  608. package/skills/wix-headless-templates/rentals/project/package-lock.json +10545 -0
  609. package/skills/wix-headless-templates/rentals/project/package.json +40 -0
  610. package/skills/wix-headless-templates/rentals/project/public/favicon.svg +9 -0
  611. package/skills/wix-headless-templates/rentals/project/src/assets/astro.svg +1 -0
  612. package/skills/wix-headless-templates/rentals/project/src/assets/background.svg +1 -0
  613. package/skills/wix-headless-templates/rentals/project/src/assets/wix.svg +18 -0
  614. package/skills/wix-headless-templates/rentals/project/src/components/Hero.astro +77 -0
  615. package/skills/wix-headless-templates/rentals/project/src/components/Welcome.astro +95 -0
  616. package/skills/wix-headless-templates/rentals/project/src/components/rentals/RentalBookingView.tsx +195 -0
  617. package/skills/wix-headless-templates/rentals/project/src/components/rentals/RentalsView.tsx +89 -0
  618. package/skills/wix-headless-templates/rentals/project/src/hooks/rentals/useRentalFlow.ts +31 -0
  619. package/skills/wix-headless-templates/rentals/project/src/hooks/rentals/useRentals.ts +23 -0
  620. package/skills/wix-headless-templates/rentals/project/src/layouts/Layout.astro +22 -0
  621. package/skills/wix-headless-templates/rentals/project/src/layouts/SiteLayout.astro +40 -0
  622. package/skills/wix-headless-templates/rentals/project/src/pages/index.astro +8 -0
  623. package/skills/wix-headless-templates/rentals/project/src/pages/rentals/[slug].astro +81 -0
  624. package/skills/wix-headless-templates/rentals/project/src/pages/rentals.astro +24 -0
  625. package/skills/wix-headless-templates/rentals/project/src/styles/global.css +57 -0
  626. package/skills/wix-headless-templates/rentals/project/src/wix/config.ts +16 -0
  627. package/skills/wix-headless-templates/rentals/project/src/wix/media.ts +106 -0
  628. package/skills/wix-headless-templates/rentals/project/src/wix/money.ts +24 -0
  629. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/rental-flow-store.ts +283 -0
  630. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/rentals-core.ts +435 -0
  631. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/rentals-store.ts +112 -0
  632. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/rentals.ts +173 -0
  633. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/types.ts +113 -0
  634. package/skills/wix-headless-templates/rentals/project/src/wix/sdk.ts +89 -0
  635. package/skills/wix-headless-templates/rentals/project/tsconfig.json +5 -0
  636. package/skills/wix-headless-templates/rentals/rest/rentals.ts +153 -0
  637. package/skills/wix-headless-templates/rentals/seed/SEED.md +95 -0
  638. package/skills/wix-headless-templates/rentals/seed/read-site.mjs +34 -0
  639. package/skills/wix-headless-templates/rentals/seed/seed-rentals.mjs +321 -0
  640. package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +468 -0
  641. package/skills/wix-headless-templates/restaurants/app/components/restaurants/MenuView.tsx +257 -0
  642. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartButton.tsx +26 -0
  643. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +121 -0
  644. package/skills/wix-headless-templates/restaurants/app/components/restaurants/ReservationView.tsx +212 -0
  645. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useMenus.ts +34 -0
  646. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +52 -0
  647. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useReservation.ts +49 -0
  648. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/menu-core.ts +333 -0
  649. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/menu-store.ts +89 -0
  650. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/menu.ts +109 -0
  651. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +141 -0
  652. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +287 -0
  653. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +237 -0
  654. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/reservation-store.ts +279 -0
  655. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/reservations-core.ts +218 -0
  656. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/reservations.ts +109 -0
  657. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/time-core.ts +118 -0
  658. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +337 -0
  659. package/skills/wix-headless-templates/restaurants/app-astro/layouts/SiteLayout.astro +47 -0
  660. package/skills/wix-headless-templates/restaurants/app-astro/pages/menu.astro +22 -0
  661. package/skills/wix-headless-templates/restaurants/app-astro/pages/reservations.astro +12 -0
  662. package/skills/wix-headless-templates/restaurants/project/README.md +15 -0
  663. package/skills/wix-headless-templates/restaurants/project/astro.config.mjs +22 -0
  664. package/skills/wix-headless-templates/restaurants/project/package-lock.json +11038 -0
  665. package/skills/wix-headless-templates/restaurants/project/package.json +40 -0
  666. package/skills/wix-headless-templates/restaurants/project/public/favicon.svg +9 -0
  667. package/skills/wix-headless-templates/restaurants/project/src/assets/astro.svg +1 -0
  668. package/skills/wix-headless-templates/restaurants/project/src/assets/background.svg +1 -0
  669. package/skills/wix-headless-templates/restaurants/project/src/assets/wix.svg +18 -0
  670. package/skills/wix-headless-templates/restaurants/project/src/components/Hero.astro +77 -0
  671. package/skills/wix-headless-templates/restaurants/project/src/components/Welcome.astro +95 -0
  672. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/MenuView.tsx +257 -0
  673. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartButton.tsx +26 -0
  674. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +121 -0
  675. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/ReservationView.tsx +212 -0
  676. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useMenus.ts +34 -0
  677. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +52 -0
  678. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useReservation.ts +49 -0
  679. package/skills/wix-headless-templates/restaurants/project/src/layouts/Layout.astro +22 -0
  680. package/skills/wix-headless-templates/restaurants/project/src/layouts/SiteLayout.astro +47 -0
  681. package/skills/wix-headless-templates/restaurants/project/src/pages/index.astro +8 -0
  682. package/skills/wix-headless-templates/restaurants/project/src/pages/menu.astro +22 -0
  683. package/skills/wix-headless-templates/restaurants/project/src/pages/reservations.astro +12 -0
  684. package/skills/wix-headless-templates/restaurants/project/src/styles/global.css +57 -0
  685. package/skills/wix-headless-templates/restaurants/project/src/wix/config.ts +16 -0
  686. package/skills/wix-headless-templates/restaurants/project/src/wix/media.ts +106 -0
  687. package/skills/wix-headless-templates/restaurants/project/src/wix/money.ts +24 -0
  688. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/menu-core.ts +333 -0
  689. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/menu-store.ts +89 -0
  690. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/menu.ts +109 -0
  691. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +141 -0
  692. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +287 -0
  693. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +237 -0
  694. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/reservation-store.ts +279 -0
  695. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/reservations-core.ts +218 -0
  696. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/reservations.ts +109 -0
  697. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/time-core.ts +118 -0
  698. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +337 -0
  699. package/skills/wix-headless-templates/restaurants/project/src/wix/sdk.ts +89 -0
  700. package/skills/wix-headless-templates/restaurants/project/tsconfig.json +5 -0
  701. package/skills/wix-headless-templates/restaurants/rest/menu.ts +96 -0
  702. package/skills/wix-headless-templates/restaurants/rest/ordering.ts +222 -0
  703. package/skills/wix-headless-templates/restaurants/rest/reservations.ts +102 -0
  704. package/skills/wix-headless-templates/restaurants/seed/SEED.md +118 -0
  705. package/skills/wix-headless-templates/restaurants/seed/read-site.mjs +25 -0
  706. package/skills/wix-headless-templates/restaurants/seed/seed-restaurants.mjs +577 -0
  707. package/skills/wix-headless-templates/shared/CONTENT.md +22 -0
  708. package/skills/wix-headless-templates/shared/CUSTOM_OPERATIONS.md +100 -0
  709. package/skills/wix-headless-templates/shared/DESIGN.md +37 -0
  710. package/skills/wix-headless-templates/shared/SUPPLIED-CONTENT.md +27 -0
  711. package/skills/wix-headless-templates/shared/app/styles/global.css +57 -0
  712. package/skills/wix-headless-templates/shared/app/wix/config.ts +16 -0
  713. package/skills/wix-headless-templates/shared/app/wix/media.ts +106 -0
  714. package/skills/wix-headless-templates/shared/app/wix/money.ts +24 -0
  715. package/skills/wix-headless-templates/shared/app/wix/sdk.ts +89 -0
  716. package/skills/wix-headless-templates/shared/capabilities/media-upload/app/wix/media-upload/client.ts +46 -0
  717. package/skills/wix-headless-templates/shared/capabilities/media-upload/app-astro/pages/api/wix/media-upload.ts +69 -0
  718. package/skills/wix-headless-templates/shared/capabilities/site-search/INSTRUCTIONS.md +194 -0
  719. package/skills/wix-headless-templates/shared/capabilities/site-search/app/components/site-search/SearchBox.tsx +136 -0
  720. package/skills/wix-headless-templates/shared/capabilities/site-search/app/components/site-search/SearchHit.tsx +50 -0
  721. package/skills/wix-headless-templates/shared/capabilities/site-search/app/components/site-search/SearchResults.tsx +300 -0
  722. package/skills/wix-headless-templates/shared/capabilities/site-search/app/hooks/site-search/useSearch.ts +31 -0
  723. package/skills/wix-headless-templates/shared/capabilities/site-search/app/hooks/site-search/useSuggest.ts +26 -0
  724. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/search-core.ts +520 -0
  725. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/search-store.ts +235 -0
  726. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/search.ts +80 -0
  727. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/suggest-store.ts +178 -0
  728. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/types.ts +158 -0
  729. package/skills/wix-headless-templates/shared/capabilities/site-search/app-astro/pages/search.astro +33 -0
  730. package/skills/wix-headless-templates/shared/capabilities/site-search/rest/search.ts +82 -0
  731. package/skills/wix-headless-templates/shared/capabilities/site-search/seed/install.mjs +43 -0
  732. package/skills/wix-headless-templates/shared/rest/client.ts +155 -0
  733. package/skills/wix-headless-templates/shared/rest/config.ts +4 -0
  734. package/skills/wix-headless-templates/shared/rest/media.ts +92 -0
  735. package/skills/wix-headless-templates/shared/seed/images.mjs +183 -0
  736. package/skills/wix-headless-templates/shared/seed/read-site.mjs +97 -0
  737. package/skills/wix-headless-templates/shared/seed/site-context.mjs +70 -0
  738. package/skills/wix-headless-templates/shared/seed/site.mjs +48 -0
  739. package/skills/wix-headless-templates/shared/seed/wix-cli.mjs +44 -0
  740. package/skills/wix-headless-templates/storefront/INSTRUCTIONS.md +685 -0
  741. package/skills/wix-headless-templates/storefront/app/components/storefront/CartButton.tsx +26 -0
  742. package/skills/wix-headless-templates/storefront/app/components/storefront/CartDrawer.tsx +239 -0
  743. package/skills/wix-headless-templates/storefront/app/components/storefront/FilterPanel.tsx +267 -0
  744. package/skills/wix-headless-templates/storefront/app/components/storefront/OptionPicker.tsx +171 -0
  745. package/skills/wix-headless-templates/storefront/app/components/storefront/QuickAdd.tsx +148 -0
  746. package/skills/wix-headless-templates/storefront/app/hooks/storefront/useCart.ts +59 -0
  747. package/skills/wix-headless-templates/storefront/app/hooks/storefront/useProductDetail.ts +42 -0
  748. package/skills/wix-headless-templates/storefront/app/hooks/storefront/useShop.ts +34 -0
  749. package/skills/wix-headless-templates/storefront/app/wix/storefront/cart-core.ts +220 -0
  750. package/skills/wix-headless-templates/storefront/app/wix/storefront/cart-store.ts +134 -0
  751. package/skills/wix-headless-templates/storefront/app/wix/storefront/cart.ts +187 -0
  752. package/skills/wix-headless-templates/storefront/app/wix/storefront/catalog-core.ts +698 -0
  753. package/skills/wix-headless-templates/storefront/app/wix/storefront/catalog.ts +260 -0
  754. package/skills/wix-headless-templates/storefront/app/wix/storefront/product-detail-store.ts +280 -0
  755. package/skills/wix-headless-templates/storefront/app/wix/storefront/shop-store.ts +341 -0
  756. package/skills/wix-headless-templates/storefront/app/wix/storefront/types.ts +305 -0
  757. package/skills/wix-headless-templates/storefront/app-astro/layouts/SiteLayout.astro +65 -0
  758. package/skills/wix-headless-templates/storefront/project/README.md +15 -0
  759. package/skills/wix-headless-templates/storefront/project/astro.config.mjs +22 -0
  760. package/skills/wix-headless-templates/storefront/project/package-lock.json +10786 -0
  761. package/skills/wix-headless-templates/storefront/project/package.json +41 -0
  762. package/skills/wix-headless-templates/storefront/project/public/favicon.svg +9 -0
  763. package/skills/wix-headless-templates/storefront/project/src/assets/astro.svg +1 -0
  764. package/skills/wix-headless-templates/storefront/project/src/assets/background.svg +1 -0
  765. package/skills/wix-headless-templates/storefront/project/src/assets/wix.svg +18 -0
  766. package/skills/wix-headless-templates/storefront/project/src/components/Hero.astro +77 -0
  767. package/skills/wix-headless-templates/storefront/project/src/components/Welcome.astro +95 -0
  768. package/skills/wix-headless-templates/storefront/project/src/components/storefront/CartButton.tsx +26 -0
  769. package/skills/wix-headless-templates/storefront/project/src/components/storefront/CartDrawer.tsx +239 -0
  770. package/skills/wix-headless-templates/storefront/project/src/components/storefront/FilterPanel.tsx +267 -0
  771. package/skills/wix-headless-templates/storefront/project/src/components/storefront/OptionPicker.tsx +171 -0
  772. package/skills/wix-headless-templates/storefront/project/src/components/storefront/QuickAdd.tsx +148 -0
  773. package/skills/wix-headless-templates/storefront/project/src/hooks/storefront/useCart.ts +59 -0
  774. package/skills/wix-headless-templates/storefront/project/src/hooks/storefront/useProductDetail.ts +42 -0
  775. package/skills/wix-headless-templates/storefront/project/src/hooks/storefront/useShop.ts +34 -0
  776. package/skills/wix-headless-templates/storefront/project/src/layouts/Layout.astro +22 -0
  777. package/skills/wix-headless-templates/storefront/project/src/layouts/SiteLayout.astro +65 -0
  778. package/skills/wix-headless-templates/storefront/project/src/pages/index.astro +8 -0
  779. package/skills/wix-headless-templates/storefront/project/src/styles/global.css +57 -0
  780. package/skills/wix-headless-templates/storefront/project/src/wix/config.ts +16 -0
  781. package/skills/wix-headless-templates/storefront/project/src/wix/media.ts +106 -0
  782. package/skills/wix-headless-templates/storefront/project/src/wix/money.ts +24 -0
  783. package/skills/wix-headless-templates/storefront/project/src/wix/sdk.ts +89 -0
  784. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/cart-core.ts +220 -0
  785. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/cart-store.ts +134 -0
  786. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/cart.ts +187 -0
  787. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/catalog-core.ts +698 -0
  788. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/catalog.ts +260 -0
  789. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/product-detail-store.ts +280 -0
  790. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/shop-store.ts +341 -0
  791. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/types.ts +305 -0
  792. package/skills/wix-headless-templates/storefront/project/tsconfig.json +5 -0
  793. package/skills/wix-headless-templates/storefront/rest/cart.ts +183 -0
  794. package/skills/wix-headless-templates/storefront/rest/catalog.ts +267 -0
  795. package/skills/wix-headless-templates/storefront/seed/SEED.md +169 -0
  796. package/skills/wix-headless-templates/storefront/seed/read-site.mjs +38 -0
  797. package/skills/wix-headless-templates/storefront/seed/seed-store.mjs +839 -0
  798. package/skills/wix-manage/SKILL.md +11 -7
  799. package/skills/wix-manage/references/bookings/end-to-end-booking-flow.md +1 -1
  800. package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +206 -0
  801. package/skills/wix-manage/references/site-properties/change-payment-currency-site-properties.md +17 -24
  802. package/skills/wix-manage/references/sites/create-headless-site.md +2 -0
  803. package/skills/wix-manage/references/sites/upload-static-site.md +262 -171
  804. package/skills/wix-manage/references/stores/update-product-with-options.md +1 -1
  805. package/skills/wix-app/references/dashboard-page/DRAFT_TEMPLATE_COLLECTION.md +0 -184
  806. package/skills/wix-app/references/dashboard-page/DRAFT_TEMPLATE_ROUTER.md +0 -204
  807. package/skills/wix-app/references/dashboard-page/DRAFT_TEMPLATE_SETTINGS.md +0 -44
  808. package/skills/wix-headless/entry/bootstrap.mjs +0 -156
  809. package/skills/wix-headless/entry/skill.md +0 -78
  810. package/skills/wix-headless-kit/cold-start/bootstrap.mjs +0 -156
  811. package/skills/wix-headless-kit/cold-start/cold-start.md +0 -111
  812. package/skills/wix-manage/references/bookings/booking-system-integration-gaps.md +0 -423
@@ -0,0 +1,41 @@
1
+ ---
2
+ // The site chrome for every pricing-plans page — THIS file (header/footer/nav) plus the
3
+ // @theme token block in src/styles/global.css are what you brand. Keep the
4
+ // <slot name="seo-tags" /> in <head> and the global.css import. (Deploy is fill-only: if
5
+ // another vertical is already deployed, its SiteLayout won — merge a Plans nav link there
6
+ // instead.)
7
+ import "../styles/global.css";
8
+
9
+ interface Props {
10
+ title: string;
11
+ description?: string;
12
+ }
13
+ const { title, description } = Astro.props;
14
+ ---
15
+
16
+ <!doctype html>
17
+ <html lang="en">
18
+ <head>
19
+ <meta charset="UTF-8" />
20
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
21
+ <title>{title}</title>
22
+ {description && <meta name="description" content={description} />}
23
+ <slot name="seo-tags" />
24
+ </head>
25
+ <body>
26
+ <header class="sticky top-0 z-40 border-b border-border bg-background/80 backdrop-blur">
27
+ <div class="mx-auto flex h-16 max-w-6xl items-center justify-between px-6">
28
+ <a href="/" class="text-base font-bold tracking-tight text-foreground no-underline">Brand Name</a>
29
+ <nav class="flex items-center gap-6 text-sm">
30
+ <a href="/plans" class="text-foreground no-underline transition-colors hover:text-muted-foreground">Plans</a>
31
+ </nav>
32
+ </div>
33
+ </header>
34
+ <main class="mx-auto max-w-6xl px-6 pb-24 pt-10">
35
+ <slot />
36
+ </main>
37
+ <footer class="border-t border-border px-6 py-10 text-center text-sm text-muted-foreground">
38
+ © Brand Name
39
+ </footer>
40
+ </body>
41
+ </html>
@@ -0,0 +1,8 @@
1
+ ---
2
+ import Hero from '../components/Hero.astro';
3
+ import Layout from '../layouts/Layout.astro';
4
+ ---
5
+
6
+ <Layout>
7
+ <Hero />
8
+ </Layout>
@@ -0,0 +1,43 @@
1
+ ---
2
+ // Plan detail page.
3
+ //
4
+ // Pricing Plans has no documented owner-editable SEO item type (unlike bookings services /
5
+ // store products), so this page carries plain <title>/<meta> from the DTO — no wixMetadata,
6
+ // no <SEO.Tags>. The island is client:load: the plan arrives as an SSR-fetched prop; only
7
+ // the purchase action runs client-side.
8
+ import SiteLayout from "../../layouts/SiteLayout.astro";
9
+ import PlanDetailView from "../../components/pricing-plans/PlanDetailView";
10
+ import { fetchPlanBySlug } from "../../wix/pricing-plans/plans";
11
+ import { PLAN_IMAGE_RATIO } from "../../wix/pricing-plans/plans-core";
12
+ import { imgAttrs } from "../../wix/media";
13
+ import type { PlanDetail } from "../../wix/pricing-plans/types";
14
+
15
+ const slug = Astro.params.slug!;
16
+
17
+ let plan: PlanDetail | null = null;
18
+ try {
19
+ plan = await fetchPlanBySlug(slug);
20
+ } catch {
21
+ // Guarded: an unhandled SSR throw truncates the response mid-stream.
22
+ }
23
+
24
+ if (!plan) {
25
+ return new Response(null, { status: 404 });
26
+ }
27
+ ---
28
+
29
+ <SiteLayout title={plan.name} description={plan.description || undefined}>
30
+ <div class="mx-auto max-w-2xl">
31
+ <!-- The DTO image is 16:9 (plans-core PLAN_IMAGE_RATIO); the band matches it, so nothing is cropped. -->
32
+ {plan.imageUrl && (
33
+ <div class="mb-6 aspect-[16/9] max-h-[40vh] overflow-hidden rounded-xl bg-secondary">
34
+ <img {...imgAttrs(plan.imageUrl, "(min-width: 768px) 672px, 100vw", PLAN_IMAGE_RATIO)} alt={plan.name} class="h-full w-full object-cover" />
35
+ </div>
36
+ )}
37
+ <h1 class="text-2xl font-semibold tracking-tight">{plan.name}</h1>
38
+ {plan.description && <p class="mt-2 text-muted-foreground">{plan.description}</p>}
39
+ <div class="mt-6">
40
+ <PlanDetailView client:load plan={plan} />
41
+ </div>
42
+ </div>
43
+ </SiteLayout>
@@ -0,0 +1,21 @@
1
+ ---
2
+ // Plans & Pricing — data fetched SERVER-SIDE (SEO) and handed to the island as DTO props.
3
+ // Keep this frontmatter; swap the island import to YOUR pricing component.
4
+ import SiteLayout from "../layouts/SiteLayout.astro";
5
+ import PlansView from "../components/pricing-plans/PlansView";
6
+ import { fetchPlans } from "../wix/pricing-plans/plans";
7
+ import type { PlanSummary } from "../wix/pricing-plans/types";
8
+
9
+ let plans: PlanSummary[] = [];
10
+ try {
11
+ plans = await fetchPlans();
12
+ } catch {
13
+ // An unguarded SSR throw truncates the response mid-stream; the island renders the
14
+ // empty state instead.
15
+ }
16
+ ---
17
+
18
+ <SiteLayout title="Plans & Pricing">
19
+ <h1 class="mb-8 text-2xl font-semibold tracking-tight">Plans &amp; Pricing</h1>
20
+ <PlansView client:load initialPlans={plans} />
21
+ </SiteLayout>
@@ -0,0 +1,57 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Wix+Madefor+Text:wght@400;500;600;700;800&display=swap');
2
+ @import 'tailwindcss';
3
+
4
+ /* ─── THE design system ─────────────────────────────────────────────────────────────────
5
+ Theme the entire store by editing THIS @theme block (same token family as the official
6
+ Wix headless templates). Every shipped component styles itself from these via Tailwind
7
+ utilities (bg-primary, text-muted-foreground, text-destructive, rounded-lg, …) — change a token, everything
8
+ follows. A dark theme is just flipped values (dark background/foreground, adjusted
9
+ secondary/border). Don't restyle shipped component markup; restyle the tokens.
10
+
11
+ Choosing values: argue polarity from the business — light is not "cheap" (wellness/food
12
+ usually read better light); never dark-by-default for "premium". Palette: one dominant +
13
+ accents from ADJACENT hues (~30° arc), 2-4 colors total. Every background/foreground pair
14
+ you set must hit WCAG 4.5:1 (3:1 for text ≥24px); body copy never below 16px/1.5. Derive
15
+ from THIS brand — a look repeated across projects is a failure, not a shortcut. The user's
16
+ explicit direction beats all of this except the contrast floor. */
17
+ @theme {
18
+ --color-background: hsl(0 0% 100%);
19
+ --color-foreground: hsl(230 24% 14%);
20
+ --color-primary: hsl(230 24% 14%);
21
+ --color-primary-foreground: hsl(0 0% 100%);
22
+ --color-secondary: hsl(228 24% 96%);
23
+ --color-secondary-foreground: hsl(230 24% 14%);
24
+ --color-muted-foreground: hsl(228 8% 46%);
25
+ --color-border: hsl(220 14% 90%);
26
+ --color-destructive: hsl(0 72% 51%);
27
+
28
+ --radius-lg: 12px;
29
+ --radius-md: 8px;
30
+ --radius-sm: 6px;
31
+ /* Buttons, chips, labels, steppers and the progress bar. Follows --radius-md unless the brand
32
+ wants otherwise: 9999px is the pill, 0 is square. Genuine circles (swatches, avatars, dots)
33
+ stay rounded-full and do not read this. */
34
+ --radius-control: var(--radius-md);
35
+
36
+ --font-sans: 'Wix Madefor Text', system-ui, sans-serif;
37
+ }
38
+
39
+ @layer base {
40
+ body {
41
+ background-color: var(--color-background);
42
+ color: var(--color-foreground);
43
+ font-family: var(--font-sans);
44
+ -webkit-font-smoothing: antialiased;
45
+ font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11';
46
+ }
47
+ }
48
+
49
+ @layer utilities {
50
+ .eyebrow {
51
+ font-size: 0.8125rem;
52
+ font-weight: 600;
53
+ letter-spacing: 0.1em;
54
+ text-transform: uppercase;
55
+ color: var(--color-muted-foreground);
56
+ }
57
+ }
@@ -0,0 +1,16 @@
1
+ // Wix connection config — written by the skill's deploy step (install/deploy.mjs).
2
+ //
3
+ // WIX_CLIENT_ID = null → ambient auth (a Wix-managed Astro project: `@wix/astro` authenticates
4
+ // every SDK call automatically; there is no client and nothing to set).
5
+ // WIX_CLIENT_ID = "..." → manual visitor client (any other React setup): the public OAuth client id.
6
+ // It is NOT a secret — it only mints anonymous visitor tokens — so
7
+ // hardcoding and committing it is fine. deploy.mjs copies it from `.env.local`
8
+ // (`WIX_CLIENT_ID`, what `wix env pull` writes): the CONTENT site's app — on a
9
+ // migration preview the site being migrated, while wix.config.json names
10
+ // only the deploy target.
11
+ export const WIX_CLIENT_ID: string | null = null;
12
+
13
+ // Kept for projects deployed before the Members vertical moved onto the shared seam; the shipped
14
+ // members code no longer reads it (ambient Astro uses the built-in /api/auth routes, manual mode
15
+ // uses the shared client above). deploy.mjs still fills it so older code keeps compiling.
16
+ export const WIX_MEMBERS_CLIENT_ID: string | null = null;
@@ -0,0 +1,106 @@
1
+ // Wix media resolution — define once, use on EVERY image render path. Copy as-is.
2
+ //
3
+ // SDK media fields come back either as an already-absolute https URL, or as a
4
+ // `wix:image://v1/<hash>/<file>#originWidth=…` identifier that a browser cannot load
5
+ // (ERR_UNKNOWN_URL_SCHEME). The wix:image:// form must go through the SDK media module;
6
+ // never hand-build a static.wixstatic.com URL (wrong format → 403).
7
+ // docs: https://dev.wix.com/docs/sdk/core-modules/sdk/media.md
8
+ import { media } from "@wix/sdk";
9
+
10
+ type MediaLike =
11
+ | string
12
+ | null
13
+ | undefined
14
+ | { image?: unknown; url?: string | null; id?: string | null };
15
+
16
+ /** A bare Wix media file id (`e6a89e_06cf…~mv2.png`): what REST-shaped media objects carry as `url` and `id`. */
17
+ const BARE_FILE_ID = /^[\w-]+~mv2\.[a-z0-9]+$/i;
18
+
19
+ function rawOf(value: MediaLike): string {
20
+ if (!value) return "";
21
+ if (typeof value === "string") return value;
22
+ if (value.image != null && typeof value.image === "object") return rawOf(value.image as MediaLike); // { image: { id, url } }
23
+ return (typeof value.image === "string" ? value.image : null) ?? value.url ?? value.id ?? "";
24
+ }
25
+
26
+ /** Resolve any Wix media value to a browser-loadable URL ("" when absent). */
27
+ export function imgSrc(value: MediaLike, width = 600, height = 600): string {
28
+ const v = rawOf(value);
29
+ if (!v) return "";
30
+ if (v.startsWith("wix:image://")) {
31
+ return media.getScaledToFillImageUrl(v, width, height, {});
32
+ }
33
+ // A bare file id (what REST-shaped media objects carry) or an absolute Wix media URL (bare, or
34
+ // already carrying a /v1/fill/ segment at some other size): re-issue it through the scaler at the
35
+ // requested size, so every image path lands on one shape.
36
+ const file = BARE_FILE_ID.test(v) ? v : v.match(/^https:\/\/static\.wixstatic\.com\/media\/([^/?#]+)/)?.[1];
37
+ if (file) return `https://static.wixstatic.com/media/${file}/v1/fill/w_${width},h_${height},al_c,q_90/${file}`;
38
+ return v;
39
+ }
40
+
41
+ /**
42
+ * Responsive candidates for `srcset`: the same image at several widths through Wix's scaler, so a
43
+ * card never downloads a hero-sized file. Pair with `sizes`:
44
+ * <img src={imgSrc(m, 640, 640)} srcSet={imgSrcSet(m)} sizes="(min-width: 1024px) 25vw, 50vw"
45
+ * width={640} height={640} loading="lazy" alt={…} />
46
+ * Accepts every form an image reaches you in: a raw `wix:image://` id, an ALREADY-RESOLVED Wix URL
47
+ * (what the DTOs carry — `imageUrl`, `gallery[]`; its `/v1/fill/w_…,h_…` segment is rewritten per
48
+ * width), or any other https URL (returned as the single candidate). `ratio` is height/width
49
+ * (1 = square). "" only when there is no image at all — still set `src` as well.
50
+ */
51
+ export function imgSrcSet(value: MediaLike, widths: number[] = [320, 480, 640, 960], ratio = 1): string {
52
+ const raw = rawOf(value);
53
+ if (!raw) return "";
54
+ if (raw.startsWith("wix:image://") || BARE_FILE_ID.test(raw)) {
55
+ return widths.map((w) => `${imgSrc(value, w, Math.round(w * ratio))} ${w}w`).join(", ");
56
+ }
57
+ // A resolved Wix URL: …/v1/fill/w_800,h_800,al_c,… — swap the size for each width.
58
+ const FILL = /\/v1\/fill\/w_\d+,h_\d+/;
59
+ if (/static\.wixstatic\.com\//.test(raw) && FILL.test(raw)) {
60
+ return widths.map((w) => `${raw.replace(FILL, `/v1/fill/w_${w},h_${Math.round(w * ratio)}`)} ${w}w`).join(", ");
61
+ }
62
+ return raw; // one candidate, never an empty srcset for a real image
63
+ }
64
+
65
+ /**
66
+ * Everything an <img> needs for one Wix image, so a tile can never ship `srcSet` without `src`:
67
+ * <img {...imgAttrs(p.imageUrl, "(min-width: 1024px) 25vw, 50vw")} alt={p.name} />
68
+ * `sizes` is the width the image renders at (a CSS length or media-query list); `ratio` is
69
+ * height/width. Returns an empty object when there is no image — render your placeholder then.
70
+ */
71
+ export function imgAttrs(value: MediaLike, sizes: string, ratio = 1): { src: string; srcSet: string; sizes: string; loading: "lazy"; decoding: "async" } | Record<string, never> {
72
+ const src = imgSrc(value, 640, Math.round(640 * ratio));
73
+ if (!src) return {};
74
+ return { src, srcSet: imgSrcSet(value, undefined, ratio), sizes, loading: "lazy", decoding: "async" };
75
+ }
76
+
77
+ /**
78
+ * Height/width of a Wix image when the value carries its size: a raw
79
+ * `wix:image://…#originWidth=W&originHeight=H` id (the natural size) or a resolved `/v1/fill/w_W,h_H/`
80
+ * URL (the size it was scaled to). null when neither is present. Pass it as `ratio` to keep a
81
+ * srcset at the image's own aspect instead of the square default:
82
+ * <img {...imgAttrs(item.photo, "33vw", imgRatio(item.photo) ?? 1)} alt={…} />
83
+ */
84
+ export function imgRatio(value: MediaLike): number | null {
85
+ const v = rawOf(value);
86
+ if (typeof v !== "string" || !v) return null;
87
+ const size = v.startsWith("wix:image://")
88
+ ? [v.match(/[#&]originWidth=(\d+)/)?.[1], v.match(/[#&]originHeight=(\d+)/)?.[1]]
89
+ : (v.match(/\/v1\/fill\/w_(\d+),h_(\d+)/)?.slice(1) ?? []);
90
+ const w = Number(size[0]);
91
+ const h = Number(size[1]);
92
+ return w > 0 && h > 0 ? h / w : null;
93
+ }
94
+
95
+ /**
96
+ * The identity of a media value BEFORE scaling — de-duplicate galleries on this, never on a
97
+ * resolved URL (two scaled URLs of one photo differ in their size parameters).
98
+ */
99
+ export function mediaKey(value: MediaLike): string {
100
+ const v = rawOf(value);
101
+ if (!v) return "";
102
+ // The file id, whichever form the value takes — a raw id and a resolved URL of one photo share it.
103
+ if (v.startsWith("wix:image://")) return v.slice("wix:image://v1/".length).split("/")[0].split("#")[0];
104
+ const m = v.match(/^https:\/\/static\.wixstatic\.com\/media\/([^/?#]+)/);
105
+ return m ? m[1] : v;
106
+ }
@@ -0,0 +1,24 @@
1
+ // Money formatting for API amounts that carry no formatted string. Copy as-is.
2
+ //
3
+ // Catalog prices come with a ready `formattedAmount` — use that directly. But eCom Cart V2
4
+ // amounts are ConvertedMoney `{ amount, convertedAmount }` with NO formatted string, and the
5
+ // currency lives on the cart, not on the money object. Never hardcode "$" or assume USD.
6
+ export interface ConvertedMoneyLike {
7
+ amount?: string | null;
8
+ convertedAmount?: string | null;
9
+ }
10
+
11
+ /** Format a ConvertedMoney in the given currency, using the visitor's locale. */
12
+ export function formatMoney(
13
+ money: ConvertedMoneyLike | null | undefined,
14
+ currencyCode: string | null | undefined,
15
+ ): string {
16
+ const value = money?.convertedAmount ?? money?.amount;
17
+ if (value == null || value === "") return "";
18
+ const currency = currencyCode || "USD";
19
+ try {
20
+ return new Intl.NumberFormat(undefined, { style: "currency", currency }).format(Number(value));
21
+ } catch {
22
+ return `${value} ${currency}`;
23
+ }
24
+ }
@@ -0,0 +1,29 @@
1
+ // Plan-access (paywall) rules — transport-agnostic, imported by BOTH transports: ./plan-access.ts
2
+ // (the SDK) and the REST twin in templates/pricing-plans/rest/plan-access.ts (fetch). What "has
3
+ // access" MEANS and what the member-orders read asks for live HERE, once. Type-only imports: a
4
+ // strip to JS emits none.
5
+ import type { Raw } from "./plans-core";
6
+
7
+ /** The one order status that grants access: purchased, started, not paused/ended/canceled. */
8
+ export const ACCESS_ORDER_STATUSES = ["ACTIVE"] as const;
9
+
10
+ /** The Member List Orders filter both transports send. */
11
+ export interface MemberOrdersQuery {
12
+ planIds: string[];
13
+ orderStatuses: readonly ("ACTIVE")[];
14
+ }
15
+
16
+ /** The filter for "the current member's ACTIVE orders for these plans"; throws on an empty plan list. */
17
+ export function memberOrdersQuery(requiredPlanIds: string[]): MemberOrdersQuery {
18
+ if (!requiredPlanIds.length) throw new Error("At least one required plan id is needed to check access.");
19
+ return { planIds: requiredPlanIds, orderStatuses: ACCESS_ORDER_STATUSES };
20
+ }
21
+
22
+ /**
23
+ * Access = the member has at least one order with status ACTIVE whose planId is one of the required
24
+ * plans. Re-checked here even though the query already filtered (a caller may pass orders it read
25
+ * for another reason). Visitors never reach this: they have no orders to list.
26
+ */
27
+ export function hasPlanAccess(orders: Raw[] | null | undefined, requiredPlanIds: string[]): boolean {
28
+ return (orders ?? []).some((o) => o?.status === "ACTIVE" && requiredPlanIds.includes(o?.planId));
29
+ }
@@ -0,0 +1,92 @@
1
+ // Plan access (paywall) as a framework-free store — the logic behind usePlanAccess, usable from
2
+ // React (usePlanAccess wraps it with useSyncExternalStore), from a static page or Vue/Svelte
3
+ // (subscribe and render), or as the specification for a port. State, subscribe/getState,
4
+ // check/stop, emit after every change.
5
+ //
6
+ // It does not know who is logged in — that is the `members` vertical's session (its store's
7
+ // `{ loggedIn, loading }`), handed in through `check(session)`. The rules: while the session is
8
+ // still loading, so is access; a visitor has no access and NO call is made (Member List Orders is
9
+ // member-only — it would be refused); a member gets one read, re-run only when the session flips.
10
+ // A failed read leaves `hasAccess: false` with the message in `error` — gated content stays closed.
11
+ //
12
+ // SSR-friendly: `initialAccess` (resolved in frontmatter with hasActiveOrderFor under a member
13
+ // session) renders at once with no client call. One store per gated surface: createPlanAccessStore().
14
+ // It imports the data layer by names the REST twin exports identically, so the same file runs over
15
+ // the SDK in Astro and over REST on a static page.
16
+ import { hasActiveOrderFor, type MemberOrdersCall } from "./plan-access";
17
+
18
+ /** The slice of the members session this store reads — the members store's `{ loggedIn, loading }` fits as-is. */
19
+ export interface PlanAccessSession {
20
+ loggedIn: boolean;
21
+ /** True until the session read settles — access stays `loading` too. */
22
+ loading: boolean;
23
+ }
24
+
25
+ export interface PlanAccessStoreOptions {
26
+ /** The plans that grant access (any one of them). Fixed for the store's life. */
27
+ planIds: string[];
28
+ /** Resolved server-side → no client call. */
29
+ initialAccess?: boolean;
30
+ /** A Member List Orders call bound to the member's client — needed on a manual-client stack (see plan-access.ts). */
31
+ call?: MemberOrdersCall;
32
+ }
33
+
34
+ /** Everything a gated surface renders from. */
35
+ export interface PlanAccessState {
36
+ /** False until proven: a visitor, a member without an active order, a failed read, or still loading. */
37
+ hasAccess: boolean;
38
+ /** True while the session or the orders read is unsettled — render a neutral state, never the fallback. */
39
+ loading: boolean;
40
+ /** The failed read's message (null when none). */
41
+ error: string | null;
42
+ }
43
+
44
+ export interface PlanAccessStore {
45
+ getState(): PlanAccessState;
46
+ subscribe(listener: () => void): () => void;
47
+ /** Feed the current session; call again whenever it changes (the hook does, on every render that changes it). */
48
+ check(session: PlanAccessSession): void;
49
+ /** Stop reacting; drop a late response. */
50
+ stop(): void;
51
+ }
52
+
53
+ export function createPlanAccessStore({ planIds, initialAccess, call }: PlanAccessStoreOptions): PlanAccessStore {
54
+ let state: PlanAccessState = { hasAccess: initialAccess ?? false, loading: initialAccess === undefined, error: null };
55
+ let stopped = false;
56
+ /** The loggedIn value the last read ran for — a member is read once, not on every render. */
57
+ let readFor: boolean | null = initialAccess === undefined ? null : true;
58
+ const listeners = new Set<() => void>();
59
+
60
+ function setState(patch: Partial<PlanAccessState>): void {
61
+ state = { ...state, ...patch };
62
+ for (const fn of listeners) fn();
63
+ }
64
+
65
+ return {
66
+ getState: () => state,
67
+ subscribe(fn) {
68
+ listeners.add(fn);
69
+ return () => listeners.delete(fn);
70
+ },
71
+ check(session) {
72
+ stopped = false;
73
+ if (session.loading) {
74
+ if (!state.loading) setState({ loading: true });
75
+ return;
76
+ }
77
+ if (readFor === session.loggedIn) return;
78
+ readFor = session.loggedIn;
79
+ if (!session.loggedIn) {
80
+ setState({ hasAccess: false, loading: false, error: null }); // a visitor: no orders, no call
81
+ return;
82
+ }
83
+ setState({ loading: true, error: null });
84
+ hasActiveOrderFor(planIds, call)
85
+ .then((hasAccess) => { if (!stopped) setState({ hasAccess, loading: false }); })
86
+ .catch((e) => { if (!stopped) setState({ hasAccess: false, loading: false, error: e instanceof Error ? e.message : String(e) }); });
87
+ },
88
+ stop() {
89
+ stopped = true;
90
+ },
91
+ };
92
+ }
@@ -0,0 +1,37 @@
1
+ // Plan access (paywall) over the SDK — does the CURRENT MEMBER hold an active order for one of the
2
+ // required plans? Member List Orders is a MEMBER call: it lists the caller's own orders and is
3
+ // refused for a visitor, so callers check the session first (the store does) and never call for a
4
+ // visitor. The rule lives in ./plan-access-core (shared with the REST twin); this file is the
5
+ // transport only.
6
+ //
7
+ // The session it needs comes from the `members` vertical (custom login), which this vertical does
8
+ // not ship — so the call path is injectable:
9
+ // default — the shared seam (../sdk `wixModule`). On managed Astro that is ambient auth, which
10
+ // runs as the member once the members vertical's login has written the wixSession
11
+ // cookie (its client.ts does), in islands and in frontmatter alike.
12
+ // manual client (React SPA, lib) — the shared seam holds a VISITOR token; pass a call bound to the
13
+ // member's client instead, e.g. from templates/members' client.ts strategy:
14
+ // `createClient({ auth: membersAuth, modules: { orders } }).orders.memberListOrders`.
15
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/pricing-plans/orders/member-list-orders.md
16
+ import { orders as ordersModule } from "@wix/pricing-plans";
17
+ import { wixModule } from "../sdk";
18
+ import { hasPlanAccess, memberOrdersQuery, type MemberOrdersQuery } from "./plan-access-core";
19
+ import type { Raw } from "./plans-core";
20
+
21
+ export type { MemberOrdersQuery };
22
+
23
+ /** An already-authenticated Member List Orders call: the query in, the raw `{ orders }` response out. */
24
+ export type MemberOrdersCall = (query: MemberOrdersQuery) => Promise<Raw>;
25
+
26
+ const orders = wixModule(ordersModule);
27
+ const sharedSeam: MemberOrdersCall = (query) => orders.memberListOrders({ planIds: query.planIds, orderStatuses: [...query.orderStatuses] }) as Promise<Raw>;
28
+
29
+ /**
30
+ * True when the current member has an ACTIVE order for one of `requiredPlanIds`. Member-only —
31
+ * throws when the call is refused (a visitor, an expired session); the store shields that.
32
+ * `call` defaults to the shared seam; pass one bound to the member's client on a manual-client stack.
33
+ */
34
+ export async function hasActiveOrderFor(requiredPlanIds: string[], call: MemberOrdersCall = sharedSeam): Promise<boolean> {
35
+ const res = await call(memberOrdersQuery(requiredPlanIds));
36
+ return hasPlanAccess(res?.orders as Raw[] | undefined, requiredPlanIds);
37
+ }
@@ -0,0 +1,54 @@
1
+ // The purchase action as a framework-free store — the logic behind usePlanPurchase, usable from
2
+ // React (usePlanPurchase wraps it), from a static page's card or detail CTA, from Vue/Svelte, or
3
+ // as the specification for a port. All correctness (the hosted redirect session, member
4
+ // login/signup, payment) lives in the data layer; this store tracks the in-flight plan and the
5
+ // last failure, and navigates the FULL document to the hosted checkout.
6
+ //
7
+ // One store per purchase surface (a grid and a detail CTA each key their own spinner):
8
+ // createPlanPurchaseStore(), not a singleton. No async work on mount, so no start/stop.
9
+ import { purchasePlan, type PurchaseOptions } from "./purchase";
10
+
11
+ export interface PlanPurchaseState {
12
+ /** The plan id a purchase is in flight for (null when idle) — key CTA spinners off it. */
13
+ purchasingId: string | null;
14
+ /** The last failed purchase's visitor-facing message; a new purchase clears it. */
15
+ error: string | null;
16
+ }
17
+
18
+ export interface PlanPurchaseStore {
19
+ getState(): PlanPurchaseState;
20
+ subscribe(listener: () => void): () => void;
21
+ /**
22
+ * Starts the hosted checkout — when it resolves the browser is already navigating away, and
23
+ * `purchasingId` stays set. Rejects (and records `error`) otherwise — surface it, don't swallow it.
24
+ */
25
+ purchase(planId: string, options?: PurchaseOptions): Promise<void>;
26
+ }
27
+
28
+ export function createPlanPurchaseStore(): PlanPurchaseStore {
29
+ let state: PlanPurchaseState = { purchasingId: null, error: null };
30
+ const listeners = new Set<() => void>();
31
+
32
+ function setState(patch: Partial<PlanPurchaseState>): void {
33
+ state = { ...state, ...patch };
34
+ for (const fn of listeners) fn();
35
+ }
36
+
37
+ return {
38
+ getState: () => state,
39
+ subscribe(fn) {
40
+ listeners.add(fn);
41
+ return () => listeners.delete(fn);
42
+ },
43
+ async purchase(planId, options) {
44
+ setState({ purchasingId: planId, error: null });
45
+ try {
46
+ window.location.href = await purchasePlan(planId, options);
47
+ // stays "purchasing" — the browser is leaving for the hosted checkout
48
+ } catch (e) {
49
+ setState({ purchasingId: null, error: e instanceof Error ? e.message : String(e) });
50
+ throw e;
51
+ }
52
+ },
53
+ };
54
+ }