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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/README.md +4 -41
  2. package/dist/plugin/utils/config-loader.d.ts +1 -70
  3. package/dist/plugin/utils/config-loader.js +9 -33
  4. package/dist/plugin/vite-plugin-config-loader.js +1 -6
  5. package/dist/plugin/vite-plugin-config.js +7 -6
  6. package/dist/plugin/vite-plugin-dashboard-metadata.d.ts +3 -1
  7. package/dist/plugin/vite-plugin-dashboard-metadata.js +8 -1
  8. package/dist/plugin/vite-plugin-vendure-dashboard.d.ts +0 -41
  9. package/dist/plugin/vite-plugin-vendure-dashboard.js +2 -5
  10. package/package.json +131 -131
  11. package/src/app/app-providers.tsx +6 -6
  12. package/src/app/main.tsx +9 -9
  13. package/src/app/routes/__root.tsx +2 -1
  14. package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +1 -10
  15. package/src/app/routes/_authenticated/_administrators/administrators.tsx +8 -15
  16. package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +12 -16
  17. package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +16 -16
  18. package/src/app/routes/_authenticated/_assets/assets.graphql.ts +2 -13
  19. package/src/app/routes/_authenticated/_assets/assets.tsx +4 -16
  20. package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +38 -52
  21. package/src/app/routes/_authenticated/_channels/channels.graphql.ts +1 -10
  22. package/src/app/routes/_authenticated/_channels/channels.tsx +10 -17
  23. package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +17 -21
  24. package/src/app/routes/_authenticated/_collections/collections.graphql.ts +3 -60
  25. package/src/app/routes/_authenticated/_collections/collections.tsx +124 -168
  26. package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +16 -20
  27. package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +8 -7
  28. package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +5 -9
  29. package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +9 -10
  30. package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +7 -7
  31. package/src/app/routes/_authenticated/_countries/countries.graphql.ts +2 -11
  32. package/src/app/routes/_authenticated/_countries/countries.tsx +6 -13
  33. package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +17 -21
  34. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +5 -12
  35. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +17 -22
  36. package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +2 -11
  37. package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +6 -13
  38. package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +15 -18
  39. package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +19 -19
  40. package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +10 -10
  41. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +5 -5
  42. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +7 -11
  43. package/src/app/routes/_authenticated/_customers/components/customer-history/use-customer-history.ts +4 -4
  44. package/src/app/routes/_authenticated/_customers/components/customer-order-table.tsx +73 -75
  45. package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +4 -4
  46. package/src/app/routes/_authenticated/_customers/customers.graphql.ts +2 -10
  47. package/src/app/routes/_authenticated/_customers/customers.tsx +6 -13
  48. package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +15 -19
  49. package/src/app/routes/_authenticated/_facets/components/edit-facet-value.tsx +9 -9
  50. package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +4 -4
  51. package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +11 -15
  52. package/src/app/routes/_authenticated/_facets/facets.graphql.ts +1 -31
  53. package/src/app/routes/_authenticated/_facets/facets.tsx +7 -31
  54. package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +13 -17
  55. package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +1 -1
  56. package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +13 -13
  57. package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +14 -11
  58. package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +55 -93
  59. package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +9 -11
  60. package/src/app/routes/_authenticated/_orders/components/order-address.tsx +6 -5
  61. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +62 -67
  62. package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +6 -11
  63. package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +5 -9
  64. package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +7 -11
  65. package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +22 -39
  66. package/src/app/routes/_authenticated/_orders/components/order-table.tsx +4 -4
  67. package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +36 -37
  68. package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +33 -18
  69. package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +44 -43
  70. package/src/app/routes/_authenticated/_orders/orders.graphql.ts +3 -101
  71. package/src/app/routes/_authenticated/_orders/orders.tsx +20 -21
  72. package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +16 -72
  73. package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +90 -188
  74. package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +7 -10
  75. package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +11 -11
  76. package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +2 -29
  77. package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +14 -36
  78. package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +15 -22
  79. package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +6 -7
  80. package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +3 -64
  81. package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +9 -39
  82. package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +22 -33
  83. package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +10 -10
  84. package/src/app/routes/_authenticated/_products/components/create-product-options-dialog.tsx +41 -57
  85. package/src/app/routes/_authenticated/_products/components/create-product-variants-dialog.tsx +11 -11
  86. package/src/app/routes/_authenticated/_products/components/create-product-variants.tsx +14 -18
  87. package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +15 -21
  88. package/src/app/routes/_authenticated/_products/components/product-option-select.tsx +34 -28
  89. package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +53 -84
  90. package/src/app/routes/_authenticated/_products/products.graphql.ts +2 -70
  91. package/src/app/routes/_authenticated/_products/products.tsx +7 -36
  92. package/src/app/routes/_authenticated/_products/products_.$id.tsx +24 -33
  93. package/src/app/routes/_authenticated/_profile/profile.graphql.ts +1 -1
  94. package/src/app/routes/_authenticated/_profile/profile.tsx +8 -8
  95. package/src/app/routes/_authenticated/_promotions/components/promotion-actions-selector.tsx +11 -14
  96. package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +11 -14
  97. package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +2 -27
  98. package/src/app/routes/_authenticated/_promotions/promotions.tsx +7 -31
  99. package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +16 -20
  100. package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +5 -5
  101. package/src/app/routes/_authenticated/_roles/components/permissions-grid.tsx +17 -21
  102. package/src/app/routes/_authenticated/_roles/roles.graphql.ts +1 -10
  103. package/src/app/routes/_authenticated/_roles/roles.tsx +10 -17
  104. package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +12 -16
  105. package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +1 -10
  106. package/src/app/routes/_authenticated/_sellers/sellers.tsx +6 -13
  107. package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +13 -17
  108. package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +6 -6
  109. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +21 -23
  110. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +21 -25
  111. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-method-dialog.tsx +3 -3
  112. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.graphql.ts +2 -29
  113. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +6 -25
  114. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +13 -17
  115. package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +1 -26
  116. package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +6 -25
  117. package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +12 -16
  118. package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +4 -4
  119. package/src/app/routes/_authenticated/_system/healthchecks.tsx +4 -4
  120. package/src/app/routes/_authenticated/_system/job-queue.graphql.ts +1 -1
  121. package/src/app/routes/_authenticated/_system/job-queue.tsx +6 -10
  122. package/src/app/routes/_authenticated/_system/scheduled-tasks.tsx +28 -34
  123. package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +2 -11
  124. package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +7 -14
  125. package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +16 -20
  126. package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +2 -11
  127. package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +8 -15
  128. package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +18 -22
  129. package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +4 -4
  130. package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +8 -12
  131. package/src/app/routes/_authenticated/_zones/zones.graphql.ts +2 -11
  132. package/src/app/routes/_authenticated/_zones/zones.tsx +6 -13
  133. package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +14 -18
  134. package/src/app/routes/_authenticated/index.tsx +4 -4
  135. package/src/app/routes/_authenticated.tsx +3 -3
  136. package/src/app/routes/login.tsx +2 -2
  137. package/src/app/styles.css +1 -4
  138. package/src/lib/components/data-display/boolean.tsx +1 -1
  139. package/src/lib/components/data-display/date-time.tsx +2 -2
  140. package/src/lib/components/data-display/json.tsx +1 -1
  141. package/src/lib/components/data-display/money.tsx +3 -2
  142. package/src/lib/components/data-input/affixed-input.tsx +8 -3
  143. package/src/lib/components/data-input/customer-group-input.tsx +2 -2
  144. package/src/lib/components/data-input/datetime-input.tsx +146 -129
  145. package/src/lib/components/data-input/facet-value-input.tsx +22 -30
  146. package/src/lib/components/data-input/money-input.tsx +12 -5
  147. package/src/lib/components/data-input/{rich-text-input.tsx → richt-text-input.tsx} +1 -1
  148. package/src/lib/components/data-table/add-filter-menu.tsx +18 -9
  149. package/src/lib/components/data-table/data-table-column-header.tsx +22 -4
  150. package/src/lib/components/data-table/data-table-faceted-filter.tsx +8 -8
  151. package/src/lib/components/data-table/data-table-filter-badge.tsx +8 -16
  152. package/src/lib/components/data-table/data-table-filter-dialog.tsx +8 -8
  153. package/src/lib/components/data-table/data-table-pagination.tsx +4 -4
  154. package/src/lib/components/data-table/data-table-view-options.tsx +21 -25
  155. package/src/lib/components/data-table/data-table.tsx +41 -85
  156. package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +8 -11
  157. package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +23 -14
  158. package/src/lib/components/data-table/filters/data-table-id-filter.tsx +10 -15
  159. package/src/lib/components/data-table/filters/data-table-number-filter.tsx +17 -18
  160. package/src/lib/components/data-table/filters/data-table-string-filter.tsx +12 -29
  161. package/src/lib/components/data-table/human-readable-operator.tsx +3 -3
  162. package/src/lib/components/data-table/refresh-button.tsx +15 -30
  163. package/src/lib/components/layout/app-layout.tsx +8 -8
  164. package/src/lib/components/layout/app-sidebar.tsx +5 -5
  165. package/src/lib/components/layout/channel-switcher.tsx +8 -8
  166. package/src/lib/components/layout/content-language-selector.tsx +10 -16
  167. package/src/lib/components/layout/generated-breadcrumbs.tsx +1 -1
  168. package/src/lib/components/layout/language-dialog.tsx +11 -5
  169. package/src/lib/components/layout/nav-main.tsx +4 -4
  170. package/src/lib/components/layout/nav-projects.tsx +2 -2
  171. package/src/lib/components/layout/nav-user.tsx +7 -7
  172. package/src/lib/components/layout/prerelease-popup.tsx +1 -1
  173. package/src/lib/components/login/login-form.tsx +5 -5
  174. package/src/lib/components/shared/alerts.tsx +3 -3
  175. package/src/lib/components/shared/animated-number.tsx +2 -2
  176. package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +19 -29
  177. package/src/lib/components/shared/asset/asset-gallery.tsx +18 -23
  178. package/src/lib/components/shared/asset/asset-picker-dialog.tsx +66 -63
  179. package/src/lib/components/shared/asset/asset-preview-dialog.tsx +7 -3
  180. package/src/lib/components/shared/asset/asset-preview-selector.tsx +6 -4
  181. package/src/lib/components/shared/asset/asset-preview.tsx +15 -7
  182. package/src/lib/components/shared/asset/asset-properties.tsx +9 -7
  183. package/src/lib/components/shared/asset/focal-point-control.tsx +13 -5
  184. package/src/lib/components/shared/assigned-facet-values.tsx +5 -1
  185. package/src/lib/components/shared/channel-code-label.tsx +4 -3
  186. package/src/lib/components/shared/channel-selector.tsx +6 -6
  187. package/src/lib/components/shared/configurable-operation-arg-input.tsx +2 -2
  188. package/src/lib/components/shared/configurable-operation-input.tsx +16 -15
  189. package/src/lib/components/shared/confirmation-dialog.tsx +2 -2
  190. package/src/lib/components/shared/copyable-text.tsx +3 -2
  191. package/src/lib/components/shared/country-selector.tsx +18 -21
  192. package/src/lib/components/shared/currency-selector.tsx +5 -5
  193. package/src/lib/components/shared/custom-fields-form.tsx +51 -253
  194. package/src/lib/components/shared/customer-address-form.tsx +13 -18
  195. package/src/lib/components/shared/customer-group-selector.tsx +6 -6
  196. package/src/lib/components/shared/customer-selector.tsx +18 -24
  197. package/src/lib/components/shared/detail-page-button.tsx +1 -3
  198. package/src/lib/components/shared/entity-assets.tsx +34 -33
  199. package/src/lib/components/shared/error-page.tsx +6 -6
  200. package/src/lib/components/shared/facet-value-chip.tsx +5 -12
  201. package/src/lib/components/shared/facet-value-selector.tsx +63 -64
  202. package/src/lib/components/shared/form-field-wrapper.tsx +13 -22
  203. package/src/lib/components/shared/history-timeline/history-entry.tsx +6 -12
  204. package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +3 -3
  205. package/src/lib/components/shared/history-timeline/history-note-editor.tsx +4 -4
  206. package/src/lib/components/shared/history-timeline/history-note-input.tsx +3 -3
  207. package/src/lib/components/shared/history-timeline/history-timeline.tsx +8 -15
  208. package/src/lib/components/shared/language-selector.tsx +5 -5
  209. package/src/lib/components/shared/logo-mark.tsx +2 -2
  210. package/src/lib/components/shared/multi-select.tsx +5 -5
  211. package/src/lib/components/shared/navigation-confirmation.tsx +9 -24
  212. package/src/lib/components/shared/option-value-input.tsx +15 -17
  213. package/src/lib/components/shared/paginated-list-data-table.tsx +24 -100
  214. package/src/lib/components/shared/permission-guard.tsx +4 -4
  215. package/src/lib/components/shared/product-variant-selector.tsx +31 -32
  216. package/src/lib/components/shared/role-code-label.tsx +6 -10
  217. package/src/lib/components/shared/role-selector.tsx +4 -4
  218. package/src/lib/components/shared/seller-selector.tsx +17 -21
  219. package/src/lib/components/shared/stock-level-label.tsx +5 -5
  220. package/src/lib/components/shared/tax-category-selector.tsx +5 -5
  221. package/src/lib/components/shared/translatable-form-field.tsx +10 -5
  222. package/src/lib/components/shared/vendure-image.tsx +2 -31
  223. package/src/lib/components/shared/zone-selector.tsx +6 -5
  224. package/src/lib/components/ui/accordion.tsx +3 -3
  225. package/src/lib/components/ui/alert-dialog.tsx +10 -10
  226. package/src/lib/components/ui/alert.tsx +3 -3
  227. package/src/lib/components/ui/badge.tsx +2 -2
  228. package/src/lib/components/ui/breadcrumb.tsx +4 -4
  229. package/src/lib/components/ui/button.tsx +3 -10
  230. package/src/lib/components/ui/calendar.tsx +459 -392
  231. package/src/lib/components/ui/card.tsx +2 -2
  232. package/src/lib/components/ui/checkbox.tsx +2 -2
  233. package/src/lib/components/ui/command.tsx +6 -12
  234. package/src/lib/components/ui/dialog.tsx +2 -2
  235. package/src/lib/components/ui/dropdown-menu.tsx +7 -7
  236. package/src/lib/components/ui/form.tsx +4 -4
  237. package/src/lib/components/ui/hover-card.tsx +3 -3
  238. package/src/lib/components/ui/input.tsx +1 -1
  239. package/src/lib/components/ui/label.tsx +2 -2
  240. package/src/lib/components/ui/pagination.tsx +108 -87
  241. package/src/lib/components/ui/popover.tsx +3 -3
  242. package/src/lib/components/ui/scroll-area.tsx +2 -2
  243. package/src/lib/components/ui/select.tsx +129 -151
  244. package/src/lib/components/ui/separator.tsx +2 -2
  245. package/src/lib/components/ui/sheet.tsx +5 -5
  246. package/src/lib/components/ui/sidebar.tsx +10 -10
  247. package/src/lib/components/ui/skeleton.tsx +1 -1
  248. package/src/lib/components/ui/switch.tsx +2 -2
  249. package/src/lib/components/ui/table.tsx +2 -2
  250. package/src/lib/components/ui/tabs.tsx +3 -3
  251. package/src/lib/components/ui/textarea.tsx +1 -1
  252. package/src/lib/components/ui/tooltip.tsx +3 -3
  253. package/src/lib/framework/alert/alert-extensions.tsx +3 -2
  254. package/src/lib/framework/alert/alert-item.tsx +3 -5
  255. package/src/lib/framework/alert/types.ts +13 -0
  256. package/src/lib/framework/component-registry/component-registry.tsx +47 -33
  257. package/src/lib/framework/dashboard-widget/base-widget.tsx +13 -5
  258. package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +8 -8
  259. package/src/lib/framework/dashboard-widget/latest-orders-widget/latest-orders-widget.graphql.ts +1 -1
  260. package/src/lib/framework/dashboard-widget/metrics-widget/index.tsx +7 -6
  261. package/src/lib/framework/dashboard-widget/metrics-widget/metrics-widget.graphql.ts +1 -1
  262. package/src/lib/framework/dashboard-widget/orders-summary/index.tsx +6 -7
  263. package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +1 -1
  264. package/src/lib/framework/dashboard-widget/types.ts +22 -0
  265. package/src/lib/framework/dashboard-widget/widget-extensions.tsx +1 -1
  266. package/src/lib/framework/defaults.ts +1 -1
  267. package/src/lib/framework/document-introspection/add-custom-fields.ts +2 -50
  268. package/src/lib/framework/document-introspection/get-document-structure.ts +10 -43
  269. package/src/lib/framework/document-introspection/hooks.ts +1 -4
  270. package/src/lib/framework/extension-api/define-dashboard-extension.ts +49 -31
  271. package/src/lib/framework/extension-api/extension-api-types.ts +98 -25
  272. package/src/lib/framework/extension-api/use-dashboard-extensions.ts +1 -2
  273. package/src/lib/framework/form-engine/form-schema-tools.ts +1 -1
  274. package/src/lib/framework/form-engine/use-generated-form.tsx +18 -57
  275. package/src/lib/framework/layout-engine/location-wrapper.tsx +8 -11
  276. package/src/lib/framework/layout-engine/page-layout.tsx +48 -66
  277. package/src/lib/framework/page/detail-page-route-loader.tsx +7 -26
  278. package/src/lib/framework/page/detail-page.tsx +37 -122
  279. package/src/lib/framework/page/list-page.tsx +11 -9
  280. package/src/lib/framework/page/use-detail-page.ts +7 -38
  281. package/src/lib/framework/page/use-extended-router.tsx +5 -4
  282. package/src/lib/framework/registry/registry-types.ts +5 -15
  283. package/src/lib/graphql/{fragments.ts → fragments.tsx} +2 -1
  284. package/src/lib/graphql/graphql-env.d.ts +13 -16
  285. package/src/lib/hooks/use-auth.tsx +1 -1
  286. package/src/lib/hooks/use-channel.ts +1 -1
  287. package/src/lib/hooks/use-grouped-permissions.ts +2 -3
  288. package/src/lib/hooks/use-page.tsx +2 -2
  289. package/src/lib/hooks/use-permissions.ts +2 -3
  290. package/src/lib/hooks/use-server-config.ts +1 -1
  291. package/src/lib/hooks/use-theme.ts +1 -1
  292. package/src/lib/hooks/use-user-settings.tsx +1 -1
  293. package/src/lib/index.ts +6 -65
  294. package/src/lib/lib/trans.tsx +3 -3
  295. package/src/lib/lib/utils.ts +0 -49
  296. package/src/lib/providers/auth.tsx +14 -37
  297. package/src/lib/providers/channel-provider.tsx +4 -4
  298. package/src/lib/providers/server-config.tsx +11 -13
  299. package/src/lib/providers/theme-provider.tsx +3 -2
  300. package/vite/utils/config-loader.ts +10 -120
  301. package/vite/vite-plugin-config-loader.ts +1 -6
  302. package/vite/vite-plugin-config.ts +7 -6
  303. package/vite/vite-plugin-dashboard-metadata.ts +9 -1
  304. package/vite/vite-plugin-vendure-dashboard.ts +4 -48
  305. package/dist/plugin/tests/barrel-exports/my-plugin/index.d.ts +0 -1
  306. package/dist/plugin/tests/barrel-exports/my-plugin/index.js +0 -17
  307. package/dist/plugin/tests/barrel-exports/my-plugin/src/my.plugin.d.ts +0 -2
  308. package/dist/plugin/tests/barrel-exports/my-plugin/src/my.plugin.js +0 -20
  309. package/dist/plugin/tests/barrel-exports/vendure-config.d.ts +0 -2
  310. package/dist/plugin/tests/barrel-exports/vendure-config.js +0 -19
  311. package/dist/plugin/tests/barrel-exports.spec.d.ts +0 -1
  312. package/dist/plugin/tests/barrel-exports.spec.js +0 -14
  313. package/dist/plugin/vite-plugin-tailwind-source.d.ts +0 -7
  314. package/dist/plugin/vite-plugin-tailwind-source.js +0 -49
  315. package/src/app/common/delete-bulk-action.tsx +0 -148
  316. package/src/app/common/duplicate-bulk-action.tsx +0 -134
  317. package/src/app/routes/_authenticated/_administrators/components/administrator-bulk-actions.tsx +0 -15
  318. package/src/app/routes/_authenticated/_assets/components/asset-bulk-actions.tsx +0 -45
  319. package/src/app/routes/_authenticated/_channels/components/channel-bulk-actions.tsx +0 -15
  320. package/src/app/routes/_authenticated/_collections/components/collection-bulk-actions.tsx +0 -123
  321. package/src/app/routes/_authenticated/_collections/components/move-collections-dialog.tsx +0 -430
  322. package/src/app/routes/_authenticated/_collections/components/move-single-collection.tsx +0 -33
  323. package/src/app/routes/_authenticated/_countries/components/country-bulk-actions.tsx +0 -15
  324. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-bulk-actions.tsx +0 -15
  325. package/src/app/routes/_authenticated/_customers/components/customer-bulk-actions.tsx +0 -15
  326. package/src/app/routes/_authenticated/_facets/components/facet-bulk-actions.tsx +0 -104
  327. package/src/app/routes/_authenticated/_orders/components/add-manual-payment-dialog.tsx +0 -191
  328. package/src/app/routes/_authenticated/_orders/components/fulfill-order-dialog.tsx +0 -320
  329. package/src/app/routes/_authenticated/_orders/components/fulfillment-details.tsx +0 -173
  330. package/src/app/routes/_authenticated/_orders/utils/order-types.ts +0 -7
  331. package/src/app/routes/_authenticated/_orders/utils/order-utils.ts +0 -77
  332. package/src/app/routes/_authenticated/_payment-methods/components/payment-method-bulk-actions.tsx +0 -58
  333. package/src/app/routes/_authenticated/_product-variants/components/product-variant-bulk-actions.tsx +0 -110
  334. package/src/app/routes/_authenticated/_products/components/assign-facet-values-dialog.tsx +0 -281
  335. package/src/app/routes/_authenticated/_products/components/product-bulk-actions.tsx +0 -123
  336. package/src/app/routes/_authenticated/_promotions/components/promotion-bulk-actions.tsx +0 -82
  337. package/src/app/routes/_authenticated/_roles/components/role-bulk-actions.tsx +0 -15
  338. package/src/app/routes/_authenticated/_sellers/components/seller-bulk-actions.tsx +0 -15
  339. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-bulk-actions.tsx +0 -61
  340. package/src/app/routes/_authenticated/_stock-locations/components/stock-location-bulk-actions.tsx +0 -58
  341. package/src/app/routes/_authenticated/_tax-categories/components/tax-category-bulk-actions.tsx +0 -15
  342. package/src/app/routes/_authenticated/_tax-rates/components/tax-rate-bulk-actions.tsx +0 -15
  343. package/src/app/routes/_authenticated/_zones/components/zone-bulk-actions.tsx +0 -15
  344. package/src/lib/components/data-input/index.ts +0 -11
  345. package/src/lib/components/data-input/relation-input.tsx +0 -153
  346. package/src/lib/components/data-input/relation-selector.tsx +0 -468
  347. package/src/lib/components/data-table/data-table-bulk-action-item.tsx +0 -101
  348. package/src/lib/components/data-table/data-table-bulk-actions.tsx +0 -95
  349. package/src/lib/components/labeled-data.tsx +0 -21
  350. package/src/lib/components/shared/asset/asset-bulk-actions.tsx +0 -94
  351. package/src/lib/components/shared/assign-to-channel-bulk-action.tsx +0 -71
  352. package/src/lib/components/shared/assign-to-channel-dialog.tsx +0 -155
  353. package/src/lib/components/shared/remove-from-channel-bulk-action.tsx +0 -90
  354. package/src/lib/framework/data-table/data-table-extensions.ts +0 -35
  355. package/src/lib/framework/document-extension/extend-detail-form-query.ts +0 -50
  356. package/src/lib/framework/document-extension/extend-document.spec.ts +0 -884
  357. package/src/lib/framework/document-extension/extend-document.ts +0 -159
  358. package/src/lib/framework/extension-api/display-component-extensions.tsx +0 -69
  359. package/src/lib/framework/extension-api/input-component-extensions.tsx +0 -69
  360. package/src/lib/framework/extension-api/logic/alerts.ts +0 -10
  361. package/src/lib/framework/extension-api/logic/data-table.ts +0 -60
  362. package/src/lib/framework/extension-api/logic/detail-forms.ts +0 -48
  363. package/src/lib/framework/extension-api/logic/form-components.ts +0 -13
  364. package/src/lib/framework/extension-api/logic/index.ts +0 -8
  365. package/src/lib/framework/extension-api/logic/layout.ts +0 -22
  366. package/src/lib/framework/extension-api/logic/navigation.ts +0 -37
  367. package/src/lib/framework/extension-api/logic/widgets.ts +0 -10
  368. package/src/lib/framework/extension-api/types/alerts.ts +0 -54
  369. package/src/lib/framework/extension-api/types/data-table.ts +0 -87
  370. package/src/lib/framework/extension-api/types/detail-forms.ts +0 -81
  371. package/src/lib/framework/extension-api/types/form-components.ts +0 -32
  372. package/src/lib/framework/extension-api/types/index.ts +0 -8
  373. package/src/lib/framework/extension-api/types/layout.ts +0 -78
  374. package/src/lib/framework/extension-api/types/navigation.ts +0 -19
  375. package/src/lib/framework/extension-api/types/widgets.ts +0 -97
  376. package/src/lib/framework/form-engine/custom-form-component-extensions.ts +0 -38
  377. package/src/lib/framework/form-engine/custom-form-component.tsx +0 -33
  378. package/src/lib/framework/form-engine/utils.ts +0 -58
  379. package/src/lib/framework/layout-engine/page-block-provider.tsx +0 -6
  380. package/src/lib/graphql/common-operations.ts +0 -18
  381. package/src/lib/hooks/use-extended-detail-query.ts +0 -37
  382. package/src/lib/hooks/use-extended-list-query.ts +0 -73
  383. package/src/lib/hooks/use-page-block.tsx +0 -10
  384. package/vite/tests/barrel-exports/my-plugin/index.ts +0 -1
  385. package/vite/tests/barrel-exports/my-plugin/src/my.plugin.ts +0 -8
  386. package/vite/tests/barrel-exports/package.json +0 -6
  387. package/vite/tests/barrel-exports/vendure-config.ts +0 -19
  388. package/vite/tests/barrel-exports.spec.ts +0 -21
  389. package/vite/vite-plugin-tailwind-source.ts +0 -65
  390. /package/src/lib/components/data-table/{types.ts → data-table-types.ts} +0 -0
@@ -1,159 +0,0 @@
1
- import { Variables } from '@/vdb/graphql/api.js';
2
- import type { TypedDocumentNode } from '@graphql-typed-document-node/core';
3
- import {
4
- DefinitionNode,
5
- DocumentNode,
6
- FieldNode,
7
- FragmentDefinitionNode,
8
- Kind,
9
- OperationDefinitionNode,
10
- parse,
11
- SelectionNode,
12
- SelectionSetNode,
13
- } from 'graphql';
14
-
15
- /**
16
- * Type-safe template string function for extending GraphQL documents
17
- */
18
- export function extendDocument<T extends TypedDocumentNode, V extends Variables = Variables>(
19
- defaultDocument: T,
20
- template: TemplateStringsArray,
21
- ...values: any[]
22
- ): T;
23
- export function extendDocument<T extends TypedDocumentNode, V extends Variables = Variables>(
24
- defaultDocument: T,
25
- sdl: string | DocumentNode,
26
- ): T;
27
- export function extendDocument<T extends TypedDocumentNode, V extends Variables = Variables>(
28
- defaultDocument: T,
29
- template: TemplateStringsArray | string | DocumentNode,
30
- ...values: any[]
31
- ): T {
32
- // Handle template strings, regular strings, and DocumentNode
33
- let extensionDocument: DocumentNode;
34
- if (Array.isArray(template)) {
35
- // Template string array
36
- const sdl = (template as TemplateStringsArray).reduce((result, str, i) => {
37
- return result + str + String(values[i] ?? '');
38
- }, '');
39
- extensionDocument = parse(sdl);
40
- } else if (typeof template === 'string') {
41
- // Regular string
42
- extensionDocument = parse(template);
43
- } else {
44
- // DocumentNode
45
- extensionDocument = template as DocumentNode;
46
- }
47
-
48
- // Merge the documents
49
- const mergedDocument = mergeDocuments(defaultDocument, extensionDocument);
50
-
51
- return mergedDocument as T;
52
- }
53
-
54
- /**
55
- * Merges two GraphQL documents, adding fields from the extension to the base document
56
- */
57
- function mergeDocuments(baseDocument: DocumentNode, extensionDocument: DocumentNode): DocumentNode {
58
- const baseClone = JSON.parse(JSON.stringify(baseDocument)) as DocumentNode;
59
-
60
- // Get all operation definitions from both documents
61
- const baseOperations = baseClone.definitions.filter(isOperationDefinition);
62
- const extensionOperations = extensionDocument.definitions.filter(isOperationDefinition);
63
-
64
- // Get all fragment definitions from both documents
65
- const baseFragments = baseClone.definitions.filter(isFragmentDefinition);
66
- const extensionFragments = extensionDocument.definitions.filter(isFragmentDefinition);
67
-
68
- // Merge fragments first (extensions can reference them)
69
- const mergedFragments = [...baseFragments, ...extensionFragments];
70
-
71
- // For each operation in the extension, find the corresponding base operation and merge
72
- for (const extensionOp of extensionOperations) {
73
- // Get the top-level field name from the extension operation
74
- const extensionField = extensionOp.selectionSet.selections[0] as FieldNode;
75
- if (!extensionField) {
76
- throw new Error('Extension query must have at least one top-level field');
77
- }
78
-
79
- // Find a base operation that has the same top-level field
80
- const baseOp = baseOperations.find(op => {
81
- const baseField = op.selectionSet.selections[0] as FieldNode;
82
- return baseField && baseField.name.value === extensionField.name.value;
83
- });
84
-
85
- if (!baseOp) {
86
- const validQueryFields = baseOperations
87
- .map(op => {
88
- const field = op.selectionSet.selections[0] as FieldNode;
89
- return field ? field.name.value : 'unknown';
90
- })
91
- .join(', ');
92
- throw new Error(
93
- `The query extension must extend the '${validQueryFields}' query. ` +
94
- `Got '${extensionField.name.value}' instead.`,
95
- );
96
- }
97
-
98
- // Merge the selection sets of the matching top-level fields
99
- const baseFieldNode = baseOp.selectionSet.selections[0] as FieldNode;
100
- if (baseFieldNode.selectionSet && extensionField.selectionSet) {
101
- mergeSelectionSets(baseFieldNode.selectionSet, extensionField.selectionSet);
102
- }
103
- }
104
-
105
- // Update the document with merged definitions
106
- (baseClone as any).definitions = [...baseOperations, ...mergedFragments];
107
-
108
- return baseClone;
109
- }
110
-
111
- /**
112
- * Merges two selection sets, adding fields from the extension to the base
113
- */
114
- function mergeSelectionSets(
115
- baseSelectionSet: SelectionSetNode,
116
- extensionSelectionSet: SelectionSetNode,
117
- ): void {
118
- const baseFields = baseSelectionSet.selections.filter(isFieldNode);
119
- const extensionFields = extensionSelectionSet.selections.filter(isFieldNode);
120
-
121
- for (const extensionField of extensionFields) {
122
- const existingField = baseFields.find(field => field.name.value === extensionField.name.value);
123
-
124
- if (existingField) {
125
- // Field already exists, merge their selection sets if both have them
126
- if (existingField.selectionSet && extensionField.selectionSet) {
127
- mergeSelectionSets(existingField.selectionSet, extensionField.selectionSet);
128
- } else if (extensionField.selectionSet && !existingField.selectionSet) {
129
- // Extension has a selection set but base doesn't, add it
130
- (existingField as any).selectionSet = extensionField.selectionSet;
131
- }
132
- } else {
133
- // Field doesn't exist, add it
134
- (baseSelectionSet as any).selections.push(extensionField);
135
- }
136
- }
137
- }
138
-
139
- /**
140
- * Type guards
141
- */
142
- function isOperationDefinition(value: DefinitionNode): value is OperationDefinitionNode {
143
- return value.kind === Kind.OPERATION_DEFINITION;
144
- }
145
-
146
- function isFragmentDefinition(value: DefinitionNode): value is FragmentDefinitionNode {
147
- return value.kind === Kind.FRAGMENT_DEFINITION;
148
- }
149
-
150
- function isFieldNode(value: SelectionNode): value is FieldNode {
151
- return value.kind === Kind.FIELD;
152
- }
153
-
154
- /**
155
- * Utility function to create a template string tag for better DX
156
- */
157
- export function gqlExtend(strings: TemplateStringsArray, ...values: any[]) {
158
- return (defaultDocument: DocumentNode) => extendDocument(defaultDocument, strings, ...values);
159
- }
@@ -1,69 +0,0 @@
1
- import { BooleanDisplayBadge, BooleanDisplayCheckbox } from '@/vdb/components/data-display/boolean.js';
2
- import { DateTime } from '@/vdb/components/data-display/date-time.js';
3
- import { Money } from '@/vdb/components/data-display/money.js';
4
- import { VendureImage } from '@/vdb/components/shared/vendure-image.js';
5
- import { DataDisplayComponent } from '../component-registry/component-registry.js';
6
- import { globalRegistry } from '../registry/global-registry.js';
7
-
8
- globalRegistry.register('displayComponents', new Map<string, DataDisplayComponent>());
9
-
10
- // Create component function for asset display
11
- const AssetDisplay: DataDisplayComponent = ({ value }) => <VendureImage asset={value} preset="tiny" />;
12
-
13
- // Register built-in display components
14
- const displayComponents = globalRegistry.get('displayComponents');
15
- displayComponents.set('vendure:booleanCheckbox', BooleanDisplayCheckbox);
16
- displayComponents.set('vendure:booleanBadge', BooleanDisplayBadge);
17
- displayComponents.set('vendure:dateTime', DateTime);
18
- displayComponents.set('vendure:asset', AssetDisplay);
19
- displayComponents.set('vendure:money', Money);
20
-
21
- export function getDisplayComponent(id: string): DataDisplayComponent | undefined {
22
- return globalRegistry.get('displayComponents').get(id);
23
- }
24
-
25
- /**
26
- * @description
27
- * Gets a display component using the targeting properties.
28
- * Uses the same key pattern as registration: pageId_blockId_fieldName
29
- */
30
- export function getTargetedDisplayComponent(
31
- pageId: string,
32
- blockId: string,
33
- field: string,
34
- ): DataDisplayComponent | undefined {
35
- const key = generateDisplayComponentKey(pageId, blockId, field);
36
- return globalRegistry.get('displayComponents').get(key);
37
- }
38
-
39
- /**
40
- * @description
41
- * Generates a display component key based on the targeting properties.
42
- * Follows the existing pattern: pageId_blockId_fieldName
43
- */
44
- export function generateDisplayComponentKey(pageId: string, blockId: string, field: string): string {
45
- return `${pageId}_${blockId}_${field}`;
46
- }
47
-
48
- export function addDisplayComponent({
49
- pageId,
50
- blockId,
51
- field,
52
- component,
53
- }: {
54
- pageId: string;
55
- blockId: string;
56
- field: string;
57
- component: React.ComponentType<{ value: any; [key: string]: any }>;
58
- }) {
59
- const displayComponents = globalRegistry.get('displayComponents');
60
-
61
- // Generate the key using the helper function
62
- const key = generateDisplayComponentKey(pageId, blockId, field);
63
-
64
- if (displayComponents.has(key)) {
65
- // eslint-disable-next-line no-console
66
- console.warn(`Display component with key "${key}" is already registered and will be overwritten.`);
67
- }
68
- displayComponents.set(key, component);
69
- }
@@ -1,69 +0,0 @@
1
- import { DateTimeInput } from '@/vdb/components/data-input/datetime-input.js';
2
- import { FacetValueInput } from '@/vdb/components/data-input/facet-value-input.js';
3
- import { MoneyInput } from '@/vdb/components/data-input/money-input.js';
4
- import { Checkbox } from '@/vdb/components/ui/checkbox.js';
5
- import { Input } from '@/vdb/components/ui/input.js';
6
- import { DataInputComponent } from '../component-registry/component-registry.js';
7
- import { globalRegistry } from '../registry/global-registry.js';
8
-
9
- globalRegistry.register('inputComponents', new Map<string, DataInputComponent>());
10
-
11
- // Create component functions for built-in components
12
- const TextInput: DataInputComponent = props => (
13
- <Input {...props} onChange={e => props.onChange(e.target.value)} />
14
- );
15
- const NumberInput: DataInputComponent = props => (
16
- <Input {...props} onChange={e => props.onChange(e.target.valueAsNumber)} type="number" />
17
- );
18
- const CheckboxInput: DataInputComponent = props => (
19
- <Checkbox
20
- {...props}
21
- checked={props.value === 'true' || props.value === true}
22
- onCheckedChange={value => props.onChange(value)}
23
- />
24
- );
25
-
26
- // Register built-in input components
27
- const inputComponents = globalRegistry.get('inputComponents');
28
- inputComponents.set('vendure:moneyInput', MoneyInput);
29
- inputComponents.set('vendure:textInput', TextInput);
30
- inputComponents.set('vendure:numberInput', NumberInput);
31
- inputComponents.set('vendure:dateTimeInput', DateTimeInput);
32
- inputComponents.set('vendure:checkboxInput', CheckboxInput);
33
- inputComponents.set('vendure:facetValueInput', FacetValueInput);
34
-
35
- export function getInputComponent(id: string): DataInputComponent | undefined {
36
- return globalRegistry.get('inputComponents').get(id);
37
- }
38
-
39
- /**
40
- * @description
41
- * Generates a component key based on the targeting properties.
42
- * Follows the existing pattern: pageId_blockId_fieldName
43
- */
44
- export function generateInputComponentKey(pageId: string, blockId: string, field: string): string {
45
- return `${pageId}_${blockId}_${field}`;
46
- }
47
-
48
- export function addInputComponent({
49
- pageId,
50
- blockId,
51
- field,
52
- component,
53
- }: {
54
- pageId: string;
55
- blockId: string;
56
- field: string;
57
- component: React.ComponentType<{ value: any; onChange: (value: any) => void; [key: string]: any }>;
58
- }) {
59
- const inputComponents = globalRegistry.get('inputComponents');
60
-
61
- // Generate the key using the helper function
62
- const key = generateInputComponentKey(pageId, blockId, field);
63
-
64
- if (inputComponents.has(key)) {
65
- // eslint-disable-next-line no-console
66
- console.warn(`Input component with key "${key}" is already registered and will be overwritten.`);
67
- }
68
- inputComponents.set(key, component);
69
- }
@@ -1,10 +0,0 @@
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
- }
@@ -1,60 +0,0 @@
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
- }
@@ -1,48 +0,0 @@
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
- }
@@ -1,13 +0,0 @@
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
- }
@@ -1,8 +0,0 @@
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 './navigation.js';
8
- export * from './widgets.js';
@@ -1,22 +0,0 @@
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
- }
@@ -1,37 +0,0 @@
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
- };
29
- addNavMenuItem(item, route.navMenuItem.sectionId);
30
- }
31
- if (route.path) {
32
- // Configure a list page
33
- registerRoute(route);
34
- }
35
- }
36
- }
37
- }
@@ -1,10 +0,0 @@
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
- }
@@ -1,54 +0,0 @@
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
- }
@@ -1,87 +0,0 @@
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
- * @since 3.4.0
11
- */
12
- export interface DashboardDataTableDisplayComponent {
13
- /**
14
- * @description
15
- * The name of the column where this display component should be used.
16
- */
17
- column: string;
18
- /**
19
- * @description
20
- * The React component that will be rendered as the display.
21
- * It should accept `value` and other standard display props.
22
- */
23
- component: React.ComponentType<{ value: any; [key: string]: any }>;
24
- }
25
-
26
- export type BulkActionContext<Item extends { id: string } & Record<string, any>> = {
27
- selection: Item[];
28
- table: Table<Item>;
29
- };
30
-
31
- export type BulkActionComponent<Item extends { id: string } & Record<string, any>> = React.FunctionComponent<
32
- BulkActionContext<Item>
33
- >;
34
-
35
- /**
36
- * @description
37
- * **Status: Developer Preview**
38
- *
39
- * A bulk action is a component that will be rendered in the bulk actions dropdown.
40
- *
41
- * @docsCategory components
42
- * @docsPage DataTableBulkActions
43
- * @since 3.4.0
44
- */
45
- export type BulkAction = {
46
- order?: number;
47
- component: BulkActionComponent<any>;
48
- };
49
-
50
- /**
51
- * @description
52
- * **Status: Developer Preview**
53
- *
54
- * This allows you to customize aspects of existing data tables in the dashboard.
55
- *
56
- * @docsCategory extensions
57
- * @since 3.4.0
58
- */
59
- export interface DashboardDataTableExtensionDefinition {
60
- /**
61
- * @description
62
- * The ID of the page where the data table is located, e.g. `'product-list'`, `'order-list'`.
63
- */
64
- pageId: string;
65
- /**
66
- * @description
67
- * The ID of the data table block. Defaults to `'list-table'`, which is the default blockId
68
- * for the standard list pages. However, some other pages may use a different blockId,
69
- * such as `'product-variants-table'` on the `'product-detail'` page.
70
- */
71
- blockId?: string;
72
- /**
73
- * @description
74
- * An array of additional bulk actions that will be available on the data table.
75
- */
76
- bulkActions?: BulkAction[];
77
- /**
78
- * @description
79
- * Allows you to extend the list document for the data table.
80
- */
81
- extendListDocument?: string | DocumentNode | (() => DocumentNode | string);
82
- /**
83
- * @description
84
- * Custom display components for specific columns in the data table.
85
- */
86
- displayComponents?: DashboardDataTableDisplayComponent[];
87
- }