@doswiftly/cli 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. package/README.md +357 -0
  2. package/bin/doswiftly.js +2 -0
  3. package/dist/commands/auth-github.d.ts +6 -0
  4. package/dist/commands/auth-github.d.ts.map +1 -0
  5. package/dist/commands/auth-github.js +89 -0
  6. package/dist/commands/auth-github.js.map +1 -0
  7. package/dist/commands/auth-token.d.ts +12 -0
  8. package/dist/commands/auth-token.d.ts.map +1 -0
  9. package/dist/commands/auth-token.js +43 -0
  10. package/dist/commands/auth-token.js.map +1 -0
  11. package/dist/commands/auth.d.ts +22 -0
  12. package/dist/commands/auth.d.ts.map +1 -0
  13. package/dist/commands/auth.js +348 -0
  14. package/dist/commands/auth.js.map +1 -0
  15. package/dist/commands/check.d.ts +5 -0
  16. package/dist/commands/check.d.ts.map +1 -0
  17. package/dist/commands/check.js +234 -0
  18. package/dist/commands/check.js.map +1 -0
  19. package/dist/commands/config.d.ts +3 -0
  20. package/dist/commands/config.d.ts.map +1 -0
  21. package/dist/commands/config.js +104 -0
  22. package/dist/commands/config.js.map +1 -0
  23. package/dist/commands/deploy.d.ts +37 -0
  24. package/dist/commands/deploy.d.ts.map +1 -0
  25. package/dist/commands/deploy.js +580 -0
  26. package/dist/commands/deploy.js.map +1 -0
  27. package/dist/commands/dev.d.ts +8 -0
  28. package/dist/commands/dev.d.ts.map +1 -0
  29. package/dist/commands/dev.js +83 -0
  30. package/dist/commands/dev.js.map +1 -0
  31. package/dist/commands/doctor.d.ts +5 -0
  32. package/dist/commands/doctor.d.ts.map +1 -0
  33. package/dist/commands/doctor.js +363 -0
  34. package/dist/commands/doctor.js.map +1 -0
  35. package/dist/commands/domain.d.ts +13 -0
  36. package/dist/commands/domain.d.ts.map +1 -0
  37. package/dist/commands/domain.js +128 -0
  38. package/dist/commands/domain.js.map +1 -0
  39. package/dist/commands/env.d.ts +25 -0
  40. package/dist/commands/env.d.ts.map +1 -0
  41. package/dist/commands/env.js +228 -0
  42. package/dist/commands/env.js.map +1 -0
  43. package/dist/commands/init.d.ts +11 -0
  44. package/dist/commands/init.d.ts.map +1 -0
  45. package/dist/commands/init.js +1028 -0
  46. package/dist/commands/init.js.map +1 -0
  47. package/dist/commands/inspect.d.ts +12 -0
  48. package/dist/commands/inspect.d.ts.map +1 -0
  49. package/dist/commands/inspect.js +162 -0
  50. package/dist/commands/inspect.js.map +1 -0
  51. package/dist/commands/migrate.d.ts +18 -0
  52. package/dist/commands/migrate.d.ts.map +1 -0
  53. package/dist/commands/migrate.js +355 -0
  54. package/dist/commands/migrate.js.map +1 -0
  55. package/dist/commands/preview.d.ts +29 -0
  56. package/dist/commands/preview.d.ts.map +1 -0
  57. package/dist/commands/preview.js +199 -0
  58. package/dist/commands/preview.js.map +1 -0
  59. package/dist/commands/proxy.d.ts +9 -0
  60. package/dist/commands/proxy.d.ts.map +1 -0
  61. package/dist/commands/proxy.js +37 -0
  62. package/dist/commands/proxy.js.map +1 -0
  63. package/dist/commands/sdk.d.ts +5 -0
  64. package/dist/commands/sdk.d.ts.map +1 -0
  65. package/dist/commands/sdk.js +82 -0
  66. package/dist/commands/sdk.js.map +1 -0
  67. package/dist/commands/template.d.ts +107 -0
  68. package/dist/commands/template.d.ts.map +1 -0
  69. package/dist/commands/template.js +1309 -0
  70. package/dist/commands/template.js.map +1 -0
  71. package/dist/commands/types.d.ts +5 -0
  72. package/dist/commands/types.d.ts.map +1 -0
  73. package/dist/commands/types.js +82 -0
  74. package/dist/commands/types.js.map +1 -0
  75. package/dist/commands/update.d.ts +2 -0
  76. package/dist/commands/update.d.ts.map +1 -0
  77. package/dist/commands/update.js +103 -0
  78. package/dist/commands/update.js.map +1 -0
  79. package/dist/commands/upgrade.d.ts +18 -0
  80. package/dist/commands/upgrade.d.ts.map +1 -0
  81. package/dist/commands/upgrade.js +55 -0
  82. package/dist/commands/upgrade.js.map +1 -0
  83. package/dist/commands/verify.d.ts +5 -0
  84. package/dist/commands/verify.d.ts.map +1 -0
  85. package/dist/commands/verify.js +232 -0
  86. package/dist/commands/verify.js.map +1 -0
  87. package/dist/commands/whoami.d.ts +5 -0
  88. package/dist/commands/whoami.d.ts.map +1 -0
  89. package/dist/commands/whoami.js +60 -0
  90. package/dist/commands/whoami.js.map +1 -0
  91. package/dist/config/types.d.ts +173 -0
  92. package/dist/config/types.d.ts.map +1 -0
  93. package/dist/config/types.js +48 -0
  94. package/dist/config/types.js.map +1 -0
  95. package/dist/index.d.ts +3 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +416 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/lib/api-url.d.ts +14 -0
  100. package/dist/lib/api-url.d.ts.map +1 -0
  101. package/dist/lib/api-url.js +24 -0
  102. package/dist/lib/api-url.js.map +1 -0
  103. package/dist/lib/api.d.ts +67 -0
  104. package/dist/lib/api.d.ts.map +1 -0
  105. package/dist/lib/api.js +36 -0
  106. package/dist/lib/api.js.map +1 -0
  107. package/dist/lib/config.d.ts +39 -0
  108. package/dist/lib/config.d.ts.map +1 -0
  109. package/dist/lib/config.js +195 -0
  110. package/dist/lib/config.js.map +1 -0
  111. package/dist/lib/env-storage.d.ts +140 -0
  112. package/dist/lib/env-storage.d.ts.map +1 -0
  113. package/dist/lib/env-storage.js +464 -0
  114. package/dist/lib/env-storage.js.map +1 -0
  115. package/dist/lib/errors.d.ts +61 -0
  116. package/dist/lib/errors.d.ts.map +1 -0
  117. package/dist/lib/errors.js +204 -0
  118. package/dist/lib/errors.js.map +1 -0
  119. package/dist/lib/i18n.d.ts +99 -0
  120. package/dist/lib/i18n.d.ts.map +1 -0
  121. package/dist/lib/i18n.js +184 -0
  122. package/dist/lib/i18n.js.map +1 -0
  123. package/dist/lib/logger.d.ts +95 -0
  124. package/dist/lib/logger.d.ts.map +1 -0
  125. package/dist/lib/logger.js +168 -0
  126. package/dist/lib/logger.js.map +1 -0
  127. package/dist/lib/package-manager.d.ts +91 -0
  128. package/dist/lib/package-manager.d.ts.map +1 -0
  129. package/dist/lib/package-manager.js +205 -0
  130. package/dist/lib/package-manager.js.map +1 -0
  131. package/dist/lib/proxy-server.d.ts +24 -0
  132. package/dist/lib/proxy-server.d.ts.map +1 -0
  133. package/dist/lib/proxy-server.js +173 -0
  134. package/dist/lib/proxy-server.js.map +1 -0
  135. package/dist/lib/select-with-back.d.ts +34 -0
  136. package/dist/lib/select-with-back.d.ts.map +1 -0
  137. package/dist/lib/select-with-back.js +94 -0
  138. package/dist/lib/select-with-back.js.map +1 -0
  139. package/dist/lib/shared-api-client.d.ts +40 -0
  140. package/dist/lib/shared-api-client.d.ts.map +1 -0
  141. package/dist/lib/shared-api-client.js +92 -0
  142. package/dist/lib/shared-api-client.js.map +1 -0
  143. package/dist/lib/wizard-engine.d.ts +128 -0
  144. package/dist/lib/wizard-engine.d.ts.map +1 -0
  145. package/dist/lib/wizard-engine.js +168 -0
  146. package/dist/lib/wizard-engine.js.map +1 -0
  147. package/package.json +85 -0
  148. package/templates/storefront-minimal/.env.example +10 -0
  149. package/templates/storefront-minimal/.github/workflows/build-template.yml +109 -0
  150. package/templates/storefront-minimal/app/globals.css +18 -0
  151. package/templates/storefront-minimal/app/layout.tsx +26 -0
  152. package/templates/storefront-minimal/app/page.tsx +93 -0
  153. package/templates/storefront-minimal/lib/graphql-client.ts +23 -0
  154. package/templates/storefront-minimal/next.config.ts +15 -0
  155. package/templates/storefront-minimal/open-next.config.ts +3 -0
  156. package/templates/storefront-minimal/package.json +30 -0
  157. package/templates/storefront-minimal/postcss.config.mjs +5 -0
  158. package/templates/storefront-minimal/tailwind.config.ts +14 -0
  159. package/templates/storefront-minimal/tsconfig.json +27 -0
  160. package/templates/storefront-minimal/wrangler.toml +9 -0
  161. package/templates/storefront-nextjs/.env.example +68 -0
  162. package/templates/storefront-nextjs/.github/workflows/build-template.yml +109 -0
  163. package/templates/storefront-nextjs/.github/workflows/deploy.yml +25 -0
  164. package/templates/storefront-nextjs/.github/workflows/preview.yml +22 -0
  165. package/templates/storefront-nextjs/README.md +520 -0
  166. package/templates/storefront-nextjs/app/account/orders/page.tsx +216 -0
  167. package/templates/storefront-nextjs/app/account/page.tsx +167 -0
  168. package/templates/storefront-nextjs/app/auth/login/page.tsx +135 -0
  169. package/templates/storefront-nextjs/app/auth/register/page.tsx +228 -0
  170. package/templates/storefront-nextjs/app/cart/page.tsx +263 -0
  171. package/templates/storefront-nextjs/app/categories/[slug]/page.tsx +200 -0
  172. package/templates/storefront-nextjs/app/categories/page.tsx +58 -0
  173. package/templates/storefront-nextjs/app/checkout/page.tsx +351 -0
  174. package/templates/storefront-nextjs/app/collections/[slug]/page.tsx +158 -0
  175. package/templates/storefront-nextjs/app/collections/page.tsx +61 -0
  176. package/templates/storefront-nextjs/app/globals.css +98 -0
  177. package/templates/storefront-nextjs/app/layout.tsx +39 -0
  178. package/templates/storefront-nextjs/app/page.tsx +136 -0
  179. package/templates/storefront-nextjs/app/products/[slug]/page.tsx +119 -0
  180. package/templates/storefront-nextjs/app/products/page.tsx +107 -0
  181. package/templates/storefront-nextjs/app/search/page.tsx +127 -0
  182. package/templates/storefront-nextjs/components/auth/auth-guard.tsx +94 -0
  183. package/templates/storefront-nextjs/components/commerce/add-to-cart-button.tsx +77 -0
  184. package/templates/storefront-nextjs/components/commerce/cart-icon.tsx +29 -0
  185. package/templates/storefront-nextjs/components/commerce/currency-selector.tsx +217 -0
  186. package/templates/storefront-nextjs/components/commerce/pagination.tsx +62 -0
  187. package/templates/storefront-nextjs/components/commerce/product-actions.tsx +135 -0
  188. package/templates/storefront-nextjs/components/commerce/product-filters.tsx +109 -0
  189. package/templates/storefront-nextjs/components/commerce/product-price.tsx +375 -0
  190. package/templates/storefront-nextjs/components/commerce/search-input.tsx +178 -0
  191. package/templates/storefront-nextjs/components/commerce/sort-select.tsx +64 -0
  192. package/templates/storefront-nextjs/components/commerce/variant-selector.tsx +210 -0
  193. package/templates/storefront-nextjs/components/layout/footer.tsx +107 -0
  194. package/templates/storefront-nextjs/components/layout/header.tsx +104 -0
  195. package/templates/storefront-nextjs/components/providers.tsx +62 -0
  196. package/templates/storefront-nextjs/lib/auth/routes.ts +52 -0
  197. package/templates/storefront-nextjs/lib/currency.tsx +140 -0
  198. package/templates/storefront-nextjs/lib/format.ts +159 -0
  199. package/templates/storefront-nextjs/lib/graphql-queries.ts +629 -0
  200. package/templates/storefront-nextjs/lib/hooks.ts +30 -0
  201. package/templates/storefront-nextjs/middleware.ts +80 -0
  202. package/templates/storefront-nextjs/next.config.ts +37 -0
  203. package/templates/storefront-nextjs/open-next.config.ts +3 -0
  204. package/templates/storefront-nextjs/package.dev.json +30 -0
  205. package/templates/storefront-nextjs/package.json +32 -0
  206. package/templates/storefront-nextjs/package.json.template +32 -0
  207. package/templates/storefront-nextjs/postcss.config.mjs +8 -0
  208. package/templates/storefront-nextjs/tailwind.config.ts +111 -0
  209. package/templates/storefront-nextjs/tsconfig.json +27 -0
  210. package/templates/storefront-nextjs/wrangler.toml +9 -0
  211. package/templates/storefront-nextjs-shadcn/.env.example +68 -0
  212. package/templates/storefront-nextjs-shadcn/.github/workflows/build-template.yml +109 -0
  213. package/templates/storefront-nextjs-shadcn/.github/workflows/deploy.yml +25 -0
  214. package/templates/storefront-nextjs-shadcn/.github/workflows/preview.yml +22 -0
  215. package/templates/storefront-nextjs-shadcn/CART_INTEGRATION.md +282 -0
  216. package/templates/storefront-nextjs-shadcn/CLAUDE.md +96 -0
  217. package/templates/storefront-nextjs-shadcn/GRAPHQL_DOCUMENT_NAMES.md +190 -0
  218. package/templates/storefront-nextjs-shadcn/GRAPHQL_ERROR_HANDLING.md +263 -0
  219. package/templates/storefront-nextjs-shadcn/GRAPHQL_FIXES_SUMMARY.md +135 -0
  220. package/templates/storefront-nextjs-shadcn/GRAPHQL_INTEGRATION_COMPLETE.md +142 -0
  221. package/templates/storefront-nextjs-shadcn/INTEGRATION_CHECKLIST.md +448 -0
  222. package/templates/storefront-nextjs-shadcn/PRODUCT_DETAIL_PAGE_IMPLEMENTATION.md +307 -0
  223. package/templates/storefront-nextjs-shadcn/README.md +195 -0
  224. package/templates/storefront-nextjs-shadcn/THEME_CUSTOMIZATION.md +245 -0
  225. package/templates/storefront-nextjs-shadcn/app/about/page.tsx +34 -0
  226. package/templates/storefront-nextjs-shadcn/app/account/addresses/page.tsx +215 -0
  227. package/templates/storefront-nextjs-shadcn/app/account/loyalty/page.tsx +484 -0
  228. package/templates/storefront-nextjs-shadcn/app/account/orders/[id]/page.tsx +128 -0
  229. package/templates/storefront-nextjs-shadcn/app/account/orders/[id]/tracking/page.tsx +206 -0
  230. package/templates/storefront-nextjs-shadcn/app/account/orders/page.tsx +80 -0
  231. package/templates/storefront-nextjs-shadcn/app/account/page.tsx +107 -0
  232. package/templates/storefront-nextjs-shadcn/app/account/settings/page.tsx +195 -0
  233. package/templates/storefront-nextjs-shadcn/app/api/auth/clear-token/route.ts +87 -0
  234. package/templates/storefront-nextjs-shadcn/app/api/auth/set-token/route.ts +125 -0
  235. package/templates/storefront-nextjs-shadcn/app/auth/forgot-password/page.tsx +131 -0
  236. package/templates/storefront-nextjs-shadcn/app/auth/login/page.tsx +24 -0
  237. package/templates/storefront-nextjs-shadcn/app/auth/register/page.tsx +20 -0
  238. package/templates/storefront-nextjs-shadcn/app/blog/[slug]/page.tsx +323 -0
  239. package/templates/storefront-nextjs-shadcn/app/blog/page.tsx +159 -0
  240. package/templates/storefront-nextjs-shadcn/app/brands/[slug]/page.tsx +170 -0
  241. package/templates/storefront-nextjs-shadcn/app/brands/page.tsx +73 -0
  242. package/templates/storefront-nextjs-shadcn/app/cart/page.tsx +165 -0
  243. package/templates/storefront-nextjs-shadcn/app/categories/[slug]/page.tsx +78 -0
  244. package/templates/storefront-nextjs-shadcn/app/categories/page.tsx +75 -0
  245. package/templates/storefront-nextjs-shadcn/app/checkout/page.tsx +1752 -0
  246. package/templates/storefront-nextjs-shadcn/app/checkout/success/[orderId]/page.tsx +256 -0
  247. package/templates/storefront-nextjs-shadcn/app/collections/[handle]/page.tsx +74 -0
  248. package/templates/storefront-nextjs-shadcn/app/collections/page.tsx +75 -0
  249. package/templates/storefront-nextjs-shadcn/app/contact/page.tsx +114 -0
  250. package/templates/storefront-nextjs-shadcn/app/error.tsx +90 -0
  251. package/templates/storefront-nextjs-shadcn/app/globals.css +125 -0
  252. package/templates/storefront-nextjs-shadcn/app/layout.tsx +57 -0
  253. package/templates/storefront-nextjs-shadcn/app/not-found.tsx +68 -0
  254. package/templates/storefront-nextjs-shadcn/app/page.tsx +21 -0
  255. package/templates/storefront-nextjs-shadcn/app/products/[slug]/page.tsx +246 -0
  256. package/templates/storefront-nextjs-shadcn/app/products/[slug]/product-client.tsx +343 -0
  257. package/templates/storefront-nextjs-shadcn/app/products/page.tsx +25 -0
  258. package/templates/storefront-nextjs-shadcn/app/products/products-client.tsx +192 -0
  259. package/templates/storefront-nextjs-shadcn/app/returns/page.tsx +77 -0
  260. package/templates/storefront-nextjs-shadcn/app/robots.ts +53 -0
  261. package/templates/storefront-nextjs-shadcn/app/search/page.tsx +16 -0
  262. package/templates/storefront-nextjs-shadcn/app/search/search-client.tsx +47 -0
  263. package/templates/storefront-nextjs-shadcn/app/shipping/page.tsx +62 -0
  264. package/templates/storefront-nextjs-shadcn/app/sitemap.ts +144 -0
  265. package/templates/storefront-nextjs-shadcn/app/wishlist/page.tsx +179 -0
  266. package/templates/storefront-nextjs-shadcn/codegen.ts +51 -0
  267. package/templates/storefront-nextjs-shadcn/components/account/address-form.tsx +348 -0
  268. package/templates/storefront-nextjs-shadcn/components/account/address-list.tsx +144 -0
  269. package/templates/storefront-nextjs-shadcn/components/account/order-details.tsx +258 -0
  270. package/templates/storefront-nextjs-shadcn/components/account/order-history.tsx +107 -0
  271. package/templates/storefront-nextjs-shadcn/components/auth/account-menu.tsx +132 -0
  272. package/templates/storefront-nextjs-shadcn/components/auth/login-form.tsx +188 -0
  273. package/templates/storefront-nextjs-shadcn/components/auth/register-form.tsx +305 -0
  274. package/templates/storefront-nextjs-shadcn/components/blog/blog-card.tsx +240 -0
  275. package/templates/storefront-nextjs-shadcn/components/blog/blog-sidebar.tsx +177 -0
  276. package/templates/storefront-nextjs-shadcn/components/blog/index.ts +8 -0
  277. package/templates/storefront-nextjs-shadcn/components/brand/brand-card.tsx +119 -0
  278. package/templates/storefront-nextjs-shadcn/components/brand/brand-grid.tsx +64 -0
  279. package/templates/storefront-nextjs-shadcn/components/cart/cart-drawer.tsx +140 -0
  280. package/templates/storefront-nextjs-shadcn/components/cart/cart-icon.tsx +48 -0
  281. package/templates/storefront-nextjs-shadcn/components/cart/cart-item.tsx +112 -0
  282. package/templates/storefront-nextjs-shadcn/components/cart/cart-summary.tsx +84 -0
  283. package/templates/storefront-nextjs-shadcn/components/cart/index.ts +17 -0
  284. package/templates/storefront-nextjs-shadcn/components/cart/promo-code-input.tsx +121 -0
  285. package/templates/storefront-nextjs-shadcn/components/cart/shipping-estimator.tsx +162 -0
  286. package/templates/storefront-nextjs-shadcn/components/checkout/index.ts +25 -0
  287. package/templates/storefront-nextjs-shadcn/components/checkout/payment-method-card.tsx +187 -0
  288. package/templates/storefront-nextjs-shadcn/components/checkout/payment-step.tsx +160 -0
  289. package/templates/storefront-nextjs-shadcn/components/checkout/tax-breakdown.tsx +154 -0
  290. package/templates/storefront-nextjs-shadcn/components/commerce/currency-selector.tsx +225 -0
  291. package/templates/storefront-nextjs-shadcn/components/commerce/pagination.tsx +62 -0
  292. package/templates/storefront-nextjs-shadcn/components/commerce/product-actions.tsx +158 -0
  293. package/templates/storefront-nextjs-shadcn/components/commerce/search-input.tsx +174 -0
  294. package/templates/storefront-nextjs-shadcn/components/commerce/variant-selector.tsx +210 -0
  295. package/templates/storefront-nextjs-shadcn/components/common/category-card.tsx +97 -0
  296. package/templates/storefront-nextjs-shadcn/components/common/collection-card.tsx +187 -0
  297. package/templates/storefront-nextjs-shadcn/components/common/price-display.tsx +151 -0
  298. package/templates/storefront-nextjs-shadcn/components/common/social-share.tsx +166 -0
  299. package/templates/storefront-nextjs-shadcn/components/discount/discount-breakdown.tsx +245 -0
  300. package/templates/storefront-nextjs-shadcn/components/discount/discount-code-input.tsx +246 -0
  301. package/templates/storefront-nextjs-shadcn/components/discount/index.ts +19 -0
  302. package/templates/storefront-nextjs-shadcn/components/error/error-boundary.tsx +113 -0
  303. package/templates/storefront-nextjs-shadcn/components/error/index.ts +7 -0
  304. package/templates/storefront-nextjs-shadcn/components/filters/attribute-filter.tsx +153 -0
  305. package/templates/storefront-nextjs-shadcn/components/filters/checkbox-group-filter.tsx +167 -0
  306. package/templates/storefront-nextjs-shadcn/components/filters/color-swatch-filter.tsx +176 -0
  307. package/templates/storefront-nextjs-shadcn/components/filters/dynamic-attribute-filters.tsx +220 -0
  308. package/templates/storefront-nextjs-shadcn/components/filters/index.ts +36 -0
  309. package/templates/storefront-nextjs-shadcn/components/filters/range-slider-filter.tsx +193 -0
  310. package/templates/storefront-nextjs-shadcn/components/filters/toggle-filter.tsx +132 -0
  311. package/templates/storefront-nextjs-shadcn/components/gift-card/gift-card-balance.tsx +321 -0
  312. package/templates/storefront-nextjs-shadcn/components/gift-card/gift-card-input.tsx +309 -0
  313. package/templates/storefront-nextjs-shadcn/components/gift-card/index.ts +24 -0
  314. package/templates/storefront-nextjs-shadcn/components/home/category-grid.tsx +72 -0
  315. package/templates/storefront-nextjs-shadcn/components/home/featured-collections.tsx +107 -0
  316. package/templates/storefront-nextjs-shadcn/components/home/featured-products.tsx +85 -0
  317. package/templates/storefront-nextjs-shadcn/components/home/hero-section.tsx +34 -0
  318. package/templates/storefront-nextjs-shadcn/components/home/index.ts +8 -0
  319. package/templates/storefront-nextjs-shadcn/components/home/newsletter-signup.tsx +108 -0
  320. package/templates/storefront-nextjs-shadcn/components/layout/breadcrumbs.tsx +133 -0
  321. package/templates/storefront-nextjs-shadcn/components/layout/currency-selector.tsx +341 -0
  322. package/templates/storefront-nextjs-shadcn/components/layout/footer.tsx +128 -0
  323. package/templates/storefront-nextjs-shadcn/components/layout/header.tsx +147 -0
  324. package/templates/storefront-nextjs-shadcn/components/layout/index.ts +9 -0
  325. package/templates/storefront-nextjs-shadcn/components/layout/mobile-menu.tsx +211 -0
  326. package/templates/storefront-nextjs-shadcn/components/layout/navigation.tsx +95 -0
  327. package/templates/storefront-nextjs-shadcn/components/layout/theme-switcher.tsx +192 -0
  328. package/templates/storefront-nextjs-shadcn/components/loyalty/index.ts +11 -0
  329. package/templates/storefront-nextjs-shadcn/components/loyalty/points-balance.tsx +93 -0
  330. package/templates/storefront-nextjs-shadcn/components/loyalty/points-history.tsx +177 -0
  331. package/templates/storefront-nextjs-shadcn/components/loyalty/referral-section.tsx +250 -0
  332. package/templates/storefront-nextjs-shadcn/components/loyalty/rewards-catalog.tsx +217 -0
  333. package/templates/storefront-nextjs-shadcn/components/loyalty/tier-badge.tsx +106 -0
  334. package/templates/storefront-nextjs-shadcn/components/loyalty/tier-progress.tsx +131 -0
  335. package/templates/storefront-nextjs-shadcn/components/order/delivery-estimate.tsx +196 -0
  336. package/templates/storefront-nextjs-shadcn/components/order/index.ts +11 -0
  337. package/templates/storefront-nextjs-shadcn/components/order/order-tracking.tsx +200 -0
  338. package/templates/storefront-nextjs-shadcn/components/order/shipment-card.tsx +407 -0
  339. package/templates/storefront-nextjs-shadcn/components/order/tracking-status.tsx +222 -0
  340. package/templates/storefront-nextjs-shadcn/components/order/tracking-timeline.tsx +205 -0
  341. package/templates/storefront-nextjs-shadcn/components/product/add-to-cart-button.tsx +161 -0
  342. package/templates/storefront-nextjs-shadcn/components/product/b2b-price-display.tsx +250 -0
  343. package/templates/storefront-nextjs-shadcn/components/product/discount-badge.tsx +196 -0
  344. package/templates/storefront-nextjs-shadcn/components/product/index.ts +41 -0
  345. package/templates/storefront-nextjs-shadcn/components/product/product-card.tsx +147 -0
  346. package/templates/storefront-nextjs-shadcn/components/product/product-filters.tsx +217 -0
  347. package/templates/storefront-nextjs-shadcn/components/product/product-gallery.tsx +143 -0
  348. package/templates/storefront-nextjs-shadcn/components/product/product-grid.tsx +83 -0
  349. package/templates/storefront-nextjs-shadcn/components/product/product-image.tsx +155 -0
  350. package/templates/storefront-nextjs-shadcn/components/product/product-price.tsx +158 -0
  351. package/templates/storefront-nextjs-shadcn/components/product/product-quantity-selector.tsx +111 -0
  352. package/templates/storefront-nextjs-shadcn/components/product/product-reviews.tsx +238 -0
  353. package/templates/storefront-nextjs-shadcn/components/product/product-sort.tsx +58 -0
  354. package/templates/storefront-nextjs-shadcn/components/product/product-variant-selector.tsx +169 -0
  355. package/templates/storefront-nextjs-shadcn/components/product/review-card.tsx +220 -0
  356. package/templates/storefront-nextjs-shadcn/components/product/review-form.tsx +338 -0
  357. package/templates/storefront-nextjs-shadcn/components/product/review-summary.tsx +143 -0
  358. package/templates/storefront-nextjs-shadcn/components/product/sale-countdown.tsx +166 -0
  359. package/templates/storefront-nextjs-shadcn/components/product/savings-display.tsx +213 -0
  360. package/templates/storefront-nextjs-shadcn/components/product/similar-products.tsx +57 -0
  361. package/templates/storefront-nextjs-shadcn/components/product/stock-indicator.tsx +91 -0
  362. package/templates/storefront-nextjs-shadcn/components/providers/currency-provider.tsx +103 -0
  363. package/templates/storefront-nextjs-shadcn/components/providers/index.ts +8 -0
  364. package/templates/storefront-nextjs-shadcn/components/providers/query-provider.tsx +260 -0
  365. package/templates/storefront-nextjs-shadcn/components/providers/theme-provider.tsx +13 -0
  366. package/templates/storefront-nextjs-shadcn/components/returns/index.ts +26 -0
  367. package/templates/storefront-nextjs-shadcn/components/returns/return-request-form.tsx +608 -0
  368. package/templates/storefront-nextjs-shadcn/components/returns/return-status-card.tsx +554 -0
  369. package/templates/storefront-nextjs-shadcn/components/search/index.ts +8 -0
  370. package/templates/storefront-nextjs-shadcn/components/search/search-bar.tsx +140 -0
  371. package/templates/storefront-nextjs-shadcn/components/search/search-results.tsx +58 -0
  372. package/templates/storefront-nextjs-shadcn/components/search/search-suggestions.tsx +43 -0
  373. package/templates/storefront-nextjs-shadcn/components/seo/index.ts +12 -0
  374. package/templates/storefront-nextjs-shadcn/components/seo/json-ld.tsx +56 -0
  375. package/templates/storefront-nextjs-shadcn/components/seo/product-json-ld.ts +167 -0
  376. package/templates/storefront-nextjs-shadcn/components/shipping/index.ts +16 -0
  377. package/templates/storefront-nextjs-shadcn/components/shipping/shipping-method-selector.tsx +337 -0
  378. package/templates/storefront-nextjs-shadcn/components/ui/accordion.tsx +153 -0
  379. package/templates/storefront-nextjs-shadcn/components/ui/alert.tsx +59 -0
  380. package/templates/storefront-nextjs-shadcn/components/ui/badge.tsx +34 -0
  381. package/templates/storefront-nextjs-shadcn/components/ui/button.tsx +51 -0
  382. package/templates/storefront-nextjs-shadcn/components/ui/card.tsx +77 -0
  383. package/templates/storefront-nextjs-shadcn/components/ui/checkbox.tsx +30 -0
  384. package/templates/storefront-nextjs-shadcn/components/ui/dialog.tsx +137 -0
  385. package/templates/storefront-nextjs-shadcn/components/ui/empty-state.tsx +207 -0
  386. package/templates/storefront-nextjs-shadcn/components/ui/index.ts +67 -0
  387. package/templates/storefront-nextjs-shadcn/components/ui/input.tsx +65 -0
  388. package/templates/storefront-nextjs-shadcn/components/ui/label.tsx +26 -0
  389. package/templates/storefront-nextjs-shadcn/components/ui/pagination.tsx +205 -0
  390. package/templates/storefront-nextjs-shadcn/components/ui/radio-group.tsx +44 -0
  391. package/templates/storefront-nextjs-shadcn/components/ui/select.tsx +160 -0
  392. package/templates/storefront-nextjs-shadcn/components/ui/separator.tsx +28 -0
  393. package/templates/storefront-nextjs-shadcn/components/ui/skeleton.tsx +20 -0
  394. package/templates/storefront-nextjs-shadcn/components/ui/spinner.tsx +82 -0
  395. package/templates/storefront-nextjs-shadcn/components/ui/tabs.tsx +119 -0
  396. package/templates/storefront-nextjs-shadcn/components/ui/toast.tsx +96 -0
  397. package/templates/storefront-nextjs-shadcn/components/wishlist/index.ts +9 -0
  398. package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-button.tsx +148 -0
  399. package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-icon.tsx +47 -0
  400. package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-item.tsx +165 -0
  401. package/templates/storefront-nextjs-shadcn/components.json +19 -0
  402. package/templates/storefront-nextjs-shadcn/generated/.gitkeep +2 -0
  403. package/templates/storefront-nextjs-shadcn/graphql/.gitkeep +31 -0
  404. package/templates/storefront-nextjs-shadcn/graphql/collections.example.ts +168 -0
  405. package/templates/storefront-nextjs-shadcn/graphql/products.example.ts +160 -0
  406. package/templates/storefront-nextjs-shadcn/hooks/index.ts +9 -0
  407. package/templates/storefront-nextjs-shadcn/hooks/use-auth.ts +310 -0
  408. package/templates/storefront-nextjs-shadcn/hooks/use-cart-actions.ts +286 -0
  409. package/templates/storefront-nextjs-shadcn/hooks/use-cart-sync.ts +110 -0
  410. package/templates/storefront-nextjs-shadcn/hooks/use-filter-params.test.ts +173 -0
  411. package/templates/storefront-nextjs-shadcn/hooks/use-filter-params.ts +298 -0
  412. package/templates/storefront-nextjs-shadcn/lib/auth/cookies.ts +220 -0
  413. package/templates/storefront-nextjs-shadcn/lib/auth/routes.ts +57 -0
  414. package/templates/storefront-nextjs-shadcn/lib/config.ts +46 -0
  415. package/templates/storefront-nextjs-shadcn/lib/currency/IMPLEMENTATION_SUMMARY.md +254 -0
  416. package/templates/storefront-nextjs-shadcn/lib/currency/README.md +464 -0
  417. package/templates/storefront-nextjs-shadcn/lib/currency/cookie-manager.test.ts +328 -0
  418. package/templates/storefront-nextjs-shadcn/lib/currency/cookie-manager.ts +295 -0
  419. package/templates/storefront-nextjs-shadcn/lib/currency/index.ts +27 -0
  420. package/templates/storefront-nextjs-shadcn/lib/format.test.ts +397 -0
  421. package/templates/storefront-nextjs-shadcn/lib/format.ts +226 -0
  422. package/templates/storefront-nextjs-shadcn/lib/graphql/client.ts +109 -0
  423. package/templates/storefront-nextjs-shadcn/lib/graphql/hooks.ts +1183 -0
  424. package/templates/storefront-nextjs-shadcn/lib/graphql/server.ts +267 -0
  425. package/templates/storefront-nextjs-shadcn/lib/hooks.ts +30 -0
  426. package/templates/storefront-nextjs-shadcn/lib/theme/theme-config.ts +89 -0
  427. package/templates/storefront-nextjs-shadcn/lib/utils.ts +6 -0
  428. package/templates/storefront-nextjs-shadcn/next.config.ts +47 -0
  429. package/templates/storefront-nextjs-shadcn/open-next.config.ts +3 -0
  430. package/templates/storefront-nextjs-shadcn/package.dev.json +30 -0
  431. package/templates/storefront-nextjs-shadcn/package.json +60 -0
  432. package/templates/storefront-nextjs-shadcn/package.json.template +46 -0
  433. package/templates/storefront-nextjs-shadcn/postcss.config.mjs +8 -0
  434. package/templates/storefront-nextjs-shadcn/proxy.ts +80 -0
  435. package/templates/storefront-nextjs-shadcn/public/icons/payment/apple-pay.svg +8 -0
  436. package/templates/storefront-nextjs-shadcn/public/icons/payment/bank-transfer.svg +10 -0
  437. package/templates/storefront-nextjs-shadcn/public/icons/payment/blik.svg +6 -0
  438. package/templates/storefront-nextjs-shadcn/public/icons/payment/cash-on-delivery.svg +11 -0
  439. package/templates/storefront-nextjs-shadcn/public/icons/payment/google-pay.svg +11 -0
  440. package/templates/storefront-nextjs-shadcn/public/icons/payment/mastercard.svg +7 -0
  441. package/templates/storefront-nextjs-shadcn/public/icons/payment/paypal.svg +7 -0
  442. package/templates/storefront-nextjs-shadcn/public/icons/payment/payu.svg +7 -0
  443. package/templates/storefront-nextjs-shadcn/public/icons/payment/przelewy24.svg +7 -0
  444. package/templates/storefront-nextjs-shadcn/public/icons/payment/stripe.svg +4 -0
  445. package/templates/storefront-nextjs-shadcn/public/icons/payment/visa.svg +5 -0
  446. package/templates/storefront-nextjs-shadcn/stores/auth-store.ts +66 -0
  447. package/templates/storefront-nextjs-shadcn/stores/cart-store.ts +56 -0
  448. package/templates/storefront-nextjs-shadcn/stores/checkout-store.ts +184 -0
  449. package/templates/storefront-nextjs-shadcn/stores/currency-store.ts +103 -0
  450. package/templates/storefront-nextjs-shadcn/stores/wishlist-store.ts +291 -0
  451. package/templates/storefront-nextjs-shadcn/tailwind.config.ts +111 -0
  452. package/templates/storefront-nextjs-shadcn/tsconfig.json +27 -0
  453. package/templates/storefront-nextjs-shadcn/wrangler.toml +9 -0
@@ -0,0 +1,282 @@
1
+ # Cart Integration with GraphQL
2
+
3
+ This storefront template includes full GraphQL integration for cart operations. The cart system uses a hybrid approach:
4
+
5
+ - **Local Store (Zustand)**: For immediate UI updates and optimistic rendering
6
+ - **GraphQL API**: For persistence and server-side cart management
7
+
8
+ ## Quick Start
9
+
10
+ ### Using AddToCartButton
11
+
12
+ The simplest way to add products to cart is using the `AddToCartButton` component:
13
+
14
+ ```tsx
15
+ import { AddToCartButton } from "@/components/product/add-to-cart-button";
16
+
17
+ <AddToCartButton
18
+ variantId={variant.id}
19
+ productId={product.id}
20
+ productHandle={product.handle}
21
+ productTitle={product.title}
22
+ variantTitle={variant.title}
23
+ price={variant.price}
24
+ image={variant.image}
25
+ available={variant.available}
26
+ quantity={1}
27
+ />
28
+ ```
29
+
30
+ The button automatically:
31
+ - Creates a cart if one doesn't exist
32
+ - Adds the item to GraphQL cart
33
+ - Updates local store for immediate UI feedback
34
+ - Shows loading and success states
35
+ - Displays error toasts if something fails
36
+
37
+ ### Using useCartActions Hook
38
+
39
+ For more control, use the `useCartActions` hook directly:
40
+
41
+ ```tsx
42
+ 'use client';
43
+
44
+ import { useCartActions } from "@/hooks/use-cart-actions";
45
+
46
+ export function MyComponent() {
47
+ const { addToCart, updateQuantity, removeFromCart, isLoading } = useCartActions();
48
+
49
+ const handleAdd = async () => {
50
+ await addToCart({
51
+ variantId: 'variant-123',
52
+ productId: 'product-456',
53
+ productTitle: 'T-Shirt',
54
+ variantTitle: 'Large / Blue',
55
+ price: { amount: '29.99', currencyCode: 'USD' },
56
+ quantity: 1
57
+ });
58
+ };
59
+
60
+ return (
61
+ <button onClick={handleAdd} disabled={isLoading}>
62
+ Add to Cart
63
+ </button>
64
+ );
65
+ }
66
+ ```
67
+
68
+ ## Cart Store
69
+
70
+ The local cart store (`useCartStore`) provides immediate UI updates:
71
+
72
+ ```tsx
73
+ import { useCartStore } from "@/stores/cart-store";
74
+
75
+ const { items, getTotalItems, getTotalPrice, isOpen, openCart } = useCartStore();
76
+ ```
77
+
78
+ **Note**: The store is automatically synced with GraphQL operations by `useCartActions`.
79
+
80
+ ## Cart Drawer
81
+
82
+ The cart drawer shows the current cart state:
83
+
84
+ ```tsx
85
+ import { CartDrawer } from "@/components/cart/cart-drawer";
86
+
87
+ // In your layout or header
88
+ <CartDrawer />
89
+ ```
90
+
91
+ The drawer:
92
+ - Opens automatically when items are added
93
+ - Shows all cart items with images and prices
94
+ - Allows quantity updates and item removal
95
+ - Displays cart summary with totals
96
+ - Provides checkout button
97
+
98
+ ## Cart Icon
99
+
100
+ Add a cart icon to your header:
101
+
102
+ ```tsx
103
+ import { CartIcon } from "@/components/cart/cart-icon";
104
+
105
+ <CartIcon />
106
+ ```
107
+
108
+ Shows item count badge and toggles the cart drawer.
109
+
110
+ ## GraphQL Operations
111
+
112
+ The following GraphQL mutations are available:
113
+
114
+ ### Create Cart
115
+
116
+ ```graphql
117
+ mutation CartCreate($input: CartCreateInput) {
118
+ cartCreate(input: $input) {
119
+ cart {
120
+ id
121
+ # ... cart fields
122
+ }
123
+ userErrors {
124
+ message
125
+ code
126
+ }
127
+ }
128
+ }
129
+ ```
130
+
131
+ ### Add Lines
132
+
133
+ ```graphql
134
+ mutation CartLinesAdd($cartId: ID!, $lines: [CartLineInput!]!) {
135
+ cartLinesAdd(cartId: $cartId, lines: $lines) {
136
+ cart {
137
+ id
138
+ # ... cart fields
139
+ }
140
+ userErrors {
141
+ message
142
+ code
143
+ }
144
+ }
145
+ }
146
+ ```
147
+
148
+ ### Update Lines
149
+
150
+ ```graphql
151
+ mutation CartLinesUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!) {
152
+ cartLinesUpdate(cartId: $cartId, lines: $lines) {
153
+ cart {
154
+ id
155
+ # ... cart fields
156
+ }
157
+ userErrors {
158
+ message
159
+ code
160
+ }
161
+ }
162
+ }
163
+ ```
164
+
165
+ ### Remove Lines
166
+
167
+ ```graphql
168
+ mutation CartLinesRemove($cartId: ID!, $lineIds: [ID!]!) {
169
+ cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {
170
+ cart {
171
+ id
172
+ # ... cart fields
173
+ }
174
+ userErrors {
175
+ message
176
+ code
177
+ }
178
+ }
179
+ }
180
+ ```
181
+
182
+ ## Cart Persistence
183
+
184
+ - Cart ID is stored in `localStorage` as `cartId`
185
+ - Cart data is persisted on the server via GraphQL
186
+ - Local store items are synced with server on page load
187
+ - Cart survives page refreshes and browser restarts
188
+
189
+ ## Error Handling
190
+
191
+ All cart operations include error handling:
192
+
193
+ - Network errors show toast notifications
194
+ - GraphQL `userErrors` are displayed to users
195
+ - Failed operations revert local store changes
196
+ - Retry logic for transient failures
197
+
198
+ ## Currency Support
199
+
200
+ Cart prices automatically use the user's selected currency:
201
+
202
+ - Currency is included in GraphQL request headers
203
+ - Prices are converted server-side
204
+ - Exchange rates are locked for 24 hours
205
+ - Currency changes trigger cart refetch
206
+
207
+ ## Testing
208
+
209
+ To test cart functionality:
210
+
211
+ 1. Add items to cart
212
+ 2. Check browser DevTools → Application → Local Storage for `cartId`
213
+ 3. Check Network tab for GraphQL mutations
214
+ 4. Verify cart persists after page refresh
215
+ 5. Test currency switching
216
+
217
+ ## Troubleshooting
218
+
219
+ ### Cart not persisting
220
+
221
+ - Check if `cartId` exists in localStorage
222
+ - Verify GraphQL API is accessible
223
+ - Check browser console for errors
224
+
225
+ ### Items not showing in cart
226
+
227
+ - Ensure `CartDrawer` is included in layout
228
+ - Check if cart store is initialized
229
+ - Verify GraphQL mutations are successful
230
+
231
+ ### Currency not updating
232
+
233
+ - Check if `CurrencyProvider` is in layout
234
+ - Verify currency store is initialized
235
+ - Check GraphQL headers include `X-Preferred-Currency`
236
+
237
+ ## Advanced Usage
238
+
239
+ ### Custom Cart Logic
240
+
241
+ You can extend the cart system by:
242
+
243
+ 1. Adding custom fields to cart items
244
+ 2. Implementing discount code validation
245
+ 3. Adding shipping cost calculation
246
+ 4. Integrating with checkout flow
247
+
248
+ ### Server-Side Cart
249
+
250
+ For server-side cart operations (e.g., in API routes):
251
+
252
+ ```typescript
253
+ import { getClient } from "@/lib/graphql/server";
254
+ import { CartDocument } from "@/generated/graphql";
255
+
256
+ export async function GET(request: Request) {
257
+ const cartId = request.headers.get('x-cart-id');
258
+ const client = getClient();
259
+
260
+ const { cart } = await client.request(CartDocument, { id: cartId });
261
+
262
+ return Response.json({ cart });
263
+ }
264
+ ```
265
+
266
+ ## Migration from Local-Only Cart
267
+
268
+ If you have an existing local-only cart implementation:
269
+
270
+ 1. Replace `addItem` calls with `useCartActions().addToCart`
271
+ 2. Update `AddToCartButton` props to include all required fields
272
+ 3. Add `Toaster` to your layout for error notifications
273
+ 4. Test cart persistence across page refreshes
274
+
275
+ ## API Reference
276
+
277
+ See the following files for detailed API documentation:
278
+
279
+ - `hooks/use-cart-actions.ts` - Cart operations hook
280
+ - `stores/cart-store.ts` - Local cart store
281
+ - `lib/graphql/hooks.ts` - GraphQL cart hooks
282
+ - `components/cart/` - Cart UI components
@@ -0,0 +1,96 @@
1
+ # Storefront Template - Development Guide
2
+
3
+ Ten plik jest synchronizowany do `storefronts/test-shop/` przez `pnpm sync:storefront:watch`.
4
+
5
+ ## Architektura
6
+
7
+ ```
8
+ app/ # Next.js 15 App Router
9
+ ├── layout.tsx # Root layout z providers
10
+ ├── page.tsx # Homepage
11
+ ├── products/ # Strony produktow
12
+ ├── collections/ # Strony kolekcji
13
+ ├── cart/ # Koszyk
14
+ ├── checkout/ # Checkout
15
+ ├── account/ # Panel klienta
16
+ └── auth/ # Login/Register
17
+
18
+ components/
19
+ ├── product/ # ProductCard, ProductGrid, AddToCartButton
20
+ ├── cart/ # CartDrawer, CartItem, CartSummary
21
+ ├── auth/ # LoginForm, RegisterForm
22
+ ├── layout/ # Header, Footer, Navigation
23
+ ├── ui/ # shadcn/ui components
24
+ └── providers/ # QueryProvider, CurrencyProvider, ThemeProvider
25
+
26
+ lib/
27
+ ├── graphql/
28
+ │ ├── server.ts # SSR helpers z React cache()
29
+ │ ├── client.ts # Client-side GraphQL client
30
+ │ └── hooks.ts # React Query hooks
31
+ └── currency/ # Currency management
32
+
33
+ stores/ # Zustand stores
34
+ ├── cart-store.ts # Koszyk (persist localStorage)
35
+ ├── currency-store.ts # Waluta (persist cookies)
36
+ └── auth-store.ts # Autentykacja
37
+
38
+ generated/
39
+ └── graphql.ts # Auto-generowane typy
40
+ ```
41
+
42
+ ## Data Fetching
43
+
44
+ ### Server Components (lib/graphql/server.ts):
45
+ ```typescript
46
+ import { fetchProducts, fetchProduct } from '@/lib/graphql/server';
47
+
48
+ // W async Server Component
49
+ const { products, pageInfo } = await fetchProducts({ first: 20 });
50
+ const { product } = await fetchProduct(handle);
51
+ ```
52
+
53
+ ### Client Components (lib/graphql/hooks.ts):
54
+ ```typescript
55
+ 'use client';
56
+ import { useProducts, useCart, useCartLinesAdd } from '@/lib/graphql/hooks';
57
+
58
+ const { data, isLoading } = useProducts({ first: 20 });
59
+ const addLines = useCartLinesAdd();
60
+ ```
61
+
62
+ ## Zustand Stores
63
+
64
+ ### Cart Store:
65
+ ```typescript
66
+ import { useCartStore } from '@/stores/cart-store';
67
+
68
+ const { items, addItem, removeItem, getTotalItems, getTotalPrice } = useCartStore();
69
+ ```
70
+
71
+ ### Currency Store:
72
+ ```typescript
73
+ import { useCurrencyStore } from '@/stores/currency-store';
74
+
75
+ const { currency, setCurrency, supportedCurrencies } = useCurrencyStore();
76
+ ```
77
+
78
+ ## Konwencje
79
+
80
+ 1. **Client vs Server**: Dodaj `"use client"` tylko gdy potrzebne (hooks, interaktywnosc)
81
+ 2. **Typy**: Zawsze definiuj interfejsy dla props
82
+ 3. **Styling**: Uzywaj `cn()` dla laczenia klas Tailwind
83
+ 4. **Obrazki**: next/image z alt i priority dla LCP
84
+ 5. **Formularze**: Zod dla walidacji
85
+
86
+ ## GraphQL Operations
87
+
88
+ Operacje sa zdefiniowane w:
89
+ ```
90
+ packages/backend/src/commerce/storefront-graphql/operations/
91
+ ├── queries.graphql
92
+ ├── mutations.graphql
93
+ └── fragments.graphql
94
+ ```
95
+
96
+ Aby poznac dostepne operacje, przeczytaj te pliki.
@@ -0,0 +1,190 @@
1
+ # GraphQL Document Names Reference
2
+
3
+ ## ⚠️ WAŻNE: Konwencja nazewnictwa
4
+
5
+ **WSZYSTKIE** GraphQL dokumenty w `generated/graphql.ts` mają suffix `Document`!
6
+
7
+ ```typescript
8
+ // ✅ POPRAWNIE
9
+ import { CustomerCreateDocument } from "@/generated/graphql";
10
+ client.request(CustomerCreateDocument, { input });
11
+
12
+ // ❌ BŁĄD - nie istnieje!
13
+ import { CustomerCreate } from "@/generated/graphql";
14
+ ```
15
+
16
+ ---
17
+
18
+ ## 📋 Kompletna lista dostępnych dokumentów
19
+
20
+ ### 🔍 Queries (Zapytania)
21
+
22
+ #### Collections & Categories
23
+ - ✅ `GetFeaturedCollectionsDocument` - Featured collections
24
+ - ✅ `GetCollectionWithProductsDocument` - Collection z produktami
25
+ - ✅ `GetAllCollectionsDocument` - Wszystkie collections
26
+ - ✅ `CollectionDocument` - Pojedyncza collection
27
+ - ✅ `CollectionsDocument` - Lista collections
28
+ - ✅ `CategoryDocument` - Pojedyncza kategoria
29
+ - ✅ `CategoriesDocument` - Lista kategorii
30
+
31
+ #### Products
32
+ - ✅ `GetFeaturedProductsDocument` - Featured produkty
33
+ - ✅ `GetProductWithReviewsDocument` - Produkt z recenzjami
34
+ - ✅ `SearchProductsWithFiltersDocument` - Wyszukiwanie z filtrami
35
+ - ✅ `ProductDocument` - Pojedynczy produkt
36
+ - ✅ `ProductsDocument` - Lista produktów
37
+ - ✅ `ProductSearchDocument` - Wyszukiwanie produktów
38
+
39
+ #### Cart
40
+ - ✅ `CartDocument` - Koszyk
41
+
42
+ #### Shop
43
+ - ✅ `ShopDocument` - Informacje o sklepie
44
+
45
+ ---
46
+
47
+ ### ✏️ Mutations (Mutacje)
48
+
49
+ #### Customer Authentication
50
+ - ✅ `CustomerCreateDocument` - Rejestracja nowego klienta
51
+ - ✅ `CustomerLoginDocument` - Logowanie
52
+ - ✅ `CustomerLogoutDocument` - Wylogowanie
53
+ - ✅ `CustomerTokenRenewDocument` - Odnowienie tokenu
54
+
55
+ #### Customer Profile
56
+ - ✅ `CustomerUpdateDocument` - Aktualizacja profilu
57
+
58
+ #### Customer Addresses
59
+ - ✅ `CustomerAddressCreateDocument` - Dodanie adresu
60
+ - ✅ `CustomerAddressUpdateDocument` - Edycja adresu
61
+ - ✅ `CustomerAddressDeleteDocument` - Usunięcie adresu
62
+ - ✅ `CustomerDefaultAddressUpdateDocument` - Ustawienie domyślnego adresu
63
+
64
+ #### Customer Password
65
+ - ✅ `CustomerPasswordRecoverDocument` - Odzyskiwanie hasła (wysyłka emaila)
66
+ - ✅ `CustomerPasswordResetDocument` - Reset hasła (z tokenem)
67
+
68
+ #### Cart Operations
69
+ - ✅ `CartCreateDocument` - Utworzenie koszyka
70
+ - ✅ `CartLinesAddDocument` - Dodanie produktów do koszyka
71
+ - ✅ `CartLinesUpdateDocument` - Aktualizacja ilości w koszyku
72
+ - ✅ `CartLinesRemoveDocument` - Usunięcie produktów z koszyka
73
+ - ✅ `CartDiscountCodesUpdateDocument` - Dodanie kodu rabatowego
74
+ - ✅ `CartBuyerIdentityUpdateDocument` - Aktualizacja danych kupującego
75
+ - ✅ `CartNoteUpdateDocument` - Dodanie notatki do zamówienia
76
+
77
+ ---
78
+
79
+ ## 🎯 Przykłady użycia
80
+
81
+ ### Client-side (React Query)
82
+
83
+ ```typescript
84
+ import { useMutation, useQuery } from "@tanstack/react-query";
85
+ import { getGraphQLClient } from "@/lib/graphql/client";
86
+ import {
87
+ CustomerCreateDocument,
88
+ CustomerLoginDocument,
89
+ CartCreateDocument
90
+ } from "@/generated/graphql";
91
+
92
+ const client = getGraphQLClient();
93
+
94
+ // Mutation
95
+ const registerMutation = useMutation({
96
+ mutationFn: async (input) => {
97
+ return client.request(CustomerCreateDocument, { input });
98
+ },
99
+ });
100
+
101
+ // Query
102
+ const { data } = useQuery({
103
+ queryKey: ["cart", cartId],
104
+ queryFn: () => client.request(CartDocument, { id: cartId }),
105
+ });
106
+ ```
107
+
108
+ ### Server-side (Next.js Server Components)
109
+
110
+ ```typescript
111
+ import { getClient } from "@/lib/graphql/server";
112
+ import { ProductDocument, CollectionsDocument } from "@/generated/graphql";
113
+
114
+ export async function getProduct(handle: string) {
115
+ const client = await getClient();
116
+ return client.request(ProductDocument, { handle });
117
+ }
118
+
119
+ export async function getCollections() {
120
+ const client = await getClient();
121
+ return client.request(CollectionsDocument, { first: 10 });
122
+ }
123
+ ```
124
+
125
+ ---
126
+
127
+ ## 🔧 Najczęstsze błędy
128
+
129
+ ### ❌ Błąd 1: Brak suffixu "Document"
130
+ ```typescript
131
+ // BŁĄD
132
+ import { CustomerCreate } from "@/generated/graphql";
133
+
134
+ // POPRAWNIE
135
+ import { CustomerCreateDocument } from "@/generated/graphql";
136
+ ```
137
+
138
+ ### ❌ Błąd 2: Niepoprawna nazwa dokumentu
139
+ ```typescript
140
+ // BŁĄD
141
+ import { CustomerRecoverDocument } from "@/generated/graphql";
142
+
143
+ // POPRAWNIE
144
+ import { CustomerPasswordRecoverDocument } from "@/generated/graphql";
145
+ ```
146
+
147
+ ### ❌ Błąd 3: Używanie nieistniejących dokumentów
148
+ ```typescript
149
+ // BŁĄD - CheckoutCreate nie istnieje w Storefront API
150
+ import { CheckoutCreateDocument } from "@/generated/graphql";
151
+
152
+ // POPRAWNIE - Używaj Cart API
153
+ import { CartCreateDocument } from "@/generated/graphql";
154
+ ```
155
+
156
+ ---
157
+
158
+ ## 📝 Notatki
159
+
160
+ 1. **Shopify Storefront API** nie ma:
161
+ - ❌ `CheckoutCreateDocument` - **NIE ISTNIEJE!** Używaj `CartCreateDocument` + `cart.checkoutUrl`
162
+ - ❌ Bezpośredniego API dla zamówień - używaj Customer API
163
+ - ❌ `CheckoutDocument` - używaj `CartDocument` który zawiera `checkoutUrl`
164
+
165
+ 2. **Categories vs Collections**:
166
+ - `CategoriesDocument` - custom kategorie (jeśli zaimplementowane)
167
+ - `CollectionsDocument` - natywne Shopify collections (zalecane)
168
+
169
+ 3. **Password Recovery**:
170
+ - `CustomerPasswordRecoverDocument` - wysyła email z linkiem
171
+ - `CustomerPasswordResetDocument` - resetuje hasło z tokenem z emaila
172
+
173
+ 4. **Cart vs Checkout**:
174
+ - Shopify Storefront API v2024+ używa Cart API zamiast Checkout API
175
+ - `CartDocument` zawiera `checkoutUrl` do przekierowania na checkout
176
+
177
+ ---
178
+
179
+ ## 🔄 Aktualizacja dokumentów
180
+
181
+ Jeśli dodajesz nowe GraphQL queries/mutations:
182
+
183
+ 1. Dodaj je do `graphql/` folder
184
+ 2. Uruchom codegen: `npm run graphql:codegen`
185
+ 3. Sprawdź wygenerowane nazwy w `generated/graphql.ts`
186
+ 4. Zaktualizuj tę dokumentację
187
+
188
+ ---
189
+
190
+ **Ostatnia aktualizacja:** 2024-12-10