@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,118 @@
1
+ // Wall-clock arithmetic in a named IANA zone with nothing but Intl — no date-fns-tz. The one
2
+ // place that knows how to turn "2026-10-03 19:00 in America/New_York" into an instant and back;
3
+ // ordering-core (menu availability windows in the setting's zone) and reservations-core (slot
4
+ // search and labels in the LOCATION's zone, never the visitor's) both import it. No imports of its
5
+ // own, so a strip to JS emits none; deploy copies every *-core.ts next to the transports.
6
+
7
+ export interface ZonedParts {
8
+ year: number;
9
+ /** 1-12 */
10
+ month: number;
11
+ day: number;
12
+ /** 0-23 */
13
+ hour: number;
14
+ minute: number;
15
+ second: number;
16
+ /** 0 = Sunday … 6 = Saturday */
17
+ weekday: number;
18
+ }
19
+
20
+ const WEEKDAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
21
+ const pad = (n: number) => String(n).padStart(2, "0");
22
+
23
+ /** The wall-clock parts of an instant in `timeZone` ("" or an unknown zone → the runtime's zone). */
24
+ export function zonedParts(date: Date, timeZone: string): ZonedParts {
25
+ try {
26
+ const parts = new Intl.DateTimeFormat("en-US", {
27
+ timeZone: timeZone || undefined,
28
+ hourCycle: "h23",
29
+ weekday: "short",
30
+ year: "numeric",
31
+ month: "2-digit",
32
+ day: "2-digit",
33
+ hour: "2-digit",
34
+ minute: "2-digit",
35
+ second: "2-digit",
36
+ }).formatToParts(date);
37
+ const get = (type: string) => parts.find((p) => p.type === type)?.value ?? "";
38
+ const hour = Number(get("hour")) % 24; // some engines print "24" for midnight
39
+ return {
40
+ year: Number(get("year")),
41
+ month: Number(get("month")),
42
+ day: Number(get("day")),
43
+ hour,
44
+ minute: Number(get("minute")),
45
+ second: Number(get("second")),
46
+ weekday: Math.max(0, WEEKDAYS.indexOf(get("weekday"))),
47
+ };
48
+ } catch {
49
+ return {
50
+ year: date.getFullYear(),
51
+ month: date.getMonth() + 1,
52
+ day: date.getDate(),
53
+ hour: date.getHours(),
54
+ minute: date.getMinutes(),
55
+ second: date.getSeconds(),
56
+ weekday: date.getDay(),
57
+ };
58
+ }
59
+ }
60
+
61
+ /** "YYYY-MM-DD" of an instant in `timeZone`. */
62
+ export function zonedDayKey(date: Date, timeZone: string): string {
63
+ const p = zonedParts(date, timeZone);
64
+ return `${p.year}-${pad(p.month)}-${pad(p.day)}`;
65
+ }
66
+
67
+ /** Minutes since midnight of an instant in `timeZone`. */
68
+ export function zonedMinutes(date: Date, timeZone: string): number {
69
+ const p = zonedParts(date, timeZone);
70
+ return p.hour * 60 + p.minute;
71
+ }
72
+
73
+ /**
74
+ * The instant at which the wall clock in `timeZone` reads `dayKey` ("YYYY-MM-DD") `hhmm` ("HH:mm"),
75
+ * as an ISO string. Two offset iterations cover DST edges. Invalid input → "".
76
+ */
77
+ export function zonedIso(dayKey: string, hhmm: string, timeZone: string): string {
78
+ const [y, m, d] = dayKey.split("-").map(Number);
79
+ const [h, mi] = hhmm.split(":").map(Number);
80
+ if (![y, m, d, h, mi].every(Number.isFinite)) return "";
81
+ const target = Date.UTC(y, m - 1, d, h, mi, 0);
82
+ let utc = target;
83
+ for (let i = 0; i < 2; i++) {
84
+ const p = zonedParts(new Date(utc), timeZone);
85
+ const wall = Date.UTC(p.year, p.month - 1, p.day, p.hour, p.minute, p.second);
86
+ utc = target - (wall - utc);
87
+ }
88
+ return new Date(utc).toISOString();
89
+ }
90
+
91
+ /** A short time label of an instant in `timeZone` in the visitor's language ("7:00 PM"); "" on failure. */
92
+ export function zonedTimeLabel(date: Date, timeZone: string, locale?: string): string {
93
+ try {
94
+ return date.toLocaleTimeString(locale || undefined, { hour: "numeric", minute: "2-digit", timeZone: timeZone || undefined });
95
+ } catch {
96
+ try {
97
+ return date.toLocaleTimeString(undefined, { hour: "numeric", minute: "2-digit" });
98
+ } catch {
99
+ return "";
100
+ }
101
+ }
102
+ }
103
+
104
+ /** A short date + time label of an instant in `timeZone` ("Fri, Oct 3, 7:00 PM"); "" on failure. */
105
+ export function zonedDateTimeLabel(date: Date, timeZone: string, locale?: string): string {
106
+ try {
107
+ return date.toLocaleString(locale || undefined, {
108
+ weekday: "short",
109
+ month: "short",
110
+ day: "numeric",
111
+ hour: "numeric",
112
+ minute: "2-digit",
113
+ timeZone: timeZone || undefined,
114
+ });
115
+ } catch {
116
+ return "";
117
+ }
118
+ }
@@ -0,0 +1,337 @@
1
+ // Restaurants DTOs — the serializable shapes every hook, component, and page consumes.
2
+ // Plain JSON: safe as Astro island props or across server/client boundaries. Images are
3
+ // resolved https URLs. EVERY money value is a formatted string in the site's currency and
4
+ // locale (read once from the eCommerce settings' BUSINESS_INFO, the way Wix's own menus code
5
+ // does) — "" when the currency could not be read; the raw decimal rides beside it in the
6
+ // `*Amount` fields for arithmetic. Order-cart prices (eCom) are formatted from the cart's currency.
7
+
8
+ /** The site's currency + locale, from the eCommerce settings. `currency` "" when unknown. */
9
+ export interface SiteMoney {
10
+ /** ISO 4217, e.g. "USD"; "" when the settings could not be read (prices then format to ""). */
11
+ currency: string;
12
+ /** BCP 47, e.g. "en-US"; "" → the runtime's default locale. */
13
+ locale: string;
14
+ }
15
+
16
+ /** A dietary/style label on a menu item (e.g. "Vegan", "Spicy"). */
17
+ export interface MenuItemLabel {
18
+ id: string;
19
+ name: string;
20
+ /** Resolved https URL ("" when the label has no icon). */
21
+ iconUrl: string;
22
+ }
23
+
24
+ /** One price variant of an item ("Glass" / "Bottle"). An item has price OR variants. */
25
+ export interface MenuItemVariant {
26
+ variantId: string;
27
+ name: string;
28
+ /** Formatted price ("" when the currency is unknown). */
29
+ price: string;
30
+ /** Decimal amount, site currency, no symbol ("9.50"). */
31
+ priceAmount: string;
32
+ }
33
+
34
+ /** One choice inside a modifier group ("Extra cheese"). */
35
+ export interface MenuModifier {
36
+ /** The modifier entity id — what the cart line carries. The same id may appear twice in one group. */
37
+ id: string;
38
+ /** Unique within the group: `${id}~${index}` — the selection key (duplicate ids stay distinct). */
39
+ key: string;
40
+ name: string;
41
+ preSelected: boolean;
42
+ /** Formatted up-charge ("" when free or the currency is unknown). */
43
+ additionalCharge: string;
44
+ /** Decimal up-charge amount ("0" = free), site currency, no symbol. */
45
+ additionalChargeAmount: string;
46
+ inStock: boolean;
47
+ }
48
+
49
+ /**
50
+ * The shape of a group's rule, derived from required/min/max the way Wix's ordering code does:
51
+ * NO_LIMIT (optional, any count) · CHOOSE_ONE (exactly or up to one) · CHOOSE_X (required, min = max)
52
+ * · AT_LEAST_ONE · AT_LEAST_X · UP_TO_X (optional, max > 1) · BETWEEN_X_AND_Y (required, min < max).
53
+ */
54
+ export type ModifierRuleType =
55
+ | "NO_LIMIT"
56
+ | "CHOOSE_ONE"
57
+ | "CHOOSE_X"
58
+ | "CHOOSE_AT_LEAST_ONE"
59
+ | "CHOOSE_AT_LEAST_X"
60
+ | "CHOOSE_UP_TO_X"
61
+ | "CHOOSE_BETWEEN_X_AND_Y";
62
+
63
+ /** A modifier group on an item ("Toppings", choose 0–3). Selections are sent on the cart line. */
64
+ export interface MenuModifierGroup {
65
+ id: string;
66
+ name: string;
67
+ required: boolean;
68
+ minSelections: number;
69
+ maxSelections: number | null;
70
+ rule: ModifierRuleType;
71
+ /** required && min 1 && max 1 → render radios (one selection replaces the other); else checkboxes. */
72
+ singleSelect: boolean;
73
+ modifiers: MenuModifier[];
74
+ }
75
+
76
+ /** A dish/drink as the menu page needs it. */
77
+ export interface MenuItem {
78
+ id: string;
79
+ name: string;
80
+ description: string;
81
+ /** Formatted price; null when the item is variant-priced or market-priced. */
82
+ price: string | null;
83
+ /** Decimal base price ("12.50"); null when variant-priced or market-priced. */
84
+ priceAmount: string | null;
85
+ /** True → show "Market price"; the item can't be ordered online (an ours-only display rule: owners use "no price" for market price). */
86
+ marketPrice: boolean;
87
+ /** Non-empty exactly when price is null and not marketPrice. The cheapest is the default selection. */
88
+ variants: MenuItemVariant[];
89
+ /** Resolved https URL ("" when the item has no image). */
90
+ imageUrl: string;
91
+ /** The main image followed by the additional images, resolved (may be empty). */
92
+ gallery: string[];
93
+ labels: MenuItemLabel[];
94
+ modifierGroups: MenuModifierGroup[];
95
+ /** The item's own stock flag (orderSettings.inStock). */
96
+ inStock: boolean;
97
+ /** !inStock, OR a required group can't be satisfied from in-stock modifiers → render "Sold out". */
98
+ soldOut: boolean;
99
+ /** Can be added online: not market-priced and not sold out. Menu- and operation-level gates are on the order cart. */
100
+ orderable: boolean;
101
+ /** The kitchen accepts a free-text note on this item (orderSettings.acceptSpecialRequests). */
102
+ acceptsSpecialRequests: boolean;
103
+ featured: boolean;
104
+ }
105
+
106
+ /** A section of a menu ("Appetizers"), items already in display order. */
107
+ export interface MenuSection {
108
+ id: string;
109
+ name: string;
110
+ description: string;
111
+ /** Resolved https URL ("" when none). */
112
+ imageUrl: string;
113
+ items: MenuItem[];
114
+ }
115
+
116
+ /** A whole menu ("Dinner"), sections already in display order. */
117
+ export interface MenuData {
118
+ id: string;
119
+ name: string;
120
+ description: string;
121
+ /** URL fragment (urlQueryParam), e.g. "dinner". */
122
+ slug: string;
123
+ sections: MenuSection[];
124
+ /** The currency + locale every price on this menu was formatted with — for live price math (`itemPrice`). */
125
+ money: SiteMoney;
126
+ }
127
+
128
+ /**
129
+ * What a visitor chose on a dish before adding it: the variant (variant-priced items only), the
130
+ * modifier KEYS per group (MenuModifier.key — never the id), and the special request.
131
+ * Start from `initialSelection(item)`; change with `toggleModifier`; check with `validateSelection`.
132
+ */
133
+ export interface OrderSelection {
134
+ variantId: string | null;
135
+ /** groupId → selected MenuModifier.key list. */
136
+ modifiers: Record<string, string[]>;
137
+ specialRequest: string;
138
+ }
139
+
140
+ /** The result of validating a selection: one message per group that fails its rule. */
141
+ export interface SelectionValidation {
142
+ ok: boolean;
143
+ /** groupId → message ("Choose at least 2", …). */
144
+ errors: Record<string, string>;
145
+ }
146
+
147
+ /** The live price of a selection: amount and the formatted string. */
148
+ export interface SelectionPrice {
149
+ amount: number;
150
+ formatted: string;
151
+ }
152
+
153
+ /** The online-ordering operation's state, resolved once per session. */
154
+ export interface OrderingStatus {
155
+ /** The operation to order through; null when the site has none. */
156
+ operationId: string | null;
157
+ /** ENABLED accepts orders. DISABLED and PAUSED_UNTIL refuse them; NONE = no operation. */
158
+ status: "ENABLED" | "DISABLED" | "PAUSED_UNTIL" | "NONE";
159
+ /** When status is PAUSED_UNTIL: the moment ordering resumes (ISO). */
160
+ pausedUntilIso: string | null;
161
+ /** The operation's location timezone (for rendering pausedUntilIso), "" when unknown. */
162
+ timeZone: string;
163
+ /** The fulfillment methods this operation offers (ids) — fetchFulfillmentMethods is limited to them. */
164
+ fulfillmentIds: string[];
165
+ defaultFulfillmentType: "PICKUP" | "DELIVERY" | null;
166
+ }
167
+
168
+ /** One weekly availability window, wall-clock in the setting's timezone. */
169
+ export interface WeeklyWindow {
170
+ day: "MON" | "TUE" | "WED" | "THU" | "FRI" | "SAT" | "SUN";
171
+ /** "HH:mm" (24h). An end before the start wraps past midnight. */
172
+ start: string;
173
+ end: string;
174
+ }
175
+
176
+ /**
177
+ * A menu's ordering settings under the resolved operation (one entry per menu). A menu with no
178
+ * entry, or `enabled: false`, or outside its availability, isn't orderable — show no add control.
179
+ */
180
+ export interface MenuOrderingInfo {
181
+ menuId: string;
182
+ enabled: boolean;
183
+ availability: {
184
+ /** ALWAYS_AVAILABLE · WEEKLY_SCHEDULE (see `weekly`) · TIMESTAMP_RANGES (see `ranges`). */
185
+ type: "ALWAYS_AVAILABLE" | "WEEKLY_SCHEDULE" | "TIMESTAMP_RANGES" | "UNSPECIFIED";
186
+ /** IANA zone the windows are expressed in ("" → the visitor's). */
187
+ timeZone: string;
188
+ weekly: WeeklyWindow[];
189
+ ranges: { startIso: string; endIso: string }[];
190
+ };
191
+ }
192
+
193
+ /** A pickup/delivery method the operation offers (the buyer picks one on the hosted checkout). */
194
+ export interface FulfillmentMethodInfo {
195
+ id: string;
196
+ type: "PICKUP" | "DELIVERY";
197
+ name: string;
198
+ /** Formatted fee ("" when free or the currency is unknown). */
199
+ fee: string;
200
+ feeAmount: string;
201
+ /** Formatted minimum order ("" when none). */
202
+ minOrderPrice: string;
203
+ minOrderPriceAmount: string;
204
+ }
205
+
206
+ export interface OrderLine {
207
+ /** The cart line id — what update/remove take (NOT the menu item id). */
208
+ lineItemId: string;
209
+ itemName: string;
210
+ quantity: number;
211
+ /** Per-unit price, formatted. */
212
+ unitPrice: string;
213
+ /** Line total, formatted. */
214
+ linePrice: string;
215
+ /** Resolved https URL ("" when none). */
216
+ imageUrl: string;
217
+ /** Human-readable selection labels the platform attached (variant, modifiers, special request). */
218
+ descriptionLines: string[];
219
+ /** Not IN_STOCK → the line can't be checked out as-is. */
220
+ status: string;
221
+ }
222
+
223
+ export interface OrderCart {
224
+ lines: OrderLine[];
225
+ /** Sum of line quantities. */
226
+ itemCount: number;
227
+ /** Formatted subtotal (after discounts) — from the cart estimate, not hand-summed. */
228
+ subtotal: string;
229
+ currency: string;
230
+ }
231
+
232
+ /** A custom question the owner added to the reservation form. */
233
+ export interface ReservationCustomField {
234
+ id: string;
235
+ name: string;
236
+ required: boolean;
237
+ }
238
+
239
+ /** A policy link or text the form must show ({ url } or { text }). */
240
+ export interface ReservationPolicy {
241
+ url: string;
242
+ text: string;
243
+ }
244
+
245
+ /** The owner's reservation form configuration — render the form from it, validate against it. */
246
+ export interface ReservationFormConfig {
247
+ /** firstName and phone are ALWAYS required; these two are per configuration. */
248
+ lastNameRequired: boolean;
249
+ emailRequired: boolean;
250
+ /** An email-marketing consent checkbox; null when the owner disabled it. */
251
+ marketingCheckbox: { checkedByDefault: boolean } | null;
252
+ customFields: ReservationCustomField[];
253
+ /** Terms and conditions to show when enabled; null otherwise. */
254
+ terms: ReservationPolicy | null;
255
+ /** Privacy policy to show when enabled; null otherwise. */
256
+ privacy: ReservationPolicy | null;
257
+ /** The owner's post-submit message ("" when none). */
258
+ submitMessage: string;
259
+ }
260
+
261
+ /** A reservation location as the booking form needs it. */
262
+ export interface ReservationLocationInfo {
263
+ id: string;
264
+ name: string;
265
+ /** Formatted address ("" when none). */
266
+ address: string;
267
+ /** IANA zone — slot search and labels are computed in it, never in the visitor's. */
268
+ timeZone: string;
269
+ default: boolean;
270
+ /** Bound the party-size input to [partySizeMin, partySizeMax]. */
271
+ partySizeMin: number;
272
+ partySizeMax: number;
273
+ /** "AUTOMATIC" confirms instantly; "MANUAL" always asks the restaurant; "MANUAL_FOR_LARGE_PARTIES" from the threshold up. */
274
+ approvalMode: "AUTOMATIC" | "MANUAL" | "MANUAL_FOR_LARGE_PARTIES";
275
+ /** Parties of this size and up need approval (MANUAL_FOR_LARGE_PARTIES); null otherwise. */
276
+ manualApprovalPartySizeThreshold: number | null;
277
+ /** False (premium-gated toggle off) → slots/booking won't work; show an honest notice. */
278
+ onlineReservationsEnabled: boolean;
279
+ form: ReservationFormConfig;
280
+ }
281
+
282
+ /** One reservation time slot. */
283
+ export interface ReservationSlot {
284
+ /** ISO datetime — pass to holdSlot as-is. */
285
+ startIso: string;
286
+ /** Display label in the location's timezone, e.g. "7:00 PM". */
287
+ label: string;
288
+ /** "YYYY-MM-DD" in the location's timezone — for grouping/labeling. */
289
+ dayKey: string;
290
+ durationMinutes: number;
291
+ /** This slot needs staff approval → the reservation is requested (no hold), ending REQUESTED. */
292
+ manualApproval: boolean;
293
+ }
294
+
295
+ /** A 10-minute hold on a slot; completeReservation needs BOTH ids. */
296
+ export interface ReservationHold {
297
+ reservationId: string;
298
+ revision: string;
299
+ startIso: string;
300
+ partySize: number;
301
+ /** When the hold lapses (created + 10 minutes) — drive a countdown from it. */
302
+ expiresAtIso: string;
303
+ }
304
+
305
+ /** The visitor's details. firstName + phone are ALWAYS required; the rest per ReservationFormConfig. */
306
+ export interface ReservationReservee {
307
+ firstName: string;
308
+ phone: string;
309
+ lastName?: string;
310
+ email?: string;
311
+ /** The marketing checkbox's value; only when the form shows one. */
312
+ marketingConsent?: boolean;
313
+ /** custom field id → the visitor's answer. */
314
+ customFields?: Record<string, string>;
315
+ }
316
+
317
+ /** Every status the Reservations API can return. */
318
+ export type ReservationStatus =
319
+ | "HELD"
320
+ | "RESERVED"
321
+ | "REQUESTED"
322
+ | "PAYMENT_INFORMATION_PENDING"
323
+ | "CANCELED"
324
+ | "DECLINED"
325
+ | "FINISHED"
326
+ | "NO_SHOW"
327
+ | "SEATED"
328
+ | "UNKNOWN";
329
+
330
+ /** The outcome of completing or requesting a reservation. */
331
+ export interface ReservationConfirmation {
332
+ reservationId: string;
333
+ /** The API's status, unmapped. */
334
+ status: ReservationStatus;
335
+ /** confirmed = RESERVED; pending = REQUESTED or PAYMENT_INFORMATION_PENDING; anything else = other. */
336
+ outcome: "confirmed" | "pending" | "other";
337
+ }
@@ -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,96 @@
1
+ // Menu reads over REST (Wix Restaurants Menus V1) — the twin of app/wix/restaurants/menu.ts. Same
2
+ // exports, same MenuData tree; the rules and the id-array stitching come from menu-core (the SAME
3
+ // file the SDK transport uses, deployed flat next to this one by deploy.mjs --stack static), so
4
+ // this file is only the transport: one GET per list page, literal paths and query params. Every
5
+ // call here is safe from a browser with a visitor token. Porting: keep the paths, keep the params,
6
+ // port the core once. Entities carry `id` here (the SDK spells it `_id`); the core accepts both.
7
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/menus/menus/list-menus.md
8
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/menus/items/items/list-items.md
9
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/ecommerce-settings/get-ecommerce-settings.md
10
+ import { wixRequest } from "./client.js";
11
+ import { imgSrc } from "./media.js";
12
+ import {
13
+ anyLabels,
14
+ assembleMenus,
15
+ chunk,
16
+ collectGroupIds,
17
+ collectModifierIds,
18
+ collectVariantIds,
19
+ nextCursor,
20
+ toSiteMoney,
21
+ type Raw,
22
+ } from "./menu-core.js";
23
+ import type { MenuData, SiteMoney } from "./types.js";
24
+
25
+ const get = (path: string, query?: Record<string, string | readonly string[]>) => wixRequest<Raw>(path, { method: "GET", query });
26
+
27
+ // The site's currency + locale are site config — read once per page, reused by every price.
28
+ let moneyPromise: Promise<SiteMoney> | null = null;
29
+
30
+ /**
31
+ * The site's currency and locale from the eCommerce settings' BUSINESS_INFO (the read Wix's own
32
+ * menus code makes before formatting a price). { currency: "" } when the read fails: prices then
33
+ * format to "" rather than to a guessed symbol.
34
+ * GET /_api/ecommerce-settings/v1/ecommerce-settings?fields=BUSINESS_INFO (the path the SDK resolves on www.wixapis.com)
35
+ */
36
+ export function fetchSiteMoney(): Promise<SiteMoney> {
37
+ moneyPromise ??= get("/_api/ecommerce-settings/v1/ecommerce-settings", { fields: ["BUSINESS_INFO"] })
38
+ .then((res) => toSiteMoney(res))
39
+ .catch(() => {
40
+ moneyPromise = null; // transient failure — allow a retry on the next call
41
+ return { currency: "", locale: "" };
42
+ });
43
+ return moneyPromise;
44
+ }
45
+
46
+ /** Every page of a cursor-paged list (?paging.cursor=…, pagingMetadata.cursors.next), the entities concatenated. */
47
+ async function allPages(path: string, query: Record<string, string>, key: string): Promise<Raw[]> {
48
+ const out: Raw[] = [];
49
+ let cursor: string | null = null;
50
+ do {
51
+ const res: Raw = await get(path, cursor ? { ...query, "paging.cursor": cursor } : query);
52
+ out.push(...((res?.[key] ?? []) as Raw[]));
53
+ cursor = nextCursor(res);
54
+ } while (cursor);
55
+ return out;
56
+ }
57
+
58
+ /** An id-array read in chunks of 100 ids per call (the key repeats: ?variantIds=a&variantIds=b), the entities concatenated. */
59
+ async function byIds(path: string, param: string, ids: string[], key: string): Promise<Raw[]> {
60
+ const pages = await Promise.all(chunk(ids).map((part) => get(path, { [param]: part })));
61
+ return pages.flatMap((res) => (res?.[key] ?? []) as Raw[]);
62
+ }
63
+
64
+ /**
65
+ * The site's full menu tree, assembled and display-ordered, every price formatted in the site's
66
+ * currency — the one entry point for every menu surface; [] when no menus exist. The three visible
67
+ * lists are read to the last page, then the referenced variants, modifier groups (100 ids per
68
+ * call), and labels, then the groups' modifiers.
69
+ * GET /restaurants/menus-menu/v1/menus?onlyVisible=true[&paging.cursor=…]
70
+ * GET /restaurants/menus-section/v1/sections?onlyVisible=true[&paging.cursor=…]
71
+ * GET /restaurants/menus-item/v1/items?onlyVisible=true[&paging.cursor=…]
72
+ * GET /restaurants/item-variants/v1/variants?variantIds=…
73
+ * GET /restaurants/item-modifier-group/v1/modifier-groups?modifierGroupIds=…
74
+ * GET /restaurants/item-modifiers/v1/modifiers?modifierIds=…
75
+ * GET /restaurants/item-labels/v1/labels
76
+ */
77
+ export async function fetchMenus(): Promise<MenuData[]> {
78
+ const VISIBLE = { onlyVisible: "true" };
79
+ const [menus, sections, items, money] = await Promise.all([
80
+ allPages("/restaurants/menus-menu/v1/menus", VISIBLE, "menus"),
81
+ allPages("/restaurants/menus-section/v1/sections", VISIBLE, "sections"),
82
+ allPages("/restaurants/menus-item/v1/items", VISIBLE, "items"),
83
+ fetchSiteMoney(),
84
+ ]);
85
+ if (!menus.length) return [];
86
+ const variantIds = collectVariantIds(items);
87
+ const groupIds = collectGroupIds(items);
88
+ const [variants, groups, labels] = await Promise.all([
89
+ byIds("/restaurants/item-variants/v1/variants", "variantIds", variantIds, "variants"),
90
+ byIds("/restaurants/item-modifier-group/v1/modifier-groups", "modifierGroupIds", groupIds, "modifierGroups"),
91
+ // List Labels has no paging: one call returns them all.
92
+ anyLabels(items) ? get("/restaurants/item-labels/v1/labels").then((res) => (res?.labels ?? []) as Raw[]) : Promise.resolve([] as Raw[]),
93
+ ]);
94
+ const modifiers = await byIds("/restaurants/item-modifiers/v1/modifiers", "modifierIds", collectModifierIds(groups), "modifiers");
95
+ return assembleMenus({ menus, sections, items, variants, groups, modifiers, labels, money }, imgSrc);
96
+ }