@wilshop/dashboard 3.5.2

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 (697) hide show
  1. package/README.md +116 -0
  2. package/dist/plugin/api/api-extensions.d.ts +1 -0
  3. package/dist/plugin/api/api-extensions.js +35 -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 +8 -0
  9. package/dist/plugin/constants.js +31 -0
  10. package/dist/plugin/dashboard.plugin.d.ts +115 -0
  11. package/dist/plugin/dashboard.plugin.js +339 -0
  12. package/dist/plugin/default-page.html +193 -0
  13. package/dist/plugin/index.d.ts +2 -0
  14. package/dist/plugin/index.js +18 -0
  15. package/dist/plugin/package.json +3 -0
  16. package/dist/plugin/service/metrics.service.d.ts +15 -0
  17. package/dist/plugin/service/metrics.service.js +129 -0
  18. package/dist/plugin/types.d.ts +20 -0
  19. package/dist/plugin/types.js +9 -0
  20. package/dist/vite/constants.d.ts +5 -0
  21. package/dist/vite/constants.js +278 -0
  22. package/dist/vite/index.d.ts +1 -0
  23. package/dist/vite/index.js +1 -0
  24. package/dist/vite/types.d.ts +79 -0
  25. package/dist/vite/types.js +1 -0
  26. package/dist/vite/utils/ast-utils.d.ts +5 -0
  27. package/dist/vite/utils/ast-utils.js +29 -0
  28. package/dist/vite/utils/ast-utils.spec.d.ts +1 -0
  29. package/dist/vite/utils/ast-utils.spec.js +45 -0
  30. package/dist/vite/utils/compiler.d.ts +23 -0
  31. package/dist/vite/utils/compiler.js +165 -0
  32. package/dist/vite/utils/get-dashboard-paths.d.ts +5 -0
  33. package/dist/vite/utils/get-dashboard-paths.js +20 -0
  34. package/dist/vite/utils/logger.d.ts +3 -0
  35. package/dist/vite/utils/logger.js +39 -0
  36. package/dist/vite/utils/plugin-discovery.d.ts +27 -0
  37. package/dist/vite/utils/plugin-discovery.js +398 -0
  38. package/dist/vite/utils/schema-generator.d.ts +10 -0
  39. package/dist/vite/utils/schema-generator.js +35 -0
  40. package/dist/vite/utils/tsconfig-utils.d.ts +9 -0
  41. package/dist/vite/utils/tsconfig-utils.js +51 -0
  42. package/dist/vite/utils/ui-config.d.ts +3 -0
  43. package/dist/vite/utils/ui-config.js +30 -0
  44. package/dist/vite/vite-plugin-admin-api-schema.d.ts +24 -0
  45. package/dist/vite/vite-plugin-admin-api-schema.js +82 -0
  46. package/dist/vite/vite-plugin-config-loader.d.ts +16 -0
  47. package/dist/vite/vite-plugin-config-loader.js +70 -0
  48. package/dist/vite/vite-plugin-config.d.ts +4 -0
  49. package/dist/vite/vite-plugin-config.js +60 -0
  50. package/dist/vite/vite-plugin-dashboard-metadata.d.ts +7 -0
  51. package/dist/vite/vite-plugin-dashboard-metadata.js +61 -0
  52. package/dist/vite/vite-plugin-gql-tada.d.ts +6 -0
  53. package/dist/vite/vite-plugin-gql-tada.js +51 -0
  54. package/dist/vite/vite-plugin-hmr.d.ts +8 -0
  55. package/dist/vite/vite-plugin-hmr.js +34 -0
  56. package/dist/vite/vite-plugin-lingui-babel.d.ts +27 -0
  57. package/dist/vite/vite-plugin-lingui-babel.js +86 -0
  58. package/dist/vite/vite-plugin-tailwind-source.d.ts +7 -0
  59. package/dist/vite/vite-plugin-tailwind-source.js +48 -0
  60. package/dist/vite/vite-plugin-theme.d.ts +55 -0
  61. package/dist/vite/vite-plugin-theme.js +130 -0
  62. package/dist/vite/vite-plugin-transform-index.d.ts +11 -0
  63. package/dist/vite/vite-plugin-transform-index.js +40 -0
  64. package/dist/vite/vite-plugin-translations.d.ts +31 -0
  65. package/dist/vite/vite-plugin-translations.js +177 -0
  66. package/dist/vite/vite-plugin-ui-config.d.ts +150 -0
  67. package/dist/vite/vite-plugin-ui-config.js +36 -0
  68. package/dist/vite/vite-plugin-vendure-dashboard.d.ts +142 -0
  69. package/dist/vite/vite-plugin-vendure-dashboard.js +170 -0
  70. package/index.html +14 -0
  71. package/lingui.config.js +37 -0
  72. package/package.json +178 -0
  73. package/src/app/app-providers.tsx +31 -0
  74. package/src/app/common/delete-bulk-action.tsx +149 -0
  75. package/src/app/common/duplicate-bulk-action.tsx +147 -0
  76. package/src/app/common/duplicate-entity-dialog.tsx +117 -0
  77. package/src/app/common/map-faceted-filter-fields.ts +21 -0
  78. package/src/app/common/set-document-direction.ts +7 -0
  79. package/src/app/common/use-page-title.test.ts +263 -0
  80. package/src/app/common/use-page-title.ts +86 -0
  81. package/src/app/main.tsx +134 -0
  82. package/src/app/routeTree.gen.ts +1284 -0
  83. package/src/app/routes/__root.tsx +23 -0
  84. package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +88 -0
  85. package/src/app/routes/_authenticated/_administrators/administrators.tsx +104 -0
  86. package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +160 -0
  87. package/src/app/routes/_authenticated/_administrators/components/administrator-bulk-actions.tsx +15 -0
  88. package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +133 -0
  89. package/src/app/routes/_authenticated/_assets/assets.graphql.ts +76 -0
  90. package/src/app/routes/_authenticated/_assets/assets.tsx +48 -0
  91. package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +181 -0
  92. package/src/app/routes/_authenticated/_assets/components/asset-bulk-actions.tsx +47 -0
  93. package/src/app/routes/_authenticated/_assets/components/asset-tag-filter.tsx +206 -0
  94. package/src/app/routes/_authenticated/_assets/components/asset-tags-editor.tsx +226 -0
  95. package/src/app/routes/_authenticated/_assets/components/manage-tags-dialog.tsx +212 -0
  96. package/src/app/routes/_authenticated/_channels/channels.graphql.ts +102 -0
  97. package/src/app/routes/_authenticated/_channels/channels.tsx +81 -0
  98. package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +251 -0
  99. package/src/app/routes/_authenticated/_channels/components/channel-bulk-actions.tsx +15 -0
  100. package/src/app/routes/_authenticated/_collections/collections.graphql.ts +193 -0
  101. package/src/app/routes/_authenticated/_collections/collections.tsx +337 -0
  102. package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +236 -0
  103. package/src/app/routes/_authenticated/_collections/components/collection-bulk-actions.tsx +130 -0
  104. package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +153 -0
  105. package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +50 -0
  106. package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +83 -0
  107. package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +24 -0
  108. package/src/app/routes/_authenticated/_collections/components/move-collections-dialog.tsx +433 -0
  109. package/src/app/routes/_authenticated/_countries/components/country-bulk-actions.tsx +15 -0
  110. package/src/app/routes/_authenticated/_countries/countries.graphql.ts +82 -0
  111. package/src/app/routes/_authenticated/_countries/countries.tsx +72 -0
  112. package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +123 -0
  113. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-bulk-actions.tsx +15 -0
  114. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +51 -0
  115. package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +134 -0
  116. package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +80 -0
  117. package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +72 -0
  118. package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +121 -0
  119. package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +155 -0
  120. package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +347 -0
  121. package/src/app/routes/_authenticated/_customers/components/customer-bulk-actions.tsx +15 -0
  122. package/src/app/routes/_authenticated/_customers/components/customer-group-controls.tsx +4 -0
  123. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +78 -0
  124. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-types.ts +5 -0
  125. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-utils.tsx +124 -0
  126. package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +113 -0
  127. package/src/app/routes/_authenticated/_customers/components/customer-history/default-customer-history-components.tsx +176 -0
  128. package/src/app/routes/_authenticated/_customers/components/customer-history/index.ts +4 -0
  129. package/src/app/routes/_authenticated/_customers/components/customer-history/use-customer-history.ts +169 -0
  130. package/src/app/routes/_authenticated/_customers/components/customer-order-table.tsx +90 -0
  131. package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +33 -0
  132. package/src/app/routes/_authenticated/_customers/customers.graphql.ts +218 -0
  133. package/src/app/routes/_authenticated/_customers/customers.tsx +104 -0
  134. package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +280 -0
  135. package/src/app/routes/_authenticated/_facets/components/facet-bulk-actions.tsx +99 -0
  136. package/src/app/routes/_authenticated/_facets/components/facet-value-bulk-actions.tsx +16 -0
  137. package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +49 -0
  138. package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +139 -0
  139. package/src/app/routes/_authenticated/_facets/facets.graphql.ts +182 -0
  140. package/src/app/routes/_authenticated/_facets/facets.tsx +121 -0
  141. package/src/app/routes/_authenticated/_facets/facets_.$facetId.values_.$id.tsx +158 -0
  142. package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +152 -0
  143. package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +28 -0
  144. package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +161 -0
  145. package/src/app/routes/_authenticated/_orders/components/add-manual-payment-dialog.tsx +189 -0
  146. package/src/app/routes/_authenticated/_orders/components/add-surcharge-form.tsx +139 -0
  147. package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +100 -0
  148. package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +287 -0
  149. package/src/app/routes/_authenticated/_orders/components/fulfill-order-dialog.tsx +320 -0
  150. package/src/app/routes/_authenticated/_orders/components/fulfillment-details.tsx +159 -0
  151. package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +20 -0
  152. package/src/app/routes/_authenticated/_orders/components/order-address.tsx +65 -0
  153. package/src/app/routes/_authenticated/_orders/components/order-detail-shared.tsx +307 -0
  154. package/src/app/routes/_authenticated/_orders/components/order-history/default-order-history-components.tsx +98 -0
  155. package/src/app/routes/_authenticated/_orders/components/order-history/index.ts +3 -0
  156. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +80 -0
  157. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-types.ts +5 -0
  158. package/src/app/routes/_authenticated/_orders/components/order-history/order-history-utils.tsx +173 -0
  159. package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +104 -0
  160. package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +175 -0
  161. package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +53 -0
  162. package/src/app/routes/_authenticated/_orders/components/order-modification-preview-dialog.tsx +365 -0
  163. package/src/app/routes/_authenticated/_orders/components/order-modification-summary.tsx +261 -0
  164. package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +100 -0
  165. package/src/app/routes/_authenticated/_orders/components/order-table.tsx +194 -0
  166. package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +40 -0
  167. package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +293 -0
  168. package/src/app/routes/_authenticated/_orders/components/seller-orders-card.tsx +63 -0
  169. package/src/app/routes/_authenticated/_orders/components/settle-refund-dialog.tsx +80 -0
  170. package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +64 -0
  171. package/src/app/routes/_authenticated/_orders/components/state-transition-control.tsx +99 -0
  172. package/src/app/routes/_authenticated/_orders/components/use-transition-order-to-state.tsx +151 -0
  173. package/src/app/routes/_authenticated/_orders/orders.graphql.ts +775 -0
  174. package/src/app/routes/_authenticated/_orders/orders.tsx +120 -0
  175. package/src/app/routes/_authenticated/_orders/orders_.$aggregateOrderId_.seller-orders.$sellerOrderId.tsx +50 -0
  176. package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +30 -0
  177. package/src/app/routes/_authenticated/_orders/orders_.$id_.modify.tsx +298 -0
  178. package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +495 -0
  179. package/src/app/routes/_authenticated/_orders/utils/order-detail-loaders.tsx +134 -0
  180. package/src/app/routes/_authenticated/_orders/utils/order-types.ts +10 -0
  181. package/src/app/routes/_authenticated/_orders/utils/order-utils.ts +159 -0
  182. package/src/app/routes/_authenticated/_orders/utils/use-modify-order.ts +335 -0
  183. package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +37 -0
  184. package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +33 -0
  185. package/src/app/routes/_authenticated/_payment-methods/components/payment-method-bulk-actions.tsx +58 -0
  186. package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +110 -0
  187. package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +88 -0
  188. package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +197 -0
  189. package/src/app/routes/_authenticated/_product-variants/components/add-currency-dropdown.tsx +49 -0
  190. package/src/app/routes/_authenticated/_product-variants/components/add-stock-location-dropdown.tsx +56 -0
  191. package/src/app/routes/_authenticated/_product-variants/components/product-variant-bulk-actions.tsx +110 -0
  192. package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +88 -0
  193. package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +207 -0
  194. package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +98 -0
  195. package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +471 -0
  196. package/src/app/routes/_authenticated/_products/components/add-option-group-dialog.tsx +127 -0
  197. package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +372 -0
  198. package/src/app/routes/_authenticated/_products/components/assign-facet-values-dialog.tsx +282 -0
  199. package/src/app/routes/_authenticated/_products/components/create-product-options-dialog.tsx +416 -0
  200. package/src/app/routes/_authenticated/_products/components/create-product-variants-dialog.tsx +190 -0
  201. package/src/app/routes/_authenticated/_products/components/create-product-variants.tsx +370 -0
  202. package/src/app/routes/_authenticated/_products/components/option-groups-editor.tsx +180 -0
  203. package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +72 -0
  204. package/src/app/routes/_authenticated/_products/components/product-bulk-actions.tsx +117 -0
  205. package/src/app/routes/_authenticated/_products/components/product-option-group-badge.tsx +19 -0
  206. package/src/app/routes/_authenticated/_products/components/product-option-select.tsx +111 -0
  207. package/src/app/routes/_authenticated/_products/components/product-options-table.tsx +114 -0
  208. package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +120 -0
  209. package/src/app/routes/_authenticated/_products/product-option-groups.graphql.ts +103 -0
  210. package/src/app/routes/_authenticated/_products/products.graphql.ts +352 -0
  211. package/src/app/routes/_authenticated/_products/products.tsx +121 -0
  212. package/src/app/routes/_authenticated/_products/products_.$id.tsx +258 -0
  213. package/src/app/routes/_authenticated/_products/products_.$id_.variants.tsx +405 -0
  214. package/src/app/routes/_authenticated/_products/products_.$productId.option-groups.$id.tsx +177 -0
  215. package/src/app/routes/_authenticated/_products/products_.$productId.option-groups.$productOptionGroupId.options_.$id.tsx +204 -0
  216. package/src/app/routes/_authenticated/_profile/profile.graphql.ts +23 -0
  217. package/src/app/routes/_authenticated/_profile/profile.tsx +119 -0
  218. package/src/app/routes/_authenticated/_promotions/components/promotion-actions-selector.tsx +35 -0
  219. package/src/app/routes/_authenticated/_promotions/components/promotion-bulk-actions.tsx +72 -0
  220. package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +35 -0
  221. package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +121 -0
  222. package/src/app/routes/_authenticated/_promotions/promotions.tsx +94 -0
  223. package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +245 -0
  224. package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +54 -0
  225. package/src/app/routes/_authenticated/_roles/components/permissions-table-grid.tsx +251 -0
  226. package/src/app/routes/_authenticated/_roles/components/role-bulk-actions.tsx +15 -0
  227. package/src/app/routes/_authenticated/_roles/roles.graphql.ts +76 -0
  228. package/src/app/routes/_authenticated/_roles/roles.tsx +99 -0
  229. package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +146 -0
  230. package/src/app/routes/_authenticated/_sellers/components/seller-bulk-actions.tsx +15 -0
  231. package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +70 -0
  232. package/src/app/routes/_authenticated/_sellers/sellers.tsx +56 -0
  233. package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +112 -0
  234. package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +56 -0
  235. package/src/app/routes/_authenticated/_shipping-methods/components/metadata-badges.tsx +15 -0
  236. package/src/app/routes/_authenticated/_shipping-methods/components/price-display.tsx +21 -0
  237. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +33 -0
  238. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +36 -0
  239. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-bulk-actions.tsx +61 -0
  240. package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-test-result-wrapper.tsx +87 -0
  241. package/src/app/routes/_authenticated/_shipping-methods/components/test-address-form.tsx +256 -0
  242. package/src/app/routes/_authenticated/_shipping-methods/components/test-order-builder.tsx +244 -0
  243. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-methods-result.tsx +97 -0
  244. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-methods-sheet.tsx +41 -0
  245. package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-methods.tsx +74 -0
  246. package/src/app/routes/_authenticated/_shipping-methods/components/test-single-method-result.tsx +90 -0
  247. package/src/app/routes/_authenticated/_shipping-methods/components/test-single-shipping-method-sheet.tsx +56 -0
  248. package/src/app/routes/_authenticated/_shipping-methods/components/test-single-shipping-method.tsx +82 -0
  249. package/src/app/routes/_authenticated/_shipping-methods/components/use-shipping-method-test-state.ts +67 -0
  250. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.graphql.ts +137 -0
  251. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +76 -0
  252. package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +197 -0
  253. package/src/app/routes/_authenticated/_stock-locations/components/stock-location-bulk-actions.tsx +58 -0
  254. package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +87 -0
  255. package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +65 -0
  256. package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +126 -0
  257. package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +41 -0
  258. package/src/app/routes/_authenticated/_system/healthchecks.tsx +99 -0
  259. package/src/app/routes/_authenticated/_system/job-queue.graphql.ts +54 -0
  260. package/src/app/routes/_authenticated/_system/job-queue.tsx +265 -0
  261. package/src/app/routes/_authenticated/_system/scheduled-tasks.tsx +249 -0
  262. package/src/app/routes/_authenticated/_tax-categories/components/tax-category-bulk-actions.tsx +15 -0
  263. package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +72 -0
  264. package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +69 -0
  265. package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +127 -0
  266. package/src/app/routes/_authenticated/_tax-rates/components/tax-rate-bulk-actions.tsx +15 -0
  267. package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +84 -0
  268. package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +119 -0
  269. package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +149 -0
  270. package/src/app/routes/_authenticated/_zones/components/zone-bulk-actions.tsx +63 -0
  271. package/src/app/routes/_authenticated/_zones/components/zone-countries-add.tsx +0 -0
  272. package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +34 -0
  273. package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +94 -0
  274. package/src/app/routes/_authenticated/_zones/zones.graphql.ts +105 -0
  275. package/src/app/routes/_authenticated/_zones/zones.tsx +64 -0
  276. package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +110 -0
  277. package/src/app/routes/_authenticated/index.tsx +233 -0
  278. package/src/app/routes/_authenticated.tsx +35 -0
  279. package/src/app/routes/login.tsx +49 -0
  280. package/src/app/styles.css +100 -0
  281. package/src/app/tailwindcss-animate.css +275 -0
  282. package/src/i18n/common-strings.ts +111 -0
  283. package/src/i18n/locales/ar.po +4972 -0
  284. package/src/i18n/locales/bg.po +3436 -0
  285. package/src/i18n/locales/cs.po +4972 -0
  286. package/src/i18n/locales/de.po +4972 -0
  287. package/src/i18n/locales/en.po +4972 -0
  288. package/src/i18n/locales/es.po +4972 -0
  289. package/src/i18n/locales/fa.po +4972 -0
  290. package/src/i18n/locales/fr.po +4972 -0
  291. package/src/i18n/locales/he.po +4972 -0
  292. package/src/i18n/locales/hr.po +4972 -0
  293. package/src/i18n/locales/it.po +4972 -0
  294. package/src/i18n/locales/ja.po +4972 -0
  295. package/src/i18n/locales/ko.po +4628 -0
  296. package/src/i18n/locales/nb.po +4972 -0
  297. package/src/i18n/locales/ne.po +4972 -0
  298. package/src/i18n/locales/nl.po +4628 -0
  299. package/src/i18n/locales/pl.po +4972 -0
  300. package/src/i18n/locales/pt_BR.po +4972 -0
  301. package/src/i18n/locales/pt_PT.po +4972 -0
  302. package/src/i18n/locales/ru.po +4972 -0
  303. package/src/i18n/locales/sv.po +4972 -0
  304. package/src/i18n/locales/tr.po +4972 -0
  305. package/src/i18n/locales/uk.po +4972 -0
  306. package/src/i18n/locales/zh_Hans.po +4972 -0
  307. package/src/i18n/locales/zh_Hant.po +4972 -0
  308. package/src/lib/components/data-display/boolean.tsx +23 -0
  309. package/src/lib/components/data-display/date-time.tsx +19 -0
  310. package/src/lib/components/data-display/json.tsx +20 -0
  311. package/src/lib/components/data-display/money.tsx +14 -0
  312. package/src/lib/components/data-input/affixed-input.stories.tsx +93 -0
  313. package/src/lib/components/data-input/affixed-input.tsx +79 -0
  314. package/src/lib/components/data-input/boolean-input.stories.tsx +102 -0
  315. package/src/lib/components/data-input/boolean-input.tsx +16 -0
  316. package/src/lib/components/data-input/checkbox-input.stories.tsx +61 -0
  317. package/src/lib/components/data-input/checkbox-input.tsx +15 -0
  318. package/src/lib/components/data-input/combination-mode-input.tsx +61 -0
  319. package/src/lib/components/data-input/configurable-operation-list-input.tsx +58 -0
  320. package/src/lib/components/data-input/custom-field-list-input.tsx +294 -0
  321. package/src/lib/components/data-input/customer-group-input.tsx +61 -0
  322. package/src/lib/components/data-input/datetime-input.stories.tsx +62 -0
  323. package/src/lib/components/data-input/datetime-input.tsx +192 -0
  324. package/src/lib/components/data-input/default-relation-input.tsx +626 -0
  325. package/src/lib/components/data-input/facet-value-input.tsx +78 -0
  326. package/src/lib/components/data-input/index.ts +23 -0
  327. package/src/lib/components/data-input/money-input.stories.tsx +88 -0
  328. package/src/lib/components/data-input/money-input.tsx +122 -0
  329. package/src/lib/components/data-input/number-input.stories.tsx +103 -0
  330. package/src/lib/components/data-input/number-input.tsx +85 -0
  331. package/src/lib/components/data-input/password-form-input.stories.tsx +65 -0
  332. package/src/lib/components/data-input/password-form-input.tsx +23 -0
  333. package/src/lib/components/data-input/product-multi-selector-input.tsx +416 -0
  334. package/src/lib/components/data-input/relation-input.tsx +165 -0
  335. package/src/lib/components/data-input/relation-selector.tsx +476 -0
  336. package/src/lib/components/data-input/rich-text-input.stories.tsx +92 -0
  337. package/src/lib/components/data-input/rich-text-input.tsx +16 -0
  338. package/src/lib/components/data-input/select-with-options.tsx +96 -0
  339. package/src/lib/components/data-input/slug-input.stories.tsx +232 -0
  340. package/src/lib/components/data-input/slug-input.tsx +289 -0
  341. package/src/lib/components/data-input/string-list-input.tsx +268 -0
  342. package/src/lib/components/data-input/struct-form-input.tsx +320 -0
  343. package/src/lib/components/data-input/text-input.stories.tsx +52 -0
  344. package/src/lib/components/data-input/text-input.tsx +16 -0
  345. package/src/lib/components/data-input/textarea-input.stories.tsx +55 -0
  346. package/src/lib/components/data-input/textarea-input.tsx +23 -0
  347. package/src/lib/components/data-table/add-filter-menu.tsx +64 -0
  348. package/src/lib/components/data-table/column-header-wrapper.tsx +106 -0
  349. package/src/lib/components/data-table/data-table-bulk-action-item.tsx +141 -0
  350. package/src/lib/components/data-table/data-table-bulk-actions.tsx +99 -0
  351. package/src/lib/components/data-table/data-table-column-header.tsx +50 -0
  352. package/src/lib/components/data-table/data-table-context.tsx +106 -0
  353. package/src/lib/components/data-table/data-table-faceted-filter.tsx +195 -0
  354. package/src/lib/components/data-table/data-table-filter-badge-editable.tsx +35 -0
  355. package/src/lib/components/data-table/data-table-filter-badge.tsx +101 -0
  356. package/src/lib/components/data-table/data-table-filter-dialog.tsx +92 -0
  357. package/src/lib/components/data-table/data-table-pagination.tsx +103 -0
  358. package/src/lib/components/data-table/data-table-utils.ts +291 -0
  359. package/src/lib/components/data-table/data-table-view-options.tsx +130 -0
  360. package/src/lib/components/data-table/data-table.stories.tsx +249 -0
  361. package/src/lib/components/data-table/data-table.tsx +508 -0
  362. package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +60 -0
  363. package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +159 -0
  364. package/src/lib/components/data-table/filters/data-table-id-filter.tsx +63 -0
  365. package/src/lib/components/data-table/filters/data-table-number-filter.tsx +123 -0
  366. package/src/lib/components/data-table/filters/data-table-string-filter.tsx +79 -0
  367. package/src/lib/components/data-table/global-views-bar.tsx +97 -0
  368. package/src/lib/components/data-table/global-views-sheet.tsx +11 -0
  369. package/src/lib/components/data-table/human-readable-operator.tsx +65 -0
  370. package/src/lib/components/data-table/manage-global-views-button.tsx +26 -0
  371. package/src/lib/components/data-table/my-views-button.tsx +47 -0
  372. package/src/lib/components/data-table/refresh-button.tsx +49 -0
  373. package/src/lib/components/data-table/save-view-button.tsx +45 -0
  374. package/src/lib/components/data-table/save-view-dialog.tsx +134 -0
  375. package/src/lib/components/data-table/types.ts +40 -0
  376. package/src/lib/components/data-table/use-all-bulk-actions.ts +19 -0
  377. package/src/lib/components/data-table/use-generated-columns.tsx +411 -0
  378. package/src/lib/components/data-table/user-views-sheet.tsx +11 -0
  379. package/src/lib/components/data-table/views-sheet.tsx +305 -0
  380. package/src/lib/components/date-range-picker.tsx +186 -0
  381. package/src/lib/components/labeled-data.tsx +21 -0
  382. package/src/lib/components/layout/app-layout.tsx +35 -0
  383. package/src/lib/components/layout/app-sidebar.tsx +37 -0
  384. package/src/lib/components/layout/channel-switcher.tsx +229 -0
  385. package/src/lib/components/layout/content-language-selector.tsx +46 -0
  386. package/src/lib/components/layout/dev-mode-indicator.tsx +18 -0
  387. package/src/lib/components/layout/generated-breadcrumbs.tsx +136 -0
  388. package/src/lib/components/layout/language-dialog.tsx +133 -0
  389. package/src/lib/components/layout/manage-languages-dialog.tsx +386 -0
  390. package/src/lib/components/layout/nav-item-wrapper.tsx +107 -0
  391. package/src/lib/components/layout/nav-main.tsx +331 -0
  392. package/src/lib/components/layout/nav-projects.tsx +81 -0
  393. package/src/lib/components/layout/nav-user.tsx +180 -0
  394. package/src/lib/components/login/login-form.tsx +124 -0
  395. package/src/lib/components/shared/alerts.tsx +52 -0
  396. package/src/lib/components/shared/animated-number.tsx +49 -0
  397. package/src/lib/components/shared/asset/asset-bulk-actions.tsx +109 -0
  398. package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +103 -0
  399. package/src/lib/components/shared/asset/asset-gallery.stories.tsx +76 -0
  400. package/src/lib/components/shared/asset/asset-gallery.tsx +623 -0
  401. package/src/lib/components/shared/asset/asset-picker-dialog.stories.tsx +58 -0
  402. package/src/lib/components/shared/asset/asset-picker-dialog.tsx +109 -0
  403. package/src/lib/components/shared/asset/asset-preview-dialog.tsx +38 -0
  404. package/src/lib/components/shared/asset/asset-preview-selector.tsx +32 -0
  405. package/src/lib/components/shared/asset/asset-preview.tsx +114 -0
  406. package/src/lib/components/shared/asset/asset-properties.tsx +44 -0
  407. package/src/lib/components/shared/assign-to-channel-bulk-action.tsx +71 -0
  408. package/src/lib/components/shared/assign-to-channel-dialog.tsx +156 -0
  409. package/src/lib/components/shared/assigned-channels.tsx +108 -0
  410. package/src/lib/components/shared/assigned-facet-values.tsx +61 -0
  411. package/src/lib/components/shared/channel-chip.tsx +43 -0
  412. package/src/lib/components/shared/channel-code-label.tsx +6 -0
  413. package/src/lib/components/shared/channel-selector.tsx +51 -0
  414. package/src/lib/components/shared/configurable-operation-arg-input.tsx +29 -0
  415. package/src/lib/components/shared/configurable-operation-input.tsx +167 -0
  416. package/src/lib/components/shared/configurable-operation-multi-selector.tsx +263 -0
  417. package/src/lib/components/shared/configurable-operation-selector.tsx +156 -0
  418. package/src/lib/components/shared/confirmation-dialog.tsx +58 -0
  419. package/src/lib/components/shared/copyable-text.tsx +30 -0
  420. package/src/lib/components/shared/country-selector.tsx +108 -0
  421. package/src/lib/components/shared/currency-selector.tsx +33 -0
  422. package/src/lib/components/shared/custom-fields-form.tsx +296 -0
  423. package/src/lib/components/shared/customer-address-form.tsx +338 -0
  424. package/src/lib/components/shared/customer-group-chip.tsx +30 -0
  425. package/src/lib/components/shared/customer-group-selector.tsx +65 -0
  426. package/src/lib/components/shared/customer-selector.tsx +112 -0
  427. package/src/lib/components/shared/detail-page-button.stories.tsx +52 -0
  428. package/src/lib/components/shared/detail-page-button.tsx +59 -0
  429. package/src/lib/components/shared/entity-assets.tsx +411 -0
  430. package/src/lib/components/shared/error-page.tsx +31 -0
  431. package/src/lib/components/shared/facet-value-chip.tsx +59 -0
  432. package/src/lib/components/shared/facet-value-selector.stories.tsx +48 -0
  433. package/src/lib/components/shared/facet-value-selector.tsx +458 -0
  434. package/src/lib/components/shared/form-field-wrapper.tsx +111 -0
  435. package/src/lib/components/shared/history-timeline/history-entry-date.tsx +37 -0
  436. package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +28 -0
  437. package/src/lib/components/shared/history-timeline/history-note-editor.tsx +60 -0
  438. package/src/lib/components/shared/history-timeline/history-note-entry.tsx +65 -0
  439. package/src/lib/components/shared/history-timeline/history-note-input.tsx +39 -0
  440. package/src/lib/components/shared/history-timeline/history-timeline-with-grouping.tsx +141 -0
  441. package/src/lib/components/shared/history-timeline/history-timeline.tsx +16 -0
  442. package/src/lib/components/shared/history-timeline/use-history-note-editor.ts +26 -0
  443. package/src/lib/components/shared/icon-mark.tsx +18 -0
  444. package/src/lib/components/shared/language-selector.tsx +56 -0
  445. package/src/lib/components/shared/logo-mark.tsx +24 -0
  446. package/src/lib/components/shared/multi-select.tsx +159 -0
  447. package/src/lib/components/shared/navigation-confirmation.tsx +64 -0
  448. package/src/lib/components/shared/option-value-input.tsx +97 -0
  449. package/src/lib/components/shared/paginated-list-data-table.stories.tsx +212 -0
  450. package/src/lib/components/shared/paginated-list-data-table.tsx +523 -0
  451. package/src/lib/components/shared/permission-guard.stories.tsx +46 -0
  452. package/src/lib/components/shared/permission-guard.tsx +51 -0
  453. package/src/lib/components/shared/product-variant-selector.tsx +136 -0
  454. package/src/lib/components/shared/remove-from-channel-bulk-action.tsx +93 -0
  455. package/src/lib/components/shared/rich-text-editor/image-dialog.tsx +223 -0
  456. package/src/lib/components/shared/rich-text-editor/link-dialog.tsx +151 -0
  457. package/src/lib/components/shared/rich-text-editor/responsive-toolbar.tsx +443 -0
  458. package/src/lib/components/shared/rich-text-editor/rich-text-editor.tsx +339 -0
  459. package/src/lib/components/shared/rich-text-editor/table-delete-menu.tsx +104 -0
  460. package/src/lib/components/shared/rich-text-editor/table-edit-icons.tsx +225 -0
  461. package/src/lib/components/shared/role-code-label.tsx +12 -0
  462. package/src/lib/components/shared/role-selector.tsx +56 -0
  463. package/src/lib/components/shared/seller-selector.tsx +111 -0
  464. package/src/lib/components/shared/stock-level-label.tsx +22 -0
  465. package/src/lib/components/shared/table-cell/order-table-cell-components.tsx +80 -0
  466. package/src/lib/components/shared/tax-category-selector.tsx +65 -0
  467. package/src/lib/components/shared/translatable-form-field.tsx +149 -0
  468. package/src/lib/components/shared/vendure-image.stories.tsx +167 -0
  469. package/src/lib/components/shared/vendure-image.tsx +307 -0
  470. package/src/lib/components/shared/zone-selector.tsx +65 -0
  471. package/src/lib/components/ui/accordion.stories.tsx +33 -0
  472. package/src/lib/components/ui/accordion.tsx +59 -0
  473. package/src/lib/components/ui/alert-dialog.stories.tsx +48 -0
  474. package/src/lib/components/ui/alert-dialog.tsx +128 -0
  475. package/src/lib/components/ui/alert.stories.tsx +35 -0
  476. package/src/lib/components/ui/alert.tsx +60 -0
  477. package/src/lib/components/ui/aspect-ratio.stories.tsx +28 -0
  478. package/src/lib/components/ui/aspect-ratio.tsx +9 -0
  479. package/src/lib/components/ui/badge.stories.tsx +28 -0
  480. package/src/lib/components/ui/badge.tsx +38 -0
  481. package/src/lib/components/ui/breadcrumb.stories.tsx +41 -0
  482. package/src/lib/components/ui/breadcrumb.tsx +102 -0
  483. package/src/lib/components/ui/button.stories.tsx +38 -0
  484. package/src/lib/components/ui/button.tsx +58 -0
  485. package/src/lib/components/ui/calendar.stories.tsx +22 -0
  486. package/src/lib/components/ui/calendar.tsx +447 -0
  487. package/src/lib/components/ui/card.stories.tsx +28 -0
  488. package/src/lib/components/ui/card.tsx +47 -0
  489. package/src/lib/components/ui/carousel.stories.tsx +34 -0
  490. package/src/lib/components/ui/carousel.tsx +241 -0
  491. package/src/lib/components/ui/chart.tsx +351 -0
  492. package/src/lib/components/ui/checkbox.stories.tsx +31 -0
  493. package/src/lib/components/ui/checkbox.tsx +27 -0
  494. package/src/lib/components/ui/collapsible.stories.tsx +39 -0
  495. package/src/lib/components/ui/collapsible.tsx +33 -0
  496. package/src/lib/components/ui/command.stories.tsx +44 -0
  497. package/src/lib/components/ui/command.tsx +139 -0
  498. package/src/lib/components/ui/context-menu.stories.tsx +38 -0
  499. package/src/lib/components/ui/context-menu.tsx +252 -0
  500. package/src/lib/components/ui/dialog.stories.tsx +52 -0
  501. package/src/lib/components/ui/dialog.tsx +116 -0
  502. package/src/lib/components/ui/drawer.stories.tsx +50 -0
  503. package/src/lib/components/ui/drawer.tsx +133 -0
  504. package/src/lib/components/ui/dropdown-menu.stories.tsx +41 -0
  505. package/src/lib/components/ui/dropdown-menu.tsx +223 -0
  506. package/src/lib/components/ui/form.tsx +141 -0
  507. package/src/lib/components/ui/grid-layout.tsx +376 -0
  508. package/src/lib/components/ui/hover-card.stories.tsx +38 -0
  509. package/src/lib/components/ui/hover-card.tsx +36 -0
  510. package/src/lib/components/ui/input-group.tsx +149 -0
  511. package/src/lib/components/ui/input-otp.stories.tsx +30 -0
  512. package/src/lib/components/ui/input-otp.tsx +77 -0
  513. package/src/lib/components/ui/input.stories.tsx +38 -0
  514. package/src/lib/components/ui/input.tsx +19 -0
  515. package/src/lib/components/ui/label.stories.tsx +24 -0
  516. package/src/lib/components/ui/label.tsx +21 -0
  517. package/src/lib/components/ui/menubar.stories.tsx +53 -0
  518. package/src/lib/components/ui/menubar.tsx +274 -0
  519. package/src/lib/components/ui/navigation-menu.stories.tsx +54 -0
  520. package/src/lib/components/ui/navigation-menu.tsx +168 -0
  521. package/src/lib/components/ui/pagination.stories.tsx +51 -0
  522. package/src/lib/components/ui/pagination.tsx +106 -0
  523. package/src/lib/components/ui/password-input.stories.tsx +32 -0
  524. package/src/lib/components/ui/password-input.tsx +29 -0
  525. package/src/lib/components/ui/popover.stories.tsx +33 -0
  526. package/src/lib/components/ui/popover.tsx +40 -0
  527. package/src/lib/components/ui/progress.stories.tsx +27 -0
  528. package/src/lib/components/ui/progress.tsx +29 -0
  529. package/src/lib/components/ui/radio-group.stories.tsx +34 -0
  530. package/src/lib/components/ui/radio-group.tsx +45 -0
  531. package/src/lib/components/ui/resizable.stories.tsx +32 -0
  532. package/src/lib/components/ui/resizable.tsx +54 -0
  533. package/src/lib/components/ui/scroll-area.stories.tsx +31 -0
  534. package/src/lib/components/ui/scroll-area.tsx +50 -0
  535. package/src/lib/components/ui/select.stories.tsx +36 -0
  536. package/src/lib/components/ui/select.tsx +183 -0
  537. package/src/lib/components/ui/separator.stories.tsx +35 -0
  538. package/src/lib/components/ui/separator.tsx +26 -0
  539. package/src/lib/components/ui/sheet.stories.tsx +50 -0
  540. package/src/lib/components/ui/sheet.tsx +118 -0
  541. package/src/lib/components/ui/sidebar-context.ts +16 -0
  542. package/src/lib/components/ui/sidebar.tsx +686 -0
  543. package/src/lib/components/ui/skeleton.stories.tsx +26 -0
  544. package/src/lib/components/ui/skeleton.tsx +13 -0
  545. package/src/lib/components/ui/slider.stories.tsx +37 -0
  546. package/src/lib/components/ui/slider.tsx +63 -0
  547. package/src/lib/components/ui/sonner.tsx +27 -0
  548. package/src/lib/components/ui/switch.stories.tsx +31 -0
  549. package/src/lib/components/ui/switch.tsx +26 -0
  550. package/src/lib/components/ui/table.stories.tsx +52 -0
  551. package/src/lib/components/ui/table.tsx +82 -0
  552. package/src/lib/components/ui/tabs.stories.tsx +29 -0
  553. package/src/lib/components/ui/tabs.tsx +48 -0
  554. package/src/lib/components/ui/textarea.stories.tsx +32 -0
  555. package/src/lib/components/ui/textarea.tsx +18 -0
  556. package/src/lib/components/ui/toggle-group.stories.tsx +31 -0
  557. package/src/lib/components/ui/toggle-group.tsx +73 -0
  558. package/src/lib/components/ui/toggle.stories.tsx +39 -0
  559. package/src/lib/components/ui/toggle.tsx +45 -0
  560. package/src/lib/components/ui/tooltip.stories.tsx +30 -0
  561. package/src/lib/components/ui/tooltip.tsx +51 -0
  562. package/src/lib/constants.ts +336 -0
  563. package/src/lib/framework/alert/alert-extensions.tsx +19 -0
  564. package/src/lib/framework/alert/alert-item.tsx +44 -0
  565. package/src/lib/framework/alert/alerts-indicator.tsx +22 -0
  566. package/src/lib/framework/alert/search-index-buffer-alert/search-index-buffer-alert.ts +41 -0
  567. package/src/lib/framework/component-registry/component-registry.tsx +18 -0
  568. package/src/lib/framework/component-registry/display-component.tsx +28 -0
  569. package/src/lib/framework/dashboard-widget/base-widget.tsx +101 -0
  570. package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +152 -0
  571. package/src/lib/framework/dashboard-widget/latest-orders-widget/latest-orders-widget.graphql.ts +35 -0
  572. package/src/lib/framework/dashboard-widget/metrics-widget/chart.tsx +40 -0
  573. package/src/lib/framework/dashboard-widget/metrics-widget/index.tsx +96 -0
  574. package/src/lib/framework/dashboard-widget/metrics-widget/metrics-widget.graphql.ts +20 -0
  575. package/src/lib/framework/dashboard-widget/orders-summary/index.tsx +113 -0
  576. package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +14 -0
  577. package/src/lib/framework/dashboard-widget/widget-extensions.tsx +19 -0
  578. package/src/lib/framework/dashboard-widget/widget-filters-context.tsx +36 -0
  579. package/src/lib/framework/data-table/data-table-extensions.ts +35 -0
  580. package/src/lib/framework/defaults.ts +270 -0
  581. package/src/lib/framework/document-extension/extend-detail-form-query.ts +50 -0
  582. package/src/lib/framework/document-extension/extend-document.spec.ts +884 -0
  583. package/src/lib/framework/document-extension/extend-document.ts +159 -0
  584. package/src/lib/framework/document-introspection/add-custom-fields.spec.ts +1458 -0
  585. package/src/lib/framework/document-introspection/add-custom-fields.ts +452 -0
  586. package/src/lib/framework/document-introspection/get-document-structure.spec.ts +581 -0
  587. package/src/lib/framework/document-introspection/get-document-structure.ts +669 -0
  588. package/src/lib/framework/document-introspection/hooks.ts +13 -0
  589. package/src/lib/framework/document-introspection/include-only-selected-list-fields.spec.ts +1840 -0
  590. package/src/lib/framework/document-introspection/include-only-selected-list-fields.ts +940 -0
  591. package/src/lib/framework/document-introspection/testing-utils.ts +161 -0
  592. package/src/lib/framework/extension-api/define-dashboard-extension.ts +99 -0
  593. package/src/lib/framework/extension-api/display-component-extensions.tsx +58 -0
  594. package/src/lib/framework/extension-api/extension-api-types.ts +92 -0
  595. package/src/lib/framework/extension-api/input-component-extensions.tsx +96 -0
  596. package/src/lib/framework/extension-api/logic/alerts.ts +11 -0
  597. package/src/lib/framework/extension-api/logic/data-table.ts +37 -0
  598. package/src/lib/framework/extension-api/logic/detail-forms.ts +35 -0
  599. package/src/lib/framework/extension-api/logic/form-components.ts +14 -0
  600. package/src/lib/framework/extension-api/logic/history-entries.ts +24 -0
  601. package/src/lib/framework/extension-api/logic/index.ts +10 -0
  602. package/src/lib/framework/extension-api/logic/layout.ts +22 -0
  603. package/src/lib/framework/extension-api/logic/login.ts +17 -0
  604. package/src/lib/framework/extension-api/logic/navigation.ts +41 -0
  605. package/src/lib/framework/extension-api/logic/widgets.ts +10 -0
  606. package/src/lib/framework/extension-api/types/alerts.ts +59 -0
  607. package/src/lib/framework/extension-api/types/data-table.ts +159 -0
  608. package/src/lib/framework/extension-api/types/detail-forms.ts +58 -0
  609. package/src/lib/framework/extension-api/types/form-components.ts +41 -0
  610. package/src/lib/framework/extension-api/types/history-entries.ts +120 -0
  611. package/src/lib/framework/extension-api/types/index.ts +10 -0
  612. package/src/lib/framework/extension-api/types/layout.ts +141 -0
  613. package/src/lib/framework/extension-api/types/login.ts +76 -0
  614. package/src/lib/framework/extension-api/types/navigation.ts +105 -0
  615. package/src/lib/framework/extension-api/types/widgets.ts +101 -0
  616. package/src/lib/framework/extension-api/use-dashboard-extensions.ts +27 -0
  617. package/src/lib/framework/extension-api/use-login-extensions.ts +26 -0
  618. package/src/lib/framework/form-engine/custom-form-component-extensions.ts +15 -0
  619. package/src/lib/framework/form-engine/custom-form-component.tsx +16 -0
  620. package/src/lib/framework/form-engine/default-input-for-type.tsx +35 -0
  621. package/src/lib/framework/form-engine/form-control-adapter.tsx +193 -0
  622. package/src/lib/framework/form-engine/form-engine-types.ts +169 -0
  623. package/src/lib/framework/form-engine/form-schema-tools.spec.ts +610 -0
  624. package/src/lib/framework/form-engine/form-schema-tools.ts +417 -0
  625. package/src/lib/framework/form-engine/overridden-form-component.tsx +51 -0
  626. package/src/lib/framework/form-engine/use-generated-form.tsx +226 -0
  627. package/src/lib/framework/form-engine/utils.spec.ts +37 -0
  628. package/src/lib/framework/form-engine/utils.ts +356 -0
  629. package/src/lib/framework/form-engine/value-transformers.ts +150 -0
  630. package/src/lib/framework/history-entry/history-entry-extensions.ts +11 -0
  631. package/src/lib/framework/history-entry/history-entry.tsx +129 -0
  632. package/src/lib/framework/layout-engine/custom-form-page.stories.tsx +344 -0
  633. package/src/lib/framework/layout-engine/dev-mode-button.tsx +24 -0
  634. package/src/lib/framework/layout-engine/layout-extensions.ts +27 -0
  635. package/src/lib/framework/layout-engine/location-wrapper.tsx +122 -0
  636. package/src/lib/framework/layout-engine/page-block-provider.tsx +6 -0
  637. package/src/lib/framework/layout-engine/page-layout.spec.tsx +138 -0
  638. package/src/lib/framework/layout-engine/page-layout.tsx +700 -0
  639. package/src/lib/framework/layout-engine/page-provider.tsx +10 -0
  640. package/src/lib/framework/layout-engine/page.stories.tsx +275 -0
  641. package/src/lib/framework/nav-menu/nav-menu-extensions.ts +112 -0
  642. package/src/lib/framework/page/detail-page-route-loader.tsx +67 -0
  643. package/src/lib/framework/page/detail-page.stories.tsx +151 -0
  644. package/src/lib/framework/page/detail-page.tsx +255 -0
  645. package/src/lib/framework/page/list-page.stories.tsx +217 -0
  646. package/src/lib/framework/page/list-page.tsx +613 -0
  647. package/src/lib/framework/page/page-api.ts +9 -0
  648. package/src/lib/framework/page/page-types.ts +51 -0
  649. package/src/lib/framework/page/use-detail-page.ts +341 -0
  650. package/src/lib/framework/page/use-extended-router.tsx +139 -0
  651. package/src/lib/framework/registry/global-registry.ts +50 -0
  652. package/src/lib/framework/registry/registry-types.ts +32 -0
  653. package/src/lib/graphql/api.ts +123 -0
  654. package/src/lib/graphql/common-operations.ts +37 -0
  655. package/src/lib/graphql/fragments.ts +71 -0
  656. package/src/lib/graphql/graphql-env.d.ts +523 -0
  657. package/src/lib/graphql/graphql.ts +15 -0
  658. package/src/lib/graphql/settings-store-operations.ts +17 -0
  659. package/src/lib/hooks/use-alerts.ts +84 -0
  660. package/src/lib/hooks/use-auth.tsx +21 -0
  661. package/src/lib/hooks/use-channel.ts +27 -0
  662. package/src/lib/hooks/use-custom-field-config.ts +27 -0
  663. package/src/lib/hooks/use-display-locale.ts +40 -0
  664. package/src/lib/hooks/use-drag-and-drop.ts +86 -0
  665. package/src/lib/hooks/use-dynamic-translations.ts +46 -0
  666. package/src/lib/hooks/use-extended-detail-query.ts +37 -0
  667. package/src/lib/hooks/use-extended-list-query.ts +80 -0
  668. package/src/lib/hooks/use-floating-bulk-actions.ts +83 -0
  669. package/src/lib/hooks/use-grouped-permissions.ts +55 -0
  670. package/src/lib/hooks/use-local-format.ts +186 -0
  671. package/src/lib/hooks/use-mobile.ts +19 -0
  672. package/src/lib/hooks/use-page-block.tsx +27 -0
  673. package/src/lib/hooks/use-page.tsx +10 -0
  674. package/src/lib/hooks/use-permissions.ts +40 -0
  675. package/src/lib/hooks/use-saved-views.ts +238 -0
  676. package/src/lib/hooks/use-server-config.ts +4 -0
  677. package/src/lib/hooks/use-sorted-languages.ts +41 -0
  678. package/src/lib/hooks/use-theme.ts +10 -0
  679. package/src/lib/hooks/use-ui-language-loader.ts +30 -0
  680. package/src/lib/hooks/use-user-settings.tsx +12 -0
  681. package/src/lib/index.ts +293 -0
  682. package/src/lib/lib/load-i18n-messages.ts +20 -0
  683. package/src/lib/lib/trans.tsx +20 -0
  684. package/src/lib/lib/utils.ts +111 -0
  685. package/src/lib/providers/alerts-provider.tsx +60 -0
  686. package/src/lib/providers/auth.tsx +232 -0
  687. package/src/lib/providers/channel-provider.tsx +245 -0
  688. package/src/lib/providers/i18n-provider.tsx +21 -0
  689. package/src/lib/providers/server-config.tsx +289 -0
  690. package/src/lib/providers/theme-provider.tsx +56 -0
  691. package/src/lib/providers/user-settings.tsx +244 -0
  692. package/src/lib/types/saved-views.ts +42 -0
  693. package/src/lib/utils/config-utils.ts +19 -0
  694. package/src/lib/utils/global-languages.ts +268 -0
  695. package/src/lib/utils/saved-views-utils.ts +40 -0
  696. package/src/lib/virtual.d.ts +39 -0
  697. package/src/vite-env.d.ts +2 -0
@@ -0,0 +1,86 @@
1
+ import * as babel from '@babel/core';
2
+ /**
3
+ * @description
4
+ * A custom Vite plugin that transforms Lingui macros in files using Babel instead of SWC.
5
+ *
6
+ * This plugin solves a critical compatibility issue with SWC plugins:
7
+ * - SWC plugins are compiled Wasm binaries that require exact version matching with `@swc/core`
8
+ * - When users have different SWC versions in their projects (e.g., from Next.js, Nx, etc.),
9
+ * the Lingui SWC plugin fails with "failed to invoke plugin" errors
10
+ * - Babel has no such binary compatibility issues, making it much more reliable for library code
11
+ *
12
+ * The plugin runs BEFORE `@vitejs/plugin-react` and transforms files containing Lingui macros
13
+ * (imports from `@lingui/core/macro` or `@lingui/react/macro`) using the Babel-based
14
+ * `@lingui/babel-plugin-lingui-macro`.
15
+ *
16
+ * Files processed:
17
+ * - `@vendure/dashboard/src` files (in node_modules for external projects)
18
+ * - `packages/dashboard/src` files (in monorepo development)
19
+ * - User's dashboard extension files (e.g., custom plugins using Lingui)
20
+ *
21
+ * Files NOT processed:
22
+ * - Other node_modules packages (they shouldn't contain Lingui macros)
23
+ *
24
+ * @see https://github.com/vendurehq/vendure/issues/3929
25
+ * @see https://github.com/lingui/swc-plugin/issues/179
26
+ */
27
+ export function linguiBabelPlugin() {
28
+ return {
29
+ name: 'vendure:lingui-babel',
30
+ // Run BEFORE @vitejs/plugin-react so the macros are already transformed
31
+ // when the react plugin processes the file
32
+ enforce: 'pre',
33
+ async transform(code, id) {
34
+ // Strip query params for path matching (Vite adds ?v=xxx for cache busting)
35
+ const cleanId = id.split('?')[0];
36
+ // Only process TypeScript/JavaScript files
37
+ if (!/\.[tj]sx?$/.test(cleanId)) {
38
+ return null;
39
+ }
40
+ // Only process files that actually contain Lingui macro imports
41
+ // This is a fast check to avoid running Babel on files that don't need it
42
+ if (!code.includes('@lingui/') || !code.includes('/macro')) {
43
+ return null;
44
+ }
45
+ // Skip node_modules files EXCEPT for @vendure/dashboard source
46
+ // This ensures:
47
+ // 1. Dashboard source files get transformed (both in monorepo and external projects)
48
+ // 2. User's extension files get transformed (not in node_modules)
49
+ // 3. Other node_modules packages are left alone
50
+ if (cleanId.includes('node_modules')) {
51
+ const isVendureDashboard = cleanId.includes('@vendure/dashboard/src') || cleanId.includes('packages/dashboard/src');
52
+ if (!isVendureDashboard) {
53
+ return null;
54
+ }
55
+ }
56
+ try {
57
+ const result = await babel.transformAsync(code, {
58
+ filename: id,
59
+ presets: [
60
+ ['@babel/preset-typescript', { isTSX: true, allExtensions: true }],
61
+ ['@babel/preset-react', { runtime: 'automatic' }],
62
+ ],
63
+ plugins: ['@lingui/babel-plugin-lingui-macro'],
64
+ sourceMaps: true,
65
+ // Don't look for babel config files - we want to control the config completely
66
+ configFile: false,
67
+ babelrc: false,
68
+ });
69
+ if (!(result === null || result === void 0 ? void 0 : result.code)) {
70
+ return null;
71
+ }
72
+ return {
73
+ code: result.code,
74
+ map: result.map,
75
+ };
76
+ }
77
+ catch (error) {
78
+ // Log the error but don't crash - let the build continue
79
+ // The lingui vite plugin will catch untransformed macros later
80
+ // eslint-disable-next-line no-console
81
+ console.error(`[vendure:lingui-babel] Failed to transform ${id}:`, error);
82
+ return null;
83
+ }
84
+ },
85
+ };
86
+ }
@@ -0,0 +1,7 @@
1
+ import { Plugin } from 'vite';
2
+ /**
3
+ * This Vite plugin transforms the `app/styles.css` file to include a `@source` directive
4
+ * for each dashboard extension's source directory. This allows Tailwind CSS to
5
+ * include styles from these extensions when processing the CSS.
6
+ */
7
+ export declare function dashboardTailwindSourcePlugin(): Plugin;
@@ -0,0 +1,48 @@
1
+ import { getDashboardPaths } from './utils/get-dashboard-paths.js';
2
+ import { getConfigLoaderApi } from './vite-plugin-config-loader.js';
3
+ /**
4
+ * This Vite plugin transforms the `app/styles.css` file to include a `@source` directive
5
+ * for each dashboard extension's source directory. This allows Tailwind CSS to
6
+ * include styles from these extensions when processing the CSS.
7
+ */
8
+ export function dashboardTailwindSourcePlugin() {
9
+ let configLoaderApi;
10
+ let loadVendureConfigResult;
11
+ return {
12
+ name: 'vendure:dashboard-tailwind-source',
13
+ // Ensure this plugin runs before Tailwind CSS processing
14
+ enforce: 'pre',
15
+ configResolved({ plugins }) {
16
+ configLoaderApi = getConfigLoaderApi(plugins);
17
+ },
18
+ async transform(src, id) {
19
+ if (/app\/styles.css$/.test(id)) {
20
+ if (!loadVendureConfigResult) {
21
+ loadVendureConfigResult = await configLoaderApi.getVendureConfig();
22
+ }
23
+ const { pluginInfo } = loadVendureConfigResult;
24
+ const dashboardExtensionDirs = getDashboardPaths(pluginInfo);
25
+ const sources = dashboardExtensionDirs
26
+ .map(extension => {
27
+ return `@source '${extension}';`;
28
+ })
29
+ .join('\n');
30
+ // Find the line with the specific comment and insert sources after it
31
+ const lines = src.split('\n');
32
+ const sourceCommentIndex = lines.findIndex(line => line.includes('/* @source rules from extensions will be added here by the dashboardTailwindSourcePlugin */'));
33
+ if (sourceCommentIndex !== -1) {
34
+ // Insert the sources after the comment line
35
+ lines.splice(sourceCommentIndex + 1, 0, sources);
36
+ const modifiedSrc = lines.join('\n');
37
+ return {
38
+ code: modifiedSrc,
39
+ };
40
+ }
41
+ // If the comment is not found, append sources at the end
42
+ return {
43
+ code: src + '\n' + sources,
44
+ };
45
+ }
46
+ },
47
+ };
48
+ }
@@ -0,0 +1,55 @@
1
+ import { Plugin } from 'vite';
2
+ type ThemeColors = {
3
+ background?: string;
4
+ foreground?: string;
5
+ card?: string;
6
+ 'card-foreground'?: string;
7
+ popover?: string;
8
+ 'popover-foreground'?: string;
9
+ primary?: string;
10
+ 'primary-foreground'?: string;
11
+ secondary?: string;
12
+ 'secondary-foreground'?: string;
13
+ muted?: string;
14
+ 'muted-foreground'?: string;
15
+ accent?: string;
16
+ 'accent-foreground'?: string;
17
+ destructive?: string;
18
+ 'destructive-foreground'?: string;
19
+ success?: string;
20
+ 'success-foreground'?: string;
21
+ 'dev-mode'?: string;
22
+ 'dev-mode-foreground'?: string;
23
+ border?: string;
24
+ input?: string;
25
+ ring?: string;
26
+ 'chart-1'?: string;
27
+ 'chart-2'?: string;
28
+ 'chart-3'?: string;
29
+ 'chart-4'?: string;
30
+ 'chart-5'?: string;
31
+ radius?: string;
32
+ sidebar?: string;
33
+ 'sidebar-foreground'?: string;
34
+ 'sidebar-primary'?: string;
35
+ 'sidebar-primary-foreground'?: string;
36
+ 'sidebar-accent'?: string;
37
+ 'sidebar-accent-foreground'?: string;
38
+ 'sidebar-border'?: string;
39
+ 'sidebar-ring'?: string;
40
+ brand?: string;
41
+ 'brand-lighter'?: string;
42
+ 'brand-darker'?: string;
43
+ 'font-sans'?: string;
44
+ 'font-mono'?: string;
45
+ [key: string]: string | undefined;
46
+ };
47
+ export interface ThemeVariables {
48
+ light?: ThemeColors;
49
+ dark?: ThemeColors;
50
+ }
51
+ export type ThemeVariablesPluginOptions = {
52
+ theme?: ThemeVariables;
53
+ };
54
+ export declare function themeVariablesPlugin(options: ThemeVariablesPluginOptions): Plugin;
55
+ export {};
@@ -0,0 +1,130 @@
1
+ const defaultVariables = {
2
+ light: {
3
+ background: 'oklch(1.0000 0 0)',
4
+ foreground: 'oklch(0.2103 0.0059 285.8852)',
5
+ card: 'oklch(1.0000 0 0)',
6
+ 'card-foreground': 'oklch(0.2103 0.0059 285.8852)',
7
+ popover: 'oklch(1.0000 0 0)',
8
+ 'popover-foreground': 'oklch(0.2103 0.0059 285.8852)',
9
+ primary: 'oklch(0.7613 0.1503 231.1314)',
10
+ 'primary-foreground': 'oklch(0.261 0.043 218.379)',
11
+ secondary: 'oklch(0.9674 0.0013 286.3752)',
12
+ 'secondary-foreground': 'oklch(0.2103 0.0059 285.8852)',
13
+ muted: 'oklch(0.9674 0.0013 286.3752)',
14
+ 'muted-foreground': 'oklch(0.5517 0.0138 285.9385)',
15
+ accent: 'oklch(0.9674 0.0013 286.3752)',
16
+ 'accent-foreground': 'oklch(0.2103 0.0059 285.8852)',
17
+ destructive: 'oklch(0.505 0.188 27.325)',
18
+ 'destructive-foreground': 'oklch(0.9851 0 0)',
19
+ success: 'hsl(99deg 67.25% 33.2%)',
20
+ 'success-foreground': 'hsl(0 0% 98%)',
21
+ 'dev-mode': 'hsl(204, 76%, 62%)',
22
+ 'dev-mode-foreground': 'hsl(0 0% 98%)',
23
+ border: 'oklch(0.9197 0.0040 286.3202)',
24
+ input: 'oklch(0.9197 0.0040 286.3202)',
25
+ ring: 'oklch(0.7613 0.1503 231.1314)',
26
+ 'chart-1': 'oklch(0.7613 0.1503 231.1314)',
27
+ 'chart-2': 'oklch(0.5575 0.2525 302.3212)',
28
+ 'chart-3': 'oklch(0.5858 0.2220 17.5846)',
29
+ 'chart-4': 'oklch(0.6658 0.1574 58.3183)',
30
+ 'chart-5': 'oklch(0.6271 0.1699 149.2138)',
31
+ radius: '0.375rem',
32
+ sidebar: 'oklch(0.9674 0.0013 286.3752)',
33
+ 'sidebar-foreground': 'oklch(0.2103 0.0059 285.8852)',
34
+ 'sidebar-primary': 'oklch(0.7613 0.1503 231.1314)',
35
+ 'sidebar-primary-foreground': 'oklch(0.1408 0.0044 285.8229)',
36
+ 'sidebar-accent': 'oklch(1.0000 0 0)',
37
+ 'sidebar-accent-foreground': 'oklch(0.2103 0.0059 285.8852)',
38
+ 'sidebar-border': 'oklch(0.9197 0.0040 286.3202)',
39
+ 'sidebar-ring': 'oklch(0.7613 0.1503 231.1314)',
40
+ brand: '#17c1ff',
41
+ 'brand-lighter': '#e6f9ff',
42
+ 'brand-darker': '#0099ff',
43
+ 'font-sans': 'Inter, sans-serif',
44
+ 'font-mono': 'Geist Mono, monospace',
45
+ },
46
+ dark: {
47
+ background: 'oklch(0.1408 0.0044 285.8229)',
48
+ foreground: 'oklch(0.9851 0 0)',
49
+ card: 'oklch(0.2103 0.0059 285.8852)',
50
+ 'card-foreground': 'oklch(0.9851 0 0)',
51
+ popover: 'oklch(0.2103 0.0059 285.8852)',
52
+ 'popover-foreground': 'oklch(0.9851 0 0)',
53
+ primary: 'oklch(0.7613 0.1503 231.1314)',
54
+ 'primary-foreground': 'oklch(0.1408 0.0044 285.8229)',
55
+ secondary: 'oklch(0.2739 0.0055 286.0326)',
56
+ 'secondary-foreground': 'oklch(0.9851 0 0)',
57
+ muted: 'oklch(0.2739 0.0055 286.0326)',
58
+ 'muted-foreground': 'oklch(0.7118 0.0129 286.0665)',
59
+ accent: 'oklch(0.2739 0.0055 286.0326)',
60
+ 'accent-foreground': 'oklch(0.9851 0 0)',
61
+ destructive: 'oklch(0.4 0.15 27.11)',
62
+ 'destructive-foreground': 'oklch(0.9851 0 0)',
63
+ success: 'hsl(100 76.42% 22.21%)',
64
+ 'success-foreground': 'hsl(0 0% 98%)',
65
+ 'dev-mode': 'hsl(204, 86%, 53%)',
66
+ 'dev-mode-foreground': 'hsl(0 0% 98%)',
67
+ border: 'oklch(0.2739 0.0055 286.0326)',
68
+ input: 'oklch(0.2739 0.0055 286.0326)',
69
+ ring: 'oklch(0.7613 0.1503 231.1314)',
70
+ 'chart-1': 'oklch(0.7613 0.1503 231.1314)',
71
+ 'chart-2': 'oklch(0.6268 0.2325 303.9004)',
72
+ 'chart-3': 'oklch(0.6450 0.2154 16.4393)',
73
+ 'chart-4': 'oklch(0.7686 0.1647 70.0804)',
74
+ 'chart-5': 'oklch(0.7227 0.1920 149.5793)',
75
+ sidebar: 'oklch(0.2 0 0)',
76
+ 'sidebar-foreground': 'oklch(0.9851 0 0)',
77
+ 'sidebar-primary': 'oklch(0.7613 0.1503 231.1314)',
78
+ 'sidebar-primary-foreground': 'oklch(0.1408 0.0044 285.8229)',
79
+ 'sidebar-accent': 'oklch(0.2739 0.0055 286.0326)',
80
+ 'sidebar-accent-foreground': 'oklch(0.9851 0 0)',
81
+ 'sidebar-border': 'oklch(0.2739 0.0055 286.0326)',
82
+ 'sidebar-ring': 'oklch(0.7613 0.1503 231.1314)',
83
+ brand: '#17c1ff',
84
+ 'brand-lighter': '#e6f9ff',
85
+ 'brand-darker': '#0099ff',
86
+ 'font-sans': 'Inter, sans-serif',
87
+ 'font-mono': 'Geist Mono, monospace',
88
+ },
89
+ };
90
+ export function themeVariablesPlugin(options) {
91
+ const virtualModuleId = 'virtual:admin-theme';
92
+ const resolvedVirtualModuleId = `\0${virtualModuleId}`;
93
+ return {
94
+ name: 'vendure:admin-theme',
95
+ enforce: 'pre', // This ensures our plugin runs before other CSS processors
96
+ transform(code, id) {
97
+ var _a, _b;
98
+ // Only transform CSS files
99
+ if (!id.endsWith('styles.css')) {
100
+ return null;
101
+ }
102
+ // Replace the @import 'virtual:admin-theme'; with our theme variables
103
+ if (code.includes('@import "virtual:admin-theme";') ||
104
+ code.includes("@import 'virtual:admin-theme';")) {
105
+ const lightTheme = ((_a = options.theme) === null || _a === void 0 ? void 0 : _a.light) || {};
106
+ const darkTheme = ((_b = options.theme) === null || _b === void 0 ? void 0 : _b.dark) || {};
107
+ // Merge default themes with custom themes
108
+ const mergedLightTheme = Object.assign(Object.assign({}, defaultVariables.light), lightTheme);
109
+ const mergedDarkTheme = Object.assign(Object.assign({}, defaultVariables.dark), darkTheme);
110
+ const themeCSS = `
111
+ :root {
112
+ ${Object.entries(mergedLightTheme)
113
+ .filter(([key, value]) => value !== undefined)
114
+ .map(([key, value]) => `--${key}: ${value};`)
115
+ .join('\n')}
116
+ }
117
+
118
+ .dark {
119
+ ${Object.entries(mergedDarkTheme)
120
+ .filter(([key, value]) => value !== undefined)
121
+ .map(([key, value]) => `--${key}: ${value};`)
122
+ .join('\n')}
123
+ }
124
+ `;
125
+ return code.replace(/@import ['"]virtual:admin-theme['"];?/, themeCSS);
126
+ }
127
+ return null;
128
+ },
129
+ };
130
+ }
@@ -0,0 +1,11 @@
1
+ import { Plugin } from 'vite';
2
+ /**
3
+ * @description
4
+ * This Vite plugin handles the scenario where the `base` path is set in the Vite config.
5
+ * The default Vite behavior is to prepend the `base` path to all `href` and `src` attributes in the HTML,
6
+ * but this causes the Vendure Dashboard not to load its assets correctly.
7
+ *
8
+ * This plugin removes the `base` path from all `href` and `src` attributes in the HTML,
9
+ * and adds a `<base>` tag to the `<head>` of the HTML document.
10
+ */
11
+ export declare function transformIndexHtmlPlugin(): Plugin;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @description
3
+ * This Vite plugin handles the scenario where the `base` path is set in the Vite config.
4
+ * The default Vite behavior is to prepend the `base` path to all `href` and `src` attributes in the HTML,
5
+ * but this causes the Vendure Dashboard not to load its assets correctly.
6
+ *
7
+ * This plugin removes the `base` path from all `href` and `src` attributes in the HTML,
8
+ * and adds a `<base>` tag to the `<head>` of the HTML document.
9
+ */
10
+ export function transformIndexHtmlPlugin() {
11
+ let config;
12
+ return {
13
+ name: 'vendure:vite-config-transform-index-html',
14
+ configResolved(resolvedConfig) {
15
+ // store the resolved config
16
+ config = resolvedConfig;
17
+ },
18
+ // Only apply this plugin during the build phase
19
+ apply: 'build',
20
+ transformIndexHtml(html, ctx) {
21
+ // Don't transform Storybook HTML files
22
+ if (ctx.filename &&
23
+ (ctx.filename.includes('iframe.html') || ctx.filename.includes('storybook'))) {
24
+ return html;
25
+ }
26
+ if (config.base && config.base !== '/') {
27
+ // Remove the base path from hrefs and srcs
28
+ const basePath = config.base.replace(/\/$/, ''); // Remove trailing slash
29
+ // Single regex to handle both href and src attributes with any quote type
30
+ const attributeRegex = new RegExp(`(href|src)=(["'])${basePath}/?`, 'g');
31
+ let transformedHtml = html.replace(attributeRegex, '$1=$2');
32
+ // Add base tag to head
33
+ const baseTag = ` <base href="${config.base}">\n`;
34
+ transformedHtml = transformedHtml.replace(/<head>/, `<head>\n${baseTag}`);
35
+ return transformedHtml;
36
+ }
37
+ return html;
38
+ },
39
+ };
40
+ }
@@ -0,0 +1,31 @@
1
+ import type { Plugin } from 'vite';
2
+ export interface TranslationsPluginOptions {
3
+ /**
4
+ * Array of paths to .po files to merge with built-in translations
5
+ */
6
+ externalPoFiles?: string[];
7
+ /**
8
+ * Path to the built-in locales directory
9
+ */
10
+ localesDir?: string;
11
+ /**
12
+ * Output path for merged translations within the build output (e.g., 'i18n')
13
+ */
14
+ outputPath?: string;
15
+ packageRoot: string;
16
+ }
17
+ /**
18
+ * @description
19
+ * This Vite plugin compiles the source .po files into JS bundles that can be loaded statically.
20
+ *
21
+ * It handles 2 modes: dev and build.
22
+ *
23
+ * - The dev case is handled in the `load` function using Vite virtual
24
+ * modules to compile and return translations from plugins _only_, which then get merged with the built-in
25
+ * translations in the `loadI18nMessages` function
26
+ * - The build case loads both built-in and plugin translations, merges them, and outputs the compiled
27
+ * files as .js files that can be statically consumed by the built app.
28
+ *
29
+ * @param options
30
+ */
31
+ export declare function translationsPlugin(options: TranslationsPluginOptions): Plugin;
@@ -0,0 +1,177 @@
1
+ import { createCompilationErrorMessage, createCompiledCatalog, getCatalogForFile, getCatalogs, } from '@lingui/cli/api';
2
+ import { getConfig } from '@lingui/conf';
3
+ import glob from 'fast-glob';
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import { getDashboardPaths } from './utils/get-dashboard-paths.js';
7
+ import { getConfigLoaderApi } from './vite-plugin-config-loader.js';
8
+ const virtualModuleId = 'virtual:plugin-translations';
9
+ const resolvedVirtualModuleId = `\0${virtualModuleId}`;
10
+ /**
11
+ * @description
12
+ * This Vite plugin compiles the source .po files into JS bundles that can be loaded statically.
13
+ *
14
+ * It handles 2 modes: dev and build.
15
+ *
16
+ * - The dev case is handled in the `load` function using Vite virtual
17
+ * modules to compile and return translations from plugins _only_, which then get merged with the built-in
18
+ * translations in the `loadI18nMessages` function
19
+ * - The build case loads both built-in and plugin translations, merges them, and outputs the compiled
20
+ * files as .js files that can be statically consumed by the built app.
21
+ *
22
+ * @param options
23
+ */
24
+ export function translationsPlugin(options) {
25
+ let configLoaderApi;
26
+ let loadVendureConfigResult;
27
+ return {
28
+ name: 'vendure:compile-translations',
29
+ configResolved({ plugins }) {
30
+ configLoaderApi = getConfigLoaderApi(plugins);
31
+ },
32
+ resolveId(id) {
33
+ if (id === virtualModuleId) {
34
+ return resolvedVirtualModuleId;
35
+ }
36
+ },
37
+ async load(id) {
38
+ if (id === resolvedVirtualModuleId) {
39
+ this.debug('Loading plugin translations...');
40
+ if (!loadVendureConfigResult) {
41
+ loadVendureConfigResult = await configLoaderApi.getVendureConfig();
42
+ }
43
+ const { pluginInfo } = loadVendureConfigResult;
44
+ const pluginTranslations = await getPluginTranslations(pluginInfo);
45
+ const linguiConfig = getConfig({
46
+ configPath: path.join(options.packageRoot, 'lingui.config.js'),
47
+ });
48
+ const catalogs = await getLinguiCatalogs(linguiConfig, pluginTranslations);
49
+ const pluginFiles = pluginTranslations.flatMap(translation => translation.translations);
50
+ const mergedMessageMap = await createMergedMessageMap({
51
+ files: pluginFiles,
52
+ packageRoot: options.packageRoot,
53
+ catalogs,
54
+ sourceLocale: linguiConfig.sourceLocale,
55
+ });
56
+ return `
57
+ const translations = {
58
+ ${[...mergedMessageMap.entries()]
59
+ .map(([locale, messages]) => {
60
+ const safeLocale = locale.replace(/-/g, '_');
61
+ return `${safeLocale}: ${JSON.stringify(messages)}`;
62
+ })
63
+ .join(',\n')}
64
+ };
65
+ export default translations;
66
+ `;
67
+ }
68
+ },
69
+ // This runs at build-time only
70
+ async generateBundle() {
71
+ // This runs during the bundle generation phase - emit files directly to build output
72
+ try {
73
+ const { pluginInfo } = await configLoaderApi.getVendureConfig();
74
+ // Get any plugin-provided .po files
75
+ const pluginTranslations = await getPluginTranslations(pluginInfo);
76
+ const pluginTranslationFiles = pluginTranslations.flatMap(p => p.translations);
77
+ this.info(`Found ${pluginTranslationFiles.length} translation files from plugins`);
78
+ this.debug(pluginTranslationFiles.join('\n'));
79
+ await compileTranslations(options, pluginTranslations, this.emitFile);
80
+ }
81
+ catch (error) {
82
+ this.error(`Translation plugin error: ${error instanceof Error ? error.message : String(error)}`);
83
+ }
84
+ },
85
+ };
86
+ }
87
+ async function getPluginTranslations(pluginInfo) {
88
+ const dashboardPaths = getDashboardPaths(pluginInfo);
89
+ const pluginTranslations = [];
90
+ for (const dashboardPath of dashboardPaths) {
91
+ const poPatterns = path.join(dashboardPath, '**/*.po');
92
+ const translations = await glob(poPatterns, {
93
+ ignore: [
94
+ // Standard test & doc files
95
+ '**/node_modules/**/node_modules/**',
96
+ '**/*.spec.js',
97
+ '**/*.test.js',
98
+ ],
99
+ onlyFiles: true,
100
+ absolute: true,
101
+ followSymbolicLinks: false,
102
+ stats: false,
103
+ });
104
+ pluginTranslations.push({
105
+ pluginRootPath: dashboardPath,
106
+ translations,
107
+ });
108
+ }
109
+ return pluginTranslations;
110
+ }
111
+ async function compileTranslations(options, pluginTranslations, emitFile) {
112
+ const { localesDir = 'src/i18n/locales', outputPath = 'assets/i18n' } = options;
113
+ const linguiConfig = getConfig({ configPath: path.join(options.packageRoot, 'lingui.config.js') });
114
+ const resolvedLocalesDir = path.resolve(options.packageRoot, localesDir);
115
+ const catalogs = await getLinguiCatalogs(linguiConfig, pluginTranslations);
116
+ // Get all built-in .po files
117
+ const builtInFiles = fs
118
+ .readdirSync(resolvedLocalesDir)
119
+ .filter(file => file.endsWith('.po'))
120
+ .map(file => path.join(resolvedLocalesDir, file));
121
+ const pluginFiles = pluginTranslations.flatMap(translation => translation.translations);
122
+ const mergedMessageMap = await createMergedMessageMap({
123
+ files: [...builtInFiles, ...pluginFiles],
124
+ packageRoot: options.packageRoot,
125
+ catalogs,
126
+ sourceLocale: linguiConfig.sourceLocale,
127
+ });
128
+ for (const [locale, messages] of mergedMessageMap.entries()) {
129
+ const { source: code, errors } = createCompiledCatalog(locale, messages, {
130
+ namespace: 'es',
131
+ pseudoLocale: linguiConfig.pseudoLocale,
132
+ });
133
+ if (errors.length) {
134
+ const message = createCompilationErrorMessage(locale, errors);
135
+ throw new Error(message +
136
+ `These errors fail build because \`failOnCompileError=true\` in Lingui Vite plugin configuration.`);
137
+ }
138
+ // Emit the compiled JavaScript file to the build output
139
+ const outputFileName = path.posix.join(outputPath, `${locale}.js`);
140
+ emitFile({
141
+ type: 'asset',
142
+ fileName: outputFileName,
143
+ source: code,
144
+ });
145
+ }
146
+ }
147
+ async function getLinguiCatalogs(linguiConfig, pluginTranslations) {
148
+ var _a, _b, _c;
149
+ for (const pluginTranslation of pluginTranslations) {
150
+ if (pluginTranslation.translations.length === 0) {
151
+ continue;
152
+ }
153
+ (_a = linguiConfig.catalogs) === null || _a === void 0 ? void 0 : _a.push({
154
+ path: (_c = (_b = pluginTranslation.translations[0]) === null || _b === void 0 ? void 0 : _b.replace(/[a-z_-]+\.po$/, '{locale}')) !== null && _c !== void 0 ? _c : '',
155
+ include: [],
156
+ });
157
+ }
158
+ return getCatalogs(linguiConfig);
159
+ }
160
+ async function createMergedMessageMap({ files, packageRoot, catalogs, sourceLocale, }) {
161
+ var _a;
162
+ const mergedMessageMap = new Map();
163
+ for (const file of files) {
164
+ const catalogRelativePath = path.relative(packageRoot, file);
165
+ const fileCatalog = getCatalogForFile(catalogRelativePath, catalogs);
166
+ const { locale, catalog } = fileCatalog;
167
+ const { messages } = await catalog.getTranslations(locale, {
168
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
169
+ fallbackLocales: { default: sourceLocale },
170
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
171
+ sourceLocale: sourceLocale,
172
+ });
173
+ const mergedMessages = (_a = mergedMessageMap.get(locale)) !== null && _a !== void 0 ? _a : {};
174
+ mergedMessageMap.set(locale, Object.assign(Object.assign({}, mergedMessages), messages));
175
+ }
176
+ return mergedMessageMap;
177
+ }