@vendure/dashboard 3.3.6-master-202507041203 → 3.4.0-minor-202506250934

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 (390) hide show
  1. package/README.md +4 -41
  2. package/dist/plugin/utils/config-loader.d.ts +1 -70
  3. package/dist/plugin/utils/config-loader.js +9 -33
  4. package/dist/plugin/vite-plugin-config-loader.js +1 -6
  5. package/dist/plugin/vite-plugin-config.js +7 -6
  6. package/dist/plugin/vite-plugin-dashboard-metadata.d.ts +3 -1
  7. package/dist/plugin/vite-plugin-dashboard-metadata.js +8 -1
  8. package/dist/plugin/vite-plugin-vendure-dashboard.d.ts +0 -41
  9. package/dist/plugin/vite-plugin-vendure-dashboard.js +2 -5
  10. package/package.json +131 -131
  11. package/src/app/app-providers.tsx +6 -6
  12. package/src/app/main.tsx +9 -9
  13. package/src/app/routes/__root.tsx +2 -1
  14. package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +1 -10
  15. package/src/app/routes/_authenticated/_administrators/administrators.tsx +8 -15
  16. package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +12 -16
  17. package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +16 -16
  18. package/src/app/routes/_authenticated/_assets/assets.graphql.ts +2 -13
  19. package/src/app/routes/_authenticated/_assets/assets.tsx +4 -16
  20. package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +38 -52
  21. package/src/app/routes/_authenticated/_channels/channels.graphql.ts +1 -10
  22. package/src/app/routes/_authenticated/_channels/channels.tsx +10 -17
  23. package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +17 -21
  24. package/src/app/routes/_authenticated/_collections/collections.graphql.ts +3 -60
  25. package/src/app/routes/_authenticated/_collections/collections.tsx +124 -168
  26. package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +16 -20
  27. package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +8 -7
  28. package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +5 -9
  29. package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +9 -10
  30. package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +7 -7
  31. package/src/app/routes/_authenticated/_countries/countries.graphql.ts +2 -11
  32. package/src/app/routes/_authenticated/_countries/countries.tsx +6 -13
  33. package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +17 -21
  34. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +5 -12
  35. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +17 -22
  36. package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +2 -11
  37. package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +6 -13
  38. package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +15 -18
  39. package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +19 -19
  40. package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +10 -10
  41. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +5 -5
  42. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +7 -11
  43. package/src/app/routes/_authenticated/_customers/components/customer-history/use-customer-history.ts +4 -4
  44. package/src/app/routes/_authenticated/_customers/components/customer-order-table.tsx +73 -75
  45. package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +4 -4
  46. package/src/app/routes/_authenticated/_customers/customers.graphql.ts +2 -10
  47. package/src/app/routes/_authenticated/_customers/customers.tsx +6 -13
  48. package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +15 -19
  49. package/src/app/routes/_authenticated/_facets/components/edit-facet-value.tsx +9 -9
  50. package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +4 -4
  51. package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +11 -15
  52. package/src/app/routes/_authenticated/_facets/facets.graphql.ts +1 -31
  53. package/src/app/routes/_authenticated/_facets/facets.tsx +7 -31
  54. package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +13 -17
  55. package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +1 -1
  56. package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +13 -13
  57. package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +14 -11
  58. package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +55 -93
  59. package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +9 -11
  60. package/src/app/routes/_authenticated/_orders/components/order-address.tsx +6 -5
  61. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +62 -67
  62. package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +6 -11
  63. package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +5 -9
  64. package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +7 -11
  65. package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +22 -39
  66. package/src/app/routes/_authenticated/_orders/components/order-table.tsx +4 -4
  67. package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +36 -37
  68. package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +33 -18
  69. package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +44 -43
  70. package/src/app/routes/_authenticated/_orders/orders.graphql.ts +3 -101
  71. package/src/app/routes/_authenticated/_orders/orders.tsx +20 -21
  72. package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +16 -72
  73. package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +90 -188
  74. package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +7 -10
  75. package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +11 -11
  76. package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +2 -29
  77. package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +14 -36
  78. package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +15 -22
  79. package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +6 -7
  80. package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +3 -64
  81. package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +9 -39
  82. package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +22 -33
  83. package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +10 -10
  84. package/src/app/routes/_authenticated/_products/components/create-product-options-dialog.tsx +41 -57
  85. package/src/app/routes/_authenticated/_products/components/create-product-variants-dialog.tsx +11 -11
  86. package/src/app/routes/_authenticated/_products/components/create-product-variants.tsx +14 -18
  87. package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +15 -21
  88. package/src/app/routes/_authenticated/_products/components/product-option-select.tsx +34 -28
  89. package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +53 -84
  90. package/src/app/routes/_authenticated/_products/products.graphql.ts +2 -70
  91. package/src/app/routes/_authenticated/_products/products.tsx +7 -36
  92. package/src/app/routes/_authenticated/_products/products_.$id.tsx +24 -33
  93. package/src/app/routes/_authenticated/_profile/profile.graphql.ts +1 -1
  94. package/src/app/routes/_authenticated/_profile/profile.tsx +8 -8
  95. package/src/app/routes/_authenticated/_promotions/components/promotion-actions-selector.tsx +11 -14
  96. package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +11 -14
  97. package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +2 -27
  98. package/src/app/routes/_authenticated/_promotions/promotions.tsx +7 -31
  99. package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +16 -20
  100. package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +5 -5
  101. package/src/app/routes/_authenticated/_roles/components/permissions-grid.tsx +17 -21
  102. package/src/app/routes/_authenticated/_roles/roles.graphql.ts +1 -10
  103. package/src/app/routes/_authenticated/_roles/roles.tsx +10 -17
  104. package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +12 -16
  105. package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +1 -10
  106. package/src/app/routes/_authenticated/_sellers/sellers.tsx +6 -13
  107. package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +13 -17
  108. package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +6 -6
  109. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +21 -23
  110. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +21 -25
  111. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-method-dialog.tsx +3 -3
  112. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.graphql.ts +2 -29
  113. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +6 -25
  114. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +13 -17
  115. package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +1 -26
  116. package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +6 -25
  117. package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +12 -16
  118. package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +4 -4
  119. package/src/app/routes/_authenticated/_system/healthchecks.tsx +4 -4
  120. package/src/app/routes/_authenticated/_system/job-queue.graphql.ts +1 -1
  121. package/src/app/routes/_authenticated/_system/job-queue.tsx +6 -10
  122. package/src/app/routes/_authenticated/_system/scheduled-tasks.tsx +28 -34
  123. package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +2 -11
  124. package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +7 -14
  125. package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +16 -20
  126. package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +2 -11
  127. package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +8 -15
  128. package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +18 -22
  129. package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +4 -4
  130. package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +8 -12
  131. package/src/app/routes/_authenticated/_zones/zones.graphql.ts +2 -11
  132. package/src/app/routes/_authenticated/_zones/zones.tsx +6 -13
  133. package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +14 -18
  134. package/src/app/routes/_authenticated/index.tsx +4 -4
  135. package/src/app/routes/_authenticated.tsx +3 -3
  136. package/src/app/routes/login.tsx +2 -2
  137. package/src/app/styles.css +1 -4
  138. package/src/lib/components/data-display/boolean.tsx +1 -1
  139. package/src/lib/components/data-display/date-time.tsx +2 -2
  140. package/src/lib/components/data-display/json.tsx +1 -1
  141. package/src/lib/components/data-display/money.tsx +3 -2
  142. package/src/lib/components/data-input/affixed-input.tsx +8 -3
  143. package/src/lib/components/data-input/customer-group-input.tsx +2 -2
  144. package/src/lib/components/data-input/datetime-input.tsx +146 -129
  145. package/src/lib/components/data-input/facet-value-input.tsx +22 -30
  146. package/src/lib/components/data-input/money-input.tsx +12 -5
  147. package/src/lib/components/data-input/{rich-text-input.tsx → richt-text-input.tsx} +1 -1
  148. package/src/lib/components/data-table/add-filter-menu.tsx +18 -9
  149. package/src/lib/components/data-table/data-table-column-header.tsx +22 -4
  150. package/src/lib/components/data-table/data-table-faceted-filter.tsx +8 -8
  151. package/src/lib/components/data-table/data-table-filter-badge.tsx +8 -16
  152. package/src/lib/components/data-table/data-table-filter-dialog.tsx +8 -8
  153. package/src/lib/components/data-table/data-table-pagination.tsx +4 -4
  154. package/src/lib/components/data-table/data-table-view-options.tsx +21 -25
  155. package/src/lib/components/data-table/data-table.tsx +41 -85
  156. package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +8 -11
  157. package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +23 -14
  158. package/src/lib/components/data-table/filters/data-table-id-filter.tsx +10 -15
  159. package/src/lib/components/data-table/filters/data-table-number-filter.tsx +17 -18
  160. package/src/lib/components/data-table/filters/data-table-string-filter.tsx +12 -29
  161. package/src/lib/components/data-table/human-readable-operator.tsx +3 -3
  162. package/src/lib/components/data-table/refresh-button.tsx +15 -30
  163. package/src/lib/components/layout/app-layout.tsx +8 -8
  164. package/src/lib/components/layout/app-sidebar.tsx +5 -5
  165. package/src/lib/components/layout/channel-switcher.tsx +8 -8
  166. package/src/lib/components/layout/content-language-selector.tsx +10 -16
  167. package/src/lib/components/layout/generated-breadcrumbs.tsx +1 -1
  168. package/src/lib/components/layout/language-dialog.tsx +11 -5
  169. package/src/lib/components/layout/nav-main.tsx +4 -4
  170. package/src/lib/components/layout/nav-projects.tsx +2 -2
  171. package/src/lib/components/layout/nav-user.tsx +7 -7
  172. package/src/lib/components/layout/prerelease-popup.tsx +1 -1
  173. package/src/lib/components/login/login-form.tsx +5 -5
  174. package/src/lib/components/shared/alerts.tsx +3 -3
  175. package/src/lib/components/shared/animated-number.tsx +2 -2
  176. package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +19 -29
  177. package/src/lib/components/shared/asset/asset-gallery.tsx +18 -23
  178. package/src/lib/components/shared/asset/asset-picker-dialog.tsx +66 -63
  179. package/src/lib/components/shared/asset/asset-preview-dialog.tsx +7 -3
  180. package/src/lib/components/shared/asset/asset-preview-selector.tsx +6 -4
  181. package/src/lib/components/shared/asset/asset-preview.tsx +15 -7
  182. package/src/lib/components/shared/asset/asset-properties.tsx +9 -7
  183. package/src/lib/components/shared/asset/focal-point-control.tsx +13 -5
  184. package/src/lib/components/shared/assigned-facet-values.tsx +5 -1
  185. package/src/lib/components/shared/channel-code-label.tsx +4 -3
  186. package/src/lib/components/shared/channel-selector.tsx +6 -6
  187. package/src/lib/components/shared/configurable-operation-arg-input.tsx +2 -2
  188. package/src/lib/components/shared/configurable-operation-input.tsx +16 -15
  189. package/src/lib/components/shared/confirmation-dialog.tsx +2 -2
  190. package/src/lib/components/shared/copyable-text.tsx +3 -2
  191. package/src/lib/components/shared/country-selector.tsx +18 -21
  192. package/src/lib/components/shared/currency-selector.tsx +5 -5
  193. package/src/lib/components/shared/custom-fields-form.tsx +51 -253
  194. package/src/lib/components/shared/customer-address-form.tsx +13 -18
  195. package/src/lib/components/shared/customer-group-selector.tsx +6 -6
  196. package/src/lib/components/shared/customer-selector.tsx +18 -24
  197. package/src/lib/components/shared/detail-page-button.tsx +1 -3
  198. package/src/lib/components/shared/entity-assets.tsx +34 -33
  199. package/src/lib/components/shared/error-page.tsx +6 -6
  200. package/src/lib/components/shared/facet-value-chip.tsx +5 -12
  201. package/src/lib/components/shared/facet-value-selector.tsx +63 -64
  202. package/src/lib/components/shared/form-field-wrapper.tsx +13 -22
  203. package/src/lib/components/shared/history-timeline/history-entry.tsx +6 -12
  204. package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +3 -3
  205. package/src/lib/components/shared/history-timeline/history-note-editor.tsx +4 -4
  206. package/src/lib/components/shared/history-timeline/history-note-input.tsx +3 -3
  207. package/src/lib/components/shared/history-timeline/history-timeline.tsx +8 -15
  208. package/src/lib/components/shared/language-selector.tsx +5 -5
  209. package/src/lib/components/shared/logo-mark.tsx +2 -2
  210. package/src/lib/components/shared/multi-select.tsx +5 -5
  211. package/src/lib/components/shared/navigation-confirmation.tsx +9 -24
  212. package/src/lib/components/shared/option-value-input.tsx +15 -17
  213. package/src/lib/components/shared/paginated-list-data-table.tsx +24 -100
  214. package/src/lib/components/shared/permission-guard.tsx +4 -4
  215. package/src/lib/components/shared/product-variant-selector.tsx +31 -32
  216. package/src/lib/components/shared/role-code-label.tsx +6 -10
  217. package/src/lib/components/shared/role-selector.tsx +4 -4
  218. package/src/lib/components/shared/seller-selector.tsx +17 -21
  219. package/src/lib/components/shared/stock-level-label.tsx +5 -5
  220. package/src/lib/components/shared/tax-category-selector.tsx +5 -5
  221. package/src/lib/components/shared/translatable-form-field.tsx +10 -5
  222. package/src/lib/components/shared/vendure-image.tsx +2 -31
  223. package/src/lib/components/shared/zone-selector.tsx +6 -5
  224. package/src/lib/components/ui/accordion.tsx +3 -3
  225. package/src/lib/components/ui/alert-dialog.tsx +10 -10
  226. package/src/lib/components/ui/alert.tsx +3 -3
  227. package/src/lib/components/ui/badge.tsx +2 -2
  228. package/src/lib/components/ui/breadcrumb.tsx +4 -4
  229. package/src/lib/components/ui/button.tsx +3 -10
  230. package/src/lib/components/ui/calendar.tsx +459 -392
  231. package/src/lib/components/ui/card.tsx +2 -2
  232. package/src/lib/components/ui/checkbox.tsx +2 -2
  233. package/src/lib/components/ui/command.tsx +6 -12
  234. package/src/lib/components/ui/dialog.tsx +2 -2
  235. package/src/lib/components/ui/dropdown-menu.tsx +7 -7
  236. package/src/lib/components/ui/form.tsx +4 -4
  237. package/src/lib/components/ui/hover-card.tsx +3 -3
  238. package/src/lib/components/ui/input.tsx +1 -1
  239. package/src/lib/components/ui/label.tsx +2 -2
  240. package/src/lib/components/ui/pagination.tsx +108 -87
  241. package/src/lib/components/ui/popover.tsx +3 -3
  242. package/src/lib/components/ui/scroll-area.tsx +2 -2
  243. package/src/lib/components/ui/select.tsx +129 -151
  244. package/src/lib/components/ui/separator.tsx +2 -2
  245. package/src/lib/components/ui/sheet.tsx +5 -5
  246. package/src/lib/components/ui/sidebar.tsx +10 -10
  247. package/src/lib/components/ui/skeleton.tsx +1 -1
  248. package/src/lib/components/ui/switch.tsx +2 -2
  249. package/src/lib/components/ui/table.tsx +2 -2
  250. package/src/lib/components/ui/tabs.tsx +3 -3
  251. package/src/lib/components/ui/textarea.tsx +1 -1
  252. package/src/lib/components/ui/tooltip.tsx +3 -3
  253. package/src/lib/framework/alert/alert-extensions.tsx +3 -2
  254. package/src/lib/framework/alert/alert-item.tsx +3 -5
  255. package/src/lib/framework/alert/types.ts +13 -0
  256. package/src/lib/framework/component-registry/component-registry.tsx +47 -33
  257. package/src/lib/framework/dashboard-widget/base-widget.tsx +13 -5
  258. package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +8 -8
  259. package/src/lib/framework/dashboard-widget/latest-orders-widget/latest-orders-widget.graphql.ts +1 -1
  260. package/src/lib/framework/dashboard-widget/metrics-widget/index.tsx +7 -6
  261. package/src/lib/framework/dashboard-widget/metrics-widget/metrics-widget.graphql.ts +1 -1
  262. package/src/lib/framework/dashboard-widget/orders-summary/index.tsx +6 -7
  263. package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +1 -1
  264. package/src/lib/framework/dashboard-widget/types.ts +22 -0
  265. package/src/lib/framework/dashboard-widget/widget-extensions.tsx +1 -1
  266. package/src/lib/framework/defaults.ts +1 -1
  267. package/src/lib/framework/document-introspection/add-custom-fields.ts +2 -50
  268. package/src/lib/framework/document-introspection/get-document-structure.ts +10 -43
  269. package/src/lib/framework/document-introspection/hooks.ts +1 -4
  270. package/src/lib/framework/extension-api/define-dashboard-extension.ts +49 -31
  271. package/src/lib/framework/extension-api/extension-api-types.ts +98 -25
  272. package/src/lib/framework/extension-api/use-dashboard-extensions.ts +1 -2
  273. package/src/lib/framework/form-engine/form-schema-tools.ts +1 -1
  274. package/src/lib/framework/form-engine/use-generated-form.tsx +18 -57
  275. package/src/lib/framework/layout-engine/location-wrapper.tsx +8 -11
  276. package/src/lib/framework/layout-engine/page-layout.tsx +48 -66
  277. package/src/lib/framework/page/detail-page-route-loader.tsx +7 -26
  278. package/src/lib/framework/page/detail-page.tsx +37 -122
  279. package/src/lib/framework/page/list-page.tsx +11 -9
  280. package/src/lib/framework/page/use-detail-page.ts +7 -38
  281. package/src/lib/framework/page/use-extended-router.tsx +5 -4
  282. package/src/lib/framework/registry/registry-types.ts +5 -15
  283. package/src/lib/graphql/{fragments.ts → fragments.tsx} +2 -1
  284. package/src/lib/graphql/graphql-env.d.ts +13 -16
  285. package/src/lib/hooks/use-auth.tsx +1 -1
  286. package/src/lib/hooks/use-channel.ts +1 -1
  287. package/src/lib/hooks/use-grouped-permissions.ts +2 -3
  288. package/src/lib/hooks/use-page.tsx +2 -2
  289. package/src/lib/hooks/use-permissions.ts +2 -3
  290. package/src/lib/hooks/use-server-config.ts +1 -1
  291. package/src/lib/hooks/use-theme.ts +1 -1
  292. package/src/lib/hooks/use-user-settings.tsx +1 -1
  293. package/src/lib/index.ts +6 -65
  294. package/src/lib/lib/trans.tsx +3 -3
  295. package/src/lib/lib/utils.ts +0 -49
  296. package/src/lib/providers/auth.tsx +14 -37
  297. package/src/lib/providers/channel-provider.tsx +4 -4
  298. package/src/lib/providers/server-config.tsx +11 -13
  299. package/src/lib/providers/theme-provider.tsx +3 -2
  300. package/vite/utils/config-loader.ts +10 -120
  301. package/vite/vite-plugin-config-loader.ts +1 -6
  302. package/vite/vite-plugin-config.ts +7 -6
  303. package/vite/vite-plugin-dashboard-metadata.ts +9 -1
  304. package/vite/vite-plugin-vendure-dashboard.ts +4 -48
  305. package/dist/plugin/tests/barrel-exports/my-plugin/index.d.ts +0 -1
  306. package/dist/plugin/tests/barrel-exports/my-plugin/index.js +0 -17
  307. package/dist/plugin/tests/barrel-exports/my-plugin/src/my.plugin.d.ts +0 -2
  308. package/dist/plugin/tests/barrel-exports/my-plugin/src/my.plugin.js +0 -20
  309. package/dist/plugin/tests/barrel-exports/vendure-config.d.ts +0 -2
  310. package/dist/plugin/tests/barrel-exports/vendure-config.js +0 -19
  311. package/dist/plugin/tests/barrel-exports.spec.d.ts +0 -1
  312. package/dist/plugin/tests/barrel-exports.spec.js +0 -14
  313. package/dist/plugin/vite-plugin-tailwind-source.d.ts +0 -7
  314. package/dist/plugin/vite-plugin-tailwind-source.js +0 -49
  315. package/src/app/common/delete-bulk-action.tsx +0 -148
  316. package/src/app/common/duplicate-bulk-action.tsx +0 -134
  317. package/src/app/routes/_authenticated/_administrators/components/administrator-bulk-actions.tsx +0 -15
  318. package/src/app/routes/_authenticated/_assets/components/asset-bulk-actions.tsx +0 -45
  319. package/src/app/routes/_authenticated/_channels/components/channel-bulk-actions.tsx +0 -15
  320. package/src/app/routes/_authenticated/_collections/components/collection-bulk-actions.tsx +0 -123
  321. package/src/app/routes/_authenticated/_collections/components/move-collections-dialog.tsx +0 -430
  322. package/src/app/routes/_authenticated/_collections/components/move-single-collection.tsx +0 -33
  323. package/src/app/routes/_authenticated/_countries/components/country-bulk-actions.tsx +0 -15
  324. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-bulk-actions.tsx +0 -15
  325. package/src/app/routes/_authenticated/_customers/components/customer-bulk-actions.tsx +0 -15
  326. package/src/app/routes/_authenticated/_facets/components/facet-bulk-actions.tsx +0 -104
  327. package/src/app/routes/_authenticated/_orders/components/add-manual-payment-dialog.tsx +0 -191
  328. package/src/app/routes/_authenticated/_orders/components/fulfill-order-dialog.tsx +0 -320
  329. package/src/app/routes/_authenticated/_orders/components/fulfillment-details.tsx +0 -173
  330. package/src/app/routes/_authenticated/_orders/utils/order-types.ts +0 -7
  331. package/src/app/routes/_authenticated/_orders/utils/order-utils.ts +0 -77
  332. package/src/app/routes/_authenticated/_payment-methods/components/payment-method-bulk-actions.tsx +0 -58
  333. package/src/app/routes/_authenticated/_product-variants/components/product-variant-bulk-actions.tsx +0 -110
  334. package/src/app/routes/_authenticated/_products/components/assign-facet-values-dialog.tsx +0 -281
  335. package/src/app/routes/_authenticated/_products/components/product-bulk-actions.tsx +0 -123
  336. package/src/app/routes/_authenticated/_promotions/components/promotion-bulk-actions.tsx +0 -82
  337. package/src/app/routes/_authenticated/_roles/components/role-bulk-actions.tsx +0 -15
  338. package/src/app/routes/_authenticated/_sellers/components/seller-bulk-actions.tsx +0 -15
  339. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-bulk-actions.tsx +0 -61
  340. package/src/app/routes/_authenticated/_stock-locations/components/stock-location-bulk-actions.tsx +0 -58
  341. package/src/app/routes/_authenticated/_tax-categories/components/tax-category-bulk-actions.tsx +0 -15
  342. package/src/app/routes/_authenticated/_tax-rates/components/tax-rate-bulk-actions.tsx +0 -15
  343. package/src/app/routes/_authenticated/_zones/components/zone-bulk-actions.tsx +0 -15
  344. package/src/lib/components/data-input/index.ts +0 -11
  345. package/src/lib/components/data-input/relation-input.tsx +0 -153
  346. package/src/lib/components/data-input/relation-selector.tsx +0 -468
  347. package/src/lib/components/data-table/data-table-bulk-action-item.tsx +0 -101
  348. package/src/lib/components/data-table/data-table-bulk-actions.tsx +0 -95
  349. package/src/lib/components/labeled-data.tsx +0 -21
  350. package/src/lib/components/shared/asset/asset-bulk-actions.tsx +0 -94
  351. package/src/lib/components/shared/assign-to-channel-bulk-action.tsx +0 -71
  352. package/src/lib/components/shared/assign-to-channel-dialog.tsx +0 -155
  353. package/src/lib/components/shared/remove-from-channel-bulk-action.tsx +0 -90
  354. package/src/lib/framework/data-table/data-table-extensions.ts +0 -35
  355. package/src/lib/framework/document-extension/extend-detail-form-query.ts +0 -50
  356. package/src/lib/framework/document-extension/extend-document.spec.ts +0 -884
  357. package/src/lib/framework/document-extension/extend-document.ts +0 -159
  358. package/src/lib/framework/extension-api/display-component-extensions.tsx +0 -69
  359. package/src/lib/framework/extension-api/input-component-extensions.tsx +0 -69
  360. package/src/lib/framework/extension-api/logic/alerts.ts +0 -10
  361. package/src/lib/framework/extension-api/logic/data-table.ts +0 -60
  362. package/src/lib/framework/extension-api/logic/detail-forms.ts +0 -48
  363. package/src/lib/framework/extension-api/logic/form-components.ts +0 -13
  364. package/src/lib/framework/extension-api/logic/index.ts +0 -8
  365. package/src/lib/framework/extension-api/logic/layout.ts +0 -22
  366. package/src/lib/framework/extension-api/logic/navigation.ts +0 -37
  367. package/src/lib/framework/extension-api/logic/widgets.ts +0 -10
  368. package/src/lib/framework/extension-api/types/alerts.ts +0 -54
  369. package/src/lib/framework/extension-api/types/data-table.ts +0 -87
  370. package/src/lib/framework/extension-api/types/detail-forms.ts +0 -81
  371. package/src/lib/framework/extension-api/types/form-components.ts +0 -32
  372. package/src/lib/framework/extension-api/types/index.ts +0 -8
  373. package/src/lib/framework/extension-api/types/layout.ts +0 -78
  374. package/src/lib/framework/extension-api/types/navigation.ts +0 -19
  375. package/src/lib/framework/extension-api/types/widgets.ts +0 -97
  376. package/src/lib/framework/form-engine/custom-form-component-extensions.ts +0 -38
  377. package/src/lib/framework/form-engine/custom-form-component.tsx +0 -33
  378. package/src/lib/framework/form-engine/utils.ts +0 -58
  379. package/src/lib/framework/layout-engine/page-block-provider.tsx +0 -6
  380. package/src/lib/graphql/common-operations.ts +0 -18
  381. package/src/lib/hooks/use-extended-detail-query.ts +0 -37
  382. package/src/lib/hooks/use-extended-list-query.ts +0 -73
  383. package/src/lib/hooks/use-page-block.tsx +0 -10
  384. package/vite/tests/barrel-exports/my-plugin/index.ts +0 -1
  385. package/vite/tests/barrel-exports/my-plugin/src/my.plugin.ts +0 -8
  386. package/vite/tests/barrel-exports/package.json +0 -6
  387. package/vite/tests/barrel-exports/vendure-config.ts +0 -19
  388. package/vite/tests/barrel-exports.spec.ts +0 -21
  389. package/vite/vite-plugin-tailwind-source.ts +0 -65
  390. /package/src/lib/components/data-table/{types.ts → data-table-types.ts} +0 -0
@@ -1,6 +1,6 @@
1
- import { api } from '@/vdb/graphql/api.js';
2
- import { graphql, ResultOf } from '@/vdb/graphql/graphql.js';
3
- import { useUserSettings } from '@/vdb/hooks/use-user-settings.js';
1
+ import { api } from '@/graphql/api.js';
2
+ import { ResultOf, graphql } from '@/graphql/graphql.js';
3
+ import { useUserSettings } from '@/hooks/use-user-settings.js';
4
4
  import { useQuery, useQueryClient } from '@tanstack/react-query';
5
5
  import * as React from 'react';
6
6
 
@@ -14,7 +14,7 @@ import * as React from 'react';
14
14
  * @since 3.3.0
15
15
  */
16
16
  export interface AuthContext {
17
- status: 'initial' | 'authenticated' | 'verifying' | 'unauthenticated';
17
+ status: 'authenticated' | 'verifying' | 'unauthenticated';
18
18
  authenticationError?: string;
19
19
  isAuthenticated: boolean;
20
20
  login: (username: string, password: string, onSuccess?: () => void) => void;
@@ -70,10 +70,9 @@ const CurrentUserQuery = graphql(`
70
70
 
71
71
  export const AuthContext = React.createContext<AuthContext | null>(null);
72
72
 
73
- export function AuthProvider({ children }: Readonly<{ children: React.ReactNode }>) {
74
- const [status, setStatus] = React.useState<AuthContext['status']>('initial');
73
+ export function AuthProvider({ children }: { children: React.ReactNode }) {
74
+ const [status, setStatus] = React.useState<AuthContext['status']>('unauthenticated');
75
75
  const [authenticationError, setAuthenticationError] = React.useState<string | undefined>();
76
- const [isLoginLogoutInProgress, setIsLoginLogoutInProgress] = React.useState(false);
77
76
  const { settings, setActiveChannelId } = useUserSettings();
78
77
  const queryClient = useQueryClient();
79
78
 
@@ -85,10 +84,7 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
85
84
  refetch: refetchCurrentUser,
86
85
  } = useQuery({
87
86
  queryKey: ['currentUser'],
88
- queryFn: () => {
89
- return api.query(CurrentUserQuery);
90
- },
91
- retry: false, // Disable retries to avoid waiting for multiple attempts
87
+ queryFn: () => api.query(CurrentUserQuery),
92
88
  });
93
89
 
94
90
  // Set active channel if needed
@@ -101,7 +97,6 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
101
97
  // Auth actions
102
98
  const login = React.useCallback(
103
99
  (username: string, password: string, onLoginSuccess?: () => void) => {
104
- setIsLoginLogoutInProgress(true);
105
100
  setStatus('verifying');
106
101
  api.mutate(LoginMutation)({ username, password })
107
102
  .then(async data => {
@@ -111,18 +106,15 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
111
106
  // Invalidate all queries to ensure fresh data after login
112
107
  await queryClient.invalidateQueries();
113
108
  setStatus('authenticated');
114
- setIsLoginLogoutInProgress(false);
115
109
  onLoginSuccess?.();
116
110
  } else {
117
111
  setAuthenticationError(data?.login.message);
118
112
  setStatus('unauthenticated');
119
- setIsLoginLogoutInProgress(false);
120
113
  }
121
114
  })
122
115
  .catch(error => {
123
116
  setAuthenticationError(error.message);
124
117
  setStatus('unauthenticated');
125
- setIsLoginLogoutInProgress(false);
126
118
  });
127
119
  },
128
120
  [refetchCurrentUser, queryClient],
@@ -130,7 +122,6 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
130
122
 
131
123
  const logout = React.useCallback(
132
124
  async (onLogoutSuccess?: () => void) => {
133
- setIsLoginLogoutInProgress(true);
134
125
  setStatus('verifying');
135
126
  api.mutate(LogOutMutation)({}).then(async data => {
136
127
  if (data?.logout.success) {
@@ -140,7 +131,6 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
140
131
  localStorage.removeItem('vendure-selected-channel');
141
132
  localStorage.removeItem('vendure-selected-channel-token');
142
133
  setStatus('unauthenticated');
143
- setIsLoginLogoutInProgress(false);
144
134
  onLogoutSuccess?.();
145
135
  }
146
136
  });
@@ -151,28 +141,15 @@ export function AuthProvider({ children }: Readonly<{ children: React.ReactNode
151
141
  // Determine isAuthenticated from currentUserData
152
142
  const isAuthenticated = !!currentUserData?.me?.id;
153
143
 
154
- // Handle status transitions based on query state
144
+ // Set status based on query result (only if not in the middle of login/logout)
155
145
  React.useEffect(() => {
156
- // Don't change status if we're in the middle of login/logout
157
- if (isLoginLogoutInProgress) {
158
- return;
159
- }
160
-
161
- // If query is loading and we haven't started verifying yet, set to verifying
162
- if (isLoading && status === 'initial') {
163
- setStatus('verifying');
164
- return;
165
- }
166
-
167
- // If query has completed (not loading) and we're in verifying state, determine final status
168
- if (!isLoading && status === 'verifying') {
169
- if (currentUserError || !currentUserData?.me?.id) {
170
- setStatus('unauthenticated');
171
- } else {
172
- setStatus('authenticated');
173
- }
146
+ if (status === 'verifying') return;
147
+ if (currentUserError || !currentUserData?.me?.id) {
148
+ setStatus('unauthenticated');
149
+ } else {
150
+ setStatus('authenticated');
174
151
  }
175
- }, [isLoading, currentUserData, currentUserError, status, isLoginLogoutInProgress]);
152
+ }, [currentUserData, currentUserError]);
176
153
 
177
154
  return (
178
155
  <AuthContext.Provider
@@ -1,6 +1,6 @@
1
- import { api } from '@/vdb/graphql/api.js';
2
- import { ResultOf, graphql } from '@/vdb/graphql/graphql.js';
3
- import { useAuth } from '@/vdb/hooks/use-auth.js';
1
+ import { api } from '@/graphql/api.js';
2
+ import { ResultOf, graphql } from '@/graphql/graphql.js';
3
+ import { useAuth } from '@/hooks/use-auth.js';
4
4
  import { useQuery, useQueryClient } from '@tanstack/react-query';
5
5
  import * as React from 'react';
6
6
 
@@ -65,7 +65,7 @@ export const ChannelContext = React.createContext<ChannelContext | undefined>(un
65
65
  const SELECTED_CHANNEL_KEY = 'vendure-selected-channel';
66
66
  const SELECTED_CHANNEL_TOKEN_KEY = 'vendure-selected-channel-token';
67
67
 
68
- export function ChannelProvider({ children }: Readonly<{ children: React.ReactNode }>) {
68
+ export function ChannelProvider({ children }: { children: React.ReactNode }) {
69
69
  const queryClient = useQueryClient();
70
70
  const { channels: userChannels, isAuthenticated } = useAuth();
71
71
  const [selectedChannelId, setSelectedChannelId] = React.useState<string | undefined>(() => {
@@ -1,6 +1,6 @@
1
- import { api } from '@/vdb/graphql/api.js';
2
- import { graphql } from '@/vdb/graphql/graphql.js';
3
- import { useAuth } from '@/vdb/hooks/use-auth.js';
1
+ import { api } from '@/graphql/api.js';
2
+ import { graphql } from '@/graphql/graphql.js';
3
+ import { useAuth } from '@/hooks/use-auth.js';
4
4
  import { useQuery } from '@tanstack/react-query';
5
5
  import { ResultOf } from 'gql.tada';
6
6
  import React from 'react';
@@ -270,16 +270,14 @@ export const ServerConfigProvider = ({ children }: { children: React.ReactNode }
270
270
  enabled: !!user?.id,
271
271
  staleTime: 1000,
272
272
  });
273
- const value: ServerConfig | null = data?.globalSettings
274
- ? {
275
- availableLanguages: data?.globalSettings.availableLanguages ?? [],
276
- moneyStrategyPrecision: data?.globalSettings.serverConfig.moneyStrategyPrecision ?? 2,
277
- orderProcess: data?.globalSettings.serverConfig.orderProcess ?? [],
278
- permittedAssetTypes: data?.globalSettings.serverConfig.permittedAssetTypes ?? [],
279
- permissions: data?.globalSettings.serverConfig.permissions ?? [],
280
- entityCustomFields: data?.globalSettings.serverConfig.entityCustomFields ?? [],
281
- }
282
- : null;
273
+ const value: ServerConfig | null = data?.globalSettings ? {
274
+ availableLanguages: data?.globalSettings.availableLanguages ?? [],
275
+ moneyStrategyPrecision: data?.globalSettings.serverConfig.moneyStrategyPrecision ?? 2,
276
+ orderProcess: data?.globalSettings.serverConfig.orderProcess ?? [],
277
+ permittedAssetTypes: data?.globalSettings.serverConfig.permittedAssetTypes ?? [],
278
+ permissions: data?.globalSettings.serverConfig.permissions ?? [],
279
+ entityCustomFields: data?.globalSettings.serverConfig.entityCustomFields ?? [],
280
+ } : null;
283
281
 
284
282
  return <ServerConfigContext.Provider value={value}>{children}</ServerConfigContext.Provider>;
285
283
  };
@@ -1,4 +1,4 @@
1
- import { createContext, useEffect } from 'react';
1
+ import { createContext, useEffect, useState } from 'react';
2
2
  import { useUserSettings } from '../hooks/use-user-settings.js';
3
3
 
4
4
  export type Theme = 'dark' | 'light' | 'system';
@@ -21,7 +21,7 @@ const initialState: ThemeProviderState = {
21
21
 
22
22
  export const ThemeProviderContext = createContext<ThemeProviderState>(initialState);
23
23
 
24
- export function ThemeProvider({ children, defaultTheme = 'system', ...props }: Readonly<ThemeProviderProps>) {
24
+ export function ThemeProvider({ children, defaultTheme = 'system', ...props }: ThemeProviderProps) {
25
25
  const { settings, setTheme } = useUserSettings();
26
26
 
27
27
  useEffect(() => {
@@ -51,3 +51,4 @@ export function ThemeProvider({ children, defaultTheme = 'system', ...props }: R
51
51
  </ThemeProviderContext.Provider>
52
52
  );
53
53
  }
54
+
@@ -31,83 +31,9 @@ const defaultLogger: Logger = {
31
31
  },
32
32
  };
33
33
 
34
- /**
35
- * @description
36
- * The PathAdapter interface allows customization of how paths are handled
37
- * when compiling the Vendure config and its imports.
38
- *
39
- * This is particularly useful in complex project structures, such as monorepos,
40
- * where the Vendure config file may not be in the root directory,
41
- * or when you need to transform TypeScript path mappings.
42
- */
43
- export interface PathAdapter {
44
- /**
45
- * @description
46
- * A function to determine the path to the compiled Vendure config file. The default implementation
47
- * simple joins the output directory with the config file name:
48
- *
49
- * ```ts
50
- * return path.join(outputPath, configFileName)
51
- * ```
52
- *
53
- * However, in some cases with more complex project structures, you may need to
54
- * provide a custom implementation to ensure the compiled config file is
55
- * correctly located.
56
- *
57
- * @example
58
- * ```ts
59
- * getCompiledConfigPath: ({ inputRootDir, outputPath, configFileName }) => {
60
- * const projectName = inputRootDir.split('/libs/')[1].split('/')[0];
61
- * const pathAfterProject = inputRootDir.split(`/libs/${projectName}`)[1];
62
- * const compiledConfigFilePath = `${outputPath}/${projectName}${pathAfterProject}`;
63
- * return path.join(compiledConfigFilePath, configFileName);
64
- * },
65
- * ```
66
- */
67
- getCompiledConfigPath?: (params: {
68
- inputRootDir: string;
69
- outputPath: string;
70
- configFileName: string;
71
- }) => string;
72
- /**
73
- * If your project makes use of the TypeScript `paths` configuration, the compiler will
74
- * attempt to use these paths when compiling the Vendure config and its imports.
75
- *
76
- * In certain cases, you may need to transform these paths before they are used. For instance,
77
- * if your project is a monorepo and the paths are defined relative to the root of the monorepo,
78
- * you may need to adjust them to be relative to the output directory where the compiled files are located.
79
- *
80
- * @example
81
- * ```ts
82
- * transformTsConfigPathMappings: ({ phase, patterns }) => {
83
- * // "loading" phase is when the compiled Vendure code is being loaded by
84
- * // the plugin, in order to introspect the configuration of your app.
85
- * if (phase === 'loading') {
86
- * return patterns.map((p) =>
87
- * p.replace('libs/', '').replace(/.ts$/, '.js'),
88
- * );
89
- * }
90
- * return patterns;
91
- * },
92
- * ```
93
- * @param params
94
- */
95
- transformTsConfigPathMappings?: (params: {
96
- phase: 'compiling' | 'loading';
97
- alias: string;
98
- patterns: string[];
99
- }) => string[];
100
- }
101
-
102
- const defaultPathAdapter: Required<PathAdapter> = {
103
- getCompiledConfigPath: ({ outputPath, configFileName }) => path.join(outputPath, configFileName),
104
- transformTsConfigPathMappings: ({ patterns }) => patterns,
105
- };
106
-
107
34
  export interface ConfigLoaderOptions {
108
35
  vendureConfigPath: string;
109
36
  tempDir: string;
110
- pathAdapter?: PathAdapter;
111
37
  vendureConfigExport?: string;
112
38
  logger?: Logger;
113
39
  reportCompilationErrors?: boolean;
@@ -136,11 +62,7 @@ export interface LoadVendureConfigResult {
136
62
  * to handle the compiled JavaScript output.
137
63
  */
138
64
  export async function loadVendureConfig(options: ConfigLoaderOptions): Promise<LoadVendureConfigResult> {
139
- const { vendureConfigPath, vendureConfigExport, tempDir, pathAdapter } = options;
140
- const getCompiledConfigPath =
141
- pathAdapter?.getCompiledConfigPath ?? defaultPathAdapter.getCompiledConfigPath;
142
- const transformTsConfigPathMappings =
143
- pathAdapter?.transformTsConfigPathMappings ?? defaultPathAdapter.transformTsConfigPathMappings;
65
+ const { vendureConfigPath, vendureConfigExport, tempDir } = options;
144
66
  const logger = options.logger || defaultLogger;
145
67
  const outputPath = tempDir;
146
68
  const configFileName = path.basename(vendureConfigPath);
@@ -151,15 +73,11 @@ export async function loadVendureConfig(options: ConfigLoaderOptions): Promise<L
151
73
  inputPath: vendureConfigPath,
152
74
  outputDir: outputPath,
153
75
  logger,
154
- transformTsConfigPathMappings,
155
76
  });
156
- const compiledConfigFilePath = pathToFileURL(
157
- getCompiledConfigPath({
158
- inputRootDir,
159
- outputPath,
160
- configFileName,
161
- }),
162
- ).href.replace(/.ts$/, '.js');
77
+ const compiledConfigFilePath = pathToFileURL(path.join(outputPath, configFileName)).href.replace(
78
+ /.ts$/,
79
+ '.js',
80
+ );
163
81
  // create package.json with type commonjs and save it to the output dir
164
82
  await fs.writeFile(path.join(outputPath, 'package.json'), JSON.stringify({ type: 'commonjs' }, null, 2));
165
83
 
@@ -180,12 +98,7 @@ export async function loadVendureConfig(options: ConfigLoaderOptions): Promise<L
180
98
  }
181
99
 
182
100
  // Register path aliases from tsconfig before importing
183
- const tsConfigInfo = await findTsConfigPaths(
184
- vendureConfigPath,
185
- logger,
186
- 'loading',
187
- transformTsConfigPathMappings,
188
- );
101
+ const tsConfigInfo = await findTsConfigPaths(vendureConfigPath, logger);
189
102
  if (tsConfigInfo) {
190
103
  tsConfigPaths.register({
191
104
  baseUrl: outputPath,
@@ -209,8 +122,6 @@ export async function loadVendureConfig(options: ConfigLoaderOptions): Promise<L
209
122
  async function findTsConfigPaths(
210
123
  configPath: string,
211
124
  logger: Logger,
212
- phase: 'compiling' | 'loading',
213
- transformTsConfigPathMappings: Required<PathAdapter>['transformTsConfigPathMappings'],
214
125
  ): Promise<{ baseUrl: string; paths: Record<string, string[]> } | undefined> {
215
126
  const configDir = path.dirname(configPath);
216
127
  let currentDir = configDir;
@@ -236,15 +147,10 @@ async function findTsConfigPaths(
236
147
 
237
148
  for (const [alias, patterns] of Object.entries(compilerOptions.paths)) {
238
149
  // Store paths as defined in tsconfig, they will be relative to baseUrl
239
- const normalizedPatterns = (patterns as string[]).map(pattern =>
150
+ paths[alias] = (patterns as string[]).map(pattern =>
240
151
  // Normalize slashes for consistency, keep relative
241
152
  pattern.replace(/\\/g, '/'),
242
153
  );
243
- paths[alias] = transformTsConfigPathMappings({
244
- phase,
245
- alias,
246
- patterns: normalizedPatterns,
247
- });
248
154
  }
249
155
  logger.debug(
250
156
  `Found tsconfig paths in ${tsConfigPath}: ${JSON.stringify(
@@ -278,7 +184,6 @@ type CompileFileOptions = {
278
184
  inputRootDir: string;
279
185
  inputPath: string;
280
186
  outputDir: string;
281
- transformTsConfigPathMappings: Required<PathAdapter>['transformTsConfigPathMappings'];
282
187
  logger?: Logger;
283
188
  compiledFiles?: Set<string>;
284
189
  isRoot?: boolean;
@@ -290,7 +195,6 @@ export async function compileFile({
290
195
  inputRootDir,
291
196
  inputPath,
292
197
  outputDir,
293
- transformTsConfigPathMappings,
294
198
  logger = defaultLogger,
295
199
  compiledFiles = new Set<string>(),
296
200
  isRoot = true,
@@ -316,29 +220,19 @@ export async function compileFile({
316
220
  let tsConfigInfo: { baseUrl: string; paths: Record<string, string[]> } | undefined;
317
221
 
318
222
  if (isRoot) {
319
- tsConfigInfo = await findTsConfigPaths(
320
- absoluteInputPath,
321
- logger,
322
- 'compiling',
323
- transformTsConfigPathMappings,
324
- );
223
+ tsConfigInfo = await findTsConfigPaths(absoluteInputPath, logger);
325
224
  if (tsConfigInfo) {
326
225
  logger?.debug(`Using TypeScript configuration: ${JSON.stringify(tsConfigInfo, null, 2)}`);
327
226
  }
328
227
  }
329
228
 
330
229
  async function collectImports(node: ts.Node) {
331
- if (
332
- (ts.isExportDeclaration(node) || ts.isImportDeclaration(node)) &&
333
- node.moduleSpecifier &&
334
- ts.isStringLiteral(node.moduleSpecifier)
335
- ) {
230
+ if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
336
231
  const importPath = node.moduleSpecifier.text;
337
232
 
338
233
  // Handle relative imports
339
234
  if (importPath.startsWith('.')) {
340
235
  const resolvedPath = path.resolve(path.dirname(absoluteInputPath), importPath);
341
- // TODO: does this handle index files correctly?
342
236
  let resolvedTsPath = resolvedPath + '.ts';
343
237
  // Also check for .tsx if .ts doesn't exist
344
238
  if (!(await fs.pathExists(resolvedTsPath))) {
@@ -389,9 +283,7 @@ export async function compileFile({
389
283
  const potentialPathBase = path.resolve(tsConfigInfo.baseUrl, patternPrefix);
390
284
  const resolvedPath = path.join(potentialPathBase, remainingImportPath);
391
285
 
392
- let resolvedTsPath = resolvedPath.endsWith('.ts')
393
- ? resolvedPath
394
- : resolvedPath + '.ts';
286
+ let resolvedTsPath = resolvedPath + '.ts';
395
287
  // Similar existence checks as relative paths
396
288
  if (!(await fs.pathExists(resolvedTsPath))) {
397
289
  const resolvedTsxPath = resolvedPath + '.tsx';
@@ -436,7 +328,6 @@ export async function compileFile({
436
328
  ts.isModuleBlock(child) ||
437
329
  ts.isModuleDeclaration(child) ||
438
330
  ts.isImportDeclaration(child) ||
439
- ts.isExportDeclaration(child) ||
440
331
  child.kind === ts.SyntaxKind.SyntaxList
441
332
  ) {
442
333
  await collectImports(child);
@@ -464,7 +355,6 @@ export async function compileFile({
464
355
  inputPath: importPath,
465
356
  outputDir,
466
357
  logger,
467
- transformTsConfigPathMappings,
468
358
  compiledFiles,
469
359
  isRoot: false,
470
360
  pluginInfo,
@@ -24,7 +24,6 @@ export function configLoaderPlugin(options: ConfigLoaderOptions): Plugin {
24
24
  try {
25
25
  const startTime = Date.now();
26
26
  result = await loadVendureConfig({
27
- pathAdapter: options.pathAdapter,
28
27
  tempDir: options.tempDir,
29
28
  vendureConfigPath: options.vendureConfigPath,
30
29
  vendureConfigExport: options.vendureConfigExport,
@@ -43,11 +42,7 @@ export function configLoaderPlugin(options: ConfigLoaderOptions): Plugin {
43
42
  );
44
43
  } catch (e: unknown) {
45
44
  if (e instanceof Error) {
46
- const message = [
47
- e.message,
48
- `If you are using a monorepo, you may need to provide a custom pathAdapter to resolve the paths correctly.`,
49
- ].join('\n');
50
- this.error(`Error loading Vendure config: ${message}`);
45
+ this.error(`Error loading Vendure config: ${e.message}`);
51
46
  }
52
47
  }
53
48
  onConfigLoaded.forEach(fn => fn());
@@ -8,7 +8,7 @@ export function viteConfigPlugin({ packageRoot }: { packageRoot: string }): Plug
8
8
  // Only set the vite `root` to the dashboard package when running the dev server.
9
9
  // During a production build we still need to reference the dashboard source which
10
10
  // lives in `node_modules`, but we don't want the build output to be emitted in there.
11
- // Therefore, we set `root` only for `serve` and, for `build`, we instead make sure that
11
+ // Therefore we set `root` only for `serve` and, for `build`, we instead make sure that
12
12
  // an `outDir` **outside** of `node_modules` is used (defaulting to the current working
13
13
  // directory if the user did not provide one already).
14
14
  config.root = packageRoot;
@@ -37,9 +37,7 @@ export function viteConfigPlugin({ packageRoot }: { packageRoot: string }): Plug
37
37
  config.resolve = {
38
38
  alias: {
39
39
  ...(config.resolve?.alias ?? {}),
40
- // See the readme for an explanation of this alias.
41
- '@/vdb': path.resolve(packageRoot, './src/lib'),
42
- '@/graphql': path.resolve(packageRoot, './src/lib/graphql'),
40
+ '@': path.resolve(packageRoot, './src/lib'),
43
41
  },
44
42
  };
45
43
  // This is required to prevent Vite from pre-bundling the
@@ -49,7 +47,11 @@ export function viteConfigPlugin({ packageRoot }: { packageRoot: string }): Plug
49
47
  exclude: [
50
48
  ...(config.optimizeDeps?.exclude || []),
51
49
  '@vendure/dashboard',
52
- '@/vdb',
50
+ '@/providers',
51
+ '@/framework',
52
+ '@/lib',
53
+ '@/components',
54
+ '@/hooks',
53
55
  'virtual:vendure-ui-config',
54
56
  'virtual:admin-api-schema',
55
57
  'virtual:dashboard-extensions',
@@ -61,7 +63,6 @@ export function viteConfigPlugin({ packageRoot }: { packageRoot: string }): Plug
61
63
  ...(config.optimizeDeps?.include || []),
62
64
  '@/components > recharts',
63
65
  '@/components > react-dropzone',
64
- '@vendure/common/lib/generated-types',
65
66
  ],
66
67
  };
67
68
  return config;
@@ -12,7 +12,7 @@ const resolvedVirtualModuleId = `\0${virtualModuleId}`;
12
12
  * generates an import statement for each one, wrapped up in a `runDashboardExtensions()`
13
13
  * function which can then be imported and executed in the Dashboard app.
14
14
  */
15
- export function dashboardMetadataPlugin(): Plugin {
15
+ export function dashboardMetadataPlugin(options: { rootDir: string }): Plugin {
16
16
  let configLoaderApi: ConfigLoaderApi;
17
17
  let loadVendureConfigResult: LoadVendureConfigResult;
18
18
  return {
@@ -52,3 +52,11 @@ export function dashboardMetadataPlugin(): Plugin {
52
52
  },
53
53
  };
54
54
  }
55
+
56
+ /**
57
+ * Converts an import path to a normalized path relative to the rootDir.
58
+ */
59
+ function normalizeImportPath(rootDir: string, importPath: string): string {
60
+ const relativePath = path.relative(rootDir, importPath).replace(/\\/g, '/');
61
+ return relativePath.replace(/\.tsx?$/, '.js');
62
+ }
@@ -4,16 +4,14 @@ import react from '@vitejs/plugin-react';
4
4
  import path from 'path';
5
5
  import { PluginOption } from 'vite';
6
6
 
7
- import { PathAdapter } from './utils/config-loader.js';
8
7
  import { adminApiSchemaPlugin } from './vite-plugin-admin-api-schema.js';
9
8
  import { configLoaderPlugin } from './vite-plugin-config-loader.js';
10
9
  import { viteConfigPlugin } from './vite-plugin-config.js';
11
10
  import { dashboardMetadataPlugin } from './vite-plugin-dashboard-metadata.js';
12
11
  import { gqlTadaPlugin } from './vite-plugin-gql-tada.js';
13
- import { dashboardTailwindSourcePlugin } from './vite-plugin-tailwind-source.js';
14
- import { themeVariablesPlugin, ThemeVariablesPluginOptions } from './vite-plugin-theme.js';
12
+ import { ThemeVariablesPluginOptions, themeVariablesPlugin } from './vite-plugin-theme.js';
15
13
  import { transformIndexHtmlPlugin } from './vite-plugin-transform-index.js';
16
- import { uiConfigPlugin, UiConfigPluginOptions } from './vite-plugin-ui-config.js';
14
+ import { UiConfigPluginOptions, uiConfigPlugin } from './vite-plugin-ui-config.js';
17
15
 
18
16
  /**
19
17
  * @description
@@ -25,46 +23,6 @@ export type VitePluginVendureDashboardOptions = {
25
23
  * The path to the Vendure server configuration file.
26
24
  */
27
25
  vendureConfigPath: string | URL;
28
- /**
29
- * @description
30
- * The {@link PathAdapter} allows you to customize the resolution of paths
31
- * in the compiled Vendure source code which is used as part of the
32
- * introspection step of building the dashboard.
33
- *
34
- * It enables support for more complex repository structures, such as
35
- * monorepos, where the Vendure server configuration file may not
36
- * be located in the root directory of the project.
37
- *
38
- * If you get compilation errors like "Error loading Vendure config: Cannot find module",
39
- * you probably need to provide a custom `pathAdapter` to resolve the paths correctly.
40
- *
41
- * @example
42
- * ```ts
43
- * vendureDashboardPlugin({
44
- * tempCompilationDir: join(__dirname, './__vendure-dashboard-temp'),
45
- * pathAdapter: {
46
- * getCompiledConfigPath: ({ inputRootDir, outputPath, configFileName }) => {
47
- * const projectName = inputRootDir.split('/libs/')[1].split('/')[0];
48
- * const pathAfterProject = inputRootDir.split(`/libs/${projectName}`)[1];
49
- * const compiledConfigFilePath = `${outputPath}/${projectName}${pathAfterProject}`;
50
- * return path.join(compiledConfigFilePath, configFileName);
51
- * },
52
- * transformTsConfigPathMappings: ({ phase, patterns }) => {
53
- * // "loading" phase is when the compiled Vendure code is being loaded by
54
- * // the plugin, in order to introspect the configuration of your app.
55
- * if (phase === 'loading') {
56
- * return patterns.map((p) =>
57
- * p.replace('libs/', '').replace(/.ts$/, '.js'),
58
- * );
59
- * }
60
- * return patterns;
61
- * },
62
- * },
63
- * // ...
64
- * }),
65
- * ```
66
- */
67
- pathAdapter?: PathAdapter;
68
26
  /**
69
27
  * @description
70
28
  * The name of the exported variable from the Vendure server configuration file.
@@ -111,7 +69,7 @@ export function vendureDashboardPlugin(options: VitePluginVendureDashboardOption
111
69
  : [
112
70
  TanStackRouterVite({
113
71
  autoCodeSplitting: true,
114
- routeFileIgnorePattern: '.graphql.ts|components|hooks|utils',
72
+ routeFileIgnorePattern: '.graphql.ts|components',
115
73
  routesDirectory: path.join(packageRoot, 'src/app/routes'),
116
74
  generatedRouteTree: path.join(packageRoot, 'src/app/routeTree.gen.ts'),
117
75
  }),
@@ -122,17 +80,15 @@ export function vendureDashboardPlugin(options: VitePluginVendureDashboardOption
122
80
  // },
123
81
  }),
124
82
  themeVariablesPlugin({ theme: options.theme }),
125
- dashboardTailwindSourcePlugin(),
126
83
  tailwindcss(),
127
84
  configLoaderPlugin({
128
85
  vendureConfigPath: normalizedVendureConfigPath,
129
86
  tempDir,
130
87
  reportCompilationErrors: options.reportCompilationErrors,
131
- pathAdapter: options.pathAdapter,
132
88
  }),
133
89
  viteConfigPlugin({ packageRoot }),
134
90
  adminApiSchemaPlugin(),
135
- dashboardMetadataPlugin(),
91
+ dashboardMetadataPlugin({ rootDir: tempDir }),
136
92
  uiConfigPlugin({ adminUiConfig: options.adminUiConfig }),
137
93
  ...(options.gqlTadaOutputPath
138
94
  ? [gqlTadaPlugin({ gqlTadaOutputPath: options.gqlTadaOutputPath, tempDir, packageRoot })]
@@ -1 +0,0 @@
1
- export * from './src/my.plugin';
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./src/my.plugin"), exports);
@@ -1,2 +0,0 @@
1
- export declare class MyPlugin {
2
- }
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.MyPlugin = void 0;
10
- const core_1 = require("@vendure/core");
11
- let MyPlugin = class MyPlugin {
12
- };
13
- exports.MyPlugin = MyPlugin;
14
- exports.MyPlugin = MyPlugin = __decorate([
15
- (0, core_1.VendurePlugin)({
16
- imports: [core_1.PluginCommonModule],
17
- providers: [],
18
- dashboard: './dashboard/index.tsx',
19
- })
20
- ], MyPlugin);
@@ -1,2 +0,0 @@
1
- import { VendureConfig } from '@vendure/core';
2
- export declare const config: VendureConfig;