@vendure/dashboard 3.4.0-minor-202506250934 → 3.4.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 (523) hide show
  1. package/README.md +102 -3
  2. package/dist/plugin/api/api-extensions.d.ts +1 -0
  3. package/dist/plugin/api/api-extensions.js +38 -0
  4. package/dist/plugin/api/metrics.resolver.d.ts +8 -0
  5. package/dist/plugin/api/metrics.resolver.js +40 -0
  6. package/dist/plugin/config/metrics-strategies.d.ts +39 -0
  7. package/dist/plugin/config/metrics-strategies.js +74 -0
  8. package/dist/plugin/constants.d.ts +4 -3
  9. package/dist/plugin/constants.js +10 -277
  10. package/dist/plugin/dashboard.plugin.d.ts +95 -0
  11. package/dist/plugin/dashboard.plugin.js +168 -0
  12. package/dist/plugin/index.d.ts +2 -1
  13. package/dist/plugin/index.js +18 -1
  14. package/dist/plugin/package.json +3 -0
  15. package/dist/plugin/service/metrics.service.d.ts +15 -0
  16. package/dist/plugin/service/metrics.service.js +145 -0
  17. package/dist/plugin/types.d.ts +23 -0
  18. package/dist/plugin/types.js +13 -0
  19. package/dist/vite/constants.d.ts +5 -0
  20. package/dist/vite/constants.js +277 -0
  21. package/dist/vite/index.d.ts +1 -0
  22. package/dist/vite/index.js +1 -0
  23. package/dist/vite/types.d.ts +40 -0
  24. package/dist/{plugin → vite}/utils/ast-utils.d.ts +0 -5
  25. package/dist/vite/utils/ast-utils.js +29 -0
  26. package/dist/vite/utils/ast-utils.spec.d.ts +1 -0
  27. package/dist/vite/utils/ast-utils.spec.js +45 -0
  28. package/dist/vite/utils/compiler.d.ts +22 -0
  29. package/dist/vite/utils/compiler.js +162 -0
  30. package/dist/vite/utils/config-loader.d.ts +1 -0
  31. package/dist/vite/utils/config-loader.js +1 -0
  32. package/dist/vite/utils/logger.d.ts +3 -0
  33. package/dist/vite/utils/logger.js +39 -0
  34. package/dist/vite/utils/plugin-discovery.d.ts +27 -0
  35. package/dist/vite/utils/plugin-discovery.js +387 -0
  36. package/dist/vite/utils/tsconfig-utils.d.ts +9 -0
  37. package/dist/vite/utils/tsconfig-utils.js +50 -0
  38. package/dist/vite/utils/ui-config.d.ts +3 -0
  39. package/dist/vite/utils/ui-config.js +30 -0
  40. package/dist/{plugin → vite}/vite-plugin-config-loader.d.ts +3 -3
  41. package/dist/{plugin → vite}/vite-plugin-config-loader.js +18 -13
  42. package/dist/{plugin → vite}/vite-plugin-config.js +6 -7
  43. package/dist/{plugin → vite}/vite-plugin-dashboard-metadata.d.ts +1 -3
  44. package/dist/{plugin → vite}/vite-plugin-dashboard-metadata.js +20 -10
  45. package/dist/vite/vite-plugin-tailwind-source.d.ts +7 -0
  46. package/dist/vite/vite-plugin-tailwind-source.js +61 -0
  47. package/dist/vite/vite-plugin-theme.js +130 -0
  48. package/dist/vite/vite-plugin-ui-config.d.ts +123 -0
  49. package/dist/{plugin → vite}/vite-plugin-ui-config.js +3 -11
  50. package/dist/vite/vite-plugin-vendure-dashboard.d.ts +85 -0
  51. package/dist/{plugin → vite}/vite-plugin-vendure-dashboard.js +10 -7
  52. package/index.html +1 -1
  53. package/package.json +56 -31
  54. package/src/app/app-providers.tsx +7 -7
  55. package/src/app/common/delete-bulk-action.tsx +148 -0
  56. package/src/app/common/duplicate-bulk-action.tsx +134 -0
  57. package/src/app/main.tsx +9 -9
  58. package/src/app/routes/__root.tsx +1 -2
  59. package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +10 -1
  60. package/src/app/routes/_authenticated/_administrators/administrators.tsx +15 -8
  61. package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +16 -12
  62. package/src/app/routes/_authenticated/_administrators/components/administrator-bulk-actions.tsx +15 -0
  63. package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +16 -16
  64. package/src/app/routes/_authenticated/_assets/assets.graphql.ts +13 -2
  65. package/src/app/routes/_authenticated/_assets/assets.tsx +16 -4
  66. package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +52 -38
  67. package/src/app/routes/_authenticated/_assets/components/asset-bulk-actions.tsx +45 -0
  68. package/src/app/routes/_authenticated/_channels/channels.graphql.ts +10 -1
  69. package/src/app/routes/_authenticated/_channels/channels.tsx +17 -10
  70. package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +21 -17
  71. package/src/app/routes/_authenticated/_channels/components/channel-bulk-actions.tsx +15 -0
  72. package/src/app/routes/_authenticated/_collections/collections.graphql.ts +60 -3
  73. package/src/app/routes/_authenticated/_collections/collections.tsx +168 -124
  74. package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +21 -17
  75. package/src/app/routes/_authenticated/_collections/components/collection-bulk-actions.tsx +123 -0
  76. package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +8 -9
  77. package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +9 -5
  78. package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +10 -9
  79. package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +12 -79
  80. package/src/app/routes/_authenticated/_collections/components/move-collections-dialog.tsx +430 -0
  81. package/src/app/routes/_authenticated/_collections/components/move-single-collection.tsx +33 -0
  82. package/src/app/routes/_authenticated/_countries/components/country-bulk-actions.tsx +15 -0
  83. package/src/app/routes/_authenticated/_countries/countries.graphql.ts +11 -2
  84. package/src/app/routes/_authenticated/_countries/countries.tsx +13 -6
  85. package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +21 -17
  86. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-bulk-actions.tsx +15 -0
  87. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +12 -5
  88. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +22 -17
  89. package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +11 -2
  90. package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +13 -6
  91. package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +18 -15
  92. package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +19 -19
  93. package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +10 -10
  94. package/src/app/routes/_authenticated/_customers/components/customer-bulk-actions.tsx +15 -0
  95. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +5 -5
  96. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +11 -7
  97. package/src/app/routes/_authenticated/_customers/components/customer-history/use-customer-history.ts +4 -4
  98. package/src/app/routes/_authenticated/_customers/components/customer-order-table.tsx +75 -73
  99. package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +4 -4
  100. package/src/app/routes/_authenticated/_customers/customers.graphql.ts +10 -2
  101. package/src/app/routes/_authenticated/_customers/customers.tsx +13 -6
  102. package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +19 -15
  103. package/src/app/routes/_authenticated/_facets/components/edit-facet-value.tsx +9 -9
  104. package/src/app/routes/_authenticated/_facets/components/facet-bulk-actions.tsx +104 -0
  105. package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +4 -4
  106. package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +76 -65
  107. package/src/app/routes/_authenticated/_facets/facets.graphql.ts +80 -1
  108. package/src/app/routes/_authenticated/_facets/facets.tsx +31 -7
  109. package/src/app/routes/_authenticated/_facets/facets_.$facetId.values_.$id.tsx +147 -0
  110. package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +17 -13
  111. package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +1 -1
  112. package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +26 -18
  113. package/src/app/routes/_authenticated/_orders/components/add-manual-payment-dialog.tsx +191 -0
  114. package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +11 -15
  115. package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +111 -80
  116. package/src/app/routes/_authenticated/_orders/components/fulfill-order-dialog.tsx +320 -0
  117. package/src/app/routes/_authenticated/_orders/components/fulfillment-details.tsx +153 -0
  118. package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +11 -9
  119. package/src/app/routes/_authenticated/_orders/components/order-address.tsx +19 -13
  120. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +67 -62
  121. package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +391 -39
  122. package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +9 -5
  123. package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +28 -13
  124. package/src/app/routes/_authenticated/_orders/components/order-modification-preview-dialog.tsx +364 -0
  125. package/src/app/routes/_authenticated/_orders/components/order-modification-summary.tsx +222 -0
  126. package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +39 -22
  127. package/src/app/routes/_authenticated/_orders/components/order-table.tsx +148 -87
  128. package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +37 -36
  129. package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +274 -48
  130. package/src/app/routes/_authenticated/_orders/components/settle-refund-dialog.tsx +80 -0
  131. package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +43 -44
  132. package/src/app/routes/_authenticated/_orders/components/state-transition-control.tsx +102 -0
  133. package/src/app/routes/_authenticated/_orders/components/use-transition-order-to-state.tsx +144 -0
  134. package/src/app/routes/_authenticated/_orders/orders.graphql.ts +219 -5
  135. package/src/app/routes/_authenticated/_orders/orders.tsx +23 -22
  136. package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +190 -42
  137. package/src/app/routes/_authenticated/_orders/orders_.$id_.modify.tsx +550 -0
  138. package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +187 -107
  139. package/src/app/routes/_authenticated/_orders/utils/order-types.ts +10 -0
  140. package/src/app/routes/_authenticated/_orders/utils/order-utils.ts +78 -0
  141. package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +12 -79
  142. package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +12 -79
  143. package/src/app/routes/_authenticated/_payment-methods/components/payment-method-bulk-actions.tsx +58 -0
  144. package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +29 -2
  145. package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +36 -14
  146. package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +22 -15
  147. package/src/app/routes/_authenticated/_product-variants/components/product-variant-bulk-actions.tsx +110 -0
  148. package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +7 -6
  149. package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +64 -3
  150. package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +39 -9
  151. package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +33 -22
  152. package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +10 -10
  153. package/src/app/routes/_authenticated/_products/components/assign-facet-values-dialog.tsx +281 -0
  154. package/src/app/routes/_authenticated/_products/components/create-product-options-dialog.tsx +57 -41
  155. package/src/app/routes/_authenticated/_products/components/create-product-variants-dialog.tsx +11 -11
  156. package/src/app/routes/_authenticated/_products/components/create-product-variants.tsx +18 -14
  157. package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +23 -17
  158. package/src/app/routes/_authenticated/_products/components/product-bulk-actions.tsx +123 -0
  159. package/src/app/routes/_authenticated/_products/components/product-option-select.tsx +28 -34
  160. package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +84 -53
  161. package/src/app/routes/_authenticated/_products/products.graphql.ts +70 -2
  162. package/src/app/routes/_authenticated/_products/products.tsx +36 -7
  163. package/src/app/routes/_authenticated/_products/products_.$id.tsx +34 -26
  164. package/src/app/routes/_authenticated/_profile/profile.graphql.ts +1 -1
  165. package/src/app/routes/_authenticated/_profile/profile.tsx +8 -8
  166. package/src/app/routes/_authenticated/_promotions/components/promotion-actions-selector.tsx +14 -86
  167. package/src/app/routes/_authenticated/_promotions/components/promotion-bulk-actions.tsx +82 -0
  168. package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +14 -86
  169. package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +27 -2
  170. package/src/app/routes/_authenticated/_promotions/promotions.tsx +31 -7
  171. package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +20 -16
  172. package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +5 -5
  173. package/src/app/routes/_authenticated/_roles/components/permissions-grid.tsx +21 -17
  174. package/src/app/routes/_authenticated/_roles/components/role-bulk-actions.tsx +15 -0
  175. package/src/app/routes/_authenticated/_roles/roles.graphql.ts +10 -1
  176. package/src/app/routes/_authenticated/_roles/roles.tsx +17 -10
  177. package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +16 -12
  178. package/src/app/routes/_authenticated/_sellers/components/seller-bulk-actions.tsx +15 -0
  179. package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +10 -1
  180. package/src/app/routes/_authenticated/_sellers/sellers.tsx +13 -6
  181. package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +17 -13
  182. package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +6 -6
  183. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +12 -80
  184. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +15 -80
  185. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-bulk-actions.tsx +61 -0
  186. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-method-dialog.tsx +3 -3
  187. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.graphql.ts +29 -2
  188. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +25 -6
  189. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +25 -19
  190. package/src/app/routes/_authenticated/_stock-locations/components/stock-location-bulk-actions.tsx +58 -0
  191. package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +26 -1
  192. package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +25 -6
  193. package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +16 -12
  194. package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +5 -5
  195. package/src/app/routes/_authenticated/_system/healthchecks.tsx +5 -5
  196. package/src/app/routes/_authenticated/_system/job-queue.graphql.ts +12 -1
  197. package/src/app/routes/_authenticated/_system/job-queue.tsx +110 -11
  198. package/src/app/routes/_authenticated/_system/scheduled-tasks.tsx +34 -28
  199. package/src/app/routes/_authenticated/_tax-categories/components/tax-category-bulk-actions.tsx +15 -0
  200. package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +11 -2
  201. package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +14 -7
  202. package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +20 -16
  203. package/src/app/routes/_authenticated/_tax-rates/components/tax-rate-bulk-actions.tsx +15 -0
  204. package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +11 -2
  205. package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +15 -8
  206. package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +22 -18
  207. package/src/app/routes/_authenticated/_zones/components/zone-bulk-actions.tsx +15 -0
  208. package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +4 -4
  209. package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +12 -15
  210. package/src/app/routes/_authenticated/_zones/zones.graphql.ts +11 -2
  211. package/src/app/routes/_authenticated/_zones/zones.tsx +13 -6
  212. package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +18 -14
  213. package/src/app/routes/_authenticated/index.tsx +6 -6
  214. package/src/app/routes/_authenticated.tsx +4 -4
  215. package/src/app/routes/login.tsx +2 -2
  216. package/src/app/styles.css +5 -2
  217. package/src/lib/components/data-display/boolean.tsx +1 -1
  218. package/src/lib/components/data-display/date-time.tsx +9 -3
  219. package/src/lib/components/data-display/json.tsx +1 -1
  220. package/src/lib/components/data-display/money.tsx +2 -3
  221. package/src/lib/components/data-input/affixed-input.tsx +3 -8
  222. package/src/lib/components/data-input/combination-mode-input.tsx +52 -0
  223. package/src/lib/components/data-input/configurable-operation-list-input.tsx +433 -0
  224. package/src/lib/components/data-input/custom-field-list-input.tsx +297 -0
  225. package/src/lib/components/data-input/customer-group-input.tsx +2 -2
  226. package/src/lib/components/data-input/datetime-input.tsx +132 -146
  227. package/src/lib/components/data-input/default-relation-input.tsx +599 -0
  228. package/src/lib/components/data-input/facet-value-input.tsx +30 -22
  229. package/src/lib/components/data-input/index.ts +17 -0
  230. package/src/lib/components/data-input/money-input.tsx +5 -12
  231. package/src/lib/components/data-input/product-multi-selector.tsx +426 -0
  232. package/src/lib/components/data-input/relation-input.tsx +164 -0
  233. package/src/lib/components/data-input/relation-selector.tsx +476 -0
  234. package/src/lib/components/data-input/{richt-text-input.tsx → rich-text-input.tsx} +15 -9
  235. package/src/lib/components/data-input/select-with-options.tsx +84 -0
  236. package/src/lib/components/data-input/struct-form-input.tsx +324 -0
  237. package/src/lib/components/data-table/add-filter-menu.tsx +9 -18
  238. package/src/lib/components/data-table/data-table-bulk-action-item.tsx +101 -0
  239. package/src/lib/components/data-table/data-table-bulk-actions.tsx +108 -0
  240. package/src/lib/components/data-table/data-table-column-header.tsx +4 -22
  241. package/src/lib/components/data-table/data-table-faceted-filter.tsx +8 -8
  242. package/src/lib/components/data-table/data-table-filter-badge.tsx +16 -8
  243. package/src/lib/components/data-table/data-table-filter-dialog.tsx +8 -8
  244. package/src/lib/components/data-table/data-table-pagination.tsx +4 -4
  245. package/src/lib/components/data-table/data-table-utils.ts +34 -0
  246. package/src/lib/components/data-table/data-table-view-options.tsx +27 -23
  247. package/src/lib/components/data-table/data-table.tsx +90 -43
  248. package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +11 -8
  249. package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +14 -23
  250. package/src/lib/components/data-table/filters/data-table-id-filter.tsx +15 -10
  251. package/src/lib/components/data-table/filters/data-table-number-filter.tsx +18 -17
  252. package/src/lib/components/data-table/filters/data-table-string-filter.tsx +29 -12
  253. package/src/lib/components/data-table/human-readable-operator.tsx +3 -3
  254. package/src/lib/components/data-table/refresh-button.tsx +30 -15
  255. package/src/lib/components/data-table/use-generated-columns.tsx +322 -0
  256. package/src/lib/components/labeled-data.tsx +21 -0
  257. package/src/lib/components/layout/app-layout.tsx +8 -13
  258. package/src/lib/components/layout/app-sidebar.tsx +5 -5
  259. package/src/lib/components/layout/channel-switcher.tsx +171 -62
  260. package/src/lib/components/layout/content-language-selector.tsx +16 -10
  261. package/src/lib/components/layout/dev-mode-indicator.tsx +18 -0
  262. package/src/lib/components/layout/generated-breadcrumbs.tsx +1 -1
  263. package/src/lib/components/layout/language-dialog.tsx +7 -12
  264. package/src/lib/components/layout/manage-languages-dialog.tsx +405 -0
  265. package/src/lib/components/layout/nav-item-wrapper.tsx +107 -0
  266. package/src/lib/components/layout/nav-main.tsx +200 -111
  267. package/src/lib/components/layout/nav-projects.tsx +2 -2
  268. package/src/lib/components/layout/nav-user.tsx +7 -7
  269. package/src/lib/components/layout/prerelease-popup.tsx +1 -1
  270. package/src/lib/components/login/login-form.tsx +85 -50
  271. package/src/lib/components/shared/alerts.tsx +3 -3
  272. package/src/lib/components/shared/animated-number.tsx +2 -2
  273. package/src/lib/components/shared/asset/asset-bulk-actions.tsx +109 -0
  274. package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +29 -19
  275. package/src/lib/components/shared/asset/asset-gallery.tsx +25 -20
  276. package/src/lib/components/shared/asset/asset-picker-dialog.tsx +63 -66
  277. package/src/lib/components/shared/asset/asset-preview-dialog.tsx +3 -7
  278. package/src/lib/components/shared/asset/asset-preview-selector.tsx +4 -6
  279. package/src/lib/components/shared/asset/asset-preview.tsx +7 -21
  280. package/src/lib/components/shared/asset/asset-properties.tsx +7 -9
  281. package/src/lib/components/shared/asset/focal-point-control.tsx +5 -13
  282. package/src/lib/components/shared/assign-to-channel-bulk-action.tsx +71 -0
  283. package/src/lib/components/shared/assign-to-channel-dialog.tsx +155 -0
  284. package/src/lib/components/shared/assigned-facet-values.tsx +1 -5
  285. package/src/lib/components/shared/channel-code-label.tsx +3 -4
  286. package/src/lib/components/shared/channel-selector.tsx +6 -6
  287. package/src/lib/components/shared/configurable-operation-arg-input.tsx +367 -23
  288. package/src/lib/components/shared/configurable-operation-input.tsx +87 -48
  289. package/src/lib/components/shared/configurable-operation-multi-selector.tsx +260 -0
  290. package/src/lib/components/shared/configurable-operation-selector.tsx +156 -0
  291. package/src/lib/components/shared/confirmation-dialog.tsx +2 -2
  292. package/src/lib/components/shared/copyable-text.tsx +3 -4
  293. package/src/lib/components/shared/country-selector.tsx +21 -18
  294. package/src/lib/components/shared/currency-selector.tsx +5 -5
  295. package/src/lib/components/shared/custom-fields-form.tsx +423 -50
  296. package/src/lib/components/shared/customer-address-form.tsx +18 -13
  297. package/src/lib/components/shared/customer-group-selector.tsx +6 -6
  298. package/src/lib/components/shared/customer-selector.tsx +24 -18
  299. package/src/lib/components/shared/detail-page-button.tsx +45 -1
  300. package/src/lib/components/shared/entity-assets.tsx +33 -34
  301. package/src/lib/components/shared/error-page.tsx +6 -6
  302. package/src/lib/components/shared/facet-value-chip.tsx +12 -5
  303. package/src/lib/components/shared/facet-value-selector.tsx +64 -63
  304. package/src/lib/components/shared/form-field-wrapper.tsx +47 -24
  305. package/src/lib/components/shared/history-timeline/history-entry-date.tsx +37 -0
  306. package/src/lib/components/shared/history-timeline/history-entry.tsx +146 -70
  307. package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +3 -3
  308. package/src/lib/components/shared/history-timeline/history-note-editor.tsx +4 -4
  309. package/src/lib/components/shared/history-timeline/history-note-input.tsx +7 -7
  310. package/src/lib/components/shared/history-timeline/history-timeline.tsx +8 -48
  311. package/src/lib/components/shared/language-selector.tsx +5 -5
  312. package/src/lib/components/shared/logo-mark.tsx +2 -2
  313. package/src/lib/components/shared/multi-select.tsx +6 -6
  314. package/src/lib/components/shared/navigation-confirmation.tsx +24 -9
  315. package/src/lib/components/shared/option-value-input.tsx +18 -16
  316. package/src/lib/components/shared/paginated-list-data-table.tsx +35 -230
  317. package/src/lib/components/shared/permission-guard.tsx +4 -4
  318. package/src/lib/components/shared/product-variant-selector.tsx +59 -34
  319. package/src/lib/components/shared/remove-from-channel-bulk-action.tsx +90 -0
  320. package/src/lib/components/shared/role-code-label.tsx +10 -6
  321. package/src/lib/components/shared/role-selector.tsx +4 -4
  322. package/src/lib/components/shared/seller-selector.tsx +21 -17
  323. package/src/lib/components/shared/stock-level-label.tsx +5 -5
  324. package/src/lib/components/shared/tax-category-selector.tsx +5 -5
  325. package/src/lib/components/shared/translatable-form-field.tsx +46 -23
  326. package/src/lib/components/shared/vendure-image.tsx +31 -2
  327. package/src/lib/components/shared/zone-selector.tsx +5 -6
  328. package/src/lib/components/ui/accordion.tsx +3 -3
  329. package/src/lib/components/ui/alert-dialog.tsx +10 -10
  330. package/src/lib/components/ui/alert.tsx +3 -3
  331. package/src/lib/components/ui/aspect-ratio.tsx +9 -0
  332. package/src/lib/components/ui/badge.tsx +2 -2
  333. package/src/lib/components/ui/breadcrumb.tsx +4 -4
  334. package/src/lib/components/ui/button.tsx +10 -3
  335. package/src/lib/components/ui/calendar.tsx +392 -459
  336. package/src/lib/components/ui/card.tsx +2 -2
  337. package/src/lib/components/ui/carousel.tsx +241 -0
  338. package/src/lib/components/ui/chart.tsx +351 -0
  339. package/src/lib/components/ui/checkbox.tsx +2 -2
  340. package/src/lib/components/ui/command.tsx +12 -6
  341. package/src/lib/components/ui/context-menu.tsx +252 -0
  342. package/src/lib/components/ui/dialog.tsx +2 -2
  343. package/src/lib/components/ui/drawer.tsx +133 -0
  344. package/src/lib/components/ui/dropdown-menu.tsx +7 -7
  345. package/src/lib/components/ui/form.tsx +8 -8
  346. package/src/lib/components/ui/hover-card.tsx +3 -3
  347. package/src/lib/components/ui/input-otp.tsx +77 -0
  348. package/src/lib/components/ui/input.tsx +1 -1
  349. package/src/lib/components/ui/label.tsx +2 -2
  350. package/src/lib/components/ui/menubar.tsx +274 -0
  351. package/src/lib/components/ui/navigation-menu.tsx +168 -0
  352. package/src/lib/components/ui/pagination.tsx +87 -108
  353. package/src/lib/components/ui/popover.tsx +3 -3
  354. package/src/lib/components/ui/progress.tsx +29 -0
  355. package/src/lib/components/ui/radio-group.tsx +45 -0
  356. package/src/lib/components/ui/resizable.tsx +54 -0
  357. package/src/lib/components/ui/scroll-area.tsx +2 -2
  358. package/src/lib/components/ui/select.tsx +151 -129
  359. package/src/lib/components/ui/separator.tsx +2 -2
  360. package/src/lib/components/ui/sheet.tsx +5 -5
  361. package/src/lib/components/ui/sidebar.tsx +10 -10
  362. package/src/lib/components/ui/skeleton.tsx +1 -1
  363. package/src/lib/components/ui/slider.tsx +63 -0
  364. package/src/lib/components/ui/switch.tsx +2 -2
  365. package/src/lib/components/ui/table.tsx +2 -2
  366. package/src/lib/components/ui/tabs.tsx +3 -3
  367. package/src/lib/components/ui/textarea.tsx +1 -1
  368. package/src/lib/components/ui/toggle-group.tsx +73 -0
  369. package/src/lib/components/ui/toggle.tsx +45 -0
  370. package/src/lib/components/ui/tooltip.tsx +3 -3
  371. package/src/lib/framework/alert/alert-extensions.tsx +2 -3
  372. package/src/lib/framework/alert/alert-item.tsx +5 -3
  373. package/src/lib/framework/component-registry/component-registry.tsx +33 -47
  374. package/src/lib/framework/component-registry/dynamic-component.tsx +3 -3
  375. package/src/lib/framework/dashboard-widget/base-widget.tsx +5 -13
  376. package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +8 -8
  377. package/src/lib/framework/dashboard-widget/latest-orders-widget/latest-orders-widget.graphql.ts +1 -1
  378. package/src/lib/framework/dashboard-widget/metrics-widget/index.tsx +7 -8
  379. package/src/lib/framework/dashboard-widget/metrics-widget/metrics-widget.graphql.ts +1 -1
  380. package/src/lib/framework/dashboard-widget/orders-summary/index.tsx +7 -8
  381. package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +1 -1
  382. package/src/lib/framework/dashboard-widget/widget-extensions.tsx +1 -1
  383. package/src/lib/framework/data-table/data-table-extensions.ts +35 -0
  384. package/src/lib/framework/defaults.ts +5 -11
  385. package/src/lib/framework/document-extension/extend-detail-form-query.ts +50 -0
  386. package/src/lib/framework/document-extension/extend-document.spec.ts +884 -0
  387. package/src/lib/framework/document-extension/extend-document.ts +159 -0
  388. package/src/lib/framework/document-introspection/add-custom-fields.ts +50 -2
  389. package/src/lib/framework/document-introspection/get-document-structure.spec.ts +321 -2
  390. package/src/lib/framework/document-introspection/get-document-structure.ts +187 -36
  391. package/src/lib/framework/document-introspection/hooks.ts +4 -1
  392. package/src/lib/framework/extension-api/define-dashboard-extension.ts +35 -49
  393. package/src/lib/framework/extension-api/display-component-extensions.tsx +69 -0
  394. package/src/lib/framework/extension-api/extension-api-types.ts +34 -98
  395. package/src/lib/framework/extension-api/input-component-extensions.tsx +73 -0
  396. package/src/lib/framework/extension-api/logic/alerts.ts +10 -0
  397. package/src/lib/framework/extension-api/logic/data-table.ts +60 -0
  398. package/src/lib/framework/extension-api/logic/detail-forms.ts +48 -0
  399. package/src/lib/framework/extension-api/logic/form-components.ts +13 -0
  400. package/src/lib/framework/extension-api/logic/index.ts +9 -0
  401. package/src/lib/framework/extension-api/logic/layout.ts +22 -0
  402. package/src/lib/framework/extension-api/logic/login.ts +17 -0
  403. package/src/lib/framework/extension-api/logic/navigation.ts +38 -0
  404. package/src/lib/framework/extension-api/logic/widgets.ts +10 -0
  405. package/src/lib/framework/extension-api/types/alerts.ts +54 -0
  406. package/src/lib/framework/extension-api/types/data-table.ts +96 -0
  407. package/src/lib/framework/extension-api/types/detail-forms.ts +94 -0
  408. package/src/lib/framework/extension-api/types/form-components.ts +43 -0
  409. package/src/lib/framework/extension-api/types/index.ts +9 -0
  410. package/src/lib/framework/extension-api/types/layout.ts +90 -0
  411. package/src/lib/framework/extension-api/types/login.ts +96 -0
  412. package/src/lib/framework/extension-api/types/navigation.ts +76 -0
  413. package/src/lib/framework/extension-api/types/widgets.ts +93 -0
  414. package/src/lib/framework/extension-api/use-dashboard-extensions.ts +2 -1
  415. package/src/lib/framework/extension-api/use-login-extensions.ts +26 -0
  416. package/src/lib/framework/form-engine/custom-form-component-extensions.ts +38 -0
  417. package/src/lib/framework/form-engine/custom-form-component.tsx +33 -0
  418. package/src/lib/framework/form-engine/form-schema-tools.spec.ts +472 -0
  419. package/src/lib/framework/form-engine/form-schema-tools.ts +341 -6
  420. package/src/lib/framework/form-engine/overridden-form-component.tsx +51 -0
  421. package/src/lib/framework/form-engine/use-generated-form.tsx +82 -24
  422. package/src/lib/framework/form-engine/utils.spec.ts +37 -0
  423. package/src/lib/framework/form-engine/utils.ts +99 -0
  424. package/src/lib/framework/layout-engine/dev-mode-button.tsx +24 -0
  425. package/src/lib/framework/layout-engine/layout-extensions.ts +1 -4
  426. package/src/lib/framework/layout-engine/location-wrapper.tsx +98 -72
  427. package/src/lib/framework/layout-engine/page-block-provider.tsx +6 -0
  428. package/src/lib/framework/layout-engine/page-layout.tsx +135 -58
  429. package/src/lib/framework/page/detail-page-route-loader.tsx +26 -7
  430. package/src/lib/framework/page/detail-page.tsx +94 -37
  431. package/src/lib/framework/page/list-page.tsx +18 -11
  432. package/src/lib/framework/page/use-detail-page.ts +47 -13
  433. package/src/lib/framework/page/use-extended-router.tsx +4 -5
  434. package/src/lib/framework/registry/global-registry.ts +4 -0
  435. package/src/lib/framework/registry/registry-types.ts +17 -5
  436. package/src/lib/graphql/api.ts +25 -3
  437. package/src/lib/graphql/common-operations.ts +18 -0
  438. package/src/lib/graphql/{fragments.tsx → fragments.ts} +1 -2
  439. package/src/lib/graphql/graphql-env.d.ts +27 -24
  440. package/src/lib/graphql/settings-store-operations.ts +17 -0
  441. package/src/lib/hooks/use-auth.tsx +1 -1
  442. package/src/lib/hooks/use-channel.ts +1 -1
  443. package/src/lib/hooks/use-extended-detail-query.ts +37 -0
  444. package/src/lib/hooks/use-extended-list-query.ts +75 -0
  445. package/src/lib/hooks/use-floating-bulk-actions.ts +82 -0
  446. package/src/lib/hooks/use-grouped-permissions.ts +3 -2
  447. package/src/lib/hooks/use-local-format.ts +20 -5
  448. package/src/lib/hooks/use-page-block.tsx +18 -0
  449. package/src/lib/hooks/use-page.tsx +2 -2
  450. package/src/lib/hooks/use-permissions.ts +3 -2
  451. package/src/lib/hooks/use-server-config.ts +1 -1
  452. package/src/lib/hooks/use-theme.ts +1 -1
  453. package/src/lib/hooks/use-user-settings.tsx +1 -1
  454. package/src/lib/index.ts +85 -7
  455. package/src/lib/lib/trans.tsx +3 -3
  456. package/src/lib/lib/utils.ts +52 -1
  457. package/src/lib/providers/auth.tsx +37 -14
  458. package/src/lib/providers/channel-provider.tsx +17 -15
  459. package/src/lib/providers/server-config.tsx +13 -11
  460. package/src/lib/providers/theme-provider.tsx +2 -3
  461. package/src/lib/providers/user-settings.tsx +78 -3
  462. package/src/lib/virtual.d.ts +26 -2
  463. package/src/vite-env.d.ts +2 -0
  464. package/vite/tests/barrel-exports.spec.ts +30 -0
  465. package/vite/tests/fixtures-barrel-exports/my-plugin/index.ts +1 -0
  466. package/vite/tests/fixtures-barrel-exports/my-plugin/src/my.plugin.ts +8 -0
  467. package/vite/tests/fixtures-barrel-exports/package.json +6 -0
  468. package/vite/tests/fixtures-barrel-exports/vendure-config.ts +19 -0
  469. package/vite/tests/fixtures-npm-plugin/fake_node_modules/test-plugin/index.js +20 -0
  470. package/vite/tests/fixtures-npm-plugin/fake_node_modules/test-plugin/package.json +8 -0
  471. package/vite/tests/fixtures-npm-plugin/package.json +6 -0
  472. package/vite/tests/fixtures-npm-plugin/vendure-config.ts +18 -0
  473. package/vite/tests/fixtures-path-alias/js-aliased/index.ts +1 -0
  474. package/vite/tests/fixtures-path-alias/js-aliased/src/js-aliased.plugin.ts +8 -0
  475. package/vite/tests/fixtures-path-alias/package.json +6 -0
  476. package/vite/tests/fixtures-path-alias/star-aliased/index.ts +1 -0
  477. package/vite/tests/fixtures-path-alias/star-aliased/src/star-aliased.plugin.ts +8 -0
  478. package/vite/tests/fixtures-path-alias/ts-aliased/index.ts +1 -0
  479. package/vite/tests/fixtures-path-alias/ts-aliased/src/ts-aliased.plugin.ts +8 -0
  480. package/vite/tests/fixtures-path-alias/vendure-config.ts +20 -0
  481. package/vite/tests/npm-plugin.spec.ts +46 -0
  482. package/vite/tests/path-alias.spec.ts +61 -0
  483. package/vite/tests/tsconfig.json +21 -0
  484. package/vite/types.ts +44 -0
  485. package/vite/utils/ast-utils.spec.ts +1 -80
  486. package/vite/utils/ast-utils.ts +0 -86
  487. package/vite/utils/compiler.ts +244 -0
  488. package/vite/utils/config-loader.ts +0 -445
  489. package/vite/utils/logger.ts +43 -0
  490. package/vite/utils/plugin-discovery.ts +494 -0
  491. package/vite/utils/tsconfig-utils.ts +79 -0
  492. package/vite/utils/ui-config.ts +30 -42
  493. package/vite/vite-plugin-config-loader.ts +25 -17
  494. package/vite/vite-plugin-config.ts +6 -7
  495. package/vite/vite-plugin-dashboard-metadata.ts +27 -16
  496. package/vite/vite-plugin-tailwind-source.ts +81 -0
  497. package/vite/vite-plugin-theme.ts +69 -69
  498. package/vite/vite-plugin-ui-config.ts +119 -17
  499. package/vite/vite-plugin-vendure-dashboard.ts +60 -16
  500. package/dist/plugin/utils/ast-utils.js +0 -96
  501. package/dist/plugin/utils/ast-utils.spec.js +0 -120
  502. package/dist/plugin/utils/config-loader.d.ts +0 -52
  503. package/dist/plugin/utils/config-loader.js +0 -343
  504. package/dist/plugin/utils/ui-config.d.ts +0 -3
  505. package/dist/plugin/utils/ui-config.js +0 -34
  506. package/dist/plugin/vite-plugin-theme.js +0 -130
  507. package/dist/plugin/vite-plugin-ui-config.d.ts +0 -15
  508. package/dist/plugin/vite-plugin-vendure-dashboard.d.ts +0 -44
  509. package/src/lib/components/shared/rich-text-editor.tsx +0 -0
  510. package/src/lib/framework/alert/types.ts +0 -13
  511. package/src/lib/framework/dashboard-widget/types.ts +0 -22
  512. /package/dist/{plugin/utils/ast-utils.spec.d.ts → vite/types.js} +0 -0
  513. /package/dist/{plugin → vite}/utils/schema-generator.d.ts +0 -0
  514. /package/dist/{plugin → vite}/utils/schema-generator.js +0 -0
  515. /package/dist/{plugin → vite}/vite-plugin-admin-api-schema.d.ts +0 -0
  516. /package/dist/{plugin → vite}/vite-plugin-admin-api-schema.js +0 -0
  517. /package/dist/{plugin → vite}/vite-plugin-config.d.ts +0 -0
  518. /package/dist/{plugin → vite}/vite-plugin-gql-tada.d.ts +0 -0
  519. /package/dist/{plugin → vite}/vite-plugin-gql-tada.js +0 -0
  520. /package/dist/{plugin → vite}/vite-plugin-theme.d.ts +0 -0
  521. /package/dist/{plugin → vite}/vite-plugin-transform-index.d.ts +0 -0
  522. /package/dist/{plugin → vite}/vite-plugin-transform-index.js +0 -0
  523. /package/src/lib/components/data-table/{data-table-types.ts → types.ts} +0 -0
@@ -0,0 +1,10 @@
1
+ import { globalRegistry } from '../../registry/global-registry.js';
2
+ import { DashboardAlertDefinition } from '../types/alerts.js';
3
+
4
+ export function registerAlertExtensions(alerts?: DashboardAlertDefinition[]) {
5
+ if (alerts) {
6
+ for (const alert of alerts) {
7
+ globalRegistry.get('dashboardAlertRegistry').set(alert.id, alert);
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,60 @@
1
+ import { parse } from 'graphql';
2
+
3
+ import { addBulkAction, addListQueryDocument } from '../../data-table/data-table-extensions.js';
4
+ import { addDisplayComponent } from '../display-component-extensions.js';
5
+ import { DashboardDataTableExtensionDefinition } from '../types/index.js';
6
+
7
+ /**
8
+ * @description
9
+ * Generates a data table display component key based on the pageId and column name.
10
+ * Uses the pattern: pageId_columnName
11
+ */
12
+ export function generateDataTableDisplayComponentKey(pageId: string, column: string): string {
13
+ return `${pageId}_${column}`;
14
+ }
15
+
16
+ /**
17
+ * @description
18
+ * Adds a display component for a specific column in a data table.
19
+ */
20
+ export function addDataTableDisplayComponent(
21
+ pageId: string,
22
+ column: string,
23
+ component: React.ComponentType<{ value: any; [key: string]: any }>,
24
+ ) {
25
+ const key = generateDataTableDisplayComponentKey(pageId, column);
26
+ addDisplayComponent({ pageId, blockId: 'list-table', field: column, component });
27
+ }
28
+
29
+ export function registerDataTableExtensions(dataTables?: DashboardDataTableExtensionDefinition[]) {
30
+ if (dataTables) {
31
+ for (const dataTable of dataTables) {
32
+ if (dataTable.bulkActions?.length) {
33
+ for (const action of dataTable.bulkActions) {
34
+ addBulkAction(dataTable.pageId, dataTable.blockId, action);
35
+ }
36
+ }
37
+ if (dataTable.extendListDocument) {
38
+ const document =
39
+ typeof dataTable.extendListDocument === 'function'
40
+ ? dataTable.extendListDocument()
41
+ : dataTable.extendListDocument;
42
+
43
+ addListQueryDocument(
44
+ dataTable.pageId,
45
+ dataTable.blockId,
46
+ typeof document === 'string' ? parse(document) : document,
47
+ );
48
+ }
49
+ if (dataTable.displayComponents?.length) {
50
+ for (const displayComponent of dataTable.displayComponents) {
51
+ addDataTableDisplayComponent(
52
+ dataTable.pageId,
53
+ displayComponent.column,
54
+ displayComponent.component,
55
+ );
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,48 @@
1
+ import { addDetailQueryDocument } from '@/vdb/framework/form-engine/custom-form-component-extensions.js';
2
+ import { parse } from 'graphql';
3
+
4
+ import { addDisplayComponent } from '../display-component-extensions.js';
5
+ import { addInputComponent } from '../input-component-extensions.js';
6
+ import { DashboardDetailFormExtensionDefinition } from '../types/detail-forms.js';
7
+
8
+ export function registerDetailFormExtensions(detailForms?: DashboardDetailFormExtensionDefinition[]) {
9
+ if (detailForms) {
10
+ for (const detailForm of detailForms) {
11
+ if (detailForm.extendDetailDocument) {
12
+ const document =
13
+ typeof detailForm.extendDetailDocument === 'function'
14
+ ? detailForm.extendDetailDocument()
15
+ : detailForm.extendDetailDocument;
16
+
17
+ addDetailQueryDocument(
18
+ detailForm.pageId,
19
+ typeof document === 'string' ? parse(document) : document,
20
+ );
21
+ }
22
+
23
+ // Register input components for this detail form
24
+ if (detailForm.inputs) {
25
+ for (const inputComponent of detailForm.inputs) {
26
+ addInputComponent({
27
+ pageId: detailForm.pageId,
28
+ blockId: inputComponent.blockId,
29
+ field: inputComponent.field,
30
+ component: inputComponent.component,
31
+ });
32
+ }
33
+ }
34
+
35
+ // Register display components for this detail form
36
+ if (detailForm.displays) {
37
+ for (const displayComponent of detailForm.displays) {
38
+ addDisplayComponent({
39
+ pageId: detailForm.pageId,
40
+ blockId: displayComponent.blockId,
41
+ field: displayComponent.field,
42
+ component: displayComponent.component,
43
+ });
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,13 @@
1
+ import { addCustomFormComponent } from '../../form-engine/custom-form-component-extensions.js';
2
+ import { DashboardCustomFormComponents } from '../types/form-components.js';
3
+
4
+ export function registerFormComponentExtensions(customFormComponents?: DashboardCustomFormComponents) {
5
+ if (customFormComponents) {
6
+ // Handle custom field components
7
+ if (customFormComponents.customFields) {
8
+ for (const component of customFormComponents.customFields) {
9
+ addCustomFormComponent(component);
10
+ }
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,9 @@
1
+ // Re-export all domain-specific logic functions
2
+ export * from './alerts.js';
3
+ export * from './data-table.js';
4
+ export * from './detail-forms.js';
5
+ export * from './form-components.js';
6
+ export * from './layout.js';
7
+ export * from './login.js';
8
+ export * from './navigation.js';
9
+ export * from './widgets.js';
@@ -0,0 +1,22 @@
1
+ import {
2
+ registerDashboardActionBarItem,
3
+ registerDashboardPageBlock,
4
+ } from '../../layout-engine/layout-extensions.js';
5
+ import { DashboardActionBarItem, DashboardPageBlockDefinition } from '../types/layout.js';
6
+
7
+ export function registerLayoutExtensions(
8
+ actionBarItems?: DashboardActionBarItem[],
9
+ pageBlocks?: DashboardPageBlockDefinition[],
10
+ ) {
11
+ if (actionBarItems) {
12
+ for (const item of actionBarItems) {
13
+ registerDashboardActionBarItem(item);
14
+ }
15
+ }
16
+
17
+ if (pageBlocks) {
18
+ for (const block of pageBlocks) {
19
+ registerDashboardPageBlock(block);
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,17 @@
1
+ import { globalRegistry } from '../../registry/global-registry.js';
2
+ import { DashboardLoginExtensions } from '../types/login.js';
3
+
4
+ export function registerLoginExtensions(loginExtensions?: DashboardLoginExtensions) {
5
+ if (!loginExtensions) {
6
+ return;
7
+ }
8
+
9
+ const registryKey = 'loginExtensions';
10
+
11
+ globalRegistry.set(registryKey, (oldValue: DashboardLoginExtensions) => {
12
+ return {
13
+ ...oldValue,
14
+ ...loginExtensions,
15
+ };
16
+ });
17
+ }
@@ -0,0 +1,38 @@
1
+ import { addNavMenuItem, addNavMenuSection, NavMenuItem } from '../../nav-menu/nav-menu-extensions.js';
2
+ import { registerRoute } from '../../page/page-api.js';
3
+ import { DashboardNavSectionDefinition, DashboardRouteDefinition } from '../types/navigation.js';
4
+
5
+ export function registerNavigationExtensions(
6
+ navSections?: DashboardNavSectionDefinition[],
7
+ routes?: DashboardRouteDefinition[],
8
+ ) {
9
+ if (navSections) {
10
+ for (const section of navSections) {
11
+ addNavMenuSection({
12
+ ...section,
13
+ placement: 'top',
14
+ order: section.order ?? 999,
15
+ items: [],
16
+ });
17
+ }
18
+ }
19
+
20
+ if (routes) {
21
+ for (const route of routes) {
22
+ if (route.navMenuItem) {
23
+ // Add the nav menu item
24
+ const item: NavMenuItem = {
25
+ url: route.navMenuItem.url ?? route.path,
26
+ id: route.navMenuItem.id ?? route.path,
27
+ title: route.navMenuItem.title ?? route.path,
28
+ order: route.navMenuItem.order,
29
+ };
30
+ addNavMenuItem(item, route.navMenuItem.sectionId);
31
+ }
32
+ if (route.path) {
33
+ // Configure a list page
34
+ registerRoute(route);
35
+ }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,10 @@
1
+ import { registerDashboardWidget } from '../../dashboard-widget/widget-extensions.js';
2
+ import { DashboardWidgetDefinition } from '../types/index.js';
3
+
4
+ export function registerWidgetExtensions(widgets?: DashboardWidgetDefinition[]) {
5
+ if (widgets) {
6
+ for (const widget of widgets) {
7
+ registerDashboardWidget(widget);
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @description
3
+ * **Status: Developer Preview**
4
+ *
5
+ * Allows you to define custom alerts that can be displayed in the dashboard.
6
+ *
7
+ * @docsCategory extensions
8
+ * @since 3.3.0
9
+ */
10
+ export interface DashboardAlertDefinition<TResponse = any> {
11
+ /**
12
+ * @description
13
+ * A unique identifier for the alert.
14
+ */
15
+ id: string;
16
+ /**
17
+ * @description
18
+ * The title of the alert. Can be a string or a function that returns a string based on the response data.
19
+ */
20
+ title: string | ((data: TResponse) => string);
21
+ /**
22
+ * @description
23
+ * The description of the alert. Can be a string or a function that returns a string based on the response data.
24
+ */
25
+ description?: string | ((data: TResponse) => string);
26
+ /**
27
+ * @description
28
+ * The severity level of the alert.
29
+ */
30
+ severity: 'info' | 'warning' | 'error';
31
+ /**
32
+ * @description
33
+ * A function that checks the condition and returns the response data.
34
+ */
35
+ check: () => Promise<TResponse> | TResponse;
36
+ /**
37
+ * @description
38
+ * The interval in milliseconds to recheck the condition.
39
+ */
40
+ recheckInterval?: number;
41
+ /**
42
+ * @description
43
+ * A function that determines whether the alert should be shown based on the response data.
44
+ */
45
+ shouldShow?: (data: TResponse) => boolean;
46
+ /**
47
+ * @description
48
+ * Optional actions that can be performed when the alert is shown.
49
+ */
50
+ actions?: Array<{
51
+ label: string;
52
+ onClick: (data: TResponse) => void;
53
+ }>;
54
+ }
@@ -0,0 +1,96 @@
1
+ import { Table } from '@tanstack/react-table';
2
+ import { DocumentNode } from 'graphql';
3
+
4
+ /**
5
+ * @description
6
+ * Allows you to define custom display components for specific columns in data tables.
7
+ * The pageId is already defined in the data table extension, so only the column name is needed.
8
+ *
9
+ * @docsCategory extensions
10
+ * @docsPage DataTable
11
+ * @since 3.4.0
12
+ */
13
+ export interface DashboardDataTableDisplayComponent {
14
+ /**
15
+ * @description
16
+ * The name of the column where this display component should be used.
17
+ */
18
+ column: string;
19
+ /**
20
+ * @description
21
+ * The React component that will be rendered as the display.
22
+ * It should accept `value` and other standard display props.
23
+ */
24
+ component: React.ComponentType<{ value: any; [key: string]: any }>;
25
+ }
26
+
27
+ export type BulkActionContext<Item extends { id: string } & Record<string, any>> = {
28
+ selection: Item[];
29
+ table: Table<Item>;
30
+ };
31
+
32
+ export type BulkActionComponent<Item extends { id: string } & Record<string, any>> = React.FunctionComponent<
33
+ BulkActionContext<Item>
34
+ >;
35
+
36
+ /**
37
+ * @description
38
+ * **Status: Developer Preview**
39
+ *
40
+ * A bulk action is a component that will be rendered in the bulk actions dropdown.
41
+ *
42
+ * @docsCategory components
43
+ * @docsPage DataTable
44
+ * @since 3.4.0
45
+ */
46
+ export type BulkAction = {
47
+ /**
48
+ * @description
49
+ * Optional order number to control the position of this bulk action in the dropdown.
50
+ * A larger number will appear lower in the list.
51
+ */
52
+ order?: number;
53
+ /**
54
+ * @description
55
+ * The React component that will be rendered as the bulk action item.
56
+ */
57
+ component: BulkActionComponent<any>;
58
+ };
59
+
60
+ /**
61
+ * @description
62
+ * This allows you to customize aspects of existing data tables in the dashboard.
63
+ *
64
+ * @docsCategory extensions
65
+ * @docsPage DataTable
66
+ * @since 3.4.0
67
+ */
68
+ export interface DashboardDataTableExtensionDefinition {
69
+ /**
70
+ * @description
71
+ * The ID of the page where the data table is located, e.g. `'product-list'`, `'order-list'`.
72
+ */
73
+ pageId: string;
74
+ /**
75
+ * @description
76
+ * The ID of the data table block. Defaults to `'list-table'`, which is the default blockId
77
+ * for the standard list pages. However, some other pages may use a different blockId,
78
+ * such as `'product-variants-table'` on the `'product-detail'` page.
79
+ */
80
+ blockId?: string;
81
+ /**
82
+ * @description
83
+ * An array of additional bulk actions that will be available on the data table.
84
+ */
85
+ bulkActions?: BulkAction[];
86
+ /**
87
+ * @description
88
+ * Allows you to extend the list document for the data table.
89
+ */
90
+ extendListDocument?: string | DocumentNode | (() => DocumentNode | string);
91
+ /**
92
+ * @description
93
+ * Custom display components for specific columns in the data table.
94
+ */
95
+ displayComponents?: DashboardDataTableDisplayComponent[];
96
+ }
@@ -0,0 +1,94 @@
1
+ import {
2
+ DataDisplayComponent,
3
+ DataInputComponent,
4
+ } from '@/vdb/framework/component-registry/component-registry.js';
5
+ import { DocumentNode } from 'graphql';
6
+
7
+ /**
8
+ * @description
9
+ * Allows you to define custom input components for specific fields in detail forms.
10
+ * The pageId is already defined in the detail form extension, so only the blockId and field are needed.
11
+ *
12
+ * @docsCategory extensions
13
+ * @docsPage DetailForms
14
+ * @since 3.4.0
15
+ */
16
+ export interface DashboardDetailFormInputComponent {
17
+ /**
18
+ * @description
19
+ * The ID of the block where this input component should be used.
20
+ */
21
+ blockId: string;
22
+ /**
23
+ * @description
24
+ * The name of the field where this input component should be used.
25
+ */
26
+ field: string;
27
+ /**
28
+ * @description
29
+ * The React component that will be rendered as the input.
30
+ * It should accept `value`, `onChange`, and other standard input props.
31
+ */
32
+ component: DataInputComponent;
33
+ }
34
+
35
+ /**
36
+ * @description
37
+ * Allows you to define custom display components for specific fields in detail forms.
38
+ * The pageId is already defined in the detail form extension, so only the blockId and field are needed.
39
+ *
40
+ * @docsCategory extensions
41
+ * @docsPage DetailForms
42
+ * @since 3.4.0
43
+ */
44
+ export interface DashboardDetailFormDisplayComponent {
45
+ /**
46
+ * @description
47
+ * The ID of the block where this display component should be used.
48
+ */
49
+ blockId: string;
50
+ /**
51
+ * @description
52
+ * The name of the field where this display component should be used.
53
+ */
54
+ field: string;
55
+ /**
56
+ * @description
57
+ * The React component that will be rendered as the display.
58
+ * It should accept `value` and other standard display props.
59
+ */
60
+ component: DataDisplayComponent;
61
+ }
62
+
63
+ /**
64
+ * @description
65
+ * Allows you to extend existing detail forms (e.g. on the product detail or customer detail pages)
66
+ * with custom GraphQL queries, input components, and display components.
67
+ *
68
+ * @since 3.4.0
69
+ * @docsPage DetailForms
70
+ * @docsCategory extensions
71
+ */
72
+ export interface DashboardDetailFormExtensionDefinition {
73
+ /**
74
+ * @description
75
+ * The ID of the page where the detail form is located, e.g. `'product-detail'`, `'order-detail'`.
76
+ */
77
+ pageId: string;
78
+ /**
79
+ * @description
80
+ * Extends the GraphQL query used to fetch data for the detail page, allowing you to add additional
81
+ * fields that can be used by custom input or display components.
82
+ */
83
+ extendDetailDocument?: string | DocumentNode | (() => DocumentNode | string);
84
+ /**
85
+ * @description
86
+ * Custom input components for specific fields in the detail form.
87
+ */
88
+ inputs?: DashboardDetailFormInputComponent[];
89
+ /**
90
+ * @description
91
+ * Custom display components for specific fields in the detail form.
92
+ */
93
+ displays?: DashboardDetailFormDisplayComponent[];
94
+ }
@@ -0,0 +1,43 @@
1
+ import type React from 'react';
2
+
3
+ import { CustomFormComponentInputProps } from '../../form-engine/custom-form-component.js';
4
+
5
+ /**
6
+ * @description
7
+ * Allows you to define custom form components for custom fields in the dashboard.
8
+ *
9
+ * @docsCategory extensions
10
+ * @docsPage FormComponents
11
+ * @since 3.4.0
12
+ */
13
+ export interface DashboardCustomFormComponent {
14
+ /**
15
+ * @description
16
+ * A unique identifier for the custom form component. It is a good practice to namespace
17
+ * these IDs to avoid naming collisions, for example `"my-plugin.markdown-editor"`.
18
+ */
19
+ id: string;
20
+ /**
21
+ * @description
22
+ * The React component that will be rendered as the custom form input.
23
+ */
24
+ component: React.FunctionComponent<CustomFormComponentInputProps>;
25
+ }
26
+
27
+ /**
28
+ * @description
29
+ * Interface for registering custom field components in the dashboard.
30
+ * For input and display components, use the co-located approach with detailForms.
31
+ *
32
+ * @docsCategory extensions
33
+ * @docsPage FormComponents
34
+ * @since 3.4.0
35
+ */
36
+ export interface DashboardCustomFormComponents {
37
+ /**
38
+ * @description
39
+ * Custom form components for custom fields. These are used when rendering
40
+ * custom fields in forms.
41
+ */
42
+ customFields?: DashboardCustomFormComponent[];
43
+ }
@@ -0,0 +1,9 @@
1
+ // Re-export all domain-specific types
2
+ export * from './alerts.js';
3
+ export * from './data-table.js';
4
+ export * from './detail-forms.js';
5
+ export * from './form-components.js';
6
+ export * from './layout.js';
7
+ export * from './login.js';
8
+ export * from './navigation.js';
9
+ export * from './widgets.js';
@@ -0,0 +1,90 @@
1
+ import type React from 'react';
2
+
3
+ import { PageContextValue } from '../../layout-engine/page-provider.js';
4
+
5
+ export interface ActionBarButtonState {
6
+ disabled: boolean;
7
+ visible: boolean;
8
+ }
9
+
10
+ /**
11
+ * @description
12
+ * Allows you to define custom action bar items for any page in the dashboard.
13
+ *
14
+ * @docsCategory extensions
15
+ * @docsPage Layout
16
+ * @since 3.3.0
17
+ */
18
+ export interface DashboardActionBarItem {
19
+ /**
20
+ * @description
21
+ * The ID of the page where the action bar item should be displayed.
22
+ */
23
+ pageId: string;
24
+ /**
25
+ * @description
26
+ * A React component that will be rendered in the action bar.
27
+ */
28
+ component: React.FunctionComponent<{ context: PageContextValue }>;
29
+ /**
30
+ * @description
31
+ * The type of action bar item to display. Defaults to `button`.
32
+ * The 'dropdown' type is used to display the action bar item as a dropdown menu item.
33
+ *
34
+ * When using the dropdown type, use a suitable [dropdown item](https://ui.shadcn.com/docs/components/dropdown-menu)
35
+ * component, such as:
36
+ *
37
+ * ```tsx
38
+ * import { DropdownMenuItem } from '\@vendure/dashboard';
39
+ *
40
+ * // ...
41
+ *
42
+ * {
43
+ * component: () => <DropdownMenuItem>My Item</DropdownMenuItem>
44
+ * }
45
+ * ```
46
+ *
47
+ * @default 'button'
48
+ */
49
+ type?: 'button' | 'dropdown';
50
+ /**
51
+ * @description
52
+ * Any permissions that are required to display this action bar item.
53
+ */
54
+ requiresPermission?: string | string[];
55
+ }
56
+
57
+ export type PageBlockPosition = { blockId: string; order: 'before' | 'after' | 'replace' };
58
+
59
+ /**
60
+ * @description
61
+ * The location of a page block in the dashboard. The location can be found by turning on
62
+ * "developer mode" in the dashboard user menu (bottom left corner) and then
63
+ * clicking the `< />` icon when hovering over a page block.
64
+ *
65
+ * @docsCategory extensions
66
+ * @docsPage Layout
67
+ * @since 3.3.0
68
+ */
69
+ export type PageBlockLocation = {
70
+ pageId: string;
71
+ position: PageBlockPosition;
72
+ column: 'main' | 'side';
73
+ };
74
+
75
+ /**
76
+ * @description
77
+ * This allows you to insert a custom component into a specific location
78
+ * on any page in the dashboard.
79
+ *
80
+ * @docsCategory extensions
81
+ * @docsPage Layout
82
+ * @since 3.3.0
83
+ */
84
+ export interface DashboardPageBlockDefinition {
85
+ id: string;
86
+ title?: React.ReactNode;
87
+ location: PageBlockLocation;
88
+ component: React.FunctionComponent<{ context: PageContextValue }>;
89
+ requiresPermission?: string | string[];
90
+ }