@wix/agent-skills 1.26.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 (805) hide show
  1. package/README.md +1 -0
  2. package/package.json +1 -1
  3. package/skills/wix-app/SKILL.md +7 -5
  4. package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
  5. package/skills/wix-app/references/dashboard-page/DRAFT_TEMPLATE.md +14 -2
  6. package/skills/wix-app/references/dashboard-page/UX_SUCCESS_MODEL.md +4 -5
  7. package/skills/wix-headless-kit/SKILL.md +31 -14
  8. package/skills/wix-headless-kit/guides/existing-site.md +12 -5
  9. package/skills/wix-headless-kit/install/attach.mjs +55 -10
  10. package/skills/wix-headless-kit/install/check.mjs +5 -5
  11. package/skills/wix-headless-kit/install/deploy.mjs +7 -3
  12. package/skills/wix-headless-kit/install/templates.mjs +21 -17
  13. package/skills/wix-headless-templates/SKILL.md +43 -0
  14. package/skills/wix-headless-templates/blank/project/README.md +15 -0
  15. package/skills/wix-headless-templates/blank/project/astro.config.mjs +20 -0
  16. package/skills/wix-headless-templates/blank/project/package.json +34 -0
  17. package/skills/wix-headless-templates/blank/project/public/favicon.svg +9 -0
  18. package/skills/wix-headless-templates/blank/project/src/assets/astro.svg +1 -0
  19. package/skills/wix-headless-templates/blank/project/src/assets/background.svg +1 -0
  20. package/skills/wix-headless-templates/blank/project/src/assets/wix.svg +18 -0
  21. package/skills/wix-headless-templates/blank/project/src/components/Hero.astro +77 -0
  22. package/skills/wix-headless-templates/blank/project/src/components/Welcome.astro +95 -0
  23. package/skills/wix-headless-templates/blank/project/src/layouts/Layout.astro +22 -0
  24. package/skills/wix-headless-templates/blank/project/src/pages/index.astro +8 -0
  25. package/skills/wix-headless-templates/blank/project/tsconfig.json +5 -0
  26. package/skills/wix-headless-templates/blog/INSTRUCTIONS.md +418 -0
  27. package/skills/wix-headless-templates/blog/app/components/blog/BlogFeedView.tsx +191 -0
  28. package/skills/wix-headless-templates/blog/app/components/blog/CommentsView.tsx +206 -0
  29. package/skills/wix-headless-templates/blog/app/components/blog/PostLikeButton.tsx +62 -0
  30. package/skills/wix-headless-templates/blog/app/components/blog/PostView.tsx +139 -0
  31. package/skills/wix-headless-templates/blog/app/components/blog/RichContent.tsx +42 -0
  32. package/skills/wix-headless-templates/blog/app/hooks/blog/useBlogFeed.ts +31 -0
  33. package/skills/wix-headless-templates/blog/app/hooks/blog/useComments.ts +26 -0
  34. package/skills/wix-headless-templates/blog/app/hooks/blog/usePost.ts +25 -0
  35. package/skills/wix-headless-templates/blog/app/wix/blog/authors-core.ts +51 -0
  36. package/skills/wix-headless-templates/blog/app/wix/blog/authors.ts +50 -0
  37. package/skills/wix-headless-templates/blog/app/wix/blog/blog-feed-store.ts +156 -0
  38. package/skills/wix-headless-templates/blog/app/wix/blog/comments-core.ts +189 -0
  39. package/skills/wix-headless-templates/blog/app/wix/blog/comments-store.ts +214 -0
  40. package/skills/wix-headless-templates/blog/app/wix/blog/comments.ts +84 -0
  41. package/skills/wix-headless-templates/blog/app/wix/blog/post-likes.ts +42 -0
  42. package/skills/wix-headless-templates/blog/app/wix/blog/post-store.ts +158 -0
  43. package/skills/wix-headless-templates/blog/app/wix/blog/posts-core.ts +347 -0
  44. package/skills/wix-headless-templates/blog/app/wix/blog/posts.ts +132 -0
  45. package/skills/wix-headless-templates/blog/app/wix/blog/taxonomy-core.ts +80 -0
  46. package/skills/wix-headless-templates/blog/app/wix/blog/taxonomy.ts +78 -0
  47. package/skills/wix-headless-templates/blog/app/wix/blog/types.ts +161 -0
  48. package/skills/wix-headless-templates/blog/app-astro/layouts/SiteLayout.astro +44 -0
  49. package/skills/wix-headless-templates/blog/app-astro/pages/blog/[...slug].astro +148 -0
  50. package/skills/wix-headless-templates/blog/app-astro/pages/blog/category/[slug].astro +97 -0
  51. package/skills/wix-headless-templates/blog/app-astro/pages/blog/tag/[slug].astro +51 -0
  52. package/skills/wix-headless-templates/blog/app-astro/pages/blog.astro +34 -0
  53. package/skills/wix-headless-templates/blog/project/README.md +15 -0
  54. package/skills/wix-headless-templates/blog/project/astro.config.mjs +22 -0
  55. package/skills/wix-headless-templates/blog/project/package-lock.json +14699 -0
  56. package/skills/wix-headless-templates/blog/project/package.json +39 -0
  57. package/skills/wix-headless-templates/blog/project/public/favicon.svg +9 -0
  58. package/skills/wix-headless-templates/blog/project/src/assets/astro.svg +1 -0
  59. package/skills/wix-headless-templates/blog/project/src/assets/background.svg +1 -0
  60. package/skills/wix-headless-templates/blog/project/src/assets/wix.svg +18 -0
  61. package/skills/wix-headless-templates/blog/project/src/components/Hero.astro +77 -0
  62. package/skills/wix-headless-templates/blog/project/src/components/Welcome.astro +95 -0
  63. package/skills/wix-headless-templates/blog/project/src/components/blog/BlogFeedView.tsx +191 -0
  64. package/skills/wix-headless-templates/blog/project/src/components/blog/CommentsView.tsx +206 -0
  65. package/skills/wix-headless-templates/blog/project/src/components/blog/PostLikeButton.tsx +62 -0
  66. package/skills/wix-headless-templates/blog/project/src/components/blog/PostView.tsx +139 -0
  67. package/skills/wix-headless-templates/blog/project/src/components/blog/RichContent.tsx +42 -0
  68. package/skills/wix-headless-templates/blog/project/src/hooks/blog/useBlogFeed.ts +31 -0
  69. package/skills/wix-headless-templates/blog/project/src/hooks/blog/useComments.ts +26 -0
  70. package/skills/wix-headless-templates/blog/project/src/hooks/blog/usePost.ts +25 -0
  71. package/skills/wix-headless-templates/blog/project/src/layouts/Layout.astro +22 -0
  72. package/skills/wix-headless-templates/blog/project/src/layouts/SiteLayout.astro +44 -0
  73. package/skills/wix-headless-templates/blog/project/src/pages/blog/[...slug].astro +148 -0
  74. package/skills/wix-headless-templates/blog/project/src/pages/blog/category/[slug].astro +97 -0
  75. package/skills/wix-headless-templates/blog/project/src/pages/blog/tag/[slug].astro +51 -0
  76. package/skills/wix-headless-templates/blog/project/src/pages/blog.astro +34 -0
  77. package/skills/wix-headless-templates/blog/project/src/pages/index.astro +8 -0
  78. package/skills/wix-headless-templates/blog/project/src/styles/global.css +57 -0
  79. package/skills/wix-headless-templates/blog/project/src/wix/blog/authors-core.ts +51 -0
  80. package/skills/wix-headless-templates/blog/project/src/wix/blog/authors.ts +50 -0
  81. package/skills/wix-headless-templates/blog/project/src/wix/blog/blog-feed-store.ts +156 -0
  82. package/skills/wix-headless-templates/blog/project/src/wix/blog/comments-core.ts +189 -0
  83. package/skills/wix-headless-templates/blog/project/src/wix/blog/comments-store.ts +214 -0
  84. package/skills/wix-headless-templates/blog/project/src/wix/blog/comments.ts +84 -0
  85. package/skills/wix-headless-templates/blog/project/src/wix/blog/post-likes.ts +42 -0
  86. package/skills/wix-headless-templates/blog/project/src/wix/blog/post-store.ts +158 -0
  87. package/skills/wix-headless-templates/blog/project/src/wix/blog/posts-core.ts +347 -0
  88. package/skills/wix-headless-templates/blog/project/src/wix/blog/posts.ts +132 -0
  89. package/skills/wix-headless-templates/blog/project/src/wix/blog/taxonomy-core.ts +80 -0
  90. package/skills/wix-headless-templates/blog/project/src/wix/blog/taxonomy.ts +78 -0
  91. package/skills/wix-headless-templates/blog/project/src/wix/blog/types.ts +161 -0
  92. package/skills/wix-headless-templates/blog/project/src/wix/config.ts +16 -0
  93. package/skills/wix-headless-templates/blog/project/src/wix/media.ts +106 -0
  94. package/skills/wix-headless-templates/blog/project/src/wix/money.ts +24 -0
  95. package/skills/wix-headless-templates/blog/project/src/wix/sdk.ts +89 -0
  96. package/skills/wix-headless-templates/blog/project/tsconfig.json +5 -0
  97. package/skills/wix-headless-templates/blog/rest/authors.ts +39 -0
  98. package/skills/wix-headless-templates/blog/rest/comments.ts +64 -0
  99. package/skills/wix-headless-templates/blog/rest/post-likes.ts +37 -0
  100. package/skills/wix-headless-templates/blog/rest/posts.ts +123 -0
  101. package/skills/wix-headless-templates/blog/rest/taxonomy.ts +79 -0
  102. package/skills/wix-headless-templates/blog/seed/SEED.md +81 -0
  103. package/skills/wix-headless-templates/blog/seed/read-site.mjs +33 -0
  104. package/skills/wix-headless-templates/blog/seed/seed-blog.mjs +337 -0
  105. package/skills/wix-headless-templates/bookings/INSTRUCTIONS.md +356 -0
  106. package/skills/wix-headless-templates/bookings/app/components/bookings/ServiceBookingView.tsx +369 -0
  107. package/skills/wix-headless-templates/bookings/app/components/bookings/ServicesView.tsx +193 -0
  108. package/skills/wix-headless-templates/bookings/app/hooks/bookings/useBookingFlow.ts +56 -0
  109. package/skills/wix-headless-templates/bookings/app/hooks/bookings/useServices.ts +23 -0
  110. package/skills/wix-headless-templates/bookings/app/wix/bookings/booking-core.ts +614 -0
  111. package/skills/wix-headless-templates/bookings/app/wix/bookings/booking-flow-store.ts +410 -0
  112. package/skills/wix-headless-templates/bookings/app/wix/bookings/booking.ts +227 -0
  113. package/skills/wix-headless-templates/bookings/app/wix/bookings/services-core.ts +366 -0
  114. package/skills/wix-headless-templates/bookings/app/wix/bookings/services-store.ts +213 -0
  115. package/skills/wix-headless-templates/bookings/app/wix/bookings/services.ts +100 -0
  116. package/skills/wix-headless-templates/bookings/app/wix/bookings/types.ts +236 -0
  117. package/skills/wix-headless-templates/bookings/app-astro/layouts/SiteLayout.astro +40 -0
  118. package/skills/wix-headless-templates/bookings/app-astro/pages/services/[slug].astro +81 -0
  119. package/skills/wix-headless-templates/bookings/app-astro/pages/services.astro +40 -0
  120. package/skills/wix-headless-templates/bookings/project/README.md +15 -0
  121. package/skills/wix-headless-templates/bookings/project/astro.config.mjs +22 -0
  122. package/skills/wix-headless-templates/bookings/project/package-lock.json +10546 -0
  123. package/skills/wix-headless-templates/bookings/project/package.json +41 -0
  124. package/skills/wix-headless-templates/bookings/project/public/favicon.svg +9 -0
  125. package/skills/wix-headless-templates/bookings/project/src/assets/astro.svg +1 -0
  126. package/skills/wix-headless-templates/bookings/project/src/assets/background.svg +1 -0
  127. package/skills/wix-headless-templates/bookings/project/src/assets/wix.svg +18 -0
  128. package/skills/wix-headless-templates/bookings/project/src/components/Hero.astro +77 -0
  129. package/skills/wix-headless-templates/bookings/project/src/components/Welcome.astro +95 -0
  130. package/skills/wix-headless-templates/bookings/project/src/components/bookings/ServiceBookingView.tsx +369 -0
  131. package/skills/wix-headless-templates/bookings/project/src/components/bookings/ServicesView.tsx +193 -0
  132. package/skills/wix-headless-templates/bookings/project/src/hooks/bookings/useBookingFlow.ts +56 -0
  133. package/skills/wix-headless-templates/bookings/project/src/hooks/bookings/useServices.ts +23 -0
  134. package/skills/wix-headless-templates/bookings/project/src/layouts/Layout.astro +22 -0
  135. package/skills/wix-headless-templates/bookings/project/src/layouts/SiteLayout.astro +40 -0
  136. package/skills/wix-headless-templates/bookings/project/src/pages/index.astro +8 -0
  137. package/skills/wix-headless-templates/bookings/project/src/pages/services/[slug].astro +81 -0
  138. package/skills/wix-headless-templates/bookings/project/src/pages/services.astro +40 -0
  139. package/skills/wix-headless-templates/bookings/project/src/styles/global.css +57 -0
  140. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/booking-core.ts +614 -0
  141. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/booking-flow-store.ts +410 -0
  142. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/booking.ts +227 -0
  143. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/services-core.ts +366 -0
  144. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/services-store.ts +213 -0
  145. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/services.ts +100 -0
  146. package/skills/wix-headless-templates/bookings/project/src/wix/bookings/types.ts +236 -0
  147. package/skills/wix-headless-templates/bookings/project/src/wix/config.ts +16 -0
  148. package/skills/wix-headless-templates/bookings/project/src/wix/media.ts +106 -0
  149. package/skills/wix-headless-templates/bookings/project/src/wix/money.ts +24 -0
  150. package/skills/wix-headless-templates/bookings/project/src/wix/sdk.ts +89 -0
  151. package/skills/wix-headless-templates/bookings/project/tsconfig.json +5 -0
  152. package/skills/wix-headless-templates/bookings/rest/booking.ts +227 -0
  153. package/skills/wix-headless-templates/bookings/rest/services.ts +94 -0
  154. package/skills/wix-headless-templates/bookings/seed/SEED.md +109 -0
  155. package/skills/wix-headless-templates/bookings/seed/read-site.mjs +28 -0
  156. package/skills/wix-headless-templates/bookings/seed/seed-bookings.mjs +407 -0
  157. package/skills/wix-headless-templates/cms/INSTRUCTIONS.md +399 -0
  158. package/skills/wix-headless-templates/cms/app/hooks/cms/useCollection.ts +82 -0
  159. package/skills/wix-headless-templates/cms/app/hooks/cms/useItem.ts +37 -0
  160. package/skills/wix-headless-templates/cms/app/wix/cms/collection-store.ts +220 -0
  161. package/skills/wix-headless-templates/cms/app/wix/cms/collections-core.ts +41 -0
  162. package/skills/wix-headless-templates/cms/app/wix/cms/collections.ts +28 -0
  163. package/skills/wix-headless-templates/cms/app/wix/cms/item-store.ts +93 -0
  164. package/skills/wix-headless-templates/cms/app/wix/cms/items-core.ts +259 -0
  165. package/skills/wix-headless-templates/cms/app/wix/cms/items.ts +182 -0
  166. package/skills/wix-headless-templates/cms/app/wix/cms/types.ts +138 -0
  167. package/skills/wix-headless-templates/cms/app-astro/layouts/SiteLayout.astro +41 -0
  168. package/skills/wix-headless-templates/cms/project/README.md +15 -0
  169. package/skills/wix-headless-templates/cms/project/astro.config.mjs +22 -0
  170. package/skills/wix-headless-templates/cms/project/package-lock.json +9798 -0
  171. package/skills/wix-headless-templates/cms/project/package.json +37 -0
  172. package/skills/wix-headless-templates/cms/project/public/favicon.svg +9 -0
  173. package/skills/wix-headless-templates/cms/project/src/assets/astro.svg +1 -0
  174. package/skills/wix-headless-templates/cms/project/src/assets/background.svg +1 -0
  175. package/skills/wix-headless-templates/cms/project/src/assets/wix.svg +18 -0
  176. package/skills/wix-headless-templates/cms/project/src/components/Hero.astro +77 -0
  177. package/skills/wix-headless-templates/cms/project/src/components/Welcome.astro +95 -0
  178. package/skills/wix-headless-templates/cms/project/src/hooks/cms/useCollection.ts +82 -0
  179. package/skills/wix-headless-templates/cms/project/src/hooks/cms/useItem.ts +37 -0
  180. package/skills/wix-headless-templates/cms/project/src/layouts/Layout.astro +22 -0
  181. package/skills/wix-headless-templates/cms/project/src/layouts/SiteLayout.astro +41 -0
  182. package/skills/wix-headless-templates/cms/project/src/pages/index.astro +8 -0
  183. package/skills/wix-headless-templates/cms/project/src/styles/global.css +57 -0
  184. package/skills/wix-headless-templates/cms/project/src/wix/cms/collection-store.ts +220 -0
  185. package/skills/wix-headless-templates/cms/project/src/wix/cms/collections-core.ts +41 -0
  186. package/skills/wix-headless-templates/cms/project/src/wix/cms/collections.ts +28 -0
  187. package/skills/wix-headless-templates/cms/project/src/wix/cms/item-store.ts +93 -0
  188. package/skills/wix-headless-templates/cms/project/src/wix/cms/items-core.ts +259 -0
  189. package/skills/wix-headless-templates/cms/project/src/wix/cms/items.ts +182 -0
  190. package/skills/wix-headless-templates/cms/project/src/wix/cms/types.ts +138 -0
  191. package/skills/wix-headless-templates/cms/project/src/wix/config.ts +16 -0
  192. package/skills/wix-headless-templates/cms/project/src/wix/media.ts +106 -0
  193. package/skills/wix-headless-templates/cms/project/src/wix/money.ts +24 -0
  194. package/skills/wix-headless-templates/cms/project/src/wix/sdk.ts +89 -0
  195. package/skills/wix-headless-templates/cms/project/tsconfig.json +5 -0
  196. package/skills/wix-headless-templates/cms/rest/collections.ts +25 -0
  197. package/skills/wix-headless-templates/cms/rest/items.ts +189 -0
  198. package/skills/wix-headless-templates/cms/seed/SEED.md +116 -0
  199. package/skills/wix-headless-templates/cms/seed/read-site.mjs +20 -0
  200. package/skills/wix-headless-templates/cms/seed/seed-cms.mjs +321 -0
  201. package/skills/wix-headless-templates/compose.mjs +83 -0
  202. package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +349 -0
  203. package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +155 -0
  204. package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +46 -0
  205. package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +49 -0
  206. package/skills/wix-headless-templates/donations/app/hooks/donations/useCampaigns.ts +21 -0
  207. package/skills/wix-headless-templates/donations/app/hooks/donations/useDonation.ts +27 -0
  208. package/skills/wix-headless-templates/donations/app/hooks/donations/useDonationReceipt.ts +19 -0
  209. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns-store.ts +59 -0
  210. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +83 -0
  211. package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +95 -0
  212. package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +163 -0
  213. package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +466 -0
  214. package/skills/wix-headless-templates/donations/app/wix/donations/receipt-store.ts +55 -0
  215. package/skills/wix-headless-templates/donations/app/wix/donations/types.ts +121 -0
  216. package/skills/wix-headless-templates/donations/app-astro/components/donations/CampaignPage.astro +43 -0
  217. package/skills/wix-headless-templates/donations/app-astro/layouts/SiteLayout.astro +45 -0
  218. package/skills/wix-headless-templates/donations/app-astro/pages/donate/[id].astro +28 -0
  219. package/skills/wix-headless-templates/donations/app-astro/pages/donate/index.astro +51 -0
  220. package/skills/wix-headless-templates/donations/app-astro/pages/donate/thank-you.astro +13 -0
  221. package/skills/wix-headless-templates/donations/project/README.md +15 -0
  222. package/skills/wix-headless-templates/donations/project/astro.config.mjs +22 -0
  223. package/skills/wix-headless-templates/donations/project/package-lock.json +10266 -0
  224. package/skills/wix-headless-templates/donations/project/package.json +39 -0
  225. package/skills/wix-headless-templates/donations/project/public/favicon.svg +9 -0
  226. package/skills/wix-headless-templates/donations/project/src/assets/astro.svg +1 -0
  227. package/skills/wix-headless-templates/donations/project/src/assets/background.svg +1 -0
  228. package/skills/wix-headless-templates/donations/project/src/assets/wix.svg +18 -0
  229. package/skills/wix-headless-templates/donations/project/src/components/Hero.astro +77 -0
  230. package/skills/wix-headless-templates/donations/project/src/components/Welcome.astro +95 -0
  231. package/skills/wix-headless-templates/donations/project/src/components/donations/CampaignPage.astro +43 -0
  232. package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +155 -0
  233. package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +46 -0
  234. package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +49 -0
  235. package/skills/wix-headless-templates/donations/project/src/hooks/donations/useCampaigns.ts +21 -0
  236. package/skills/wix-headless-templates/donations/project/src/hooks/donations/useDonation.ts +27 -0
  237. package/skills/wix-headless-templates/donations/project/src/hooks/donations/useDonationReceipt.ts +19 -0
  238. package/skills/wix-headless-templates/donations/project/src/layouts/Layout.astro +22 -0
  239. package/skills/wix-headless-templates/donations/project/src/layouts/SiteLayout.astro +45 -0
  240. package/skills/wix-headless-templates/donations/project/src/pages/donate/[id].astro +28 -0
  241. package/skills/wix-headless-templates/donations/project/src/pages/donate/index.astro +51 -0
  242. package/skills/wix-headless-templates/donations/project/src/pages/donate/thank-you.astro +13 -0
  243. package/skills/wix-headless-templates/donations/project/src/pages/index.astro +8 -0
  244. package/skills/wix-headless-templates/donations/project/src/styles/global.css +57 -0
  245. package/skills/wix-headless-templates/donations/project/src/wix/config.ts +16 -0
  246. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns-store.ts +59 -0
  247. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +83 -0
  248. package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +95 -0
  249. package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +163 -0
  250. package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +466 -0
  251. package/skills/wix-headless-templates/donations/project/src/wix/donations/receipt-store.ts +55 -0
  252. package/skills/wix-headless-templates/donations/project/src/wix/donations/types.ts +121 -0
  253. package/skills/wix-headless-templates/donations/project/src/wix/media.ts +106 -0
  254. package/skills/wix-headless-templates/donations/project/src/wix/money.ts +24 -0
  255. package/skills/wix-headless-templates/donations/project/src/wix/sdk.ts +89 -0
  256. package/skills/wix-headless-templates/donations/project/tsconfig.json +5 -0
  257. package/skills/wix-headless-templates/donations/rest/campaigns.ts +76 -0
  258. package/skills/wix-headless-templates/donations/rest/donate.ts +90 -0
  259. package/skills/wix-headless-templates/donations/seed/SEED.md +90 -0
  260. package/skills/wix-headless-templates/donations/seed/read-site.mjs +33 -0
  261. package/skills/wix-headless-templates/donations/seed/seed-donations.mjs +250 -0
  262. package/skills/wix-headless-templates/events/INSTRUCTIONS.md +387 -0
  263. package/skills/wix-headless-templates/events/app/components/events/EventConfirmationView.tsx +139 -0
  264. package/skills/wix-headless-templates/events/app/components/events/EventRegistrationView.tsx +375 -0
  265. package/skills/wix-headless-templates/events/app/components/events/EventsView.tsx +134 -0
  266. package/skills/wix-headless-templates/events/app/hooks/events/useEventConfirmation.ts +21 -0
  267. package/skills/wix-headless-templates/events/app/hooks/events/useEventRegistration.ts +40 -0
  268. package/skills/wix-headless-templates/events/app/hooks/events/useEvents.ts +24 -0
  269. package/skills/wix-headless-templates/events/app/wix/events/events-core.ts +379 -0
  270. package/skills/wix-headless-templates/events/app/wix/events/events-store.ts +175 -0
  271. package/skills/wix-headless-templates/events/app/wix/events/events.ts +124 -0
  272. package/skills/wix-headless-templates/events/app/wix/events/order-store.ts +143 -0
  273. package/skills/wix-headless-templates/events/app/wix/events/orders-core.ts +86 -0
  274. package/skills/wix-headless-templates/events/app/wix/events/orders.ts +30 -0
  275. package/skills/wix-headless-templates/events/app/wix/events/registration-core.ts +415 -0
  276. package/skills/wix-headless-templates/events/app/wix/events/registration-store.ts +237 -0
  277. package/skills/wix-headless-templates/events/app/wix/events/registration.ts +109 -0
  278. package/skills/wix-headless-templates/events/app/wix/events/types.ts +249 -0
  279. package/skills/wix-headless-templates/events/app-astro/layouts/SiteLayout.astro +40 -0
  280. package/skills/wix-headless-templates/events/app-astro/pages/event-confirmation.astro +12 -0
  281. package/skills/wix-headless-templates/events/app-astro/pages/events/[slug].astro +104 -0
  282. package/skills/wix-headless-templates/events/app-astro/pages/events.astro +23 -0
  283. package/skills/wix-headless-templates/events/project/README.md +15 -0
  284. package/skills/wix-headless-templates/events/project/astro.config.mjs +22 -0
  285. package/skills/wix-headless-templates/events/project/package-lock.json +10497 -0
  286. package/skills/wix-headless-templates/events/project/package.json +39 -0
  287. package/skills/wix-headless-templates/events/project/public/favicon.svg +9 -0
  288. package/skills/wix-headless-templates/events/project/src/assets/astro.svg +1 -0
  289. package/skills/wix-headless-templates/events/project/src/assets/background.svg +1 -0
  290. package/skills/wix-headless-templates/events/project/src/assets/wix.svg +18 -0
  291. package/skills/wix-headless-templates/events/project/src/components/Hero.astro +77 -0
  292. package/skills/wix-headless-templates/events/project/src/components/Welcome.astro +95 -0
  293. package/skills/wix-headless-templates/events/project/src/components/events/EventConfirmationView.tsx +139 -0
  294. package/skills/wix-headless-templates/events/project/src/components/events/EventRegistrationView.tsx +375 -0
  295. package/skills/wix-headless-templates/events/project/src/components/events/EventsView.tsx +134 -0
  296. package/skills/wix-headless-templates/events/project/src/hooks/events/useEventConfirmation.ts +21 -0
  297. package/skills/wix-headless-templates/events/project/src/hooks/events/useEventRegistration.ts +40 -0
  298. package/skills/wix-headless-templates/events/project/src/hooks/events/useEvents.ts +24 -0
  299. package/skills/wix-headless-templates/events/project/src/layouts/Layout.astro +22 -0
  300. package/skills/wix-headless-templates/events/project/src/layouts/SiteLayout.astro +40 -0
  301. package/skills/wix-headless-templates/events/project/src/pages/event-confirmation.astro +12 -0
  302. package/skills/wix-headless-templates/events/project/src/pages/events/[slug].astro +104 -0
  303. package/skills/wix-headless-templates/events/project/src/pages/events.astro +23 -0
  304. package/skills/wix-headless-templates/events/project/src/pages/index.astro +8 -0
  305. package/skills/wix-headless-templates/events/project/src/styles/global.css +57 -0
  306. package/skills/wix-headless-templates/events/project/src/wix/config.ts +16 -0
  307. package/skills/wix-headless-templates/events/project/src/wix/events/events-core.ts +379 -0
  308. package/skills/wix-headless-templates/events/project/src/wix/events/events-store.ts +175 -0
  309. package/skills/wix-headless-templates/events/project/src/wix/events/events.ts +124 -0
  310. package/skills/wix-headless-templates/events/project/src/wix/events/order-store.ts +143 -0
  311. package/skills/wix-headless-templates/events/project/src/wix/events/orders-core.ts +86 -0
  312. package/skills/wix-headless-templates/events/project/src/wix/events/orders.ts +30 -0
  313. package/skills/wix-headless-templates/events/project/src/wix/events/registration-core.ts +415 -0
  314. package/skills/wix-headless-templates/events/project/src/wix/events/registration-store.ts +237 -0
  315. package/skills/wix-headless-templates/events/project/src/wix/events/registration.ts +109 -0
  316. package/skills/wix-headless-templates/events/project/src/wix/events/types.ts +249 -0
  317. package/skills/wix-headless-templates/events/project/src/wix/media.ts +106 -0
  318. package/skills/wix-headless-templates/events/project/src/wix/money.ts +24 -0
  319. package/skills/wix-headless-templates/events/project/src/wix/sdk.ts +89 -0
  320. package/skills/wix-headless-templates/events/project/tsconfig.json +5 -0
  321. package/skills/wix-headless-templates/events/rest/events.ts +112 -0
  322. package/skills/wix-headless-templates/events/rest/orders.ts +28 -0
  323. package/skills/wix-headless-templates/events/rest/registration.ts +96 -0
  324. package/skills/wix-headless-templates/events/seed/SEED.md +115 -0
  325. package/skills/wix-headless-templates/events/seed/read-site.mjs +26 -0
  326. package/skills/wix-headless-templates/events/seed/seed-events.mjs +322 -0
  327. package/skills/wix-headless-templates/faq/INSTRUCTIONS.md +317 -0
  328. package/skills/wix-headless-templates/faq/app/components/faq/FaqAccordion.tsx +159 -0
  329. package/skills/wix-headless-templates/faq/app/components/faq/FaqCategoryNav.tsx +46 -0
  330. package/skills/wix-headless-templates/faq/app/components/faq/FaqSearch.tsx +56 -0
  331. package/skills/wix-headless-templates/faq/app/hooks/faq/useFaq.ts +53 -0
  332. package/skills/wix-headless-templates/faq/app/wix/faq/faq-core.ts +428 -0
  333. package/skills/wix-headless-templates/faq/app/wix/faq/faq-store.ts +212 -0
  334. package/skills/wix-headless-templates/faq/app/wix/faq/faq.ts +72 -0
  335. package/skills/wix-headless-templates/faq/app/wix/faq/types.ts +63 -0
  336. package/skills/wix-headless-templates/faq/app-astro/layouts/SiteLayout.astro +40 -0
  337. package/skills/wix-headless-templates/faq/app-astro/pages/faq.astro +39 -0
  338. package/skills/wix-headless-templates/faq/project/README.md +15 -0
  339. package/skills/wix-headless-templates/faq/project/astro.config.mjs +22 -0
  340. package/skills/wix-headless-templates/faq/project/package-lock.json +8837 -0
  341. package/skills/wix-headless-templates/faq/project/package.json +37 -0
  342. package/skills/wix-headless-templates/faq/project/public/favicon.svg +9 -0
  343. package/skills/wix-headless-templates/faq/project/src/assets/astro.svg +1 -0
  344. package/skills/wix-headless-templates/faq/project/src/assets/background.svg +1 -0
  345. package/skills/wix-headless-templates/faq/project/src/assets/wix.svg +18 -0
  346. package/skills/wix-headless-templates/faq/project/src/components/Hero.astro +77 -0
  347. package/skills/wix-headless-templates/faq/project/src/components/Welcome.astro +95 -0
  348. package/skills/wix-headless-templates/faq/project/src/components/faq/FaqAccordion.tsx +159 -0
  349. package/skills/wix-headless-templates/faq/project/src/components/faq/FaqCategoryNav.tsx +46 -0
  350. package/skills/wix-headless-templates/faq/project/src/components/faq/FaqSearch.tsx +56 -0
  351. package/skills/wix-headless-templates/faq/project/src/hooks/faq/useFaq.ts +53 -0
  352. package/skills/wix-headless-templates/faq/project/src/layouts/Layout.astro +22 -0
  353. package/skills/wix-headless-templates/faq/project/src/layouts/SiteLayout.astro +40 -0
  354. package/skills/wix-headless-templates/faq/project/src/pages/faq.astro +39 -0
  355. package/skills/wix-headless-templates/faq/project/src/pages/index.astro +8 -0
  356. package/skills/wix-headless-templates/faq/project/src/styles/global.css +57 -0
  357. package/skills/wix-headless-templates/faq/project/src/wix/config.ts +16 -0
  358. package/skills/wix-headless-templates/faq/project/src/wix/faq/faq-core.ts +428 -0
  359. package/skills/wix-headless-templates/faq/project/src/wix/faq/faq-store.ts +212 -0
  360. package/skills/wix-headless-templates/faq/project/src/wix/faq/faq.ts +72 -0
  361. package/skills/wix-headless-templates/faq/project/src/wix/faq/types.ts +63 -0
  362. package/skills/wix-headless-templates/faq/project/src/wix/media.ts +106 -0
  363. package/skills/wix-headless-templates/faq/project/src/wix/money.ts +24 -0
  364. package/skills/wix-headless-templates/faq/project/src/wix/sdk.ts +89 -0
  365. package/skills/wix-headless-templates/faq/project/tsconfig.json +5 -0
  366. package/skills/wix-headless-templates/faq/rest/faq.ts +71 -0
  367. package/skills/wix-headless-templates/faq/seed/SEED.md +104 -0
  368. package/skills/wix-headless-templates/faq/seed/read-site.mjs +23 -0
  369. package/skills/wix-headless-templates/faq/seed/seed-faq.mjs +302 -0
  370. package/skills/wix-headless-templates/forms/INSTRUCTIONS.md +417 -0
  371. package/skills/wix-headless-templates/forms/app/hooks/forms/useWixForm.ts +108 -0
  372. package/skills/wix-headless-templates/forms/app/wix/forms/address-templates.generated.ts +13 -0
  373. package/skills/wix-headless-templates/forms/app/wix/forms/form-store.ts +533 -0
  374. package/skills/wix-headless-templates/forms/app/wix/forms/forms-core.ts +671 -0
  375. package/skills/wix-headless-templates/forms/app/wix/forms/forms.ts +57 -0
  376. package/skills/wix-headless-templates/forms/app/wix/forms/submissions-core.ts +423 -0
  377. package/skills/wix-headless-templates/forms/app/wix/forms/submissions.ts +95 -0
  378. package/skills/wix-headless-templates/forms/app/wix/forms/types.ts +284 -0
  379. package/skills/wix-headless-templates/forms/project/README.md +15 -0
  380. package/skills/wix-headless-templates/forms/project/astro.config.mjs +22 -0
  381. package/skills/wix-headless-templates/forms/project/package-lock.json +9102 -0
  382. package/skills/wix-headless-templates/forms/project/package.json +37 -0
  383. package/skills/wix-headless-templates/forms/project/public/favicon.svg +9 -0
  384. package/skills/wix-headless-templates/forms/project/src/assets/astro.svg +1 -0
  385. package/skills/wix-headless-templates/forms/project/src/assets/background.svg +1 -0
  386. package/skills/wix-headless-templates/forms/project/src/assets/wix.svg +18 -0
  387. package/skills/wix-headless-templates/forms/project/src/components/Hero.astro +77 -0
  388. package/skills/wix-headless-templates/forms/project/src/components/Welcome.astro +95 -0
  389. package/skills/wix-headless-templates/forms/project/src/hooks/forms/useWixForm.ts +108 -0
  390. package/skills/wix-headless-templates/forms/project/src/layouts/Layout.astro +22 -0
  391. package/skills/wix-headless-templates/forms/project/src/pages/index.astro +8 -0
  392. package/skills/wix-headless-templates/forms/project/src/styles/global.css +57 -0
  393. package/skills/wix-headless-templates/forms/project/src/wix/config.ts +16 -0
  394. package/skills/wix-headless-templates/forms/project/src/wix/forms/address-templates.generated.ts +13 -0
  395. package/skills/wix-headless-templates/forms/project/src/wix/forms/form-store.ts +533 -0
  396. package/skills/wix-headless-templates/forms/project/src/wix/forms/forms-core.ts +671 -0
  397. package/skills/wix-headless-templates/forms/project/src/wix/forms/forms.ts +57 -0
  398. package/skills/wix-headless-templates/forms/project/src/wix/forms/submissions-core.ts +423 -0
  399. package/skills/wix-headless-templates/forms/project/src/wix/forms/submissions.ts +95 -0
  400. package/skills/wix-headless-templates/forms/project/src/wix/forms/types.ts +284 -0
  401. package/skills/wix-headless-templates/forms/project/src/wix/media.ts +106 -0
  402. package/skills/wix-headless-templates/forms/project/src/wix/money.ts +24 -0
  403. package/skills/wix-headless-templates/forms/project/src/wix/sdk.ts +89 -0
  404. package/skills/wix-headless-templates/forms/project/tsconfig.json +5 -0
  405. package/skills/wix-headless-templates/forms/rest/forms.ts +37 -0
  406. package/skills/wix-headless-templates/forms/rest/submissions.ts +83 -0
  407. package/skills/wix-headless-templates/forms/seed/SEED.md +225 -0
  408. package/skills/wix-headless-templates/forms/seed/read-site.mjs +53 -0
  409. package/skills/wix-headless-templates/forms/seed/seed-forms.mjs +574 -0
  410. package/skills/wix-headless-templates/forms/tooling/address-templates.mjs +96 -0
  411. package/skills/wix-headless-templates/members/INSTRUCTIONS.md +345 -0
  412. package/skills/wix-headless-templates/members/app/components/members/AccountPage.tsx +16 -0
  413. package/skills/wix-headless-templates/members/app/components/members/AccountView.tsx +60 -0
  414. package/skills/wix-headless-templates/members/app/components/members/LoginForm.tsx +165 -0
  415. package/skills/wix-headless-templates/members/app/components/members/MemberMenu.tsx +78 -0
  416. package/skills/wix-headless-templates/members/app/components/members/RequireAuth.tsx +47 -0
  417. package/skills/wix-headless-templates/members/app/hooks/members/useMember.ts +67 -0
  418. package/skills/wix-headless-templates/members/app/wix/members/auth-core.ts +160 -0
  419. package/skills/wix-headless-templates/members/app/wix/members/auth.ts +117 -0
  420. package/skills/wix-headless-templates/members/app/wix/members/client.ts +27 -0
  421. package/skills/wix-headless-templates/members/app/wix/members/member-store.ts +133 -0
  422. package/skills/wix-headless-templates/members/app/wix/members/members-core.ts +43 -0
  423. package/skills/wix-headless-templates/members/app/wix/members/members.ts +29 -0
  424. package/skills/wix-headless-templates/members/app/wix/members/types.ts +21 -0
  425. package/skills/wix-headless-templates/members/app-astro/layouts/SiteLayout.astro +42 -0
  426. package/skills/wix-headless-templates/members/app-astro/pages/account.astro +9 -0
  427. package/skills/wix-headless-templates/members/app-astro/pages/login.astro +11 -0
  428. package/skills/wix-headless-templates/members/project/README.md +15 -0
  429. package/skills/wix-headless-templates/members/project/astro.config.mjs +22 -0
  430. package/skills/wix-headless-templates/members/project/package-lock.json +8892 -0
  431. package/skills/wix-headless-templates/members/project/package.json +37 -0
  432. package/skills/wix-headless-templates/members/project/public/favicon.svg +9 -0
  433. package/skills/wix-headless-templates/members/project/src/assets/astro.svg +1 -0
  434. package/skills/wix-headless-templates/members/project/src/assets/background.svg +1 -0
  435. package/skills/wix-headless-templates/members/project/src/assets/wix.svg +18 -0
  436. package/skills/wix-headless-templates/members/project/src/components/Hero.astro +77 -0
  437. package/skills/wix-headless-templates/members/project/src/components/Welcome.astro +95 -0
  438. package/skills/wix-headless-templates/members/project/src/components/members/AccountPage.tsx +16 -0
  439. package/skills/wix-headless-templates/members/project/src/components/members/AccountView.tsx +60 -0
  440. package/skills/wix-headless-templates/members/project/src/components/members/LoginForm.tsx +165 -0
  441. package/skills/wix-headless-templates/members/project/src/components/members/MemberMenu.tsx +78 -0
  442. package/skills/wix-headless-templates/members/project/src/components/members/RequireAuth.tsx +47 -0
  443. package/skills/wix-headless-templates/members/project/src/hooks/members/useMember.ts +67 -0
  444. package/skills/wix-headless-templates/members/project/src/layouts/Layout.astro +22 -0
  445. package/skills/wix-headless-templates/members/project/src/layouts/SiteLayout.astro +42 -0
  446. package/skills/wix-headless-templates/members/project/src/pages/account.astro +9 -0
  447. package/skills/wix-headless-templates/members/project/src/pages/index.astro +8 -0
  448. package/skills/wix-headless-templates/members/project/src/pages/login.astro +11 -0
  449. package/skills/wix-headless-templates/members/project/src/styles/global.css +57 -0
  450. package/skills/wix-headless-templates/members/project/src/wix/config.ts +16 -0
  451. package/skills/wix-headless-templates/members/project/src/wix/media.ts +106 -0
  452. package/skills/wix-headless-templates/members/project/src/wix/members/auth-core.ts +160 -0
  453. package/skills/wix-headless-templates/members/project/src/wix/members/auth.ts +117 -0
  454. package/skills/wix-headless-templates/members/project/src/wix/members/client.ts +27 -0
  455. package/skills/wix-headless-templates/members/project/src/wix/members/member-store.ts +133 -0
  456. package/skills/wix-headless-templates/members/project/src/wix/members/members-core.ts +43 -0
  457. package/skills/wix-headless-templates/members/project/src/wix/members/members.ts +29 -0
  458. package/skills/wix-headless-templates/members/project/src/wix/members/types.ts +21 -0
  459. package/skills/wix-headless-templates/members/project/src/wix/money.ts +24 -0
  460. package/skills/wix-headless-templates/members/project/src/wix/sdk.ts +89 -0
  461. package/skills/wix-headless-templates/members/project/tsconfig.json +5 -0
  462. package/skills/wix-headless-templates/members/rest/auth.ts +224 -0
  463. package/skills/wix-headless-templates/members/rest/members.ts +26 -0
  464. package/skills/wix-headless-templates/members/seed/SEED.md +39 -0
  465. package/skills/wix-headless-templates/members/seed/read-site.mjs +15 -0
  466. package/skills/wix-headless-templates/members/seed/seed-members.mjs +91 -0
  467. package/skills/wix-headless-templates/portfolio/INSTRUCTIONS.md +315 -0
  468. package/skills/wix-headless-templates/portfolio/app/components/portfolio/CollectionProjectsView.tsx +110 -0
  469. package/skills/wix-headless-templates/portfolio/app/components/portfolio/CollectionsView.tsx +90 -0
  470. package/skills/wix-headless-templates/portfolio/app/components/portfolio/GalleryMedia.tsx +35 -0
  471. package/skills/wix-headless-templates/portfolio/app/components/portfolio/ProjectDetailView.tsx +85 -0
  472. package/skills/wix-headless-templates/portfolio/app/hooks/portfolio/useCollectionProjects.ts +32 -0
  473. package/skills/wix-headless-templates/portfolio/app/hooks/portfolio/useCollections.ts +21 -0
  474. package/skills/wix-headless-templates/portfolio/app/hooks/portfolio/useProjectDetail.ts +31 -0
  475. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/collection-projects-store.ts +82 -0
  476. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/collections-store.ts +58 -0
  477. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/portfolio-core.ts +177 -0
  478. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/portfolio.ts +78 -0
  479. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/project-detail-store.ts +81 -0
  480. package/skills/wix-headless-templates/portfolio/app/wix/portfolio/types.ts +55 -0
  481. package/skills/wix-headless-templates/portfolio/app-astro/layouts/SiteLayout.astro +40 -0
  482. package/skills/wix-headless-templates/portfolio/app-astro/pages/portfolio/[slug].astro +30 -0
  483. package/skills/wix-headless-templates/portfolio/app-astro/pages/portfolio.astro +21 -0
  484. package/skills/wix-headless-templates/portfolio/app-astro/pages/projects/[slug].astro +29 -0
  485. package/skills/wix-headless-templates/portfolio/project/README.md +15 -0
  486. package/skills/wix-headless-templates/portfolio/project/astro.config.mjs +22 -0
  487. package/skills/wix-headless-templates/portfolio/project/package-lock.json +8760 -0
  488. package/skills/wix-headless-templates/portfolio/project/package.json +37 -0
  489. package/skills/wix-headless-templates/portfolio/project/public/favicon.svg +9 -0
  490. package/skills/wix-headless-templates/portfolio/project/src/assets/astro.svg +1 -0
  491. package/skills/wix-headless-templates/portfolio/project/src/assets/background.svg +1 -0
  492. package/skills/wix-headless-templates/portfolio/project/src/assets/wix.svg +18 -0
  493. package/skills/wix-headless-templates/portfolio/project/src/components/Hero.astro +77 -0
  494. package/skills/wix-headless-templates/portfolio/project/src/components/Welcome.astro +95 -0
  495. package/skills/wix-headless-templates/portfolio/project/src/components/portfolio/CollectionProjectsView.tsx +110 -0
  496. package/skills/wix-headless-templates/portfolio/project/src/components/portfolio/CollectionsView.tsx +90 -0
  497. package/skills/wix-headless-templates/portfolio/project/src/components/portfolio/GalleryMedia.tsx +35 -0
  498. package/skills/wix-headless-templates/portfolio/project/src/components/portfolio/ProjectDetailView.tsx +85 -0
  499. package/skills/wix-headless-templates/portfolio/project/src/hooks/portfolio/useCollectionProjects.ts +32 -0
  500. package/skills/wix-headless-templates/portfolio/project/src/hooks/portfolio/useCollections.ts +21 -0
  501. package/skills/wix-headless-templates/portfolio/project/src/hooks/portfolio/useProjectDetail.ts +31 -0
  502. package/skills/wix-headless-templates/portfolio/project/src/layouts/Layout.astro +22 -0
  503. package/skills/wix-headless-templates/portfolio/project/src/layouts/SiteLayout.astro +40 -0
  504. package/skills/wix-headless-templates/portfolio/project/src/pages/index.astro +8 -0
  505. package/skills/wix-headless-templates/portfolio/project/src/pages/portfolio/[slug].astro +30 -0
  506. package/skills/wix-headless-templates/portfolio/project/src/pages/portfolio.astro +21 -0
  507. package/skills/wix-headless-templates/portfolio/project/src/pages/projects/[slug].astro +29 -0
  508. package/skills/wix-headless-templates/portfolio/project/src/styles/global.css +57 -0
  509. package/skills/wix-headless-templates/portfolio/project/src/wix/config.ts +16 -0
  510. package/skills/wix-headless-templates/portfolio/project/src/wix/media.ts +106 -0
  511. package/skills/wix-headless-templates/portfolio/project/src/wix/money.ts +24 -0
  512. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/collection-projects-store.ts +82 -0
  513. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/collections-store.ts +58 -0
  514. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/portfolio-core.ts +177 -0
  515. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/portfolio.ts +78 -0
  516. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/project-detail-store.ts +81 -0
  517. package/skills/wix-headless-templates/portfolio/project/src/wix/portfolio/types.ts +55 -0
  518. package/skills/wix-headless-templates/portfolio/project/src/wix/sdk.ts +89 -0
  519. package/skills/wix-headless-templates/portfolio/project/tsconfig.json +5 -0
  520. package/skills/wix-headless-templates/portfolio/rest/portfolio.ts +75 -0
  521. package/skills/wix-headless-templates/portfolio/seed/SEED.md +86 -0
  522. package/skills/wix-headless-templates/portfolio/seed/read-site.mjs +20 -0
  523. package/skills/wix-headless-templates/portfolio/seed/seed-portfolio.mjs +253 -0
  524. package/skills/wix-headless-templates/pricing-plans/INSTRUCTIONS.md +376 -0
  525. package/skills/wix-headless-templates/pricing-plans/app/components/pricing-plans/PlanDetailView.tsx +54 -0
  526. package/skills/wix-headless-templates/pricing-plans/app/components/pricing-plans/PlansView.tsx +108 -0
  527. package/skills/wix-headless-templates/pricing-plans/app/components/pricing-plans/RequirePlan.tsx +87 -0
  528. package/skills/wix-headless-templates/pricing-plans/app/components/pricing-plans/SubscribeButton.tsx +41 -0
  529. package/skills/wix-headless-templates/pricing-plans/app/hooks/pricing-plans/usePlanAccess.ts +31 -0
  530. package/skills/wix-headless-templates/pricing-plans/app/hooks/pricing-plans/usePlanPurchase.ts +16 -0
  531. package/skills/wix-headless-templates/pricing-plans/app/hooks/pricing-plans/usePlans.ts +22 -0
  532. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plan-access-core.ts +29 -0
  533. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plan-access-store.ts +92 -0
  534. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plan-access.ts +37 -0
  535. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plan-purchase-store.ts +54 -0
  536. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plans-core.ts +212 -0
  537. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plans-store.ts +64 -0
  538. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/plans.ts +54 -0
  539. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/purchase-core.ts +43 -0
  540. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/purchase.ts +22 -0
  541. package/skills/wix-headless-templates/pricing-plans/app/wix/pricing-plans/types.ts +52 -0
  542. package/skills/wix-headless-templates/pricing-plans/app-astro/layouts/SiteLayout.astro +41 -0
  543. package/skills/wix-headless-templates/pricing-plans/app-astro/pages/plans/[slug].astro +43 -0
  544. package/skills/wix-headless-templates/pricing-plans/app-astro/pages/plans.astro +21 -0
  545. package/skills/wix-headless-templates/pricing-plans/project/README.md +15 -0
  546. package/skills/wix-headless-templates/pricing-plans/project/astro.config.mjs +22 -0
  547. package/skills/wix-headless-templates/pricing-plans/project/package-lock.json +9799 -0
  548. package/skills/wix-headless-templates/pricing-plans/project/package.json +38 -0
  549. package/skills/wix-headless-templates/pricing-plans/project/public/favicon.svg +9 -0
  550. package/skills/wix-headless-templates/pricing-plans/project/src/assets/astro.svg +1 -0
  551. package/skills/wix-headless-templates/pricing-plans/project/src/assets/background.svg +1 -0
  552. package/skills/wix-headless-templates/pricing-plans/project/src/assets/wix.svg +18 -0
  553. package/skills/wix-headless-templates/pricing-plans/project/src/components/Hero.astro +77 -0
  554. package/skills/wix-headless-templates/pricing-plans/project/src/components/Welcome.astro +95 -0
  555. package/skills/wix-headless-templates/pricing-plans/project/src/components/pricing-plans/PlanDetailView.tsx +54 -0
  556. package/skills/wix-headless-templates/pricing-plans/project/src/components/pricing-plans/PlansView.tsx +108 -0
  557. package/skills/wix-headless-templates/pricing-plans/project/src/components/pricing-plans/RequirePlan.tsx +87 -0
  558. package/skills/wix-headless-templates/pricing-plans/project/src/components/pricing-plans/SubscribeButton.tsx +41 -0
  559. package/skills/wix-headless-templates/pricing-plans/project/src/hooks/pricing-plans/usePlanAccess.ts +31 -0
  560. package/skills/wix-headless-templates/pricing-plans/project/src/hooks/pricing-plans/usePlanPurchase.ts +16 -0
  561. package/skills/wix-headless-templates/pricing-plans/project/src/hooks/pricing-plans/usePlans.ts +22 -0
  562. package/skills/wix-headless-templates/pricing-plans/project/src/layouts/Layout.astro +22 -0
  563. package/skills/wix-headless-templates/pricing-plans/project/src/layouts/SiteLayout.astro +41 -0
  564. package/skills/wix-headless-templates/pricing-plans/project/src/pages/index.astro +8 -0
  565. package/skills/wix-headless-templates/pricing-plans/project/src/pages/plans/[slug].astro +43 -0
  566. package/skills/wix-headless-templates/pricing-plans/project/src/pages/plans.astro +21 -0
  567. package/skills/wix-headless-templates/pricing-plans/project/src/styles/global.css +57 -0
  568. package/skills/wix-headless-templates/pricing-plans/project/src/wix/config.ts +16 -0
  569. package/skills/wix-headless-templates/pricing-plans/project/src/wix/media.ts +106 -0
  570. package/skills/wix-headless-templates/pricing-plans/project/src/wix/money.ts +24 -0
  571. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plan-access-core.ts +29 -0
  572. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plan-access-store.ts +92 -0
  573. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plan-access.ts +37 -0
  574. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plan-purchase-store.ts +54 -0
  575. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plans-core.ts +212 -0
  576. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plans-store.ts +64 -0
  577. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/plans.ts +54 -0
  578. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/purchase-core.ts +43 -0
  579. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/purchase.ts +22 -0
  580. package/skills/wix-headless-templates/pricing-plans/project/src/wix/pricing-plans/types.ts +52 -0
  581. package/skills/wix-headless-templates/pricing-plans/project/src/wix/sdk.ts +89 -0
  582. package/skills/wix-headless-templates/pricing-plans/project/tsconfig.json +5 -0
  583. package/skills/wix-headless-templates/pricing-plans/rest/plan-access.ts +31 -0
  584. package/skills/wix-headless-templates/pricing-plans/rest/plans.ts +58 -0
  585. package/skills/wix-headless-templates/pricing-plans/rest/purchase.ts +20 -0
  586. package/skills/wix-headless-templates/pricing-plans/seed/SEED.md +93 -0
  587. package/skills/wix-headless-templates/pricing-plans/seed/read-site.mjs +22 -0
  588. package/skills/wix-headless-templates/pricing-plans/seed/seed-pricing-plans.mjs +301 -0
  589. package/skills/wix-headless-templates/rentals/INSTRUCTIONS.md +309 -0
  590. package/skills/wix-headless-templates/rentals/app/components/rentals/RentalBookingView.tsx +195 -0
  591. package/skills/wix-headless-templates/rentals/app/components/rentals/RentalsView.tsx +89 -0
  592. package/skills/wix-headless-templates/rentals/app/hooks/rentals/useRentalFlow.ts +31 -0
  593. package/skills/wix-headless-templates/rentals/app/hooks/rentals/useRentals.ts +23 -0
  594. package/skills/wix-headless-templates/rentals/app/wix/rentals/rental-flow-store.ts +283 -0
  595. package/skills/wix-headless-templates/rentals/app/wix/rentals/rentals-core.ts +435 -0
  596. package/skills/wix-headless-templates/rentals/app/wix/rentals/rentals-store.ts +112 -0
  597. package/skills/wix-headless-templates/rentals/app/wix/rentals/rentals.ts +173 -0
  598. package/skills/wix-headless-templates/rentals/app/wix/rentals/types.ts +113 -0
  599. package/skills/wix-headless-templates/rentals/app-astro/layouts/SiteLayout.astro +40 -0
  600. package/skills/wix-headless-templates/rentals/app-astro/pages/rentals/[slug].astro +81 -0
  601. package/skills/wix-headless-templates/rentals/app-astro/pages/rentals.astro +24 -0
  602. package/skills/wix-headless-templates/rentals/project/README.md +15 -0
  603. package/skills/wix-headless-templates/rentals/project/astro.config.mjs +22 -0
  604. package/skills/wix-headless-templates/rentals/project/package-lock.json +10545 -0
  605. package/skills/wix-headless-templates/rentals/project/package.json +40 -0
  606. package/skills/wix-headless-templates/rentals/project/public/favicon.svg +9 -0
  607. package/skills/wix-headless-templates/rentals/project/src/assets/astro.svg +1 -0
  608. package/skills/wix-headless-templates/rentals/project/src/assets/background.svg +1 -0
  609. package/skills/wix-headless-templates/rentals/project/src/assets/wix.svg +18 -0
  610. package/skills/wix-headless-templates/rentals/project/src/components/Hero.astro +77 -0
  611. package/skills/wix-headless-templates/rentals/project/src/components/Welcome.astro +95 -0
  612. package/skills/wix-headless-templates/rentals/project/src/components/rentals/RentalBookingView.tsx +195 -0
  613. package/skills/wix-headless-templates/rentals/project/src/components/rentals/RentalsView.tsx +89 -0
  614. package/skills/wix-headless-templates/rentals/project/src/hooks/rentals/useRentalFlow.ts +31 -0
  615. package/skills/wix-headless-templates/rentals/project/src/hooks/rentals/useRentals.ts +23 -0
  616. package/skills/wix-headless-templates/rentals/project/src/layouts/Layout.astro +22 -0
  617. package/skills/wix-headless-templates/rentals/project/src/layouts/SiteLayout.astro +40 -0
  618. package/skills/wix-headless-templates/rentals/project/src/pages/index.astro +8 -0
  619. package/skills/wix-headless-templates/rentals/project/src/pages/rentals/[slug].astro +81 -0
  620. package/skills/wix-headless-templates/rentals/project/src/pages/rentals.astro +24 -0
  621. package/skills/wix-headless-templates/rentals/project/src/styles/global.css +57 -0
  622. package/skills/wix-headless-templates/rentals/project/src/wix/config.ts +16 -0
  623. package/skills/wix-headless-templates/rentals/project/src/wix/media.ts +106 -0
  624. package/skills/wix-headless-templates/rentals/project/src/wix/money.ts +24 -0
  625. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/rental-flow-store.ts +283 -0
  626. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/rentals-core.ts +435 -0
  627. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/rentals-store.ts +112 -0
  628. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/rentals.ts +173 -0
  629. package/skills/wix-headless-templates/rentals/project/src/wix/rentals/types.ts +113 -0
  630. package/skills/wix-headless-templates/rentals/project/src/wix/sdk.ts +89 -0
  631. package/skills/wix-headless-templates/rentals/project/tsconfig.json +5 -0
  632. package/skills/wix-headless-templates/rentals/rest/rentals.ts +153 -0
  633. package/skills/wix-headless-templates/rentals/seed/SEED.md +95 -0
  634. package/skills/wix-headless-templates/rentals/seed/read-site.mjs +34 -0
  635. package/skills/wix-headless-templates/rentals/seed/seed-rentals.mjs +321 -0
  636. package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +468 -0
  637. package/skills/wix-headless-templates/restaurants/app/components/restaurants/MenuView.tsx +257 -0
  638. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartButton.tsx +26 -0
  639. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +121 -0
  640. package/skills/wix-headless-templates/restaurants/app/components/restaurants/ReservationView.tsx +212 -0
  641. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useMenus.ts +34 -0
  642. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +52 -0
  643. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useReservation.ts +49 -0
  644. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/menu-core.ts +333 -0
  645. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/menu-store.ts +89 -0
  646. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/menu.ts +109 -0
  647. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +141 -0
  648. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +287 -0
  649. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +237 -0
  650. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/reservation-store.ts +279 -0
  651. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/reservations-core.ts +218 -0
  652. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/reservations.ts +109 -0
  653. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/time-core.ts +118 -0
  654. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +337 -0
  655. package/skills/wix-headless-templates/restaurants/app-astro/layouts/SiteLayout.astro +47 -0
  656. package/skills/wix-headless-templates/restaurants/app-astro/pages/menu.astro +22 -0
  657. package/skills/wix-headless-templates/restaurants/app-astro/pages/reservations.astro +12 -0
  658. package/skills/wix-headless-templates/restaurants/project/README.md +15 -0
  659. package/skills/wix-headless-templates/restaurants/project/astro.config.mjs +22 -0
  660. package/skills/wix-headless-templates/restaurants/project/package-lock.json +11038 -0
  661. package/skills/wix-headless-templates/restaurants/project/package.json +40 -0
  662. package/skills/wix-headless-templates/restaurants/project/public/favicon.svg +9 -0
  663. package/skills/wix-headless-templates/restaurants/project/src/assets/astro.svg +1 -0
  664. package/skills/wix-headless-templates/restaurants/project/src/assets/background.svg +1 -0
  665. package/skills/wix-headless-templates/restaurants/project/src/assets/wix.svg +18 -0
  666. package/skills/wix-headless-templates/restaurants/project/src/components/Hero.astro +77 -0
  667. package/skills/wix-headless-templates/restaurants/project/src/components/Welcome.astro +95 -0
  668. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/MenuView.tsx +257 -0
  669. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartButton.tsx +26 -0
  670. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +121 -0
  671. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/ReservationView.tsx +212 -0
  672. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useMenus.ts +34 -0
  673. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +52 -0
  674. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useReservation.ts +49 -0
  675. package/skills/wix-headless-templates/restaurants/project/src/layouts/Layout.astro +22 -0
  676. package/skills/wix-headless-templates/restaurants/project/src/layouts/SiteLayout.astro +47 -0
  677. package/skills/wix-headless-templates/restaurants/project/src/pages/index.astro +8 -0
  678. package/skills/wix-headless-templates/restaurants/project/src/pages/menu.astro +22 -0
  679. package/skills/wix-headless-templates/restaurants/project/src/pages/reservations.astro +12 -0
  680. package/skills/wix-headless-templates/restaurants/project/src/styles/global.css +57 -0
  681. package/skills/wix-headless-templates/restaurants/project/src/wix/config.ts +16 -0
  682. package/skills/wix-headless-templates/restaurants/project/src/wix/media.ts +106 -0
  683. package/skills/wix-headless-templates/restaurants/project/src/wix/money.ts +24 -0
  684. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/menu-core.ts +333 -0
  685. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/menu-store.ts +89 -0
  686. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/menu.ts +109 -0
  687. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +141 -0
  688. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +287 -0
  689. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +237 -0
  690. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/reservation-store.ts +279 -0
  691. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/reservations-core.ts +218 -0
  692. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/reservations.ts +109 -0
  693. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/time-core.ts +118 -0
  694. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +337 -0
  695. package/skills/wix-headless-templates/restaurants/project/src/wix/sdk.ts +89 -0
  696. package/skills/wix-headless-templates/restaurants/project/tsconfig.json +5 -0
  697. package/skills/wix-headless-templates/restaurants/rest/menu.ts +96 -0
  698. package/skills/wix-headless-templates/restaurants/rest/ordering.ts +222 -0
  699. package/skills/wix-headless-templates/restaurants/rest/reservations.ts +102 -0
  700. package/skills/wix-headless-templates/restaurants/seed/SEED.md +118 -0
  701. package/skills/wix-headless-templates/restaurants/seed/read-site.mjs +25 -0
  702. package/skills/wix-headless-templates/restaurants/seed/seed-restaurants.mjs +577 -0
  703. package/skills/wix-headless-templates/shared/CONTENT.md +22 -0
  704. package/skills/wix-headless-templates/shared/CUSTOM_OPERATIONS.md +100 -0
  705. package/skills/wix-headless-templates/shared/DESIGN.md +37 -0
  706. package/skills/wix-headless-templates/shared/SUPPLIED-CONTENT.md +27 -0
  707. package/skills/wix-headless-templates/shared/app/styles/global.css +57 -0
  708. package/skills/wix-headless-templates/shared/app/wix/config.ts +16 -0
  709. package/skills/wix-headless-templates/shared/app/wix/media.ts +106 -0
  710. package/skills/wix-headless-templates/shared/app/wix/money.ts +24 -0
  711. package/skills/wix-headless-templates/shared/app/wix/sdk.ts +89 -0
  712. package/skills/wix-headless-templates/shared/capabilities/media-upload/app/wix/media-upload/client.ts +46 -0
  713. package/skills/wix-headless-templates/shared/capabilities/media-upload/app-astro/pages/api/wix/media-upload.ts +69 -0
  714. package/skills/wix-headless-templates/shared/capabilities/site-search/INSTRUCTIONS.md +194 -0
  715. package/skills/wix-headless-templates/shared/capabilities/site-search/app/components/site-search/SearchBox.tsx +136 -0
  716. package/skills/wix-headless-templates/shared/capabilities/site-search/app/components/site-search/SearchHit.tsx +50 -0
  717. package/skills/wix-headless-templates/shared/capabilities/site-search/app/components/site-search/SearchResults.tsx +300 -0
  718. package/skills/wix-headless-templates/shared/capabilities/site-search/app/hooks/site-search/useSearch.ts +31 -0
  719. package/skills/wix-headless-templates/shared/capabilities/site-search/app/hooks/site-search/useSuggest.ts +26 -0
  720. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/search-core.ts +520 -0
  721. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/search-store.ts +235 -0
  722. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/search.ts +80 -0
  723. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/suggest-store.ts +178 -0
  724. package/skills/wix-headless-templates/shared/capabilities/site-search/app/wix/site-search/types.ts +158 -0
  725. package/skills/wix-headless-templates/shared/capabilities/site-search/app-astro/pages/search.astro +33 -0
  726. package/skills/wix-headless-templates/shared/capabilities/site-search/rest/search.ts +82 -0
  727. package/skills/wix-headless-templates/shared/capabilities/site-search/seed/install.mjs +43 -0
  728. package/skills/wix-headless-templates/shared/rest/client.ts +155 -0
  729. package/skills/wix-headless-templates/shared/rest/config.ts +4 -0
  730. package/skills/wix-headless-templates/shared/rest/media.ts +92 -0
  731. package/skills/wix-headless-templates/shared/seed/images.mjs +183 -0
  732. package/skills/wix-headless-templates/shared/seed/read-site.mjs +97 -0
  733. package/skills/wix-headless-templates/shared/seed/site-context.mjs +70 -0
  734. package/skills/wix-headless-templates/shared/seed/site.mjs +48 -0
  735. package/skills/wix-headless-templates/shared/seed/wix-cli.mjs +44 -0
  736. package/skills/wix-headless-templates/storefront/INSTRUCTIONS.md +685 -0
  737. package/skills/wix-headless-templates/storefront/app/components/storefront/CartButton.tsx +26 -0
  738. package/skills/wix-headless-templates/storefront/app/components/storefront/CartDrawer.tsx +239 -0
  739. package/skills/wix-headless-templates/storefront/app/components/storefront/FilterPanel.tsx +267 -0
  740. package/skills/wix-headless-templates/storefront/app/components/storefront/OptionPicker.tsx +171 -0
  741. package/skills/wix-headless-templates/storefront/app/components/storefront/QuickAdd.tsx +148 -0
  742. package/skills/wix-headless-templates/storefront/app/hooks/storefront/useCart.ts +59 -0
  743. package/skills/wix-headless-templates/storefront/app/hooks/storefront/useProductDetail.ts +42 -0
  744. package/skills/wix-headless-templates/storefront/app/hooks/storefront/useShop.ts +34 -0
  745. package/skills/wix-headless-templates/storefront/app/wix/storefront/cart-core.ts +220 -0
  746. package/skills/wix-headless-templates/storefront/app/wix/storefront/cart-store.ts +134 -0
  747. package/skills/wix-headless-templates/storefront/app/wix/storefront/cart.ts +187 -0
  748. package/skills/wix-headless-templates/storefront/app/wix/storefront/catalog-core.ts +698 -0
  749. package/skills/wix-headless-templates/storefront/app/wix/storefront/catalog.ts +260 -0
  750. package/skills/wix-headless-templates/storefront/app/wix/storefront/product-detail-store.ts +280 -0
  751. package/skills/wix-headless-templates/storefront/app/wix/storefront/shop-store.ts +341 -0
  752. package/skills/wix-headless-templates/storefront/app/wix/storefront/types.ts +305 -0
  753. package/skills/wix-headless-templates/storefront/app-astro/layouts/SiteLayout.astro +65 -0
  754. package/skills/wix-headless-templates/storefront/project/README.md +15 -0
  755. package/skills/wix-headless-templates/storefront/project/astro.config.mjs +22 -0
  756. package/skills/wix-headless-templates/storefront/project/package-lock.json +10786 -0
  757. package/skills/wix-headless-templates/storefront/project/package.json +41 -0
  758. package/skills/wix-headless-templates/storefront/project/public/favicon.svg +9 -0
  759. package/skills/wix-headless-templates/storefront/project/src/assets/astro.svg +1 -0
  760. package/skills/wix-headless-templates/storefront/project/src/assets/background.svg +1 -0
  761. package/skills/wix-headless-templates/storefront/project/src/assets/wix.svg +18 -0
  762. package/skills/wix-headless-templates/storefront/project/src/components/Hero.astro +77 -0
  763. package/skills/wix-headless-templates/storefront/project/src/components/Welcome.astro +95 -0
  764. package/skills/wix-headless-templates/storefront/project/src/components/storefront/CartButton.tsx +26 -0
  765. package/skills/wix-headless-templates/storefront/project/src/components/storefront/CartDrawer.tsx +239 -0
  766. package/skills/wix-headless-templates/storefront/project/src/components/storefront/FilterPanel.tsx +267 -0
  767. package/skills/wix-headless-templates/storefront/project/src/components/storefront/OptionPicker.tsx +171 -0
  768. package/skills/wix-headless-templates/storefront/project/src/components/storefront/QuickAdd.tsx +148 -0
  769. package/skills/wix-headless-templates/storefront/project/src/hooks/storefront/useCart.ts +59 -0
  770. package/skills/wix-headless-templates/storefront/project/src/hooks/storefront/useProductDetail.ts +42 -0
  771. package/skills/wix-headless-templates/storefront/project/src/hooks/storefront/useShop.ts +34 -0
  772. package/skills/wix-headless-templates/storefront/project/src/layouts/Layout.astro +22 -0
  773. package/skills/wix-headless-templates/storefront/project/src/layouts/SiteLayout.astro +65 -0
  774. package/skills/wix-headless-templates/storefront/project/src/pages/index.astro +8 -0
  775. package/skills/wix-headless-templates/storefront/project/src/styles/global.css +57 -0
  776. package/skills/wix-headless-templates/storefront/project/src/wix/config.ts +16 -0
  777. package/skills/wix-headless-templates/storefront/project/src/wix/media.ts +106 -0
  778. package/skills/wix-headless-templates/storefront/project/src/wix/money.ts +24 -0
  779. package/skills/wix-headless-templates/storefront/project/src/wix/sdk.ts +89 -0
  780. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/cart-core.ts +220 -0
  781. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/cart-store.ts +134 -0
  782. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/cart.ts +187 -0
  783. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/catalog-core.ts +698 -0
  784. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/catalog.ts +260 -0
  785. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/product-detail-store.ts +280 -0
  786. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/shop-store.ts +341 -0
  787. package/skills/wix-headless-templates/storefront/project/src/wix/storefront/types.ts +305 -0
  788. package/skills/wix-headless-templates/storefront/project/tsconfig.json +5 -0
  789. package/skills/wix-headless-templates/storefront/rest/cart.ts +183 -0
  790. package/skills/wix-headless-templates/storefront/rest/catalog.ts +267 -0
  791. package/skills/wix-headless-templates/storefront/seed/SEED.md +169 -0
  792. package/skills/wix-headless-templates/storefront/seed/read-site.mjs +38 -0
  793. package/skills/wix-headless-templates/storefront/seed/seed-store.mjs +839 -0
  794. package/skills/wix-manage/SKILL.md +11 -7
  795. package/skills/wix-manage/references/bookings/end-to-end-booking-flow.md +1 -1
  796. package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +206 -0
  797. package/skills/wix-manage/references/site-properties/change-payment-currency-site-properties.md +17 -24
  798. package/skills/wix-manage/references/sites/create-headless-site.md +2 -0
  799. package/skills/wix-manage/references/sites/upload-static-site.md +262 -171
  800. package/skills/wix-manage/references/stores/update-product-with-options.md +1 -1
  801. package/skills/wix-headless/entry/bootstrap.mjs +0 -156
  802. package/skills/wix-headless/entry/skill.md +0 -78
  803. package/skills/wix-headless-kit/cold-start/bootstrap.mjs +0 -156
  804. package/skills/wix-headless-kit/cold-start/cold-start.md +0 -111
  805. package/skills/wix-manage/references/bookings/booking-system-integration-gaps.md +0 -423
@@ -0,0 +1,173 @@
1
+ // Rentals over the SDK — the only file that touches raw Bookings entities on this transport: the
2
+ // rental catalog (Services V2 filtered to the Rentals app), start availability, hourly end options,
3
+ // the daily walk's day list, the price preview, the booking form, and the
4
+ // createBooking → Cart V2 → checkout-or-place sequence. Every body is built in ./rentals-core
5
+ // (shared with the REST twin in templates/rentals/rest/); this file is the transport only. Copy
6
+ // as-is; extend by calling these exports, never by editing them. Failures are loud where a visitor
7
+ // acts (renting) and silent-with-a-default where they only inform (form, preview).
8
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/query-services.md
9
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/list-availability-time-slots.md
10
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/list-availability-time-slot-end-options.md
11
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/pricing/pricing-api/preview-price.md
12
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/create-booking.md
13
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/create-cart.md
14
+ // docs: https://dev.wix.com/docs/api-reference/business-management/headless/redirects/create-redirect-session.md
15
+ import { availabilityTimeSlots, bookings as bookingsModule, pricing as pricingModule, services as servicesModule } from "@wix/bookings";
16
+ import { createCart, calculateCart, placeOrder } from "@wix/auto_sdk_ecom_cart-v-2";
17
+ import { redirects as redirectsModule } from "@wix/redirects";
18
+ import { wixFetch, wixModule } from "../sdk";
19
+ import { imgSrc } from "../media";
20
+ import {
21
+ FALLBACK_FIELDS,
22
+ RENTALS_APP_ID,
23
+ RENTALS_FORM_ID,
24
+ RENTALS_PAGE_SIZE,
25
+ bookingIdOf,
26
+ bookingOptions,
27
+ bookingRequest,
28
+ cartIdOf,
29
+ cartRequest,
30
+ checkoutRedirectRequest,
31
+ checkoutRequired,
32
+ confirmedResult,
33
+ contactOf,
34
+ dailyEndOptions,
35
+ defaultTimeZone,
36
+ endOptionsRequest,
37
+ friendlyError,
38
+ isRental,
39
+ nextSlotsCursor,
40
+ previewRequest,
41
+ startsRequest,
42
+ toDetail,
43
+ toFormFields,
44
+ toHourlyEndOptions,
45
+ toQuote,
46
+ toStartOptions,
47
+ toSummary,
48
+ type Raw,
49
+ type StartWindow,
50
+ } from "./rentals-core";
51
+ import type { EndOption, RentalDetail, RentalFormField, RentalQuote, RentalResult, RentalSummary, StartOption } from "./types";
52
+
53
+ export { RENTALS_APP_ID, RENTALS_FORM_ID, RENTALS_PAGE_SIZE, dailyEndOptions, defaultTimeZone };
54
+
55
+ const services = wixModule(servicesModule);
56
+ const slots = wixModule(availabilityTimeSlots);
57
+ const bookings = wixModule(bookingsModule);
58
+ const pricing = wixModule(pricingModule);
59
+ const cart = wixModule({ createCart, calculateCart, placeOrder });
60
+ const redirects = wixModule(redirectsModule);
61
+
62
+ export interface RentalsPage {
63
+ items: RentalSummary[];
64
+ /** Another page follows — pass `offset + items.length`. */
65
+ hasMore: boolean;
66
+ }
67
+
68
+ /**
69
+ * One page of rentals: Bookings services carrying the Rentals app id (the filter that keeps haircuts
70
+ * out of a rooms catalog on a site that has both), not hidden, with a duration range.
71
+ */
72
+ export async function fetchRentals({ limit = RENTALS_PAGE_SIZE, offset = 0 }: { limit?: number; offset?: number } = {}): Promise<RentalsPage> {
73
+ const res = await services.queryServices().eq("appId", RENTALS_APP_ID).eq("hidden", false).limit(limit).skip(offset).find();
74
+ return { items: ((res.items ?? []) as Raw[]).filter(isRental).map((r) => toSummary(r, imgSrc)), hasMore: res.hasNext() };
75
+ }
76
+
77
+ /** One rental by its URL slug (mainSlug.name); null when not found or not a rental. */
78
+ export async function fetchRentalBySlug(slug: string): Promise<RentalDetail | null> {
79
+ const res = await services.queryServices().eq("mainSlug.name", slug).eq("appId", RENTALS_APP_ID).eq("hidden", false).limit(1).find();
80
+ const raw = res.items?.[0] as Raw | undefined;
81
+ return raw && isRental(raw) ? toDetail(raw, imgSrc) : null;
82
+ }
83
+
84
+ export interface StartsPage {
85
+ options: StartOption[];
86
+ /** The zone the server computed in — the one requested, or the business zone when none was sent. */
87
+ timeZone: string | null;
88
+ }
89
+
90
+ /**
91
+ * The starts a customer can pick in [start of `from`'s day, +days): times for an hourly rental, one
92
+ * per available day for a daily one; follows the cursor until the window is complete. Each start
93
+ * carries the resource it books.
94
+ */
95
+ export async function fetchStarts(rental: Pick<RentalDetail, "id" | "unit" | "resourceTypeId">, window: StartWindow = {}): Promise<StartsPage> {
96
+ const raws: Raw[] = [];
97
+ let timeZone: string | null = null;
98
+ let cursor: string | undefined;
99
+ do {
100
+ const res: Raw = await slots.listAvailabilityTimeSlots(startsRequest(rental, { ...window, cursor }) as any);
101
+ raws.push(...((res.timeSlots ?? []) as Raw[]));
102
+ timeZone ??= res.timeZone ?? null;
103
+ cursor = nextSlotsCursor(res) ?? undefined;
104
+ } while (cursor);
105
+ return { options: toStartOptions(raws, rental.unit), timeZone };
106
+ }
107
+
108
+ /**
109
+ * The lengths a customer can pick for a chosen start. HOURLY: the server's end options (capped by the
110
+ * rental's maximum and by the resource's next booking). DAILY: the consecutive available days from the
111
+ * start, walked here from the starts already fetched (`availableDayKeys`).
112
+ */
113
+ export async function fetchEndOptions(rental: Pick<RentalDetail, "id" | "unit" | "minUnits" | "maxUnits">, start: StartOption, { timeZone, availableDayKeys = [] }: { timeZone?: string | null; availableDayKeys?: string[] } = {}): Promise<EndOption[]> {
114
+ if (rental.unit === "DAY") return dailyEndOptions(start, availableDayKeys, rental);
115
+ const res: Raw = await slots.listAvailabilityTimeSlotEndOptions(rental.id, endOptionsRequest(start, timeZone, "_id") as any);
116
+ return toHourlyEndOptions(res, start);
117
+ }
118
+
119
+ /** The server's price for a start and length; falls back to rate × length when the preview fails. */
120
+ export async function fetchQuote(rental: Pick<RentalDetail, "id" | "rateAmount" | "currency" | "unit">, start: StartOption, end: EndOption, timeZone: string = defaultTimeZone()): Promise<RentalQuote> {
121
+ try {
122
+ const res: Raw = await pricing.previewPrice(previewRequest(rental, start, end.endLocal, timeZone) as any);
123
+ return toQuote(res, rental, end.units);
124
+ } catch {
125
+ return toQuote(null, rental, end.units);
126
+ }
127
+ }
128
+
129
+ /** The booking form's fields (the Rentals default form on a seeded site); contact basics when unreadable. */
130
+ export async function fetchRentalForm(formId: string | null): Promise<RentalFormField[]> {
131
+ const id = encodeURIComponent(formId ?? RENTALS_FORM_ID);
132
+ try {
133
+ const json = async (path: string): Promise<Raw | null> => {
134
+ const r = await wixFetch(path);
135
+ return r.ok ? ((await r.json()) as Raw) : null;
136
+ };
137
+ const [summary, form] = await Promise.all([json(`/form-schema-service/v4/forms/${id}/summary`), json(`/form-schema-service/v4/forms/${id}`).catch(() => null)]);
138
+ return summary ? toFormFields(summary.formSummary, form?.form) : FALLBACK_FIELDS;
139
+ } catch {
140
+ return FALLBACK_FIELDS;
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Rent: createBooking (the start's resource, the customer's end) → createCart (holds it, carries the
146
+ * contact and location, the Rentals app id on the line) → calculateCart → hosted checkout (paid) or
147
+ * placeOrder (free / pay-in-person). Call from the browser. Throws with a friendly message on refusal.
148
+ */
149
+ export async function rentResource(rental: RentalDetail, start: StartOption, end: EndOption, formValues: Record<string, unknown>, timeZone: string = defaultTimeZone()): Promise<RentalResult> {
150
+ let created: Raw;
151
+ try {
152
+ created = await bookings.createBooking(bookingRequest(rental, start, end.endLocal, timeZone, "_id") as any, bookingOptions(formValues) as any);
153
+ } catch (e) {
154
+ throw new Error(friendlyError(e instanceof Error ? e.message : String(e)));
155
+ }
156
+ const bookingId = bookingIdOf(created);
157
+ if (!bookingId) throw new Error("The rental couldn't be booked — the time may have just been taken.");
158
+
159
+ const newCart: Raw = await cart.createCart(cartRequest([bookingId], contactOf(created), start.location?.type === "BUSINESS" ? start.location.id : null) as any);
160
+ const cartId = cartIdOf(newCart);
161
+ if (!cartId) throw new Error("The rental couldn't be reserved — please try again.");
162
+
163
+ const calc: Raw = await cart.calculateCart(cartId);
164
+ if (checkoutRequired(rental, calc)) {
165
+ const origin = typeof window !== "undefined" ? window.location.origin : "";
166
+ const session: Raw = await redirects.createRedirectSession(checkoutRedirectRequest(cartId, origin));
167
+ const url = session?.redirectSession?.fullUrl;
168
+ if (!url) throw new Error("Checkout couldn't start — please try again.");
169
+ return { kind: "redirect", url };
170
+ }
171
+ const order: Raw = await cart.placeOrder(cartId);
172
+ return confirmedResult(bookingId, order);
173
+ }
@@ -0,0 +1,113 @@
1
+ // Rentals DTOs — the serializable shapes every hook, component, and page consumes. Plain JSON:
2
+ // safe as Astro island props and across server/client boundaries. Images are resolved https URLs;
3
+ // every displayable price is a ready formatted string ("" when the site sent no currency — the
4
+ // surface omits it, never guesses one).
5
+ //
6
+ // A rental is a Wix Bookings service with rentals-specific values (there is no Rentals API of its
7
+ // own): the thing rented is a RESOURCE (a room, a vehicle, a piece of gear), the customer picks the
8
+ // START and the LENGTH, and the price is per unit — per hour or per day.
9
+
10
+ /** How a rental is measured and priced: one of the two, never both on one rental. */
11
+ export type RentalUnit = "HOUR" | "DAY";
12
+
13
+ /** Where the rental is handed over. BUSINESS locations have an id; CUSTOM/CUSTOMER don't. */
14
+ export interface RentalLocation {
15
+ id: string | null;
16
+ name: string;
17
+ type: "BUSINESS" | "CUSTOM" | "CUSTOMER";
18
+ }
19
+
20
+ /** A rental as a listing tile needs it. */
21
+ export interface RentalSummary {
22
+ id: string;
23
+ slug: string;
24
+ name: string;
25
+ tagLine: string;
26
+ unit: RentalUnit;
27
+ /** Display-ready price per unit: "$40" ("" when unknown). */
28
+ ratePerUnit: string;
29
+ /** "$40 / hour" or "$40 / day" ("" when unknown). */
30
+ rateLabel: string;
31
+ /** The per-unit amount as a number with its currency — for running totals only; never render these. */
32
+ rateAmount: number;
33
+ currency: string;
34
+ /** Shortest and longest length the customer may pick, in the rental's unit (hours may be fractional: 0.5). */
35
+ minUnits: number;
36
+ maxUnits: number;
37
+ /** "1 to 8 hours" / "1 to 5 days" ("" when unknown). */
38
+ rangeLabel: string;
39
+ /** Resolved https URL ("" when the rental has no image). */
40
+ imageUrl: string;
41
+ /** The resource type the rental books from, and the concrete resources behind it. */
42
+ resourceTypeId: string | null;
43
+ resourceCount: number;
44
+ locations: RentalLocation[];
45
+ onlineBookingEnabled: boolean;
46
+ /** The owner approves each rental by hand: the CTA is "Request to rent". */
47
+ requiresManualApproval: boolean;
48
+ /** NO_FEE (or a rate of 0): rents without a checkout. */
49
+ free: boolean;
50
+ }
51
+
52
+ /** A rental as the booking page needs it. */
53
+ export interface RentalDetail extends RentalSummary {
54
+ /** Description text as stored. */
55
+ description: string;
56
+ /** The booking form id (the Rentals default form on a seeded site; null → the contact-basics fallback). */
57
+ formId: string | null;
58
+ /** Derived payment option the booking must send. */
59
+ paymentOption: "ONLINE" | "OFFLINE";
60
+ /** True → checkout is always required regardless of price (cancellation-fee policy). */
61
+ cancellationFeeEnabled: boolean;
62
+ scheduleId: string | null;
63
+ }
64
+
65
+ /** A start the customer can pick: a time (hourly) or a day at midnight (daily). */
66
+ export interface StartOption {
67
+ /** Identity for React keys: start|location. */
68
+ key: string;
69
+ /** Local wall-clock "YYYY-MM-DDThh:mm:ss" (no Z) in the response's time zone. */
70
+ startLocal: string;
71
+ /** "YYYY-MM-DD" — for grouping and the daily walk. */
72
+ dayKey: string;
73
+ /** "9:00 AM" for hourly; "Mon, Oct 5" for daily. */
74
+ label: string;
75
+ bookable: boolean;
76
+ location: RentalLocation | null;
77
+ /** The resource this start books (from the slot's available resources); null when the server named none. */
78
+ resource: { id: string; name: string } | null;
79
+ scheduleId: string | null;
80
+ }
81
+
82
+ /** A length the customer can pick for the chosen start. */
83
+ export interface EndOption {
84
+ /** Local wall-clock end; for a daily rental midnight on the day AFTER the last day. */
85
+ endLocal: string;
86
+ /** Length in the rental's unit (hours may be fractional). */
87
+ units: number;
88
+ /** "2 hours" / "3 days" / "Until Fri, Oct 9". */
89
+ label: string;
90
+ }
91
+
92
+ /** The server's price for a chosen start and length. */
93
+ export interface RentalQuote {
94
+ /** Formatted total ("" when the currency is unknown). */
95
+ total: string;
96
+ totalAmount: number;
97
+ units: number;
98
+ unit: RentalUnit;
99
+ }
100
+
101
+ /** A booking-form field (flat; values are keyed by `target`). */
102
+ export interface RentalFormField {
103
+ target: string;
104
+ label: string;
105
+ type: "STRING" | "EMAIL" | "PHONE" | "NUMBER" | "URL";
106
+ options?: string[];
107
+ required: boolean;
108
+ }
109
+
110
+ /** The outcome of rent(): either the browser is being redirected, or it's done. */
111
+ export type RentalResult =
112
+ | { kind: "redirect"; url: string }
113
+ | { kind: "confirmed"; bookingId: string; orderId: string | null };
@@ -0,0 +1,89 @@
1
+ // The one auth seam for every Wix SDK call in this app. Copy as-is; do not rewrite.
2
+ //
3
+ // Two modes, switched by WIX_CLIENT_ID in ./config:
4
+ // null (ambient) — a Wix-managed Astro project: `@wix/astro` authenticates raw SDK module
5
+ // calls automatically, server-side AND in client islands. `wixModule()`
6
+ // returns the module untouched.
7
+ // string (manual) — any other React setup (Vite SPA, non-Astro): one shared client is built
8
+ // with OAuthStrategy, and `wixModule()` returns the module bound to it.
9
+ // The strategy self-manages visitor tokens on every call (mints on first
10
+ // use, renews on expiry) and persists them through the storage below.
11
+ //
12
+ // The visitor token IS the identity of the current cart / member session, so in manual mode
13
+ // tokens persist to localStorage — never re-minted per load (a fresh anonymous mint is a NEW
14
+ // visitor and silently empties the cart).
15
+ // docs: https://dev.wix.com/docs/sdk/core-modules/sdk/oauth-strategy.md
16
+ // docs: https://dev.wix.com/docs/go-headless/wix-managed-headless/authentication/about-the-astro-integration.md
17
+ import { createClient, OAuthStrategy, EMPTY_TOKENS } from "@wix/sdk";
18
+ import { fetchWithAuth as ambientFetch } from "@wix/sdk/context";
19
+ import type { IOAuthStrategy, TokenStorage, Tokens } from "@wix/sdk";
20
+ import { WIX_CLIENT_ID } from "./config";
21
+
22
+ const STORAGE_KEY = `wix-session-${WIX_CLIENT_ID ?? "ambient"}`;
23
+
24
+ function browserTokenStorage(): TokenStorage {
25
+ return {
26
+ getTokens(): Tokens {
27
+ if (typeof window !== "undefined") {
28
+ try {
29
+ const raw = window.localStorage.getItem(STORAGE_KEY);
30
+ if (raw) return JSON.parse(raw) as Tokens;
31
+ } catch {
32
+ /* disabled/corrupt storage — fall through to empty */
33
+ }
34
+ }
35
+ return EMPTY_TOKENS;
36
+ },
37
+ setTokens(tokens: Tokens): void {
38
+ if (typeof window === "undefined") return;
39
+ try {
40
+ window.localStorage.setItem(STORAGE_KEY, JSON.stringify(tokens));
41
+ } catch {
42
+ /* storage full/disabled — the session just won't survive a reload */
43
+ }
44
+ },
45
+ };
46
+ }
47
+
48
+ const client = WIX_CLIENT_ID
49
+ ? createClient({
50
+ auth: OAuthStrategy({
51
+ clientId: WIX_CLIENT_ID,
52
+ tokenStorage: browserTokenStorage(),
53
+ }),
54
+ })
55
+ : null;
56
+
57
+ /**
58
+ * Bind an SDK module to this app's auth. Usage (identical in both modes):
59
+ * import { productsV3 } from "@wix/stores";
60
+ * const products = wixModule(productsV3);
61
+ * await products.queryProducts(...)
62
+ */
63
+ export function wixModule<T>(module: T): T {
64
+ // The cast bridges the SDK's internal Descriptors constraint; the in/out type is identical.
65
+ return client
66
+ ? (client.use(module as unknown as Record<string, unknown>) as unknown as T)
67
+ : module;
68
+ }
69
+
70
+ /**
71
+ * An authenticated fetch of a Wix REST endpoint under the SAME auth as the SDK modules (ambient
72
+ * on managed Astro, the shared client elsewhere) — for the few APIs whose generated SDK module is
73
+ * too heavy to bundle (the Forms schema module alone is 15 MB: server-side it pushes a Wix
74
+ * deploy past its size limit, client-side every visitor downloads it). Same visitor identity,
75
+ * same token, no second mint. `path` is the wixapis.com path; returns the raw Response.
76
+ */
77
+ export function wixFetch(path: string, init?: RequestInit): Promise<Response> {
78
+ const url = path.startsWith("http") ? path : `https://www.wixapis.com${path}`;
79
+ return client ? client.fetchWithAuth(url, init) : ambientFetch(url, init);
80
+ }
81
+
82
+ /**
83
+ * The shared data client's manual-mode auth strategy, or null under ambient auth. The
84
+ * Members vertical deliberately owns a separate explicit client for its custom in-app login;
85
+ * app code reads that session through the members hooks instead.
86
+ */
87
+ export function wixAuth(): IOAuthStrategy | null {
88
+ return client ? client.auth : null;
89
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "astro/tsconfigs/strict",
3
+ "include": [".astro/types.d.ts", "**/*"],
4
+ "exclude": ["dist"]
5
+ }
@@ -0,0 +1,153 @@
1
+ // Rentals over REST — the twin of app/wix/rentals/rentals.ts. Same exports, same DTOs; every body
2
+ // comes from rentals-core (the SAME file the SDK transport uses, deployed flat next to this one), so
3
+ // this file is only the transport: literal paths, one fetch per step, all with the visitor token
4
+ // (see ./client). Failures are loud where a visitor acts (renting) and silent-with-a-default where
5
+ // they only inform (form, preview).
6
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/query-services.md
7
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/list-availability-time-slots.md
8
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/list-availability-time-slot-end-options.md
9
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/pricing/pricing-api/preview-price.md
10
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/create-booking.md
11
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/create-cart.md
12
+ // docs: https://dev.wix.com/docs/api-reference/business-management/headless/redirects/create-redirect-session.md
13
+ import { wixRequest } from "./client.js";
14
+ import { imgSrc } from "./media.js";
15
+ import {
16
+ FALLBACK_FIELDS,
17
+ RENTALS_APP_ID,
18
+ RENTALS_FORM_ID,
19
+ RENTALS_PAGE_SIZE,
20
+ bookingIdOf,
21
+ bookingOptions,
22
+ bookingRequest,
23
+ cartIdOf,
24
+ cartRequest,
25
+ checkoutRedirectRequest,
26
+ checkoutRequired,
27
+ confirmedResult,
28
+ contactOf,
29
+ dailyEndOptions,
30
+ defaultTimeZone,
31
+ endOptionsRequest,
32
+ friendlyError,
33
+ isRental,
34
+ nextSlotsCursor,
35
+ previewRequest,
36
+ startsRequest,
37
+ toDetail,
38
+ toFormFields,
39
+ toHourlyEndOptions,
40
+ toQuote,
41
+ toStartOptions,
42
+ toSummary,
43
+ type Raw,
44
+ type StartWindow,
45
+ } from "./rentals-core.js";
46
+ import type { EndOption, RentalDetail, RentalFormField, RentalQuote, RentalResult, RentalSummary, StartOption } from "./types.js";
47
+
48
+ export { RENTALS_APP_ID, RENTALS_FORM_ID, RENTALS_PAGE_SIZE, dailyEndOptions, defaultTimeZone };
49
+
50
+ export interface RentalsPage {
51
+ items: RentalSummary[];
52
+ hasMore: boolean;
53
+ }
54
+
55
+ /**
56
+ * POST /bookings/v2/services/query { query: { filter: { appId, hidden: false }, paging: { limit, offset } } }
57
+ */
58
+ export async function fetchRentals({ limit = RENTALS_PAGE_SIZE, offset = 0 }: { limit?: number; offset?: number } = {}): Promise<RentalsPage> {
59
+ const res = await wixRequest<Raw>("/bookings/v2/services/query", { body: { query: { filter: { appId: RENTALS_APP_ID, hidden: false }, paging: { limit, offset } } } });
60
+ const items = ((res.services ?? []) as Raw[]).filter(isRental).map((r) => toSummary(r, imgSrc));
61
+ const total = Number(res.pagingMetadata?.total ?? 0);
62
+ return { items, hasMore: total ? offset + (res.services?.length ?? 0) < total : false };
63
+ }
64
+
65
+ /** POST /bookings/v2/services/query filtered on mainSlug.name — null when not found or not a rental. */
66
+ export async function fetchRentalBySlug(slug: string): Promise<RentalDetail | null> {
67
+ const res = await wixRequest<Raw>("/bookings/v2/services/query", { body: { query: { filter: { "mainSlug.name": slug, appId: RENTALS_APP_ID, hidden: false }, paging: { limit: 1 } } } });
68
+ const raw = (res.services ?? [])[0] as Raw | undefined;
69
+ return raw && isRental(raw) ? toDetail(raw, imgSrc) : null;
70
+ }
71
+
72
+ export interface StartsPage {
73
+ options: StartOption[];
74
+ timeZone: string | null;
75
+ }
76
+
77
+ /** POST /service-availability/v2/time-slots (cursor followed) — the starts a customer can pick. */
78
+ export async function fetchStarts(rental: Pick<RentalDetail, "id" | "unit" | "resourceTypeId">, window: StartWindow = {}): Promise<StartsPage> {
79
+ const raws: Raw[] = [];
80
+ let timeZone: string | null = null;
81
+ let cursor: string | undefined;
82
+ do {
83
+ const res = await wixRequest<Raw>("/service-availability/v2/time-slots", { body: startsRequest(rental, { ...window, cursor }) });
84
+ raws.push(...((res.timeSlots ?? []) as Raw[]));
85
+ timeZone ??= res.timeZone ?? null;
86
+ cursor = nextSlotsCursor(res) ?? undefined;
87
+ } while (cursor);
88
+ return { options: toStartOptions(raws, rental.unit), timeZone };
89
+ }
90
+
91
+ /**
92
+ * HOURLY: POST /service-availability/v2/time-slots/end-options { serviceId, localStartDate, timeZone, location }
93
+ * (the response field is `endOptions`). DAILY: walked locally from the starts already fetched.
94
+ */
95
+ export async function fetchEndOptions(rental: Pick<RentalDetail, "id" | "unit" | "minUnits" | "maxUnits">, start: StartOption, { timeZone, availableDayKeys = [] }: { timeZone?: string | null; availableDayKeys?: string[] } = {}): Promise<EndOption[]> {
96
+ if (rental.unit === "DAY") return dailyEndOptions(start, availableDayKeys, rental);
97
+ const res = await wixRequest<Raw>("/service-availability/v2/time-slots/end-options", { body: { serviceId: rental.id, ...endOptionsRequest(start, timeZone, "id") } });
98
+ return toHourlyEndOptions(res, start);
99
+ }
100
+
101
+ /** POST /bookings/v2/pricing/preview { bookingLineItems: [...] } — falls back to rate × length. */
102
+ export async function fetchQuote(rental: Pick<RentalDetail, "id" | "rateAmount" | "currency" | "unit">, start: StartOption, end: EndOption, timeZone: string = defaultTimeZone()): Promise<RentalQuote> {
103
+ try {
104
+ const res = await wixRequest<Raw>("/bookings/v2/pricing/preview", { body: { bookingLineItems: previewRequest(rental, start, end.endLocal, timeZone) } });
105
+ return toQuote(res, rental, end.units);
106
+ } catch {
107
+ return toQuote(null, rental, end.units);
108
+ }
109
+ }
110
+
111
+ /** GET /form-schema-service/v4/forms/{id}/summary (+ the schema for `required`); contact basics when unreadable. */
112
+ export async function fetchRentalForm(formId: string | null): Promise<RentalFormField[]> {
113
+ const id = encodeURIComponent(formId ?? RENTALS_FORM_ID);
114
+ try {
115
+ const [summary, form] = await Promise.all([
116
+ wixRequest<Raw>(`/form-schema-service/v4/forms/${id}/summary`, { method: "GET" }),
117
+ wixRequest<Raw>(`/form-schema-service/v4/forms/${id}`, { method: "GET" }).catch(() => null),
118
+ ]);
119
+ return toFormFields(summary?.formSummary, form?.form);
120
+ } catch {
121
+ return FALLBACK_FIELDS;
122
+ }
123
+ }
124
+
125
+ /**
126
+ * POST /bookings/v2/bookings → POST /ecom/v2/carts → POST /ecom/v2/carts/{id}/calculate →
127
+ * POST /headless/v1/redirect-session (paid) | POST /ecom/v2/carts/{id}/place-order (free / offline).
128
+ */
129
+ export async function rentResource(rental: RentalDetail, start: StartOption, end: EndOption, formValues: Record<string, unknown>, timeZone: string = defaultTimeZone()): Promise<RentalResult> {
130
+ let created: Raw;
131
+ try {
132
+ created = await wixRequest<Raw>("/bookings/v2/bookings", { body: { booking: bookingRequest(rental, start, end.endLocal, timeZone, "id"), ...bookingOptions(formValues) } });
133
+ } catch (e) {
134
+ throw new Error(friendlyError(e instanceof Error ? e.message : String(e)));
135
+ }
136
+ const bookingId = bookingIdOf(created);
137
+ if (!bookingId) throw new Error("The rental couldn't be booked — the time may have just been taken.");
138
+
139
+ const newCart = await wixRequest<Raw>("/ecom/v2/carts", { body: cartRequest([bookingId], contactOf(created), start.location?.type === "BUSINESS" ? start.location.id : null) });
140
+ const cartId = cartIdOf(newCart);
141
+ if (!cartId) throw new Error("The rental couldn't be reserved — please try again.");
142
+
143
+ const calc = await wixRequest<Raw>(`/ecom/v2/carts/${cartId}/calculate`, { body: {} });
144
+ if (checkoutRequired(rental, calc)) {
145
+ const origin = typeof window !== "undefined" ? window.location.origin : "";
146
+ const session = await wixRequest<Raw>("/headless/v1/redirect-session", { body: checkoutRedirectRequest(cartId, origin) });
147
+ const url = session?.redirectSession?.fullUrl;
148
+ if (!url) throw new Error("Checkout couldn't start — please try again.");
149
+ return { kind: "redirect", url };
150
+ }
151
+ const order = await wixRequest<Raw>(`/ecom/v2/carts/${cartId}/place-order`, { body: {} });
152
+ return confirmedResult(bookingId, order);
153
+ }
@@ -0,0 +1,95 @@
1
+ # Rentals — seeding
2
+
3
+ Seed by **running `seed-rentals.mjs` with a plan file** — don't hand-write the REST calls. The
4
+ script mints its own site token via the Wix CLI (logged-in session + `wix.config.json` required),
5
+ installs the Wix Rentals app and the Wix Bookings app if needed (Bookings is the availability engine;
6
+ without it an hourly rental with several units answers no availability), creates the resource types
7
+ and their resources, then the
8
+ rental services one at a time with every value that makes a Bookings service a rental, confirms the
9
+ duration range landed, and attaches images.
10
+
11
+ ```bash
12
+ # from the project root (where wix.config.json lives):
13
+ node <SKILL_ROOT>/templates/rentals/seed/seed-rentals.mjs plan.json
14
+ ```
15
+
16
+ `plan.json` is plain data — write it from the brief. **Default to 3–4 rentals** across one or two
17
+ resource types (the seed shows the shape; the owner adds the rest in the dashboard) and make them
18
+ exercise the UI: one hourly and one daily rental when the business allows it, a free or
19
+ approval-gated one where it fits, and an image per rental — the default is an `imagePrompt`
20
+ (AI-generated, ~1 Wix AI credit per image, account-billed): brand-contextual — subject,
21
+ aesthetic/mood, palette, lighting — always ending "no text, no watermarks". At least one image shows
22
+ the real thing being rented. For an asset the user actually supplied use `imagePath` (a file on this
23
+ machine — uploaded to Wix Media) or `imageUrl` (their own hosted URL; verify it with `curl -sI` →
24
+ 200) — never a stock-photo or guessed URL. Images resolve in parallel and never block the seed.
25
+
26
+ ```json
27
+ {
28
+ "resourceTypes": [
29
+ { "name": "Kayaks", "resources": ["Kayak 1", "Kayak 2", "Kayak 3"] },
30
+ { "name": "Cabins", "resources": ["Lakeside cabin"] }
31
+ ],
32
+ "rentals": [
33
+ { "name": "Single kayak", "tagLine": "Paddle the bay at your pace", "description": "…",
34
+ "unit": "HOUR", "rate": 25, "min": 1, "max": 6, "resourceType": "Kayaks", "imagePrompt": "…" },
35
+ { "name": "Lakeside cabin", "description": "…",
36
+ "unit": "DAY", "rate": 180, "min": 2, "max": 7, "resourceType": "Cabins", "imagePrompt": "…" },
37
+ { "name": "Life jacket", "description": "…", "unit": "HOUR", "free": true, "max": 8,
38
+ "resourceType": "Kayaks", "resources": ["Kayak 1"], "imagePrompt": "…" }
39
+ ]
40
+ }
41
+ ```
42
+
43
+ - `resourceTypes` — the kinds of things rented (`name`, max 40 characters, unique per site) and
44
+ the individual units in each (`resources`, by name). Two resources in a type mean two customers
45
+ can rent in parallel. Resources are created **without working hours**: bookable around the
46
+ clock, which keeps a multi-day rental to one booking. Opening hours are dashboard work — say so.
47
+ - `rentals` — one entry per rental service. `resourceType` names the type it rents from (every
48
+ resource of that type unless `resources` narrows it). **The rate lives on the service**, so
49
+ resources that rent at different prices are separate rentals sharing a type.
50
+ - `unit` — `HOUR` or `DAY`, never both on one rental (a room by the hour AND by the day is two
51
+ rentals). `min`/`max` are in that unit: hours from 0.5 to 24 (default 1 to 8), days from 1 to 8
52
+ (default 1 to 5).
53
+ - `rate` — a number per unit (per hour or per day); Wix multiplies it out at booking time. Omit
54
+ it or set `free: true` for a no-fee rental (rents without a checkout, paid in person).
55
+ - `requireManualApproval: true` — rentals are requests the owner approves (the CTA reads
56
+ "Request to rent").
57
+ - `currency` — 3-letter ISO code at the top of the plan, set **only when the brief names one**: a
58
+ sentence about currency, or a price written with its unit ("9 dollars", "$9", "€20"). Do **not**
59
+ infer it from a language, a country, or an address. The seed sets the site to it before creating
60
+ anything, because rates are stored in the site currency at create time; a new site starts in the
61
+ currency of the account that created it, not the business's.
62
+
63
+ The result carries `durationRangeConfirmed` (the first rental re-read; `"HOUR"`/`"DAY"` means the
64
+ range landed, `null` means it was dropped and the rental would book as a fixed slot — stop and
65
+ read the create-service reference), the created rentals with their slugs, the resource types with
66
+ their resources, `preexisting[]` (rentals the site already listed, see below), `errors` per rental,
67
+ and `dashboardUrl`.
68
+
69
+ **Seeding is additive — the seed never deletes or overwrites anything on the site, and neither do
70
+ you.** There is no cleanup flag and no cleanup step. The Rentals install adds its own sample rental
71
+ to a new site ("Conference room", $45 an hour, 1 to 8 hours), and the live listing shows it next to
72
+ the owner's rentals, so it is never silent: the result's `preexisting[]` names every rental the run
73
+ did not create and the plan did not name (`{ id, name, slug }`), and the closing message says so
74
+ with the Rentals dashboard link (`dashboardUrl` in the result) so the owner removes it there if they
75
+ want to. Resource types and resources are idempotent by name — a re-run reuses "Kayaks" instead of
76
+ creating a second one.
77
+
78
+ ## Supplied content
79
+
80
+ The general rules are in `templates/shared/SUPPLIED-CONTENT.md`. For rentals, each thing the user
81
+ rents out is one entry. Its name becomes `name`; "per hour"/"per day" (or a price written that way)
82
+ becomes `unit` and `rate`; a stated shortest or longest rental becomes `min`/`max`; the number of
83
+ units they own becomes that type's `resources` (named "Kayak 1", "Kayak 2" when the user gives no
84
+ names); a group name ("boats", "rooms") becomes the `resourceType`. Their photo becomes `imageUrl`.
85
+ A rental with no unit is a question for the user.
86
+
87
+ ## Escape hatch — individual functions
88
+ `setupRentals` composes exported steps — `installRentalsApp`, `createResourceTypes`,
89
+ `createResources`, `buildRental`, `createRental`, `confirmDurationRange`, `readRentals`, `importImage`,
90
+ `attachRentalImage`, plus `makeCtx()` — import them only for a partial re-seed.
91
+
92
+ ## Reference
93
+ Unexpected shape or an uncovered operation → read the live Wix API reference; every call the script
94
+ makes carries a `docs:` line with its reference page. The Rentals model itself is four pages under
95
+ `https://dev.wix.com/docs/api-reference/business-solutions/rentals/`.