@vendure/dashboard 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +13 -0
  2. package/dist/plugin/.vendure-dashboard-temp/dev-config.js +227 -0
  3. package/dist/plugin/.vendure-dashboard-temp/dev-config.js.map +1 -0
  4. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/api/api-extensions.js +33 -0
  5. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/api/api-extensions.js.map +1 -0
  6. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/api/mv.resolver.js +69 -0
  7. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/api/mv.resolver.js.map +1 -0
  8. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-order-process.js +110 -0
  9. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-order-process.js.map +1 -0
  10. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-order-seller-strategy.js +134 -0
  11. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-order-seller-strategy.js.map +1 -0
  12. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-payment-handler.js +86 -0
  13. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-payment-handler.js.map +1 -0
  14. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-shipping-eligibility-checker.js +49 -0
  15. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-shipping-eligibility-checker.js.map +1 -0
  16. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-shipping-line-assignment-strategy.js +57 -0
  17. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/config/mv-shipping-line-assignment-strategy.js.map +1 -0
  18. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/constants.js +20 -0
  19. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/constants.js.map +1 -0
  20. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/multivendor.plugin.js +151 -0
  21. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/multivendor.plugin.js.map +1 -0
  22. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/payment/mv-connect-sdk.js +47 -0
  23. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/payment/mv-connect-sdk.js.map +1 -0
  24. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/service/mv.service.js +222 -0
  25. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/service/mv.service.js.map +1 -0
  26. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/types.js +4 -0
  27. package/dist/plugin/.vendure-dashboard-temp/example-plugins/multivendor-plugin/types.js.map +1 -0
  28. package/dist/plugin/.vendure-dashboard-temp/package.json +3 -0
  29. package/dist/plugin/.vendure-dashboard-temp/schema.graphql +6378 -0
  30. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/api-extensions.js +103 -0
  31. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/api-extensions.js.map +1 -0
  32. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/product-entity.resolver.js +105 -0
  33. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/product-entity.resolver.js.map +1 -0
  34. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/product-review-admin.resolver.js +183 -0
  35. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/product-review-admin.resolver.js.map +1 -0
  36. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/product-review-entity.resolver.js +113 -0
  37. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/product-review-entity.resolver.js.map +1 -0
  38. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/product-review-shop.resolver.js +112 -0
  39. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/api/product-review-shop.resolver.js.map +1 -0
  40. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/entities/product-review.entity.js +111 -0
  41. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/entities/product-review.entity.js.map +1 -0
  42. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/generated-admin-types.js +616 -0
  43. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/generated-admin-types.js.map +1 -0
  44. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/generated-shop-types.js +563 -0
  45. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/generated-shop-types.js.map +1 -0
  46. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/reviews-plugin.js +135 -0
  47. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/reviews-plugin.js.map +1 -0
  48. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/types.js +4 -0
  49. package/dist/plugin/.vendure-dashboard-temp/test-plugins/reviews/types.js.map +1 -0
  50. package/dist/plugin/.vendure-dashboard-temp/tsconfig.json +10 -0
  51. package/dist/plugin/config-loader.d.ts +27 -0
  52. package/dist/plugin/config-loader.js +141 -0
  53. package/dist/plugin/constants.d.ts +5 -0
  54. package/dist/plugin/constants.js +277 -0
  55. package/dist/plugin/index.d.ts +1 -0
  56. package/dist/plugin/index.js +1 -0
  57. package/dist/plugin/schema-generator.d.ts +5 -0
  58. package/dist/plugin/schema-generator.js +24 -0
  59. package/dist/plugin/ui-config.d.ts +3 -0
  60. package/dist/plugin/ui-config.js +35 -0
  61. package/dist/plugin/vite-plugin-admin-api-schema.d.ts +24 -0
  62. package/dist/plugin/vite-plugin-admin-api-schema.js +82 -0
  63. package/dist/plugin/vite-plugin-config-loader.d.ts +17 -0
  64. package/dist/plugin/vite-plugin-config-loader.js +56 -0
  65. package/dist/plugin/vite-plugin-config.d.ts +4 -0
  66. package/dist/plugin/vite-plugin-config.js +38 -0
  67. package/dist/plugin/vite-plugin-dashboard-metadata.d.ts +9 -0
  68. package/dist/plugin/vite-plugin-dashboard-metadata.js +52 -0
  69. package/dist/plugin/vite-plugin-gql-tada.d.ts +6 -0
  70. package/dist/plugin/vite-plugin-gql-tada.js +51 -0
  71. package/dist/plugin/vite-plugin-set-root.d.ts +4 -0
  72. package/dist/plugin/vite-plugin-set-root.js +15 -0
  73. package/dist/plugin/vite-plugin-ui-config.d.ts +15 -0
  74. package/dist/plugin/vite-plugin-ui-config.js +43 -0
  75. package/dist/plugin/vite-plugin-vendure-dashboard.d.ts +35 -0
  76. package/dist/plugin/vite-plugin-vendure-dashboard.js +81 -0
  77. package/index.html +15 -0
  78. package/lingui.config.js +12 -0
  79. package/package.json +118 -0
  80. package/src/app/app-providers.tsx +30 -0
  81. package/src/app/main.tsx +97 -0
  82. package/src/app/routeTree.gen.ts +1372 -0
  83. package/src/app/routes/__root.tsx +24 -0
  84. package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +79 -0
  85. package/src/app/routes/_authenticated/_administrators/administrators.tsx +86 -0
  86. package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +155 -0
  87. package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +133 -0
  88. package/src/app/routes/_authenticated/_assets/assets.tsx +19 -0
  89. package/src/app/routes/_authenticated/_channels/channels.graphql.ts +93 -0
  90. package/src/app/routes/_authenticated/_channels/channels.tsx +60 -0
  91. package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +248 -0
  92. package/src/app/routes/_authenticated/_collections/collections.graphql.ts +133 -0
  93. package/src/app/routes/_authenticated/_collections/collections.tsx +195 -0
  94. package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +224 -0
  95. package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +127 -0
  96. package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +46 -0
  97. package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +82 -0
  98. package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +91 -0
  99. package/src/app/routes/_authenticated/_countries/countries.graphql.ts +69 -0
  100. package/src/app/routes/_authenticated/_countries/countries.tsx +67 -0
  101. package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +122 -0
  102. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +44 -0
  103. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +129 -0
  104. package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +71 -0
  105. package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +68 -0
  106. package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +111 -0
  107. package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +155 -0
  108. package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +344 -0
  109. package/src/app/routes/_authenticated/_customers/components/customer-group-controls.tsx +4 -0
  110. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +78 -0
  111. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +77 -0
  112. package/src/app/routes/_authenticated/_customers/components/customer-history/index.ts +3 -0
  113. package/src/app/routes/_authenticated/_customers/components/customer-history/use-customer-history.ts +169 -0
  114. package/src/app/routes/_authenticated/_customers/components/customer-order-table.tsx +88 -0
  115. package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +33 -0
  116. package/src/app/routes/_authenticated/_customers/customers.graphql.ts +204 -0
  117. package/src/app/routes/_authenticated/_customers/customers.tsx +82 -0
  118. package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +274 -0
  119. package/src/app/routes/_authenticated/_facets/components/edit-facet-value.tsx +129 -0
  120. package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +46 -0
  121. package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +97 -0
  122. package/src/app/routes/_authenticated/_facets/facets.graphql.ts +104 -0
  123. package/src/app/routes/_authenticated/_facets/facets.tsx +97 -0
  124. package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +139 -0
  125. package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +28 -0
  126. package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +161 -0
  127. package/src/app/routes/_authenticated/_orders/components/order-address.tsx +58 -0
  128. package/src/app/routes/_authenticated/_orders/components/order-history/index.ts +3 -0
  129. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +73 -0
  130. package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +96 -0
  131. package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +171 -0
  132. package/src/app/routes/_authenticated/_orders/components/order-table.tsx +169 -0
  133. package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +39 -0
  134. package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +61 -0
  135. package/src/app/routes/_authenticated/_orders/orders.graphql.ts +325 -0
  136. package/src/app/routes/_authenticated/_orders/orders.tsx +120 -0
  137. package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +133 -0
  138. package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +104 -0
  139. package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +100 -0
  140. package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +83 -0
  141. package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +64 -0
  142. package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +183 -0
  143. package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +87 -0
  144. package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +123 -0
  145. package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +78 -0
  146. package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +331 -0
  147. package/src/app/routes/_authenticated/_products/components/create-product-variants-dialog.tsx +228 -0
  148. package/src/app/routes/_authenticated/_products/components/create-product-variants.tsx +462 -0
  149. package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +96 -0
  150. package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +87 -0
  151. package/src/app/routes/_authenticated/_products/products.graphql.ts +116 -0
  152. package/src/app/routes/_authenticated/_products/products.tsx +48 -0
  153. package/src/app/routes/_authenticated/_products/products_.$id.tsx +196 -0
  154. package/src/app/routes/_authenticated/_profile/profile.graphql.ts +23 -0
  155. package/src/app/routes/_authenticated/_profile/profile.tsx +122 -0
  156. package/src/app/routes/_authenticated/_promotions/components/promotion-actions-selector.tsx +107 -0
  157. package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +107 -0
  158. package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +96 -0
  159. package/src/app/routes/_authenticated/_promotions/promotions.tsx +61 -0
  160. package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +235 -0
  161. package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +54 -0
  162. package/src/app/routes/_authenticated/_roles/components/permissions-grid.tsx +116 -0
  163. package/src/app/routes/_authenticated/_roles/roles.graphql.ts +67 -0
  164. package/src/app/routes/_authenticated/_roles/roles.tsx +96 -0
  165. package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +142 -0
  166. package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +61 -0
  167. package/src/app/routes/_authenticated/_sellers/sellers.tsx +51 -0
  168. package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +111 -0
  169. package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +56 -0
  170. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +101 -0
  171. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +101 -0
  172. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-method-dialog.tsx +32 -0
  173. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.graphql.ts +83 -0
  174. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +55 -0
  175. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +171 -0
  176. package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +62 -0
  177. package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +48 -0
  178. package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +115 -0
  179. package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +34 -0
  180. package/src/app/routes/_authenticated/_system/healthchecks.tsx +93 -0
  181. package/src/app/routes/_authenticated/_system/job-queue.graphql.ts +43 -0
  182. package/src/app/routes/_authenticated/_system/job-queue.tsx +161 -0
  183. package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +63 -0
  184. package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +65 -0
  185. package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +115 -0
  186. package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +75 -0
  187. package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +108 -0
  188. package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +148 -0
  189. package/src/app/routes/_authenticated/_zones/components/zone-countries-add.tsx +0 -0
  190. package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +31 -0
  191. package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +79 -0
  192. package/src/app/routes/_authenticated/_zones/zones.graphql.ts +96 -0
  193. package/src/app/routes/_authenticated/_zones/zones.tsx +57 -0
  194. package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +103 -0
  195. package/src/app/routes/_authenticated/index.tsx +194 -0
  196. package/src/app/routes/_authenticated.tsx +25 -0
  197. package/src/app/routes/login.tsx +48 -0
  198. package/src/app/styles.css +82 -0
  199. package/src/app/tailwindcss-animate.css +275 -0
  200. package/src/i18n/locales/de.po +1579 -0
  201. package/src/i18n/locales/en.po +1579 -0
  202. package/src/lib/components/data-display/boolean.tsx +23 -0
  203. package/src/lib/components/data-display/date-time.tsx +13 -0
  204. package/src/lib/components/data-display/json.tsx +5 -0
  205. package/src/lib/components/data-display/money.tsx +15 -0
  206. package/src/lib/components/data-input/affixed-input.tsx +49 -0
  207. package/src/lib/components/data-input/customer-group-input.tsx +72 -0
  208. package/src/lib/components/data-input/datetime-input.tsx +150 -0
  209. package/src/lib/components/data-input/facet-value-input.tsx +68 -0
  210. package/src/lib/components/data-input/money-input.tsx +112 -0
  211. package/src/lib/components/data-input/richt-text-input.tsx +99 -0
  212. package/src/lib/components/data-table/data-table-column-header.tsx +73 -0
  213. package/src/lib/components/data-table/data-table-faceted-filter.tsx +172 -0
  214. package/src/lib/components/data-table/data-table-filter-dialog.tsx +73 -0
  215. package/src/lib/components/data-table/data-table-pagination.tsx +87 -0
  216. package/src/lib/components/data-table/data-table-view-options.tsx +53 -0
  217. package/src/lib/components/data-table/data-table.tsx +218 -0
  218. package/src/lib/components/layout/app-layout.tsx +42 -0
  219. package/src/lib/components/layout/app-sidebar.tsx +34 -0
  220. package/src/lib/components/layout/channel-switcher.tsx +87 -0
  221. package/src/lib/components/layout/content-language-selector.tsx +41 -0
  222. package/src/lib/components/layout/generated-breadcrumbs.tsx +82 -0
  223. package/src/lib/components/layout/language-dialog.tsx +104 -0
  224. package/src/lib/components/layout/nav-main.tsx +178 -0
  225. package/src/lib/components/layout/nav-projects.tsx +81 -0
  226. package/src/lib/components/layout/nav-user.tsx +176 -0
  227. package/src/lib/components/layout/prerelease-popup.tsx +38 -0
  228. package/src/lib/components/login/login-form.tsx +173 -0
  229. package/src/lib/components/shared/alerts.tsx +20 -0
  230. package/src/lib/components/shared/animated-number.tsx +49 -0
  231. package/src/lib/components/shared/asset-gallery.tsx +433 -0
  232. package/src/lib/components/shared/asset-picker-dialog.tsx +72 -0
  233. package/src/lib/components/shared/asset-preview-dialog.tsx +48 -0
  234. package/src/lib/components/shared/asset-preview.tsx +345 -0
  235. package/src/lib/components/shared/assigned-facet-values.tsx +68 -0
  236. package/src/lib/components/shared/channel-code-label.tsx +7 -0
  237. package/src/lib/components/shared/channel-selector.tsx +51 -0
  238. package/src/lib/components/shared/configurable-operation-arg-input.tsx +51 -0
  239. package/src/lib/components/shared/configurable-operation-input.tsx +133 -0
  240. package/src/lib/components/shared/confirmation-dialog.tsx +58 -0
  241. package/src/lib/components/shared/copyable-text.tsx +31 -0
  242. package/src/lib/components/shared/country-selector.tsx +105 -0
  243. package/src/lib/components/shared/currency-selector.tsx +33 -0
  244. package/src/lib/components/shared/custom-fields-form.tsx +86 -0
  245. package/src/lib/components/shared/customer-address-form.tsx +330 -0
  246. package/src/lib/components/shared/customer-group-chip.tsx +30 -0
  247. package/src/lib/components/shared/customer-group-selector.tsx +62 -0
  248. package/src/lib/components/shared/customer-selector.tsx +107 -0
  249. package/src/lib/components/shared/detail-page-button.tsx +22 -0
  250. package/src/lib/components/shared/entity-assets.tsx +340 -0
  251. package/src/lib/components/shared/error-page.tsx +31 -0
  252. package/src/lib/components/shared/facet-value-chip.tsx +45 -0
  253. package/src/lib/components/shared/facet-value-selector.tsx +306 -0
  254. package/src/lib/components/shared/focal-point-control.tsx +65 -0
  255. package/src/lib/components/shared/form-field-wrapper.tsx +37 -0
  256. package/src/lib/components/shared/history-timeline/history-entry.tsx +112 -0
  257. package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +28 -0
  258. package/src/lib/components/shared/history-timeline/history-note-editor.tsx +60 -0
  259. package/src/lib/components/shared/history-timeline/history-note-input.tsx +39 -0
  260. package/src/lib/components/shared/history-timeline/history-timeline.tsx +56 -0
  261. package/src/lib/components/shared/icon-mark.tsx +18 -0
  262. package/src/lib/components/shared/language-selector.tsx +48 -0
  263. package/src/lib/components/shared/logo-mark.tsx +24 -0
  264. package/src/lib/components/shared/multi-select.tsx +159 -0
  265. package/src/lib/components/shared/option-value-input.tsx +95 -0
  266. package/src/lib/components/shared/paginated-list-data-table.tsx +520 -0
  267. package/src/lib/components/shared/permission-guard.tsx +21 -0
  268. package/src/lib/components/shared/rich-text-editor.tsx +0 -0
  269. package/src/lib/components/shared/role-code-label.tsx +8 -0
  270. package/src/lib/components/shared/role-selector.tsx +56 -0
  271. package/src/lib/components/shared/seller-selector.tsx +107 -0
  272. package/src/lib/components/shared/tax-category-selector.tsx +65 -0
  273. package/src/lib/components/shared/translatable-form-field.tsx +74 -0
  274. package/src/lib/components/shared/vendure-image.tsx +159 -0
  275. package/src/lib/components/shared/zone-selector.tsx +66 -0
  276. package/src/lib/components/ui/accordion.tsx +59 -0
  277. package/src/lib/components/ui/alert-dialog.tsx +128 -0
  278. package/src/lib/components/ui/alert.tsx +60 -0
  279. package/src/lib/components/ui/avatar.tsx +38 -0
  280. package/src/lib/components/ui/badge.tsx +38 -0
  281. package/src/lib/components/ui/breadcrumb.tsx +102 -0
  282. package/src/lib/components/ui/button.tsx +51 -0
  283. package/src/lib/components/ui/calendar.tsx +69 -0
  284. package/src/lib/components/ui/card.tsx +47 -0
  285. package/src/lib/components/ui/checkbox.tsx +27 -0
  286. package/src/lib/components/ui/collapsible.tsx +33 -0
  287. package/src/lib/components/ui/command.tsx +133 -0
  288. package/src/lib/components/ui/dialog.tsx +116 -0
  289. package/src/lib/components/ui/dropdown-menu.tsx +220 -0
  290. package/src/lib/components/ui/form.tsx +141 -0
  291. package/src/lib/components/ui/hover-card.tsx +36 -0
  292. package/src/lib/components/ui/input.tsx +19 -0
  293. package/src/lib/components/ui/label.tsx +21 -0
  294. package/src/lib/components/ui/pagination.tsx +127 -0
  295. package/src/lib/components/ui/popover.tsx +40 -0
  296. package/src/lib/components/ui/scroll-area.tsx +50 -0
  297. package/src/lib/components/ui/select.tsx +161 -0
  298. package/src/lib/components/ui/separator.tsx +26 -0
  299. package/src/lib/components/ui/sheet.tsx +118 -0
  300. package/src/lib/components/ui/sidebar.tsx +696 -0
  301. package/src/lib/components/ui/skeleton.tsx +13 -0
  302. package/src/lib/components/ui/sonner.tsx +27 -0
  303. package/src/lib/components/ui/switch.tsx +26 -0
  304. package/src/lib/components/ui/table.tsx +82 -0
  305. package/src/lib/components/ui/tabs.tsx +48 -0
  306. package/src/lib/components/ui/textarea.tsx +18 -0
  307. package/src/lib/components/ui/tooltip.tsx +51 -0
  308. package/src/lib/constants.ts +326 -0
  309. package/src/lib/framework/component-registry/component-registry.tsx +70 -0
  310. package/src/lib/framework/component-registry/dynamic-component.tsx +58 -0
  311. package/src/lib/framework/dashboard-widget/base-widget.tsx +97 -0
  312. package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +96 -0
  313. package/src/lib/framework/dashboard-widget/latest-orders-widget/latest-orders-widget.graphql.ts +35 -0
  314. package/src/lib/framework/dashboard-widget/metrics-widget/chart.tsx +24 -0
  315. package/src/lib/framework/dashboard-widget/metrics-widget/index.tsx +82 -0
  316. package/src/lib/framework/dashboard-widget/metrics-widget/metrics-widget.graphql.ts +14 -0
  317. package/src/lib/framework/dashboard-widget/orders-summary/index.tsx +167 -0
  318. package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +14 -0
  319. package/src/lib/framework/dashboard-widget/types.ts +22 -0
  320. package/src/lib/framework/dashboard-widget/widget-extensions.tsx +19 -0
  321. package/src/lib/framework/defaults.ts +219 -0
  322. package/src/lib/framework/document-introspection/add-custom-fields.spec.ts +242 -0
  323. package/src/lib/framework/document-introspection/add-custom-fields.ts +246 -0
  324. package/src/lib/framework/document-introspection/get-document-structure.spec.ts +310 -0
  325. package/src/lib/framework/document-introspection/get-document-structure.ts +460 -0
  326. package/src/lib/framework/document-introspection/hooks.ts +10 -0
  327. package/src/lib/framework/extension-api/define-dashboard-extension.ts +66 -0
  328. package/src/lib/framework/extension-api/extension-api-types.ts +58 -0
  329. package/src/lib/framework/extension-api/use-dashboard-extensions.ts +26 -0
  330. package/src/lib/framework/form-engine/form-schema-tools.ts +98 -0
  331. package/src/lib/framework/form-engine/use-generated-form.tsx +116 -0
  332. package/src/lib/framework/layout-engine/layout-extensions.ts +30 -0
  333. package/src/lib/framework/layout-engine/location-wrapper.tsx +96 -0
  334. package/src/lib/framework/layout-engine/page-layout.tsx +272 -0
  335. package/src/lib/framework/nav-menu/nav-menu-extensions.ts +66 -0
  336. package/src/lib/framework/page/detail-page-route-loader.tsx +48 -0
  337. package/src/lib/framework/page/detail-page.tsx +131 -0
  338. package/src/lib/framework/page/list-page.tsx +166 -0
  339. package/src/lib/framework/page/page-api.ts +9 -0
  340. package/src/lib/framework/page/page-types.ts +51 -0
  341. package/src/lib/framework/page/use-detail-page.ts +217 -0
  342. package/src/lib/framework/page/use-extended-router.tsx +69 -0
  343. package/src/lib/framework/registry/global-registry.ts +46 -0
  344. package/src/lib/framework/registry/registry-types.ts +15 -0
  345. package/src/lib/graphql/api.ts +61 -0
  346. package/src/lib/graphql/fragments.tsx +54 -0
  347. package/src/lib/graphql/graphql-env.d.ts +499 -0
  348. package/src/lib/graphql/graphql.ts +15 -0
  349. package/src/lib/hooks/use-auth.tsx +11 -0
  350. package/src/lib/hooks/use-channel.ts +12 -0
  351. package/src/lib/hooks/use-custom-field-config.ts +10 -0
  352. package/src/lib/hooks/use-grouped-permissions.ts +54 -0
  353. package/src/lib/hooks/use-local-format.ts +119 -0
  354. package/src/lib/hooks/use-mobile.ts +19 -0
  355. package/src/lib/hooks/use-page.tsx +11 -0
  356. package/src/lib/hooks/use-permissions.ts +22 -0
  357. package/src/lib/hooks/use-server-config.ts +4 -0
  358. package/src/lib/hooks/use-theme.ts +10 -0
  359. package/src/lib/hooks/use-user-settings.tsx +12 -0
  360. package/src/lib/index.ts +149 -0
  361. package/src/lib/lib/trans.tsx +16 -0
  362. package/src/lib/lib/utils.ts +60 -0
  363. package/src/lib/providers/auth.tsx +152 -0
  364. package/src/lib/providers/channel-provider.tsx +121 -0
  365. package/src/lib/providers/i18n-provider.tsx +28 -0
  366. package/src/lib/providers/server-config.tsx +279 -0
  367. package/src/lib/providers/theme-provider.tsx +54 -0
  368. package/src/lib/providers/user-settings.tsx +89 -0
  369. package/src/lib/virtual.d.ts +12 -0
  370. package/vite/config-loader.ts +181 -0
  371. package/vite/constants.ts +280 -0
  372. package/vite/index.ts +1 -0
  373. package/vite/schema-generator.ts +40 -0
  374. package/vite/ui-config.ts +60 -0
  375. package/vite/vite-plugin-admin-api-schema.ts +141 -0
  376. package/vite/vite-plugin-config-loader.ts +64 -0
  377. package/vite/vite-plugin-config.ts +42 -0
  378. package/vite/vite-plugin-dashboard-metadata.ts +58 -0
  379. package/vite/vite-plugin-gql-tada.ts +62 -0
  380. package/vite/vite-plugin-theme.ts +195 -0
  381. package/vite/vite-plugin-ui-config.ts +60 -0
  382. package/vite/vite-plugin-vendure-dashboard.ts +118 -0
@@ -0,0 +1,38 @@
1
+ import path from 'path';
2
+ export function viteConfigPlugin({ packageRoot }) {
3
+ return {
4
+ name: 'vendure:vite-config-plugin',
5
+ config: (config) => {
6
+ var _a, _b;
7
+ config.root = packageRoot;
8
+ config.resolve = {
9
+ alias: {
10
+ '@': path.resolve(packageRoot, './src/lib'),
11
+ },
12
+ };
13
+ // This is required to prevent Vite from pre-bundling the
14
+ // dashboard source when it resides in node_modules.
15
+ config.optimizeDeps = Object.assign(Object.assign({}, config.optimizeDeps), { exclude: [
16
+ ...(((_a = config.optimizeDeps) === null || _a === void 0 ? void 0 : _a.exclude) || []),
17
+ '@vendure/dashboard',
18
+ '@/providers',
19
+ '@/framework',
20
+ '@/lib',
21
+ '@/components',
22
+ '@/hooks',
23
+ 'virtual:vendure-ui-config',
24
+ 'virtual:admin-api-schema',
25
+ 'virtual:dashboard-extensions',
26
+ ],
27
+ // We however do want to pre-bundle recharts, as it depends
28
+ // on lodash which is a CJS packages and _does_ require
29
+ // pre-bundling.
30
+ include: [
31
+ ...(((_b = config.optimizeDeps) === null || _b === void 0 ? void 0 : _b.include) || []),
32
+ '@/components > recharts',
33
+ '@/components > react-dropzone',
34
+ ] });
35
+ return config;
36
+ },
37
+ };
38
+ }
@@ -0,0 +1,9 @@
1
+ import { Plugin } from 'vite';
2
+ /**
3
+ * This Vite plugin scans the configured plugins for any dashboard extensions and dynamically
4
+ * generates an import statement for each one, wrapped up in a `runDashboardExtensions()`
5
+ * function which can then be imported and executed in the Dashboard app.
6
+ */
7
+ export declare function dashboardMetadataPlugin(options: {
8
+ rootDir: string;
9
+ }): Plugin;
@@ -0,0 +1,52 @@
1
+ import { getPluginDashboardExtensions } from '@vendure/core';
2
+ import path from 'path';
3
+ import { getConfigLoaderApi } from './vite-plugin-config-loader.js';
4
+ const virtualModuleId = 'virtual:dashboard-extensions';
5
+ const resolvedVirtualModuleId = `\0${virtualModuleId}`;
6
+ /**
7
+ * This Vite plugin scans the configured plugins for any dashboard extensions and dynamically
8
+ * generates an import statement for each one, wrapped up in a `runDashboardExtensions()`
9
+ * function which can then be imported and executed in the Dashboard app.
10
+ */
11
+ export function dashboardMetadataPlugin(options) {
12
+ let configLoaderApi;
13
+ let vendureConfig;
14
+ return {
15
+ name: 'vendure:dashboard-extensions-metadata',
16
+ configResolved({ plugins }) {
17
+ configLoaderApi = getConfigLoaderApi(plugins);
18
+ },
19
+ resolveId(id) {
20
+ if (id === virtualModuleId) {
21
+ return resolvedVirtualModuleId;
22
+ }
23
+ },
24
+ async load(id) {
25
+ var _a;
26
+ if (id === resolvedVirtualModuleId) {
27
+ if (!vendureConfig) {
28
+ vendureConfig = await configLoaderApi.getVendureConfig();
29
+ }
30
+ const extensions = getPluginDashboardExtensions((_a = vendureConfig.plugins) !== null && _a !== void 0 ? _a : []);
31
+ const extensionData = extensions.map(extension => {
32
+ const providedPath = typeof extension === 'string' ? extension : extension.location;
33
+ const jsPath = normalizeImportPath(options.rootDir, providedPath);
34
+ return { importPath: `./${jsPath}` };
35
+ });
36
+ this.info(`Found ${extensionData.length} Dashboard extensions`);
37
+ return `
38
+ export async function runDashboardExtensions() {
39
+ ${extensionData.map(extension => `await import('${extension.importPath}');`).join('\n')}
40
+ }
41
+ `;
42
+ }
43
+ },
44
+ };
45
+ }
46
+ /**
47
+ * Converts an import path to a normalized path relative to the rootDir.
48
+ */
49
+ function normalizeImportPath(rootDir, importPath) {
50
+ const relativePath = path.relative(rootDir, importPath).replace(/\\/g, '/');
51
+ return relativePath.replace(/\.tsx?$/, '.js');
52
+ }
@@ -0,0 +1,6 @@
1
+ import { Plugin } from 'vite';
2
+ export declare function gqlTadaPlugin(options: {
3
+ gqlTadaOutputPath: string;
4
+ tempDir: string;
5
+ packageRoot: string;
6
+ }): Plugin;
@@ -0,0 +1,51 @@
1
+ import { generateOutput } from '@gql.tada/cli-utils';
2
+ import * as fs from 'fs/promises';
3
+ import { printSchema } from 'graphql';
4
+ import * as path from 'path';
5
+ import { generateSchema } from './schema-generator.js';
6
+ import { getConfigLoaderApi } from './vite-plugin-config-loader.js';
7
+ export function gqlTadaPlugin(options) {
8
+ let configLoaderApi;
9
+ return {
10
+ name: 'vendure:gql-tada',
11
+ configResolved({ plugins }) {
12
+ configLoaderApi = getConfigLoaderApi(plugins);
13
+ },
14
+ async buildStart() {
15
+ const vendureConfig = await configLoaderApi.getVendureConfig();
16
+ const safeSchema = await generateSchema({ vendureConfig });
17
+ const tsConfigContent = {
18
+ compilerOptions: {
19
+ plugins: [
20
+ {
21
+ name: 'gql.tada/ts-plugin',
22
+ schema: './schema.graphql',
23
+ },
24
+ ],
25
+ },
26
+ };
27
+ const tsConfigPath = path.join(options.tempDir, 'tsconfig.json');
28
+ await fs.writeFile(tsConfigPath, JSON.stringify(tsConfigContent, null, 2));
29
+ const schemaPath = path.join(options.tempDir, 'schema.graphql');
30
+ await fs.writeFile(schemaPath, printSchema(safeSchema));
31
+ await generateOutput({
32
+ output: path.join(options.gqlTadaOutputPath, 'graphql-env.d.ts'),
33
+ tsconfig: tsConfigPath,
34
+ });
35
+ // Copy the graphql.ts file to the output path
36
+ const graphqlTsPath = path.join(options.packageRoot, 'src/lib/graphql/graphql.ts');
37
+ try {
38
+ await fs.copyFile(graphqlTsPath, path.join(options.gqlTadaOutputPath, 'graphql.ts'));
39
+ }
40
+ catch (error) {
41
+ if (error instanceof Error) {
42
+ this.error(error.message);
43
+ }
44
+ else {
45
+ this.error('Failed to copy graphql.ts file');
46
+ }
47
+ }
48
+ this.info('graphql introspection files output to ' + options.gqlTadaOutputPath);
49
+ },
50
+ };
51
+ }
@@ -0,0 +1,4 @@
1
+ import { Plugin } from 'vite';
2
+ export declare function setRootPlugin({ packageRoot }: {
3
+ packageRoot: string;
4
+ }): Plugin;
@@ -0,0 +1,15 @@
1
+ import path from 'path';
2
+ export function setRootPlugin({ packageRoot }) {
3
+ return {
4
+ name: 'vendure:set-root-plugin',
5
+ config: (config) => {
6
+ config.root = packageRoot;
7
+ config.resolve = {
8
+ alias: {
9
+ '@': path.resolve(packageRoot, './src/lib'),
10
+ },
11
+ };
12
+ return config;
13
+ },
14
+ };
15
+ }
@@ -0,0 +1,15 @@
1
+ import { AdminUiConfig } from '@vendure/core';
2
+ import { Plugin } from 'vite';
3
+ export type UiConfigPluginOptions = {
4
+ /**
5
+ * @description
6
+ * The admin UI config to be passed to the Vendure Dashboard.
7
+ */
8
+ adminUiConfig?: Partial<AdminUiConfig>;
9
+ };
10
+ /**
11
+ * This Vite plugin scans the configured plugins for any dashboard extensions and dynamically
12
+ * generates an import statement for each one, wrapped up in a `runDashboardExtensions()`
13
+ * function which can then be imported and executed in the Dashboard app.
14
+ */
15
+ export declare function uiConfigPlugin({ adminUiConfig }: UiConfigPluginOptions): Plugin;
@@ -0,0 +1,43 @@
1
+ import path from 'path';
2
+ import { getAdminUiConfig } from './ui-config.js';
3
+ import { getConfigLoaderApi } from './vite-plugin-config-loader.js';
4
+ const virtualModuleId = 'virtual:vendure-ui-config';
5
+ const resolvedVirtualModuleId = `\0${virtualModuleId}`;
6
+ /**
7
+ * This Vite plugin scans the configured plugins for any dashboard extensions and dynamically
8
+ * generates an import statement for each one, wrapped up in a `runDashboardExtensions()`
9
+ * function which can then be imported and executed in the Dashboard app.
10
+ */
11
+ export function uiConfigPlugin({ adminUiConfig }) {
12
+ let configLoaderApi;
13
+ let vendureConfig;
14
+ return {
15
+ name: 'vendure:dashboard-ui-config',
16
+ configResolved({ plugins }) {
17
+ configLoaderApi = getConfigLoaderApi(plugins);
18
+ },
19
+ resolveId(id) {
20
+ if (id === virtualModuleId) {
21
+ return resolvedVirtualModuleId;
22
+ }
23
+ },
24
+ async load(id) {
25
+ if (id === resolvedVirtualModuleId) {
26
+ if (!vendureConfig) {
27
+ vendureConfig = await configLoaderApi.getVendureConfig();
28
+ }
29
+ const config = getAdminUiConfig(vendureConfig, adminUiConfig);
30
+ return `
31
+ export const uiConfig = ${JSON.stringify(config)}
32
+ `;
33
+ }
34
+ },
35
+ };
36
+ }
37
+ /**
38
+ * Converts an import path to a normalized path relative to the rootDir.
39
+ */
40
+ function normalizeImportPath(rootDir, importPath) {
41
+ const relativePath = path.relative(rootDir, importPath).replace(/\\/g, '/');
42
+ return relativePath.replace(/\.tsx?$/, '.js');
43
+ }
@@ -0,0 +1,35 @@
1
+ import { PluginOption } from 'vite';
2
+ import { UiConfigPluginOptions } from './vite-plugin-ui-config.js';
3
+ /**
4
+ * @description
5
+ * Options for the {@link vendureDashboardPlugin} Vite plugin.
6
+ */
7
+ export type VitePluginVendureDashboardOptions = {
8
+ /**
9
+ * @description
10
+ * The path to the Vendure server configuration file.
11
+ */
12
+ vendureConfigPath: string | URL;
13
+ /**
14
+ * @description
15
+ * The name of the exported variable from the Vendure server configuration file.
16
+ * This is only required if the plugin is unable to auto-detect the name of the exported variable.
17
+ */
18
+ vendureConfigExport?: string;
19
+ /**
20
+ * @description
21
+ * The path to the directory where the generated GraphQL Tada files will be output.
22
+ */
23
+ gqlTadaOutputPath?: string;
24
+ tempCompilationDir?: string;
25
+ disableTansStackRouterPlugin?: boolean;
26
+ } & UiConfigPluginOptions;
27
+ /**
28
+ * @description
29
+ * This is a Vite plugin which configures a set of plugins required to build the Vendure Dashboard.
30
+ */
31
+ export declare function vendureDashboardPlugin(options: VitePluginVendureDashboardOptions): PluginOption[];
32
+ /**
33
+ * Get the normalized path to the Vendure config file given either a string or URL.
34
+ */
35
+ export declare function getNormalizedVendureConfigPath(vendureConfigPath: string | URL): string;
@@ -0,0 +1,81 @@
1
+ import tailwindcss from '@tailwindcss/vite';
2
+ import { TanStackRouterVite } from '@tanstack/router-plugin/vite';
3
+ import react from '@vitejs/plugin-react';
4
+ import path from 'path';
5
+ import { adminApiSchemaPlugin } from './vite-plugin-admin-api-schema.js';
6
+ import { configLoaderPlugin } from './vite-plugin-config-loader.js';
7
+ import { viteConfigPlugin } from './vite-plugin-config.js';
8
+ import { dashboardMetadataPlugin } from './vite-plugin-dashboard-metadata.js';
9
+ import { gqlTadaPlugin } from './vite-plugin-gql-tada.js';
10
+ import { uiConfigPlugin } from './vite-plugin-ui-config.js';
11
+ /**
12
+ * @description
13
+ * This is a Vite plugin which configures a set of plugins required to build the Vendure Dashboard.
14
+ */
15
+ export function vendureDashboardPlugin(options) {
16
+ var _a;
17
+ const tempDir = (_a = options.tempCompilationDir) !== null && _a !== void 0 ? _a : path.join(import.meta.dirname, './.vendure-dashboard-temp');
18
+ const normalizedVendureConfigPath = getNormalizedVendureConfigPath(options.vendureConfigPath);
19
+ const packageRoot = getDashboardPackageRoot();
20
+ const linguiConfigPath = path.join(packageRoot, 'lingui.config.js');
21
+ if (process.env.IS_LOCAL_DEV !== 'true') {
22
+ process.env.LINGUI_CONFIG = linguiConfigPath;
23
+ }
24
+ return [
25
+ // TODO: solve https://github.com/kentcdodds/babel-plugin-macros/issues/87
26
+ // lingui(),
27
+ ...(options.disableTansStackRouterPlugin
28
+ ? []
29
+ : [
30
+ TanStackRouterVite({
31
+ autoCodeSplitting: true,
32
+ routeFileIgnorePattern: '.graphql.ts|components',
33
+ routesDirectory: path.join(packageRoot, 'src/app/routes'),
34
+ generatedRouteTree: path.join(packageRoot, 'src/app/routeTree.gen.ts'),
35
+ }),
36
+ ]),
37
+ react({
38
+ // babel: {
39
+ // plugins: ['@lingui/babel-plugin-lingui-macro'],
40
+ // },
41
+ }),
42
+ tailwindcss(),
43
+ configLoaderPlugin({ vendureConfigPath: normalizedVendureConfigPath, tempDir }),
44
+ viteConfigPlugin({ packageRoot }),
45
+ adminApiSchemaPlugin(),
46
+ dashboardMetadataPlugin({ rootDir: tempDir }),
47
+ uiConfigPlugin({ adminUiConfig: options.adminUiConfig }),
48
+ ...(options.gqlTadaOutputPath
49
+ ? [gqlTadaPlugin({ gqlTadaOutputPath: options.gqlTadaOutputPath, tempDir, packageRoot })]
50
+ : []),
51
+ ];
52
+ }
53
+ /**
54
+ * @description
55
+ * Returns the path to the root of the `@vendure/dashboard` package.
56
+ */
57
+ function getDashboardPackageRoot() {
58
+ const fileUrl = import.meta.resolve('@vendure/dashboard');
59
+ const packagePath = fileUrl.startsWith('file:') ? new URL(fileUrl).pathname : fileUrl;
60
+ return fixWindowsPath(path.join(packagePath, '../../../'));
61
+ }
62
+ /**
63
+ * Get the normalized path to the Vendure config file given either a string or URL.
64
+ */
65
+ export function getNormalizedVendureConfigPath(vendureConfigPath) {
66
+ const stringPath = typeof vendureConfigPath === 'string' ? vendureConfigPath : vendureConfigPath.href;
67
+ if (stringPath.startsWith('file:')) {
68
+ return fixWindowsPath(new URL(stringPath).pathname);
69
+ }
70
+ return fixWindowsPath(stringPath);
71
+ }
72
+ function fixWindowsPath(filePath) {
73
+ // Fix Windows paths that might start with a leading slash
74
+ if (process.platform === 'win32') {
75
+ // Remove leading slash before drive letter on Windows
76
+ if (/^[/\\][A-Za-z]:/.test(filePath)) {
77
+ return filePath.substring(1);
78
+ }
79
+ }
80
+ return filePath;
81
+ }
package/index.html ADDED
@@ -0,0 +1,15 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/favicon.png" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <meta name="description" content="Vendure Admin Dashboard" />
8
+ <meta name="author" content="Vendure" />
9
+ <title>Vendure Admin Dashboard</title>
10
+ </head>
11
+ <body>
12
+ <div id="app"></div>
13
+ <script type="module" src="/src/app/main.jsx"></script>
14
+ </body>
15
+ </html>
@@ -0,0 +1,12 @@
1
+ import { defineConfig } from '@lingui/cli';
2
+
3
+ export default defineConfig({
4
+ sourceLocale: 'en',
5
+ locales: ['de', 'en'],
6
+ catalogs: [
7
+ {
8
+ path: '<rootDir>/src/i18n/locales/{locale}',
9
+ include: ['<rootDir>'],
10
+ },
11
+ ],
12
+ });
package/package.json ADDED
@@ -0,0 +1,118 @@
1
+ {
2
+ "name": "@vendure/dashboard",
3
+ "private": false,
4
+ "version": "3.2.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build:lib": "vite build --config vite.config.lib.mts",
9
+ "build:plugin": "tsc --project tsconfig.plugin.json",
10
+ "watch:plugin": "tsc --project tsconfig.plugin.json --watch",
11
+ "test": "vitest run",
12
+ "lint": "eslint .",
13
+ "preview": "vite preview",
14
+ "generate-index": "node ./generate-index.js"
15
+ },
16
+ "module": "./src/lib/index.ts",
17
+ "main": "./src/lib/index.ts",
18
+ "types": "./src/lib/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./src/lib/index.d.ts",
22
+ "import": "./src/lib/index.ts",
23
+ "require": "./src/lib/index.ts"
24
+ },
25
+ "./plugin": {
26
+ "types": "./dist/plugin/index.d.ts",
27
+ "import": "./dist/plugin/index.js",
28
+ "require": "./dist/plugin/index.js"
29
+ }
30
+ },
31
+ "files": [
32
+ "dist",
33
+ "src",
34
+ "vite",
35
+ "lingui.config.js",
36
+ "index.html"
37
+ ],
38
+ "dependencies": {
39
+ "@dnd-kit/core": "^6.3.1",
40
+ "@dnd-kit/sortable": "^10.0.0",
41
+ "@hookform/resolvers": "^4.1.3",
42
+ "@lingui/babel-plugin-lingui-macro": "^5.2.0",
43
+ "@lingui/cli": "^5.2.0",
44
+ "@lingui/core": "^5.2.0",
45
+ "@lingui/react": "^5.2.0",
46
+ "@lingui/vite-plugin": "^5.2.0",
47
+ "@radix-ui/react-accordion": "^1.2.3",
48
+ "@radix-ui/react-alert-dialog": "^1.1.6",
49
+ "@radix-ui/react-avatar": "^1.1.3",
50
+ "@radix-ui/react-checkbox": "^1.1.4",
51
+ "@radix-ui/react-collapsible": "^1.1.3",
52
+ "@radix-ui/react-dialog": "^1.1.6",
53
+ "@radix-ui/react-dropdown-menu": "^2.1.6",
54
+ "@radix-ui/react-hover-card": "^1.1.6",
55
+ "@radix-ui/react-label": "^2.1.2",
56
+ "@radix-ui/react-popover": "^1.1.6",
57
+ "@radix-ui/react-scroll-area": "^1.2.3",
58
+ "@radix-ui/react-select": "^2.1.6",
59
+ "@radix-ui/react-separator": "^1.1.2",
60
+ "@radix-ui/react-slot": "^1.1.2",
61
+ "@radix-ui/react-switch": "^1.1.3",
62
+ "@radix-ui/react-tabs": "^1.1.3",
63
+ "@radix-ui/react-tooltip": "^1.1.8",
64
+ "@tailwindcss/vite": "^4.0.7",
65
+ "@tanstack/eslint-plugin-query": "^5.66.1",
66
+ "@tanstack/react-query": "^5.66.7",
67
+ "@tanstack/react-query-devtools": "^5.68.0",
68
+ "@tanstack/react-router": "^1.105.0",
69
+ "@tanstack/react-table": "^8.21.2",
70
+ "@tanstack/router-devtools": "^1.105.0",
71
+ "@tanstack/router-plugin": "^1.105.0",
72
+ "@tiptap/pm": "^2.11.5",
73
+ "@tiptap/react": "^2.11.5",
74
+ "@tiptap/starter-kit": "^2.11.5",
75
+ "@types/react": "^19.0.10",
76
+ "@types/react-dom": "^19.0.4",
77
+ "@types/react-grid-layout": "^1.3.5",
78
+ "@uidotdev/usehooks": "^2.4.1",
79
+ "@vitejs/plugin-react": "^4.3.4",
80
+ "awesome-graphql-client": "^2.1.0",
81
+ "class-variance-authority": "^0.7.1",
82
+ "clsx": "^2.1.1",
83
+ "cmdk": "^1.0.0",
84
+ "date-fns": "^3.6.0",
85
+ "gql.tada": "^1.8.10",
86
+ "graphql": "^16.10.0",
87
+ "json-edit-react": "^1.23.1",
88
+ "lucide-react": "^0.475.0",
89
+ "motion": "^12.6.2",
90
+ "next-themes": "^0.4.6",
91
+ "react": "^19.0.0",
92
+ "react-day-picker": "^8.10.1",
93
+ "react-dom": "^19.0.0",
94
+ "react-dropzone": "^14.3.8",
95
+ "react-grid-layout": "^1.5.1",
96
+ "react-hook-form": "^7.54.2",
97
+ "recharts": "^2.15.1",
98
+ "sonner": "^2.0.1",
99
+ "tailwind-merge": "^3.0.1",
100
+ "tailwindcss": "^4.0.6",
101
+ "tailwindcss-animate": "^1.0.7",
102
+ "tw-animate-css": "^1.2.4",
103
+ "unplugin-swc": "^1.5.1",
104
+ "vite": "^6.1.0",
105
+ "zod": "^3.24.2"
106
+ },
107
+ "devDependencies": {
108
+ "@eslint/js": "^9.19.0",
109
+ "@types/node": "^22.13.4",
110
+ "eslint": "^9.19.0",
111
+ "eslint-plugin-react": "^7.37.4",
112
+ "eslint-plugin-react-hooks": "^5.0.0",
113
+ "eslint-plugin-react-refresh": "^0.4.18",
114
+ "globals": "^15.14.0",
115
+ "vite-plugin-dts": "^4.5.3"
116
+ },
117
+ "gitHead": "58c173ac0c7854ff53809d69f34a496f3eff1910"
118
+ }
@@ -0,0 +1,30 @@
1
+ import { AuthProvider } from '@/providers/auth.js';
2
+ import { ChannelProvider } from '@/providers/channel-provider.js';
3
+ import { I18nProvider } from '@/providers/i18n-provider.js';
4
+ import { ServerConfigProvider } from '@/providers/server-config.js';
5
+ import { ThemeProvider } from '@/providers/theme-provider.js';
6
+ import { UserSettingsProvider } from '@/providers/user-settings.js';
7
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
8
+ import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
9
+ import React from 'react';
10
+
11
+ export const queryClient = new QueryClient();
12
+
13
+ export function AppProviders({ children }: { children: React.ReactNode }) {
14
+ return (
15
+ <I18nProvider>
16
+ <QueryClientProvider client={queryClient}>
17
+ <ServerConfigProvider>
18
+ <UserSettingsProvider>
19
+ <ThemeProvider defaultTheme="system">
20
+ <AuthProvider>
21
+ <ChannelProvider>{children}</ChannelProvider>
22
+ </AuthProvider>
23
+ </ThemeProvider>
24
+ </UserSettingsProvider>
25
+ </ServerConfigProvider>
26
+ <ReactQueryDevtools initialIsOpen={false} buttonPosition="bottom-left" />
27
+ </QueryClientProvider>
28
+ </I18nProvider>
29
+ );
30
+ }
@@ -0,0 +1,97 @@
1
+ import { Toaster } from '@/components/ui/sonner.js';
2
+ import { setCustomFieldsMap } from '@/framework/document-introspection/add-custom-fields.js';
3
+ import { useDashboardExtensions } from '@/framework/extension-api/use-dashboard-extensions.js';
4
+ import { useExtendedRouter } from '@/framework/page/use-extended-router.js';
5
+ import { useAuth } from '@/hooks/use-auth.js';
6
+ import { useServerConfig } from '@/hooks/use-server-config.js';
7
+ import { defaultLocale, dynamicActivate } from '@/providers/i18n-provider.js';
8
+ import { createRouter, RouterProvider } from '@tanstack/react-router';
9
+ import React, { useEffect } from 'react';
10
+ import ReactDOM from 'react-dom/client';
11
+ import { registerDefaults } from '@/framework/defaults.js';
12
+ import { executeDashboardExtensionCallbacks } from '@/framework/extension-api/define-dashboard-extension.js';
13
+
14
+ import { AppProviders, queryClient } from './app-providers.js';
15
+ import { routeTree } from './routeTree.gen.js';
16
+ import './styles.css';
17
+
18
+ // Register things for typesafety
19
+ declare module '@tanstack/react-router' {
20
+ interface Register {
21
+ router: typeof router;
22
+ }
23
+ }
24
+
25
+ export const router = createRouter({
26
+ routeTree,
27
+ defaultPreload: 'intent',
28
+ scrollRestoration: true,
29
+ context: {
30
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
31
+ auth: undefined!, // This will be set after we wrap the app in an AuthProvider
32
+ queryClient,
33
+ },
34
+ defaultErrorComponent: ({ error }: { error: Error }) => <div>Uh Oh!!! {error.message}</div>,
35
+ });
36
+
37
+ function InnerApp() {
38
+ const auth = useAuth();
39
+ const extendedRouter = useExtendedRouter(router);
40
+ const serverConfig = useServerConfig();
41
+ const [hasSetCustomFieldsMap, setHasSetCustomFieldsMap] = React.useState(false);
42
+
43
+ useEffect(() => {
44
+ if (!serverConfig) {
45
+ return;
46
+ }
47
+ setCustomFieldsMap(serverConfig.entityCustomFields);
48
+ setHasSetCustomFieldsMap(true);
49
+ }, [serverConfig?.entityCustomFields]);
50
+
51
+ return (
52
+ <>
53
+ {hasSetCustomFieldsMap && (
54
+ <RouterProvider router={extendedRouter} context={{ auth, queryClient }} />
55
+ )}
56
+ </>
57
+ );
58
+ }
59
+
60
+ function App() {
61
+ const [i18nLoaded, setI18nLoaded] = React.useState(false);
62
+ const { extensionsLoaded } = useDashboardExtensions();
63
+ useEffect(() => {
64
+ // With this method we dynamically load the catalogs
65
+ dynamicActivate(defaultLocale, () => {
66
+ setI18nLoaded(true);
67
+ });
68
+ registerDefaults();
69
+ }, []);
70
+
71
+ useEffect(() => {
72
+ if (extensionsLoaded) {
73
+ executeDashboardExtensionCallbacks();
74
+ }
75
+ }, [extensionsLoaded]);
76
+
77
+ return (
78
+ i18nLoaded &&
79
+ extensionsLoaded && (
80
+ <AppProviders>
81
+ <InnerApp />
82
+ <Toaster />
83
+ </AppProviders>
84
+ )
85
+ );
86
+ }
87
+
88
+ const rootElement = document.getElementById('app')!;
89
+
90
+ if (!rootElement.innerHTML) {
91
+ const root = ReactDOM.createRoot(rootElement);
92
+ root.render(
93
+ <React.StrictMode>
94
+ <App />
95
+ </React.StrictMode>,
96
+ );
97
+ }