@vendure-platform/create 0.5.0 → 0.5.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 (325) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +39 -39
  3. package/dist/add-to-existing.js +1 -1
  4. package/dist/assets/demo-data/initial-data.json +663 -663
  5. package/dist/assets/storefront/components.json +20 -20
  6. package/dist/assets/storefront/eslint.config.mjs +10 -10
  7. package/dist/assets/storefront/graphql.config.yml +1 -1
  8. package/dist/assets/storefront/next.config.ts +5 -4
  9. package/dist/assets/storefront/package.json +1 -1
  10. package/dist/assets/storefront/postcss.config.mjs +1 -1
  11. package/dist/assets/storefront/src/app/[locale]/(catalog)/catalog/page.tsx +17 -21
  12. package/dist/assets/storefront/src/app/[locale]/(catalog)/collection/[slug]/page.tsx +64 -42
  13. package/dist/assets/storefront/src/app/[locale]/(catalog)/layout.tsx +1 -5
  14. package/dist/assets/storefront/src/app/[locale]/(catalog)/product/[slug]/actions.ts +69 -65
  15. package/dist/assets/storefront/src/app/[locale]/(catalog)/product/[slug]/page.tsx +64 -38
  16. package/dist/assets/storefront/src/app/[locale]/(catalog)/search/page.tsx +24 -27
  17. package/dist/assets/storefront/src/app/[locale]/(catalog)/search/search-results.tsx +11 -9
  18. package/dist/assets/storefront/src/app/[locale]/(catalog)/search/search-term.tsx +4 -4
  19. package/dist/assets/storefront/src/app/[locale]/(scenario)/[...path]/page.tsx +1 -1
  20. package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/accept-invitation-client.tsx +8 -13
  21. package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/actions.ts +11 -14
  22. package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/page.tsx +30 -33
  23. package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/sign-out-and-retry.tsx +6 -6
  24. package/dist/assets/storefront/src/app/[locale]/account/addresses/actions.ts +30 -45
  25. package/dist/assets/storefront/src/app/[locale]/account/addresses/address-form.tsx +166 -159
  26. package/dist/assets/storefront/src/app/[locale]/account/addresses/addresses-client.tsx +35 -26
  27. package/dist/assets/storefront/src/app/[locale]/account/addresses/loading.tsx +1 -3
  28. package/dist/assets/storefront/src/app/[locale]/account/addresses/page.tsx +16 -18
  29. package/dist/assets/storefront/src/app/[locale]/account/approvals/actions.ts +5 -8
  30. package/dist/assets/storefront/src/app/[locale]/account/approvals/page.tsx +77 -69
  31. package/dist/assets/storefront/src/app/[locale]/account/company/actions.ts +10 -11
  32. package/dist/assets/storefront/src/app/[locale]/account/company/addresses/actions.ts +6 -15
  33. package/dist/assets/storefront/src/app/[locale]/account/company/addresses/address-form.tsx +57 -49
  34. package/dist/assets/storefront/src/app/[locale]/account/company/addresses/addresses-client.tsx +23 -25
  35. package/dist/assets/storefront/src/app/[locale]/account/company/addresses/page.tsx +30 -30
  36. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/actions.ts +20 -29
  37. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/business-unit-form.tsx +32 -37
  38. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/business-units-client.tsx +32 -25
  39. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/page.tsx +24 -24
  40. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/types.ts +7 -4
  41. package/dist/assets/storefront/src/app/[locale]/account/company/edit-company-form.tsx +11 -21
  42. package/dist/assets/storefront/src/app/[locale]/account/company/page.tsx +23 -28
  43. package/dist/assets/storefront/src/app/[locale]/account/company/payment-methods/page.tsx +24 -24
  44. package/dist/assets/storefront/src/app/[locale]/account/company/payment-methods/payment-methods-client.tsx +5 -7
  45. package/dist/assets/storefront/src/app/[locale]/account/company/roles/page.tsx +22 -25
  46. package/dist/assets/storefront/src/app/[locale]/account/company/roles/roles-client.tsx +11 -26
  47. package/dist/assets/storefront/src/app/[locale]/account/company/tax-ids/actions.ts +6 -10
  48. package/dist/assets/storefront/src/app/[locale]/account/company/tax-ids/page.tsx +18 -16
  49. package/dist/assets/storefront/src/app/[locale]/account/company/tax-ids/tax-ids-client.tsx +74 -67
  50. package/dist/assets/storefront/src/app/[locale]/account/company/users/actions.ts +16 -25
  51. package/dist/assets/storefront/src/app/[locale]/account/company/users/edit-user-form.tsx +27 -25
  52. package/dist/assets/storefront/src/app/[locale]/account/company/users/invite-user-form.tsx +27 -19
  53. package/dist/assets/storefront/src/app/[locale]/account/company/users/page.tsx +32 -29
  54. package/dist/assets/storefront/src/app/[locale]/account/company/users/users-client.tsx +35 -38
  55. package/dist/assets/storefront/src/app/[locale]/account/error.tsx +1 -3
  56. package/dist/assets/storefront/src/app/[locale]/account/layout.tsx +16 -22
  57. package/dist/assets/storefront/src/app/[locale]/account/orders/[code]/page.tsx +151 -103
  58. package/dist/assets/storefront/src/app/[locale]/account/orders/[code]/reorder-actions.ts +6 -7
  59. package/dist/assets/storefront/src/app/[locale]/account/orders/[code]/reorder-dialog.tsx +22 -48
  60. package/dist/assets/storefront/src/app/[locale]/account/orders/loading.tsx +8 -8
  61. package/dist/assets/storefront/src/app/[locale]/account/orders/page.tsx +101 -61
  62. package/dist/assets/storefront/src/app/[locale]/account/profile/actions.ts +32 -23
  63. package/dist/assets/storefront/src/app/[locale]/account/profile/change-password-form.tsx +6 -16
  64. package/dist/assets/storefront/src/app/[locale]/account/profile/edit-email-form.tsx +7 -17
  65. package/dist/assets/storefront/src/app/[locale]/account/profile/edit-profile-form.tsx +6 -16
  66. package/dist/assets/storefront/src/app/[locale]/account/profile/loading.tsx +12 -18
  67. package/dist/assets/storefront/src/app/[locale]/account/profile/page.tsx +15 -15
  68. package/dist/assets/storefront/src/app/[locale]/account/quick-order/file-upload-tab.tsx +2 -6
  69. package/dist/assets/storefront/src/app/[locale]/account/quick-order/manual-entry-tab.tsx +18 -15
  70. package/dist/assets/storefront/src/app/[locale]/account/quick-order/page.tsx +3 -6
  71. package/dist/assets/storefront/src/app/[locale]/account/quick-order/preview-table.tsx +10 -2
  72. package/dist/assets/storefront/src/app/[locale]/account/quick-order/save-to-list-dialog.tsx +24 -26
  73. package/dist/assets/storefront/src/app/[locale]/account/quick-order/sku-autocomplete.tsx +19 -10
  74. package/dist/assets/storefront/src/app/[locale]/account/quick-order/text-input-tab.tsx +3 -8
  75. package/dist/assets/storefront/src/app/[locale]/account/quotes/[id]/page.tsx +86 -59
  76. package/dist/assets/storefront/src/app/[locale]/account/quotes/actions.ts +38 -45
  77. package/dist/assets/storefront/src/app/[locale]/account/quotes/new/new-quote-form.tsx +3 -5
  78. package/dist/assets/storefront/src/app/[locale]/account/quotes/new/page.tsx +6 -6
  79. package/dist/assets/storefront/src/app/[locale]/account/quotes/page.tsx +92 -59
  80. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/add-item-search.tsx +11 -9
  81. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/add-member-form.tsx +31 -15
  82. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/members-panel.tsx +52 -33
  83. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/page.tsx +22 -14
  84. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/rename-dialog.tsx +34 -13
  85. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/actions.ts +117 -72
  86. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/new/new-shared-cart-form.tsx +21 -14
  87. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/new/page.tsx +10 -10
  88. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/page.tsx +54 -41
  89. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/[id]/page.tsx +22 -8
  90. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/[id]/shopping-list-detail-client.tsx +62 -49
  91. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/actions.ts +9 -4
  92. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/create-shopping-list-form.tsx +5 -11
  93. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/loading.tsx +1 -1
  94. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/page.tsx +32 -42
  95. package/dist/assets/storefront/src/app/[locale]/account/store-credits/actions.ts +8 -8
  96. package/dist/assets/storefront/src/app/[locale]/account/store-credits/claim-form.tsx +6 -10
  97. package/dist/assets/storefront/src/app/[locale]/account/store-credits/page.tsx +76 -55
  98. package/dist/assets/storefront/src/app/[locale]/account/store-credits/reveal-code.tsx +10 -6
  99. package/dist/assets/storefront/src/app/[locale]/account/verify-email/page.tsx +32 -39
  100. package/dist/assets/storefront/src/app/[locale]/cart/actions.ts +29 -23
  101. package/dist/assets/storefront/src/app/[locale]/cart/cart-items.tsx +111 -40
  102. package/dist/assets/storefront/src/app/[locale]/cart/cart-line-actions.tsx +9 -9
  103. package/dist/assets/storefront/src/app/[locale]/cart/cart-quantity-control.tsx +61 -48
  104. package/dist/assets/storefront/src/app/[locale]/cart/cart-remove-button.tsx +15 -9
  105. package/dist/assets/storefront/src/app/[locale]/cart/cart.tsx +38 -41
  106. package/dist/assets/storefront/src/app/[locale]/cart/code-input.tsx +8 -8
  107. package/dist/assets/storefront/src/app/[locale]/cart/order-summary.tsx +50 -32
  108. package/dist/assets/storefront/src/app/[locale]/cart/page.tsx +11 -11
  109. package/dist/assets/storefront/src/app/[locale]/cart/promotion-code.tsx +48 -42
  110. package/dist/assets/storefront/src/app/[locale]/cart/reapproval-confirm.tsx +22 -20
  111. package/dist/assets/storefront/src/app/[locale]/cart/request-quote-button.tsx +7 -16
  112. package/dist/assets/storefront/src/app/[locale]/checkout/actions.ts +39 -65
  113. package/dist/assets/storefront/src/app/[locale]/checkout/cancel-quote-checkout-button.tsx +5 -5
  114. package/dist/assets/storefront/src/app/[locale]/checkout/checkout-flow.tsx +202 -202
  115. package/dist/assets/storefront/src/app/[locale]/checkout/checkout-provider.tsx +142 -142
  116. package/dist/assets/storefront/src/app/[locale]/checkout/order-summary.tsx +158 -139
  117. package/dist/assets/storefront/src/app/[locale]/checkout/page.tsx +56 -47
  118. package/dist/assets/storefront/src/app/[locale]/checkout/steps/delivery-step.tsx +86 -88
  119. package/dist/assets/storefront/src/app/[locale]/checkout/steps/payment-step.tsx +90 -91
  120. package/dist/assets/storefront/src/app/[locale]/checkout/steps/review-step.tsx +166 -161
  121. package/dist/assets/storefront/src/app/[locale]/checkout/steps/shipping-address-step.tsx +573 -494
  122. package/dist/assets/storefront/src/app/[locale]/error.tsx +3 -5
  123. package/dist/assets/storefront/src/app/[locale]/forgot-password/actions.ts +10 -7
  124. package/dist/assets/storefront/src/app/[locale]/forgot-password/forgot-password-form.tsx +10 -25
  125. package/dist/assets/storefront/src/app/[locale]/forgot-password/page.tsx +5 -5
  126. package/dist/assets/storefront/src/app/[locale]/globals.css +48 -48
  127. package/dist/assets/storefront/src/app/[locale]/layout.tsx +53 -47
  128. package/dist/assets/storefront/src/app/[locale]/not-found.tsx +3 -5
  129. package/dist/assets/storefront/src/app/[locale]/order-confirmation/[code]/order-confirmation.tsx +71 -44
  130. package/dist/assets/storefront/src/app/[locale]/order-confirmation/[code]/page.tsx +7 -5
  131. package/dist/assets/storefront/src/app/[locale]/page.tsx +33 -35
  132. package/dist/assets/storefront/src/app/[locale]/register/actions.ts +7 -7
  133. package/dist/assets/storefront/src/app/[locale]/register/page.tsx +22 -16
  134. package/dist/assets/storefront/src/app/[locale]/register/registration-form.tsx +22 -34
  135. package/dist/assets/storefront/src/app/[locale]/register-company/actions.ts +15 -19
  136. package/dist/assets/storefront/src/app/[locale]/register-company/page.tsx +17 -15
  137. package/dist/assets/storefront/src/app/[locale]/register-company/registration-form.tsx +9 -15
  138. package/dist/assets/storefront/src/app/[locale]/reset-password/actions.ts +7 -8
  139. package/dist/assets/storefront/src/app/[locale]/reset-password/page.tsx +18 -12
  140. package/dist/assets/storefront/src/app/[locale]/reset-password/reset-password-form.tsx +8 -16
  141. package/dist/assets/storefront/src/app/[locale]/shopping-list/[code]/add-to-cart-button.tsx +10 -4
  142. package/dist/assets/storefront/src/app/[locale]/shopping-list/[code]/page.tsx +62 -30
  143. package/dist/assets/storefront/src/app/[locale]/sign-in/actions.ts +14 -16
  144. package/dist/assets/storefront/src/app/[locale]/sign-in/login-form.tsx +17 -30
  145. package/dist/assets/storefront/src/app/[locale]/sign-in/page.tsx +35 -30
  146. package/dist/assets/storefront/src/app/[locale]/verify/actions.ts +8 -8
  147. package/dist/assets/storefront/src/app/[locale]/verify/page.tsx +18 -14
  148. package/dist/assets/storefront/src/app/[locale]/verify/verify-content.tsx +25 -27
  149. package/dist/assets/storefront/src/app/[locale]/verify-pending/page.tsx +23 -23
  150. package/dist/assets/storefront/src/app/api/clear-company-context/route.ts +6 -3
  151. package/dist/assets/storefront/src/app/api/revalidate/route.ts +19 -28
  152. package/dist/assets/storefront/src/app/api/search-analytics/route.ts +1 -1
  153. package/dist/assets/storefront/src/components/commerce/account-nav-items.ts +43 -18
  154. package/dist/assets/storefront/src/components/commerce/account-sidebar.tsx +30 -22
  155. package/dist/assets/storefront/src/components/commerce/active-filters.tsx +1 -1
  156. package/dist/assets/storefront/src/components/commerce/add-to-shared-cart.tsx +49 -27
  157. package/dist/assets/storefront/src/components/commerce/approval-decision-form.tsx +9 -13
  158. package/dist/assets/storefront/src/components/commerce/approval-status-badge.tsx +23 -15
  159. package/dist/assets/storefront/src/components/commerce/business-unit-switcher.tsx +11 -11
  160. package/dist/assets/storefront/src/components/commerce/catalog-search-bar.tsx +2 -2
  161. package/dist/assets/storefront/src/components/commerce/category-product-section.tsx +28 -16
  162. package/dist/assets/storefront/src/components/commerce/category-sidebar.tsx +31 -18
  163. package/dist/assets/storefront/src/components/commerce/collection-hero-banner.tsx +2 -4
  164. package/dist/assets/storefront/src/components/commerce/company-state-badge.tsx +10 -16
  165. package/dist/assets/storefront/src/components/commerce/company-switcher.tsx +12 -12
  166. package/dist/assets/storefront/src/components/commerce/configurator-form.tsx +188 -79
  167. package/dist/assets/storefront/src/components/commerce/facet-filters.tsx +29 -49
  168. package/dist/assets/storefront/src/components/commerce/gift-card-pdp.tsx +4 -4
  169. package/dist/assets/storefront/src/components/commerce/gift-card-product-info.tsx +20 -30
  170. package/dist/assets/storefront/src/components/commerce/instant-search-dropdown.tsx +258 -227
  171. package/dist/assets/storefront/src/components/commerce/order-status-badge.tsx +27 -19
  172. package/dist/assets/storefront/src/components/commerce/packaging-unit-selector.tsx +27 -26
  173. package/dist/assets/storefront/src/components/commerce/permission-gate.tsx +4 -4
  174. package/dist/assets/storefront/src/components/commerce/price-range-filter.tsx +5 -5
  175. package/dist/assets/storefront/src/components/commerce/price-tiers.tsx +38 -21
  176. package/dist/assets/storefront/src/components/commerce/price.tsx +3 -3
  177. package/dist/assets/storefront/src/components/commerce/product-card-list.tsx +35 -14
  178. package/dist/assets/storefront/src/components/commerce/product-card.tsx +31 -16
  179. package/dist/assets/storefront/src/components/commerce/product-carousel.tsx +20 -12
  180. package/dist/assets/storefront/src/components/commerce/product-grid.tsx +14 -13
  181. package/dist/assets/storefront/src/components/commerce/product-image-carousel.tsx +10 -8
  182. package/dist/assets/storefront/src/components/commerce/product-info.tsx +118 -74
  183. package/dist/assets/storefront/src/components/commerce/product-list-expansion.tsx +102 -74
  184. package/dist/assets/storefront/src/components/commerce/product-list-view.tsx +1 -1
  185. package/dist/assets/storefront/src/components/commerce/product-sidebar.tsx +36 -11
  186. package/dist/assets/storefront/src/components/commerce/product-view-switcher.tsx +33 -21
  187. package/dist/assets/storefront/src/components/commerce/quote-action-buttons.tsx +54 -36
  188. package/dist/assets/storefront/src/components/commerce/quote-activity-timeline.tsx +126 -50
  189. package/dist/assets/storefront/src/components/commerce/quote-comment-form.tsx +9 -13
  190. package/dist/assets/storefront/src/components/commerce/quote-csv-export-button.tsx +6 -6
  191. package/dist/assets/storefront/src/components/commerce/quote-product-search.tsx +22 -18
  192. package/dist/assets/storefront/src/components/commerce/quote-request-form.tsx +28 -27
  193. package/dist/assets/storefront/src/components/commerce/quote-status-badge.tsx +26 -18
  194. package/dist/assets/storefront/src/components/commerce/quote-validity-indicator.tsx +7 -7
  195. package/dist/assets/storefront/src/components/commerce/quote-version-comparison.tsx +50 -30
  196. package/dist/assets/storefront/src/components/commerce/related-products.tsx +37 -28
  197. package/dist/assets/storefront/src/components/commerce/shared-cart-status-badge.tsx +12 -8
  198. package/dist/assets/storefront/src/components/commerce/shop-by-category.tsx +8 -7
  199. package/dist/assets/storefront/src/components/commerce/shopping-list-toggle.tsx +14 -20
  200. package/dist/assets/storefront/src/components/commerce/sort-dropdown.tsx +9 -16
  201. package/dist/assets/storefront/src/components/commerce/store-credit-summary.tsx +30 -32
  202. package/dist/assets/storefront/src/components/commerce/subcollection-tiles.tsx +11 -13
  203. package/dist/assets/storefront/src/components/layout/auth-page-shell.tsx +2 -2
  204. package/dist/assets/storefront/src/components/layout/draft-mode-indicator.tsx +2 -7
  205. package/dist/assets/storefront/src/components/layout/draft-mode-link.tsx +4 -2
  206. package/dist/assets/storefront/src/components/layout/footer.tsx +70 -28
  207. package/dist/assets/storefront/src/components/layout/navbar/actions.ts +9 -12
  208. package/dist/assets/storefront/src/components/layout/navbar/cart-icon.tsx +9 -9
  209. package/dist/assets/storefront/src/components/layout/navbar/channel-picker-wrapper.tsx +4 -9
  210. package/dist/assets/storefront/src/components/layout/navbar/channel-picker.tsx +13 -8
  211. package/dist/assets/storefront/src/components/layout/navbar/currency-picker-wrapper.tsx +4 -4
  212. package/dist/assets/storefront/src/components/layout/navbar/currency-picker.tsx +11 -6
  213. package/dist/assets/storefront/src/components/layout/navbar/language-picker.tsx +7 -7
  214. package/dist/assets/storefront/src/components/layout/navbar/login-button.tsx +24 -21
  215. package/dist/assets/storefront/src/components/layout/navbar/mobile-nav.tsx +8 -8
  216. package/dist/assets/storefront/src/components/layout/navbar/nav-menu-items.tsx +4 -6
  217. package/dist/assets/storefront/src/components/layout/navbar/navbar-cart.tsx +1 -1
  218. package/dist/assets/storefront/src/components/layout/navbar/navbar-collections.tsx +41 -42
  219. package/dist/assets/storefront/src/components/layout/navbar/navbar-link.tsx +7 -10
  220. package/dist/assets/storefront/src/components/layout/navbar/navbar-user.tsx +18 -23
  221. package/dist/assets/storefront/src/components/layout/navbar/theme-switcher.tsx +9 -9
  222. package/dist/assets/storefront/src/components/layout/navbar.tsx +36 -31
  223. package/dist/assets/storefront/src/components/layout/search-input.tsx +35 -32
  224. package/dist/assets/storefront/src/components/providers/awaiting-approval-banner.tsx +12 -10
  225. package/dist/assets/storefront/src/components/providers/cart-count-server.tsx +14 -12
  226. package/dist/assets/storefront/src/components/providers/company-context-guard.tsx +4 -4
  227. package/dist/assets/storefront/src/components/providers/company-permissions-server.tsx +2 -6
  228. package/dist/assets/storefront/src/components/providers/theme-provider.tsx +3 -3
  229. package/dist/assets/storefront/src/components/shared/breadcrumbs.tsx +4 -1
  230. package/dist/assets/storefront/src/components/shared/country-select.tsx +63 -67
  231. package/dist/assets/storefront/src/components/shared/pagination.tsx +15 -28
  232. package/dist/assets/storefront/src/components/shared/prefetch-link.tsx +1 -1
  233. package/dist/assets/storefront/src/components/shared/skeletons/search-input-skeleton.tsx +1 -3
  234. package/dist/assets/storefront/src/components/ui/accordion.tsx +46 -51
  235. package/dist/assets/storefront/src/components/ui/alert-dialog.tsx +94 -121
  236. package/dist/assets/storefront/src/components/ui/alert.tsx +48 -54
  237. package/dist/assets/storefront/src/components/ui/aspect-ratio.tsx +5 -7
  238. package/dist/assets/storefront/src/components/ui/avatar.tsx +29 -44
  239. package/dist/assets/storefront/src/components/ui/badge.tsx +28 -37
  240. package/dist/assets/storefront/src/components/ui/breadcrumb.tsx +82 -89
  241. package/dist/assets/storefront/src/components/ui/button.tsx +43 -49
  242. package/dist/assets/storefront/src/components/ui/calendar.tsx +157 -198
  243. package/dist/assets/storefront/src/components/ui/card.tsx +53 -76
  244. package/dist/assets/storefront/src/components/ui/carousel.tsx +194 -212
  245. package/dist/assets/storefront/src/components/ui/chart.tsx +274 -317
  246. package/dist/assets/storefront/src/components/ui/checkbox.tsx +24 -27
  247. package/dist/assets/storefront/src/components/ui/collapsible.tsx +9 -21
  248. package/dist/assets/storefront/src/components/ui/command.tsx +114 -159
  249. package/dist/assets/storefront/src/components/ui/context-menu.tsx +167 -199
  250. package/dist/assets/storefront/src/components/ui/dialog.tsx +97 -114
  251. package/dist/assets/storefront/src/components/ui/drawer.tsx +93 -107
  252. package/dist/assets/storefront/src/components/ui/dropdown-menu.tsx +171 -206
  253. package/dist/assets/storefront/src/components/ui/empty-state.tsx +5 -5
  254. package/dist/assets/storefront/src/components/ui/field.tsx +196 -208
  255. package/dist/assets/storefront/src/components/ui/form.tsx +115 -139
  256. package/dist/assets/storefront/src/components/ui/hover-card.tsx +27 -33
  257. package/dist/assets/storefront/src/components/ui/input-otp.tsx +50 -59
  258. package/dist/assets/storefront/src/components/ui/input.tsx +17 -17
  259. package/dist/assets/storefront/src/components/ui/kbd-shortcut.tsx +3 -1
  260. package/dist/assets/storefront/src/components/ui/label.tsx +16 -19
  261. package/dist/assets/storefront/src/components/ui/menubar.tsx +193 -223
  262. package/dist/assets/storefront/src/components/ui/navigation-menu.tsx +123 -130
  263. package/dist/assets/storefront/src/components/ui/pagination.tsx +87 -108
  264. package/dist/assets/storefront/src/components/ui/popover.tsx +29 -35
  265. package/dist/assets/storefront/src/components/ui/progress.tsx +19 -26
  266. package/dist/assets/storefront/src/components/ui/radio-group.tsx +32 -38
  267. package/dist/assets/storefront/src/components/ui/resizable.tsx +37 -42
  268. package/dist/assets/storefront/src/components/ui/scroll-area.tsx +41 -47
  269. package/dist/assets/storefront/src/components/ui/select.tsx +130 -152
  270. package/dist/assets/storefront/src/components/ui/separator.tsx +21 -21
  271. package/dist/assets/storefront/src/components/ui/sheet.tsx +90 -111
  272. package/dist/assets/storefront/src/components/ui/sidebar.tsx +611 -649
  273. package/dist/assets/storefront/src/components/ui/skeleton.tsx +10 -10
  274. package/dist/assets/storefront/src/components/ui/slider.tsx +50 -55
  275. package/dist/assets/storefront/src/components/ui/sonner.tsx +20 -20
  276. package/dist/assets/storefront/src/components/ui/switch.tsx +23 -26
  277. package/dist/assets/storefront/src/components/ui/table.tsx +65 -97
  278. package/dist/assets/storefront/src/components/ui/tabs.tsx +39 -55
  279. package/dist/assets/storefront/src/components/ui/textarea.tsx +14 -14
  280. package/dist/assets/storefront/src/components/ui/toggle-group.tsx +56 -62
  281. package/dist/assets/storefront/src/components/ui/toggle.tsx +37 -38
  282. package/dist/assets/storefront/src/components/ui/tooltip.tsx +38 -46
  283. package/dist/assets/storefront/src/config/scenario-meta.ts +2 -2
  284. package/dist/assets/storefront/src/config/scenario.ts +14 -16
  285. package/dist/assets/storefront/src/contexts/auth-context.tsx +5 -6
  286. package/dist/assets/storefront/src/graphql.ts +5 -5
  287. package/dist/assets/storefront/src/hooks/use-mobile.ts +13 -13
  288. package/dist/assets/storefront/src/i18n/locale-utils.ts +3 -3
  289. package/dist/assets/storefront/src/i18n/navigation.ts +4 -4
  290. package/dist/assets/storefront/src/i18n/request.ts +4 -4
  291. package/dist/assets/storefront/src/i18n/routing.ts +5 -5
  292. package/dist/assets/storefront/src/i18n/server.ts +3 -3
  293. package/dist/assets/storefront/src/lib/actions/switch-channel.ts +9 -9
  294. package/dist/assets/storefront/src/lib/actions/switch-currency.ts +7 -7
  295. package/dist/assets/storefront/src/lib/auth.ts +1 -1
  296. package/dist/assets/storefront/src/lib/backend-health.ts +3 -3
  297. package/dist/assets/storefront/src/lib/cart-count-context.tsx +10 -4
  298. package/dist/assets/storefront/src/lib/cart-guard-utils.ts +2 -1
  299. package/dist/assets/storefront/src/lib/cart-guard.ts +7 -6
  300. package/dist/assets/storefront/src/lib/channel-server.ts +4 -4
  301. package/dist/assets/storefront/src/lib/company-context.ts +1 -1
  302. package/dist/assets/storefront/src/lib/company-permissions-context.tsx +1 -5
  303. package/dist/assets/storefront/src/lib/currency-server.ts +4 -4
  304. package/dist/assets/storefront/src/lib/format.ts +16 -7
  305. package/dist/assets/storefront/src/lib/metadata.ts +39 -44
  306. package/dist/assets/storefront/src/lib/quantity.ts +2 -4
  307. package/dist/assets/storefront/src/lib/search-bar-context.tsx +7 -4
  308. package/dist/assets/storefront/src/lib/use-recent-searches.ts +8 -6
  309. package/dist/assets/storefront/src/lib/utils.ts +3 -3
  310. package/dist/assets/storefront/src/lib/vendure/actions.ts +18 -16
  311. package/dist/assets/storefront/src/lib/vendure/api.ts +36 -23
  312. package/dist/assets/storefront/src/lib/vendure/approval-utils.ts +9 -8
  313. package/dist/assets/storefront/src/lib/vendure/cached.ts +20 -15
  314. package/dist/assets/storefront/src/lib/vendure/queries.ts +15 -5
  315. package/dist/assets/storefront/src/middleware.ts +1 -1
  316. package/dist/assets/storefront/src/scenarios/customer/hero.tsx +2 -2
  317. package/dist/assets/storefront/src/scenarios/customer/meta.ts +1 -1
  318. package/dist/bin/run.js +1 -1
  319. package/dist/cli.d.ts +1 -1
  320. package/dist/index.d.ts +5 -5
  321. package/dist/index.js +1 -1
  322. package/dist/scaffold-storefront-only.js +1 -1
  323. package/dist/scaffolder.js +1 -1
  324. package/dist/template-renderer.js +1 -1
  325. package/package.json +2 -2
@@ -1,15 +1,10 @@
1
1
  'use client';
2
2
 
3
- import {useTranslations} from 'next-intl';
4
- import {Alert, AlertDescription} from '@/components/ui/alert';
5
- import {Badge} from '@/components/ui/badge';
6
- import {
7
- Accordion,
8
- AccordionContent,
9
- AccordionItem,
10
- AccordionTrigger,
11
- } from '@/components/ui/accordion';
12
- import {Info, Shield} from 'lucide-react';
3
+ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion';
4
+ import { Alert, AlertDescription } from '@/components/ui/alert';
5
+ import { Badge } from '@/components/ui/badge';
6
+ import { Info, Shield } from 'lucide-react';
7
+ import { useTranslations } from 'next-intl';
13
8
 
14
9
  interface CompanyPermission {
15
10
  id: string;
@@ -29,21 +24,17 @@ interface RolesClientProps {
29
24
  roles: CompanyRole[];
30
25
  }
31
26
 
32
- export function RolesClient({roles}: RolesClientProps) {
27
+ export function RolesClient({ roles }: RolesClientProps) {
33
28
  const t = useTranslations('Company.roles');
34
29
  return (
35
30
  <>
36
31
  <Alert>
37
32
  <Info className="h-4 w-4" />
38
- <AlertDescription>
39
- {t('managedByAdminNotice')}
40
- </AlertDescription>
33
+ <AlertDescription>{t('managedByAdminNotice')}</AlertDescription>
41
34
  </Alert>
42
35
 
43
36
  {roles.length === 0 ? (
44
- <div className="text-center py-12 text-muted-foreground">
45
- {t('noRoles')}
46
- </div>
37
+ <div className="text-center py-12 text-muted-foreground">{t('noRoles')}</div>
47
38
  ) : (
48
39
  <Accordion type="multiple" className="w-full">
49
40
  {roles.map((role) => (
@@ -52,16 +43,12 @@ export function RolesClient({roles}: RolesClientProps) {
52
43
  <div className="flex items-center gap-2">
53
44
  <Shield className="h-4 w-4 text-muted-foreground" />
54
45
  <span>{role.name}</span>
55
- {role.isDefault && (
56
- <Badge variant="secondary">{t('defaultBadge')}</Badge>
57
- )}
46
+ {role.isDefault && <Badge variant="secondary">{t('defaultBadge')}</Badge>}
58
47
  </div>
59
48
  </AccordionTrigger>
60
49
  <AccordionContent>
61
50
  {role.permissions.length === 0 ? (
62
- <p className="text-muted-foreground text-sm">
63
- {t('noPermissions')}
64
- </p>
51
+ <p className="text-muted-foreground text-sm">{t('noPermissions')}</p>
65
52
  ) : (
66
53
  <div className="space-y-2">
67
54
  {role.permissions.map((permission) => (
@@ -70,9 +57,7 @@ export function RolesClient({roles}: RolesClientProps) {
70
57
  className="flex items-start gap-3 rounded-md border p-3"
71
58
  >
72
59
  <div>
73
- <p className="text-sm font-medium">
74
- {permission.name}
75
- </p>
60
+ <p className="text-sm font-medium">{permission.name}</p>
76
61
  {permission.description && (
77
62
  <p className="text-sm text-muted-foreground">
78
63
  {permission.description}
@@ -1,12 +1,8 @@
1
1
  'use server';
2
2
 
3
- import {client} from '@/lib/vendure/api';
4
- import {
5
- AddTaxIdMutation,
6
- RemoveTaxIdMutation,
7
- SetDefaultTaxIdMutation,
8
- } from '@/lib/vendure/mutations';
9
- import {revalidatePath} from 'next/cache';
3
+ import { client } from '@/lib/vendure/api';
4
+ import { AddTaxIdMutation, RemoveTaxIdMutation, SetDefaultTaxIdMutation } from '@/lib/vendure/mutations';
5
+ import { revalidatePath } from 'next/cache';
10
6
 
11
7
  interface AddTaxIdInput {
12
8
  number: string;
@@ -15,7 +11,7 @@ interface AddTaxIdInput {
15
11
  }
16
12
 
17
13
  export async function addTaxIdAction(input: AddTaxIdInput) {
18
- const [result, error] = await client.mutate(AddTaxIdMutation, {input});
14
+ const [result, error] = await client.mutate(AddTaxIdMutation, { input });
19
15
  if (error) throw error;
20
16
 
21
17
  if (!result.data.addTaxId) {
@@ -27,7 +23,7 @@ export async function addTaxIdAction(input: AddTaxIdInput) {
27
23
  }
28
24
 
29
25
  export async function removeTaxIdAction(id: string) {
30
- const [result, error] = await client.mutate(RemoveTaxIdMutation, {id});
26
+ const [result, error] = await client.mutate(RemoveTaxIdMutation, { id });
31
27
  if (error) throw error;
32
28
 
33
29
  if (result.data.removeTaxId.result !== 'DELETED') {
@@ -39,7 +35,7 @@ export async function removeTaxIdAction(id: string) {
39
35
  }
40
36
 
41
37
  export async function setDefaultTaxIdAction(id: string) {
42
- const [result, error] = await client.mutate(SetDefaultTaxIdMutation, {id});
38
+ const [result, error] = await client.mutate(SetDefaultTaxIdMutation, { id });
43
39
  if (error) throw error;
44
40
 
45
41
  if (!result.data.setDefaultTaxId) {
@@ -1,12 +1,12 @@
1
- import type {Metadata} from 'next';
2
- import {Suspense} from 'react';
3
- import {redirect} from '@/i18n/navigation';
4
- import {readFragment} from '@/graphql';
5
- import {client} from '@/lib/vendure/api';
6
- import {getCompanyAccount} from '@/lib/vendure/actions';
7
- import {GetTaxIdsQuery} from '@/lib/vendure/queries';
8
- import {TaxIdFragment} from '@/lib/vendure/fragments';
9
- import {TaxIdsClient} from './tax-ids-client';
1
+ import { readFragment } from '@/graphql';
2
+ import { redirect } from '@/i18n/navigation';
3
+ import { getCompanyAccount } from '@/lib/vendure/actions';
4
+ import { client } from '@/lib/vendure/api';
5
+ import { TaxIdFragment } from '@/lib/vendure/fragments';
6
+ import { GetTaxIdsQuery } from '@/lib/vendure/queries';
7
+ import type { Metadata } from 'next';
8
+ import { Suspense } from 'react';
9
+ import { TaxIdsClient } from './tax-ids-client';
10
10
 
11
11
  export const metadata: Metadata = {
12
12
  title: 'Tax IDs',
@@ -20,7 +20,7 @@ async function TaxIdsContent() {
20
20
  return;
21
21
  }
22
22
 
23
- const {permissions} = companyAccount;
23
+ const { permissions } = companyAccount;
24
24
  if (!permissions.includes('ManageCompany')) {
25
25
  await redirect('/account');
26
26
  }
@@ -28,7 +28,7 @@ async function TaxIdsContent() {
28
28
  const [result, error] = await client.query(GetTaxIdsQuery, {});
29
29
  if (error) throw error;
30
30
 
31
- const taxIds = (result.data.taxIds ?? []).map(t => readFragment(TaxIdFragment, t));
31
+ const taxIds = (result.data.taxIds ?? []).map((t) => readFragment(TaxIdFragment, t));
32
32
 
33
33
  return (
34
34
  <div className="space-y-6">
@@ -46,11 +46,13 @@ async function TaxIdsContent() {
46
46
 
47
47
  export default function TaxIdsPage() {
48
48
  return (
49
- <Suspense fallback={
50
- <div className="text-center py-12">
51
- <p className="text-sm text-muted-foreground">Loading...</p>
52
- </div>
53
- }>
49
+ <Suspense
50
+ fallback={
51
+ <div className="text-center py-12">
52
+ <p className="text-sm text-muted-foreground">Loading...</p>
53
+ </div>
54
+ }
55
+ >
54
56
  <TaxIdsContent />
55
57
  </Suspense>
56
58
  );
@@ -1,31 +1,5 @@
1
1
  'use client';
2
2
 
3
- import {useState, useTransition} from 'react';
4
- import {useTranslations} from 'next-intl';
5
- import {useRouter} from '@/i18n/navigation';
6
- import {useForm} from 'react-hook-form';
7
- import {
8
- MoreHorizontal,
9
- Plus,
10
- Star,
11
- Trash2,
12
- FileCheck2,
13
- Clock,
14
- AlertTriangle,
15
- XCircle,
16
- AlertCircle,
17
- } from 'lucide-react';
18
- import {Button} from '@/components/ui/button';
19
- import {Card, CardContent, CardHeader, CardTitle} from '@/components/ui/card';
20
- import {Badge} from '@/components/ui/badge';
21
- import {
22
- Dialog,
23
- DialogContent,
24
- DialogFooter,
25
- DialogHeader,
26
- DialogTitle,
27
- DialogTrigger,
28
- } from '@/components/ui/dialog';
29
3
  import {
30
4
  AlertDialog,
31
5
  AlertDialogAction,
@@ -36,23 +10,43 @@ import {
36
10
  AlertDialogHeader,
37
11
  AlertDialogTitle,
38
12
  } from '@/components/ui/alert-dialog';
13
+ import { Badge } from '@/components/ui/badge';
14
+ import { Button } from '@/components/ui/button';
15
+ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
16
+ import {
17
+ Dialog,
18
+ DialogContent,
19
+ DialogFooter,
20
+ DialogHeader,
21
+ DialogTitle,
22
+ DialogTrigger,
23
+ } from '@/components/ui/dialog';
39
24
  import {
40
25
  DropdownMenu,
41
26
  DropdownMenuContent,
42
27
  DropdownMenuItem,
43
28
  DropdownMenuTrigger,
44
29
  } from '@/components/ui/dropdown-menu';
45
- import {Input} from '@/components/ui/input';
46
- import {Label} from '@/components/ui/label';
30
+ import { Input } from '@/components/ui/input';
31
+ import { Label } from '@/components/ui/label';
32
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
33
+ import { useRouter } from '@/i18n/navigation';
47
34
  import {
48
- Select,
49
- SelectContent,
50
- SelectItem,
51
- SelectTrigger,
52
- SelectValue,
53
- } from '@/components/ui/select';
35
+ AlertCircle,
36
+ AlertTriangle,
37
+ Clock,
38
+ FileCheck2,
39
+ MoreHorizontal,
40
+ Plus,
41
+ Star,
42
+ Trash2,
43
+ XCircle,
44
+ } from 'lucide-react';
45
+ import { useTranslations } from 'next-intl';
46
+ import { useState, useTransition } from 'react';
47
+ import { useForm } from 'react-hook-form';
54
48
 
55
- import {addTaxIdAction, removeTaxIdAction, setDefaultTaxIdAction} from './actions';
49
+ import { addTaxIdAction, removeTaxIdAction, setDefaultTaxIdAction } from './actions';
56
50
 
57
51
  interface TaxId {
58
52
  id: string;
@@ -70,11 +64,11 @@ interface TaxIdsClientProps {
70
64
 
71
65
  function getStatusConfig(t: ReturnType<typeof useTranslations<'TaxIds'>>) {
72
66
  return {
73
- Pending: {label: t('statusPending'), variant: 'secondary' as const, icon: Clock},
74
- Valid: {label: t('statusValid'), variant: 'default' as const, icon: FileCheck2},
75
- Invalid: {label: t('statusInvalid'), variant: 'destructive' as const, icon: XCircle},
76
- Expired: {label: t('statusExpired'), variant: 'outline' as const, icon: AlertTriangle},
77
- Error: {label: t('statusError'), variant: 'destructive' as const, icon: AlertCircle},
67
+ Pending: { label: t('statusPending'), variant: 'secondary' as const, icon: Clock },
68
+ Valid: { label: t('statusValid'), variant: 'default' as const, icon: FileCheck2 },
69
+ Invalid: { label: t('statusInvalid'), variant: 'destructive' as const, icon: XCircle },
70
+ Expired: { label: t('statusExpired'), variant: 'outline' as const, icon: AlertTriangle },
71
+ Error: { label: t('statusError'), variant: 'destructive' as const, icon: AlertCircle },
78
72
  };
79
73
  }
80
74
 
@@ -83,16 +77,26 @@ function getTypeLabels(t: ReturnType<typeof useTranslations<'TaxIds'>>): Record<
83
77
  'eu-vat': t('typeEuVat'),
84
78
  'gb-vat': t('typeGbVat'),
85
79
  'ch-uid': t('typeChUid'),
86
- 'custom': t('typeCustom'),
80
+ custom: t('typeCustom'),
87
81
  };
88
82
  }
89
83
 
90
- function StatusBadge({status, statusConfig}: { status: string; statusConfig: ReturnType<typeof getStatusConfig> }) {
91
- const config = statusConfig[status as keyof typeof statusConfig] ?? {label: status, variant: 'outline' as const, icon: AlertCircle};
84
+ function StatusBadge({
85
+ status,
86
+ statusConfig,
87
+ }: {
88
+ status: string;
89
+ statusConfig: ReturnType<typeof getStatusConfig>;
90
+ }) {
91
+ const config = statusConfig[status as keyof typeof statusConfig] ?? {
92
+ label: status,
93
+ variant: 'outline' as const,
94
+ icon: AlertCircle,
95
+ };
92
96
  const Icon = config.icon;
93
97
  return (
94
98
  <Badge variant={config.variant} className="gap-1">
95
- <Icon className="h-3 w-3"/>
99
+ <Icon className="h-3 w-3" />
96
100
  {config.label}
97
101
  </Badge>
98
102
  );
@@ -112,7 +116,7 @@ interface AddTaxIdFormValues {
112
116
  countryCode: string;
113
117
  }
114
118
 
115
- export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
119
+ export function TaxIdsClient({ taxIds }: TaxIdsClientProps) {
116
120
  const t = useTranslations('TaxIds');
117
121
  const statusConfig = getStatusConfig(t);
118
122
  const typeLabels = getTypeLabels(t);
@@ -122,7 +126,7 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
122
126
  const [isPending, startTransition] = useTransition();
123
127
 
124
128
  const form = useForm<AddTaxIdFormValues>({
125
- defaultValues: {number: '', type: 'eu-vat', countryCode: ''},
129
+ defaultValues: { number: '', type: 'eu-vat', countryCode: '' },
126
130
  });
127
131
 
128
132
  function handleAdd(values: AddTaxIdFormValues) {
@@ -132,7 +136,9 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
132
136
  ? extractCountryCode(values.number)
133
137
  : values.countryCode.toUpperCase();
134
138
  if (!countryCode) {
135
- alert('Could not determine country code. Make sure the number starts with a 2-letter country prefix (e.g. DE, FR, IE).');
139
+ alert(
140
+ 'Could not determine country code. Make sure the number starts with a 2-letter country prefix (e.g. DE, FR, IE).',
141
+ );
136
142
  return;
137
143
  }
138
144
  await addTaxIdAction({
@@ -178,7 +184,7 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
178
184
  <Dialog open={addDialogOpen} onOpenChange={setAddDialogOpen}>
179
185
  <DialogTrigger asChild>
180
186
  <Button>
181
- <Plus className="h-4 w-4 mr-2"/>
187
+ <Plus className="h-4 w-4 mr-2" />
182
188
  {t('addButton')}
183
189
  </Button>
184
190
  </DialogTrigger>
@@ -193,17 +199,17 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
193
199
  <Input
194
200
  id="number"
195
201
  placeholder={t('numberPlaceholder')}
196
- {...form.register('number', {required: true})}
202
+ {...form.register('number', { required: true })}
197
203
  />
198
204
  </div>
199
205
  <div className="space-y-2">
200
206
  <Label htmlFor="type">{t('typeLabel')}</Label>
201
207
  <Select
202
208
  value={form.watch('type')}
203
- onValueChange={v => form.setValue('type', v)}
209
+ onValueChange={(v) => form.setValue('type', v)}
204
210
  >
205
211
  <SelectTrigger>
206
- <SelectValue/>
212
+ <SelectValue />
207
213
  </SelectTrigger>
208
214
  <SelectContent>
209
215
  <SelectItem value="eu-vat">{t('typeEuVat')}</SelectItem>
@@ -220,8 +226,8 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
220
226
  id="countryCode"
221
227
  placeholder={t('countryCodePlaceholder')}
222
228
  maxLength={2}
223
- {...form.register('countryCode', {maxLength: 2})}
224
- onChange={e => {
229
+ {...form.register('countryCode', { maxLength: 2 })}
230
+ onChange={(e) => {
225
231
  e.target.value = e.target.value.toUpperCase();
226
232
  form.setValue('countryCode', e.target.value);
227
233
  }}
@@ -247,13 +253,11 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
247
253
  </Card>
248
254
  ) : (
249
255
  <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
250
- {taxIds.map(taxId => (
256
+ {taxIds.map((taxId) => (
251
257
  <Card key={taxId.id}>
252
258
  <CardHeader className="flex flex-row items-start justify-between space-y-0 pb-2">
253
259
  <div>
254
- <CardTitle className="text-lg font-mono">
255
- {taxId.number}
256
- </CardTitle>
260
+ <CardTitle className="text-lg font-mono">{taxId.number}</CardTitle>
257
261
  <p className="text-sm text-muted-foreground mt-1">
258
262
  {typeLabels[taxId.type] ?? taxId.type} · {taxId.countryCode}
259
263
  </p>
@@ -261,13 +265,13 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
261
265
  <DropdownMenu>
262
266
  <DropdownMenuTrigger asChild>
263
267
  <Button variant="ghost" size="icon" className="h-8 w-8">
264
- <MoreHorizontal className="h-4 w-4"/>
268
+ <MoreHorizontal className="h-4 w-4" />
265
269
  </Button>
266
270
  </DropdownMenuTrigger>
267
271
  <DropdownMenuContent align="end">
268
272
  {!taxId.isDefault && (
269
273
  <DropdownMenuItem onClick={() => handleSetDefault(taxId.id)}>
270
- <Star className="h-4 w-4 mr-2"/>
274
+ <Star className="h-4 w-4 mr-2" />
271
275
  {t('setDefaultMenuItem')}
272
276
  </DropdownMenuItem>
273
277
  )}
@@ -275,7 +279,7 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
275
279
  className="text-destructive"
276
280
  onClick={() => setDeleteId(taxId.id)}
277
281
  >
278
- <Trash2 className="h-4 w-4 mr-2"/>
282
+ <Trash2 className="h-4 w-4 mr-2" />
279
283
  {t('removeMenuItem')}
280
284
  </DropdownMenuItem>
281
285
  </DropdownMenuContent>
@@ -283,17 +287,22 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
283
287
  </CardHeader>
284
288
  <CardContent>
285
289
  <div className="flex items-center gap-2">
286
- <StatusBadge status={taxId.validationStatus} statusConfig={statusConfig}/>
290
+ <StatusBadge
291
+ status={taxId.validationStatus}
292
+ statusConfig={statusConfig}
293
+ />
287
294
  {taxId.isDefault && (
288
295
  <Badge variant="outline" className="gap-1">
289
- <Star className="h-3 w-3"/>
296
+ <Star className="h-3 w-3" />
290
297
  {t('defaultBadge')}
291
298
  </Badge>
292
299
  )}
293
300
  </div>
294
301
  {taxId.validatedAt && (
295
302
  <p className="text-xs text-muted-foreground mt-2">
296
- {t('validatedAt', {date: new Date(taxId.validatedAt).toLocaleDateString()})}
303
+ {t('validatedAt', {
304
+ date: new Date(taxId.validatedAt).toLocaleDateString(),
305
+ })}
297
306
  </p>
298
307
  )}
299
308
  </CardContent>
@@ -302,13 +311,11 @@ export function TaxIdsClient({taxIds}: TaxIdsClientProps) {
302
311
  </div>
303
312
  )}
304
313
 
305
- <AlertDialog open={deleteId !== null} onOpenChange={open => !open && setDeleteId(null)}>
314
+ <AlertDialog open={deleteId !== null} onOpenChange={(open) => !open && setDeleteId(null)}>
306
315
  <AlertDialogContent>
307
316
  <AlertDialogHeader>
308
317
  <AlertDialogTitle>{t('removeDialogTitle')}</AlertDialogTitle>
309
- <AlertDialogDescription>
310
- {t('removeDialogDescription')}
311
- </AlertDialogDescription>
318
+ <AlertDialogDescription>{t('removeDialogDescription')}</AlertDialogDescription>
312
319
  </AlertDialogHeader>
313
320
  <AlertDialogFooter>
314
321
  <AlertDialogCancel>{t('cancelButton')}</AlertDialogCancel>
@@ -1,28 +1,25 @@
1
1
  'use server';
2
2
 
3
- import {client} from '@/lib/vendure/api';
3
+ import { client } from '@/lib/vendure/api';
4
4
  import {
5
5
  InviteCompanyUserMutation,
6
- UpdateCompanyUserMutation,
7
6
  RemoveCompanyUserMutation,
7
+ UpdateCompanyUserMutation,
8
8
  } from '@/lib/vendure/mutations';
9
- import {revalidatePath} from 'next/cache';
9
+ import { revalidatePath } from 'next/cache';
10
10
 
11
11
  export async function inviteCompanyUserAction(data: {
12
12
  emailAddress: string;
13
13
  roleIds?: string[];
14
14
  businessUnitIds?: string[];
15
15
  }) {
16
- const [result, error] = await client.mutate(
17
- InviteCompanyUserMutation,
18
- {
19
- input: {
20
- emailAddress: data.emailAddress,
21
- roleIds: data.roleIds,
22
- businessUnitIds: data.businessUnitIds,
23
- },
16
+ const [result, error] = await client.mutate(InviteCompanyUserMutation, {
17
+ input: {
18
+ emailAddress: data.emailAddress,
19
+ roleIds: data.roleIds,
20
+ businessUnitIds: data.businessUnitIds,
24
21
  },
25
- );
22
+ });
26
23
  if (error) throw error;
27
24
 
28
25
  if (!result.data.inviteCompanyUser) {
@@ -38,16 +35,13 @@ export async function updateCompanyUserAction(data: {
38
35
  roleIds?: string[];
39
36
  businessUnitIds?: string[];
40
37
  }) {
41
- const [result, error] = await client.mutate(
42
- UpdateCompanyUserMutation,
43
- {
44
- input: {
45
- id: data.id,
46
- roleIds: data.roleIds,
47
- businessUnitIds: data.businessUnitIds,
48
- },
38
+ const [result, error] = await client.mutate(UpdateCompanyUserMutation, {
39
+ input: {
40
+ id: data.id,
41
+ roleIds: data.roleIds,
42
+ businessUnitIds: data.businessUnitIds,
49
43
  },
50
- );
44
+ });
51
45
  if (error) throw error;
52
46
 
53
47
  if (!result.data.updateCompanyUser) {
@@ -59,10 +53,7 @@ export async function updateCompanyUserAction(data: {
59
53
  }
60
54
 
61
55
  export async function removeCompanyUserAction(id: string) {
62
- const [result, error] = await client.mutate(
63
- RemoveCompanyUserMutation,
64
- {id},
65
- );
56
+ const [result, error] = await client.mutate(RemoveCompanyUserMutation, { id });
66
57
  if (error) throw error;
67
58
 
68
59
  if (result.data.removeCompanyUser.result !== 'DELETED') {
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
 
3
- import {Button} from '@/components/ui/button';
4
- import {Field, FieldLabel, FieldGroup} from '@/components/ui/field';
5
- import {Checkbox} from '@/components/ui/checkbox';
6
- import {Label} from '@/components/ui/label';
7
- import {Badge} from '@/components/ui/badge';
8
- import {useForm} from 'react-hook-form';
9
- import {Loader2} from 'lucide-react';
10
- import {useTranslations} from 'next-intl';
3
+ import { Badge } from '@/components/ui/badge';
4
+ import { Button } from '@/components/ui/button';
5
+ import { Checkbox } from '@/components/ui/checkbox';
6
+ import { Field, FieldGroup, FieldLabel } from '@/components/ui/field';
7
+ import { Label } from '@/components/ui/label';
8
+ import { Loader2 } from 'lucide-react';
9
+ import { useTranslations } from 'next-intl';
10
+ import { useForm } from 'react-hook-form';
11
11
 
12
12
  interface EditUserFormData {
13
13
  roleIds: string[];
@@ -41,17 +41,24 @@ interface EditUserFormProps {
41
41
  user: CompanyUser;
42
42
  roles: CompanyRole[];
43
43
  businessUnits: CompanyBusinessUnit[];
44
- onSubmit: (data: {id: string; roleIds: string[]; businessUnitIds: string[]}) => Promise<void>;
44
+ onSubmit: (data: { id: string; roleIds: string[]; businessUnitIds: string[] }) => Promise<void>;
45
45
  onCancel: () => void;
46
46
  isSubmitting: boolean;
47
47
  }
48
48
 
49
- export function EditUserForm({user, roles, businessUnits, onSubmit, onCancel, isSubmitting}: EditUserFormProps) {
49
+ export function EditUserForm({
50
+ user,
51
+ roles,
52
+ businessUnits,
53
+ onSubmit,
54
+ onCancel,
55
+ isSubmitting,
56
+ }: EditUserFormProps) {
50
57
  const t = useTranslations('Company.users.editForm');
51
- const {handleSubmit, setValue, watch} = useForm<EditUserFormData>({
58
+ const { handleSubmit, setValue, watch } = useForm<EditUserFormData>({
52
59
  defaultValues: {
53
- roleIds: user.companyRoles.map(r => r.id),
54
- businessUnitIds: user.businessUnits.map(bu => bu.id),
60
+ roleIds: user.companyRoles.map((r) => r.id),
61
+ businessUnitIds: user.businessUnits.map((bu) => bu.id),
55
62
  },
56
63
  });
57
64
 
@@ -60,17 +67,13 @@ export function EditUserForm({user, roles, businessUnits, onSubmit, onCancel, is
60
67
 
61
68
  const toggleRole = (roleId: string) => {
62
69
  const current = selectedRoleIds || [];
63
- const next = current.includes(roleId)
64
- ? current.filter(id => id !== roleId)
65
- : [...current, roleId];
70
+ const next = current.includes(roleId) ? current.filter((id) => id !== roleId) : [...current, roleId];
66
71
  setValue('roleIds', next);
67
72
  };
68
73
 
69
74
  const toggleBu = (buId: string) => {
70
75
  const current = selectedBuIds || [];
71
- const next = current.includes(buId)
72
- ? current.filter(id => id !== buId)
73
- : [...current, buId];
76
+ const next = current.includes(buId) ? current.filter((id) => id !== buId) : [...current, buId];
74
77
  setValue('businessUnitIds', next);
75
78
  };
76
79
 
@@ -87,12 +90,11 @@ export function EditUserForm({user, roles, businessUnits, onSubmit, onCancel, is
87
90
  <FieldGroup className="my-6">
88
91
  <div className="space-y-2 rounded-md border p-4 bg-muted/50">
89
92
  <div className="text-sm">
90
- <span className="font-medium">{t('nameLabel')}</span>{' '}
91
- {user.customer.firstName} {user.customer.lastName}
93
+ <span className="font-medium">{t('nameLabel')}</span> {user.customer.firstName}{' '}
94
+ {user.customer.lastName}
92
95
  </div>
93
96
  <div className="text-sm">
94
- <span className="font-medium">{t('emailLabel')}</span>{' '}
95
- {user.customer.emailAddress}
97
+ <span className="font-medium">{t('emailLabel')}</span> {user.customer.emailAddress}
96
98
  </div>
97
99
  <div className="text-sm flex items-center gap-2">
98
100
  <span className="font-medium">{t('statusLabel')}</span>{' '}
@@ -104,7 +106,7 @@ export function EditUserForm({user, roles, businessUnits, onSubmit, onCancel, is
104
106
  <Field>
105
107
  <FieldLabel>{t('rolesLabel')}</FieldLabel>
106
108
  <div className="space-y-2 mt-1">
107
- {roles.map(role => (
109
+ {roles.map((role) => (
108
110
  <div key={role.id} className="flex items-center gap-2">
109
111
  <Checkbox
110
112
  id={`edit-role-${role.id}`}
@@ -125,7 +127,7 @@ export function EditUserForm({user, roles, businessUnits, onSubmit, onCancel, is
125
127
  <Field>
126
128
  <FieldLabel>{t('businessUnitsLabel')}</FieldLabel>
127
129
  <div className="space-y-2 mt-1">
128
- {businessUnits.map(bu => (
130
+ {businessUnits.map((bu) => (
129
131
  <div key={bu.id} className="flex items-center gap-2">
130
132
  <Checkbox
131
133
  id={`edit-bu-${bu.id}`}