@leandrosk/dashboard 3.5.5-fork.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.
- package/README.md +118 -0
- package/dist/plugin/api/api-extensions.d.ts +1 -0
- package/dist/plugin/api/api-extensions.js +35 -0
- package/dist/plugin/api/metrics.resolver.d.ts +8 -0
- package/dist/plugin/api/metrics.resolver.js +40 -0
- package/dist/plugin/config/metrics-strategies.d.ts +39 -0
- package/dist/plugin/config/metrics-strategies.js +74 -0
- package/dist/plugin/constants.d.ts +8 -0
- package/dist/plugin/constants.js +35 -0
- package/dist/plugin/dashboard.plugin.d.ts +115 -0
- package/dist/plugin/dashboard.plugin.js +339 -0
- package/dist/plugin/default-page.html +193 -0
- package/dist/plugin/index.d.ts +2 -0
- package/dist/plugin/index.js +18 -0
- package/dist/plugin/package.json +3 -0
- package/dist/plugin/service/metrics.service.d.ts +15 -0
- package/dist/plugin/service/metrics.service.js +129 -0
- package/dist/plugin/types.d.ts +20 -0
- package/dist/plugin/types.js +9 -0
- package/dist/vite/constants.d.ts +5 -0
- package/dist/vite/constants.js +280 -0
- package/dist/vite/index.d.ts +1 -0
- package/dist/vite/index.js +1 -0
- package/dist/vite/types.d.ts +79 -0
- package/dist/vite/types.js +1 -0
- package/dist/vite/utils/ast-utils.d.ts +5 -0
- package/dist/vite/utils/ast-utils.js +29 -0
- package/dist/vite/utils/ast-utils.spec.d.ts +1 -0
- package/dist/vite/utils/ast-utils.spec.js +45 -0
- package/dist/vite/utils/compiler.d.ts +23 -0
- package/dist/vite/utils/compiler.js +191 -0
- package/dist/vite/utils/get-dashboard-paths.d.ts +5 -0
- package/dist/vite/utils/get-dashboard-paths.js +20 -0
- package/dist/vite/utils/logger.d.ts +3 -0
- package/dist/vite/utils/logger.js +39 -0
- package/dist/vite/utils/path-transformer.d.ts +20 -0
- package/dist/vite/utils/path-transformer.js +116 -0
- package/dist/vite/utils/plugin-discovery.d.ts +27 -0
- package/dist/vite/utils/plugin-discovery.js +399 -0
- package/dist/vite/utils/schema-generator.d.ts +10 -0
- package/dist/vite/utils/schema-generator.js +35 -0
- package/dist/vite/utils/tsconfig-utils.d.ts +9 -0
- package/dist/vite/utils/tsconfig-utils.js +51 -0
- package/dist/vite/utils/ui-config.d.ts +3 -0
- package/dist/vite/utils/ui-config.js +44 -0
- package/dist/vite/vite-plugin-admin-api-schema.d.ts +24 -0
- package/dist/vite/vite-plugin-admin-api-schema.js +82 -0
- package/dist/vite/vite-plugin-config-loader.d.ts +16 -0
- package/dist/vite/vite-plugin-config-loader.js +70 -0
- package/dist/vite/vite-plugin-config.d.ts +4 -0
- package/dist/vite/vite-plugin-config.js +60 -0
- package/dist/vite/vite-plugin-dashboard-metadata.d.ts +7 -0
- package/dist/vite/vite-plugin-dashboard-metadata.js +61 -0
- package/dist/vite/vite-plugin-gql-tada.d.ts +6 -0
- package/dist/vite/vite-plugin-gql-tada.js +51 -0
- package/dist/vite/vite-plugin-hmr.d.ts +8 -0
- package/dist/vite/vite-plugin-hmr.js +34 -0
- package/dist/vite/vite-plugin-lingui-babel.d.ts +40 -0
- package/dist/vite/vite-plugin-lingui-babel.js +168 -0
- package/dist/vite/vite-plugin-tailwind-source.d.ts +7 -0
- package/dist/vite/vite-plugin-tailwind-source.js +48 -0
- package/dist/vite/vite-plugin-theme.d.ts +55 -0
- package/dist/vite/vite-plugin-theme.js +130 -0
- package/dist/vite/vite-plugin-transform-index.d.ts +11 -0
- package/dist/vite/vite-plugin-transform-index.js +40 -0
- package/dist/vite/vite-plugin-translations.d.ts +31 -0
- package/dist/vite/vite-plugin-translations.js +177 -0
- package/dist/vite/vite-plugin-ui-config.d.ts +181 -0
- package/dist/vite/vite-plugin-ui-config.js +36 -0
- package/dist/vite/vite-plugin-vendure-dashboard.d.ts +142 -0
- package/dist/vite/vite-plugin-vendure-dashboard.js +170 -0
- package/index.html +14 -0
- package/lingui.config.js +39 -0
- package/package.json +184 -0
- package/src/app/app-providers.tsx +31 -0
- package/src/app/common/delete-bulk-action.tsx +149 -0
- package/src/app/common/duplicate-bulk-action.tsx +147 -0
- package/src/app/common/duplicate-entity-dialog.tsx +117 -0
- package/src/app/common/map-faceted-filter-fields.ts +21 -0
- package/src/app/common/set-document-direction.ts +7 -0
- package/src/app/common/use-page-title.test.ts +263 -0
- package/src/app/common/use-page-title.ts +86 -0
- package/src/app/main.tsx +134 -0
- package/src/app/routeTree.gen.ts +1284 -0
- package/src/app/routes/__root.tsx +23 -0
- package/src/app/routes/_authenticated/_administrators/administrators.graphql.ts +88 -0
- package/src/app/routes/_authenticated/_administrators/administrators.tsx +104 -0
- package/src/app/routes/_authenticated/_administrators/administrators_.$id.tsx +160 -0
- package/src/app/routes/_authenticated/_administrators/components/administrator-bulk-actions.tsx +15 -0
- package/src/app/routes/_authenticated/_administrators/components/role-permissions-display.tsx +133 -0
- package/src/app/routes/_authenticated/_assets/assets.graphql.ts +76 -0
- package/src/app/routes/_authenticated/_assets/assets.tsx +48 -0
- package/src/app/routes/_authenticated/_assets/assets_.$id.tsx +181 -0
- package/src/app/routes/_authenticated/_assets/components/asset-bulk-actions.tsx +47 -0
- package/src/app/routes/_authenticated/_assets/components/asset-tag-filter.tsx +206 -0
- package/src/app/routes/_authenticated/_assets/components/asset-tags-editor.tsx +226 -0
- package/src/app/routes/_authenticated/_assets/components/manage-tags-dialog.tsx +212 -0
- package/src/app/routes/_authenticated/_channels/channels.graphql.ts +102 -0
- package/src/app/routes/_authenticated/_channels/channels.tsx +81 -0
- package/src/app/routes/_authenticated/_channels/channels_.$id.tsx +251 -0
- package/src/app/routes/_authenticated/_channels/components/channel-bulk-actions.tsx +15 -0
- package/src/app/routes/_authenticated/_collections/collections.graphql.ts +191 -0
- package/src/app/routes/_authenticated/_collections/collections.tsx +458 -0
- package/src/app/routes/_authenticated/_collections/collections_.$id.tsx +267 -0
- package/src/app/routes/_authenticated/_collections/components/collection-bulk-actions.tsx +130 -0
- package/src/app/routes/_authenticated/_collections/components/collection-contents-preview-table.tsx +153 -0
- package/src/app/routes/_authenticated/_collections/components/collection-contents-sheet.tsx +50 -0
- package/src/app/routes/_authenticated/_collections/components/collection-contents-table.tsx +83 -0
- package/src/app/routes/_authenticated/_collections/components/collection-filters-selector.tsx +30 -0
- package/src/app/routes/_authenticated/_collections/components/move-collections-dialog.tsx +433 -0
- package/src/app/routes/_authenticated/_countries/components/country-bulk-actions.tsx +15 -0
- package/src/app/routes/_authenticated/_countries/countries.graphql.ts +82 -0
- package/src/app/routes/_authenticated/_countries/countries.tsx +72 -0
- package/src/app/routes/_authenticated/_countries/countries_.$id.tsx +123 -0
- package/src/app/routes/_authenticated/_customer-groups/components/customer-group-bulk-actions.tsx +15 -0
- package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-sheet.tsx +51 -0
- package/src/app/routes/_authenticated/_customer-groups/components/customer-group-members-table.tsx +134 -0
- package/src/app/routes/_authenticated/_customer-groups/customer-groups.graphql.ts +80 -0
- package/src/app/routes/_authenticated/_customer-groups/customer-groups.tsx +72 -0
- package/src/app/routes/_authenticated/_customer-groups/customer-groups_.$id.tsx +121 -0
- package/src/app/routes/_authenticated/_customers/components/customer-address-card.tsx +155 -0
- package/src/app/routes/_authenticated/_customers/components/customer-address-form.tsx +347 -0
- package/src/app/routes/_authenticated/_customers/components/customer-bulk-actions.tsx +15 -0
- package/src/app/routes/_authenticated/_customers/components/customer-group-controls.tsx +4 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-container.tsx +78 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-types.ts +5 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history-utils.tsx +124 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/customer-history.tsx +113 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/default-customer-history-components.tsx +178 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/index.ts +4 -0
- package/src/app/routes/_authenticated/_customers/components/customer-history/use-customer-history.ts +169 -0
- package/src/app/routes/_authenticated/_customers/components/customer-order-table.tsx +90 -0
- package/src/app/routes/_authenticated/_customers/components/customer-status-badge.tsx +33 -0
- package/src/app/routes/_authenticated/_customers/customers.graphql.ts +219 -0
- package/src/app/routes/_authenticated/_customers/customers.tsx +107 -0
- package/src/app/routes/_authenticated/_customers/customers_.$id.tsx +280 -0
- package/src/app/routes/_authenticated/_facets/components/facet-bulk-actions.tsx +99 -0
- package/src/app/routes/_authenticated/_facets/components/facet-value-bulk-actions.tsx +16 -0
- package/src/app/routes/_authenticated/_facets/components/facet-values-sheet.tsx +49 -0
- package/src/app/routes/_authenticated/_facets/components/facet-values-table.tsx +139 -0
- package/src/app/routes/_authenticated/_facets/facets.graphql.ts +182 -0
- package/src/app/routes/_authenticated/_facets/facets.tsx +121 -0
- package/src/app/routes/_authenticated/_facets/facets_.$facetId.values_.$id.tsx +158 -0
- package/src/app/routes/_authenticated/_facets/facets_.$id.tsx +152 -0
- package/src/app/routes/_authenticated/_global-settings/global-settings.graphql.ts +28 -0
- package/src/app/routes/_authenticated/_global-settings/global-settings.tsx +161 -0
- package/src/app/routes/_authenticated/_orders/components/add-manual-payment-dialog.tsx +189 -0
- package/src/app/routes/_authenticated/_orders/components/add-surcharge-form.tsx +139 -0
- package/src/app/routes/_authenticated/_orders/components/customer-address-selector.tsx +115 -0
- package/src/app/routes/_authenticated/_orders/components/draft-order-status.tsx +48 -0
- package/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx +287 -0
- package/src/app/routes/_authenticated/_orders/components/fulfill-order-dialog.tsx +323 -0
- package/src/app/routes/_authenticated/_orders/components/fulfillment-details.tsx +181 -0
- package/src/app/routes/_authenticated/_orders/components/money-gross-net.tsx +20 -0
- package/src/app/routes/_authenticated/_orders/components/order-address.tsx +65 -0
- package/src/app/routes/_authenticated/_orders/components/order-detail-shared.tsx +332 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/default-order-history-components.tsx +138 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/index.ts +3 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history-container.tsx +80 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history-types.ts +5 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history-utils.tsx +189 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/order-history.tsx +117 -0
- package/src/app/routes/_authenticated/_orders/components/order-history/use-order-history.ts +175 -0
- package/src/app/routes/_authenticated/_orders/components/order-line-custom-fields-form.tsx +60 -0
- package/src/app/routes/_authenticated/_orders/components/order-modification-preview-dialog.tsx +365 -0
- package/src/app/routes/_authenticated/_orders/components/order-modification-summary.tsx +277 -0
- package/src/app/routes/_authenticated/_orders/components/order-table-totals.tsx +100 -0
- package/src/app/routes/_authenticated/_orders/components/order-table.tsx +216 -0
- package/src/app/routes/_authenticated/_orders/components/order-tax-summary.tsx +40 -0
- package/src/app/routes/_authenticated/_orders/components/payment-details.tsx +293 -0
- package/src/app/routes/_authenticated/_orders/components/refund-order-dialog.tsx +372 -0
- package/src/app/routes/_authenticated/_orders/components/seller-orders-card.tsx +63 -0
- package/src/app/routes/_authenticated/_orders/components/settle-refund-dialog.tsx +80 -0
- package/src/app/routes/_authenticated/_orders/components/shipping-method-selector.tsx +64 -0
- package/src/app/routes/_authenticated/_orders/components/state-transition-control.tsx +99 -0
- package/src/app/routes/_authenticated/_orders/components/use-transition-order-to-state.tsx +151 -0
- package/src/app/routes/_authenticated/_orders/hooks/use-refund-order.ts +345 -0
- package/src/app/routes/_authenticated/_orders/orders.graphql.ts +817 -0
- package/src/app/routes/_authenticated/_orders/orders.tsx +120 -0
- package/src/app/routes/_authenticated/_orders/orders_.$aggregateOrderId_.seller-orders.$sellerOrderId.tsx +50 -0
- package/src/app/routes/_authenticated/_orders/orders_.$id.tsx +30 -0
- package/src/app/routes/_authenticated/_orders/orders_.$id_.modify.tsx +312 -0
- package/src/app/routes/_authenticated/_orders/orders_.draft.$id.tsx +513 -0
- package/src/app/routes/_authenticated/_orders/utils/order-detail-loaders.tsx +140 -0
- package/src/app/routes/_authenticated/_orders/utils/order-types.ts +10 -0
- package/src/app/routes/_authenticated/_orders/utils/order-utils.ts +219 -0
- package/src/app/routes/_authenticated/_orders/utils/refund-utils.ts +100 -0
- package/src/app/routes/_authenticated/_orders/utils/use-modify-order.ts +350 -0
- package/src/app/routes/_authenticated/_payment-methods/components/payment-eligibility-checker-selector.tsx +40 -0
- package/src/app/routes/_authenticated/_payment-methods/components/payment-handler-selector.tsx +39 -0
- package/src/app/routes/_authenticated/_payment-methods/components/payment-method-bulk-actions.tsx +58 -0
- package/src/app/routes/_authenticated/_payment-methods/payment-methods.graphql.ts +110 -0
- package/src/app/routes/_authenticated/_payment-methods/payment-methods.tsx +88 -0
- package/src/app/routes/_authenticated/_payment-methods/payment-methods_.$id.tsx +213 -0
- package/src/app/routes/_authenticated/_product-variants/components/add-currency-dropdown.tsx +49 -0
- package/src/app/routes/_authenticated/_product-variants/components/add-stock-location-dropdown.tsx +56 -0
- package/src/app/routes/_authenticated/_product-variants/components/product-variant-bulk-actions.tsx +110 -0
- package/src/app/routes/_authenticated/_product-variants/components/variant-price-detail.tsx +92 -0
- package/src/app/routes/_authenticated/_product-variants/product-variants.graphql.ts +213 -0
- package/src/app/routes/_authenticated/_product-variants/product-variants.tsx +115 -0
- package/src/app/routes/_authenticated/_product-variants/product-variants_.$id.tsx +490 -0
- package/src/app/routes/_authenticated/_products/components/add-option-group-dialog.tsx +127 -0
- package/src/app/routes/_authenticated/_products/components/add-product-variant-dialog.tsx +372 -0
- package/src/app/routes/_authenticated/_products/components/assign-facet-values-dialog.tsx +282 -0
- package/src/app/routes/_authenticated/_products/components/create-product-options-dialog.tsx +416 -0
- package/src/app/routes/_authenticated/_products/components/create-product-variants-dialog.tsx +190 -0
- package/src/app/routes/_authenticated/_products/components/create-product-variants.tsx +370 -0
- package/src/app/routes/_authenticated/_products/components/option-groups-editor.tsx +180 -0
- package/src/app/routes/_authenticated/_products/components/option-value-input.tsx +72 -0
- package/src/app/routes/_authenticated/_products/components/product-bulk-actions.tsx +117 -0
- package/src/app/routes/_authenticated/_products/components/product-option-group-badge.tsx +19 -0
- package/src/app/routes/_authenticated/_products/components/product-option-select.tsx +111 -0
- package/src/app/routes/_authenticated/_products/components/product-options-table.tsx +114 -0
- package/src/app/routes/_authenticated/_products/components/product-variants-table.tsx +120 -0
- package/src/app/routes/_authenticated/_products/product-option-groups.graphql.ts +103 -0
- package/src/app/routes/_authenticated/_products/products.graphql.ts +352 -0
- package/src/app/routes/_authenticated/_products/products.tsx +138 -0
- package/src/app/routes/_authenticated/_products/products_.$id.tsx +258 -0
- package/src/app/routes/_authenticated/_products/products_.$id_.variants.tsx +430 -0
- package/src/app/routes/_authenticated/_products/products_.$productId.option-groups.$id.tsx +177 -0
- package/src/app/routes/_authenticated/_products/products_.$productId.option-groups.$productOptionGroupId.options_.$id.tsx +204 -0
- package/src/app/routes/_authenticated/_profile/profile.graphql.ts +30 -0
- package/src/app/routes/_authenticated/_profile/profile.tsx +143 -0
- package/src/app/routes/_authenticated/_promotions/components/promotion-actions-selector.tsx +41 -0
- package/src/app/routes/_authenticated/_promotions/components/promotion-bulk-actions.tsx +72 -0
- package/src/app/routes/_authenticated/_promotions/components/promotion-conditions-selector.tsx +41 -0
- package/src/app/routes/_authenticated/_promotions/promotions.graphql.ts +121 -0
- package/src/app/routes/_authenticated/_promotions/promotions.tsx +94 -0
- package/src/app/routes/_authenticated/_promotions/promotions_.$id.tsx +261 -0
- package/src/app/routes/_authenticated/_roles/components/expandable-permissions.tsx +54 -0
- package/src/app/routes/_authenticated/_roles/components/permissions-table-grid.tsx +251 -0
- package/src/app/routes/_authenticated/_roles/components/role-bulk-actions.tsx +15 -0
- package/src/app/routes/_authenticated/_roles/roles.graphql.ts +76 -0
- package/src/app/routes/_authenticated/_roles/roles.tsx +99 -0
- package/src/app/routes/_authenticated/_roles/roles_.$id.tsx +146 -0
- package/src/app/routes/_authenticated/_sellers/components/seller-bulk-actions.tsx +15 -0
- package/src/app/routes/_authenticated/_sellers/sellers.graphql.ts +70 -0
- package/src/app/routes/_authenticated/_sellers/sellers.tsx +56 -0
- package/src/app/routes/_authenticated/_sellers/sellers_.$id.tsx +112 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/fulfillment-handler-selector.tsx +56 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/metadata-badges.tsx +15 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/price-display.tsx +21 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-calculator-selector.tsx +39 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-eligibility-checker-selector.tsx +39 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-bulk-actions.tsx +61 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/shipping-method-test-result-wrapper.tsx +87 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/test-address-form.tsx +256 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/test-order-builder.tsx +244 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-methods-result.tsx +97 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-methods-sheet.tsx +41 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/test-shipping-methods.tsx +74 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/test-single-method-result.tsx +90 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/test-single-shipping-method-sheet.tsx +56 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/test-single-shipping-method.tsx +82 -0
- package/src/app/routes/_authenticated/_shipping-methods/components/use-shipping-method-test-state.ts +67 -0
- package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.graphql.ts +137 -0
- package/src/app/routes/_authenticated/_shipping-methods/shipping-methods.tsx +76 -0
- package/src/app/routes/_authenticated/_shipping-methods/shipping-methods_.$id.tsx +209 -0
- package/src/app/routes/_authenticated/_stock-locations/components/stock-location-bulk-actions.tsx +58 -0
- package/src/app/routes/_authenticated/_stock-locations/stock-locations.graphql.ts +87 -0
- package/src/app/routes/_authenticated/_stock-locations/stock-locations.tsx +65 -0
- package/src/app/routes/_authenticated/_stock-locations/stock-locations_.$id.tsx +126 -0
- package/src/app/routes/_authenticated/_system/components/payload-dialog.tsx +41 -0
- package/src/app/routes/_authenticated/_system/healthchecks.tsx +100 -0
- package/src/app/routes/_authenticated/_system/job-queue.graphql.ts +54 -0
- package/src/app/routes/_authenticated/_system/job-queue.tsx +266 -0
- package/src/app/routes/_authenticated/_system/scheduled-tasks.tsx +249 -0
- package/src/app/routes/_authenticated/_tax-categories/components/tax-category-bulk-actions.tsx +15 -0
- package/src/app/routes/_authenticated/_tax-categories/tax-categories.graphql.ts +72 -0
- package/src/app/routes/_authenticated/_tax-categories/tax-categories.tsx +69 -0
- package/src/app/routes/_authenticated/_tax-categories/tax-categories_.$id.tsx +127 -0
- package/src/app/routes/_authenticated/_tax-rates/components/tax-rate-bulk-actions.tsx +15 -0
- package/src/app/routes/_authenticated/_tax-rates/tax-rates.graphql.ts +84 -0
- package/src/app/routes/_authenticated/_tax-rates/tax-rates.tsx +119 -0
- package/src/app/routes/_authenticated/_tax-rates/tax-rates_.$id.tsx +149 -0
- package/src/app/routes/_authenticated/_zones/components/zone-bulk-actions.tsx +63 -0
- package/src/app/routes/_authenticated/_zones/components/zone-countries-add.tsx +0 -0
- package/src/app/routes/_authenticated/_zones/components/zone-countries-sheet.tsx +34 -0
- package/src/app/routes/_authenticated/_zones/components/zone-countries-table.tsx +94 -0
- package/src/app/routes/_authenticated/_zones/zones.graphql.ts +105 -0
- package/src/app/routes/_authenticated/_zones/zones.tsx +64 -0
- package/src/app/routes/_authenticated/_zones/zones_.$id.tsx +110 -0
- package/src/app/routes/_authenticated/index.tsx +233 -0
- package/src/app/routes/_authenticated.tsx +35 -0
- package/src/app/routes/login.tsx +49 -0
- package/src/app/styles.css +100 -0
- package/src/app/tailwindcss-animate.css +275 -0
- package/src/i18n/common-strings.ts +123 -0
- package/src/i18n/locales/ar.po +5250 -0
- package/src/i18n/locales/bg.po +5287 -0
- package/src/i18n/locales/cs.po +5250 -0
- package/src/i18n/locales/de.po +5250 -0
- package/src/i18n/locales/el.po +5311 -0
- package/src/i18n/locales/en.po +5285 -0
- package/src/i18n/locales/es.po +5250 -0
- package/src/i18n/locales/fa.po +5250 -0
- package/src/i18n/locales/fr.po +5250 -0
- package/src/i18n/locales/he.po +5250 -0
- package/src/i18n/locales/hr.po +5250 -0
- package/src/i18n/locales/it.po +5250 -0
- package/src/i18n/locales/ja.po +5250 -0
- package/src/i18n/locales/ko.po +4628 -0
- package/src/i18n/locales/nb.po +5250 -0
- package/src/i18n/locales/ne.po +5250 -0
- package/src/i18n/locales/nl.po +4628 -0
- package/src/i18n/locales/pl.po +5250 -0
- package/src/i18n/locales/pt_BR.po +5250 -0
- package/src/i18n/locales/pt_PT.po +5250 -0
- package/src/i18n/locales/ru.po +5250 -0
- package/src/i18n/locales/sv.po +5250 -0
- package/src/i18n/locales/tr.po +5250 -0
- package/src/i18n/locales/uk.po +5250 -0
- package/src/i18n/locales/zh_Hans.po +5250 -0
- package/src/i18n/locales/zh_Hant.po +5250 -0
- package/src/lib/components/data-display/boolean.tsx +23 -0
- package/src/lib/components/data-display/date-time.tsx +19 -0
- package/src/lib/components/data-display/json.tsx +20 -0
- package/src/lib/components/data-display/money.tsx +14 -0
- package/src/lib/components/data-input/affixed-input.stories.tsx +93 -0
- package/src/lib/components/data-input/affixed-input.tsx +79 -0
- package/src/lib/components/data-input/boolean-input.stories.tsx +102 -0
- package/src/lib/components/data-input/boolean-input.tsx +16 -0
- package/src/lib/components/data-input/checkbox-input.stories.tsx +61 -0
- package/src/lib/components/data-input/checkbox-input.tsx +15 -0
- package/src/lib/components/data-input/combination-mode-input.tsx +64 -0
- package/src/lib/components/data-input/configurable-operation-list-input.tsx +59 -0
- package/src/lib/components/data-input/custom-field-list-input.tsx +294 -0
- package/src/lib/components/data-input/customer-group-input.tsx +61 -0
- package/src/lib/components/data-input/datetime-input.stories.tsx +62 -0
- package/src/lib/components/data-input/datetime-input.tsx +210 -0
- package/src/lib/components/data-input/default-relation-input.tsx +626 -0
- package/src/lib/components/data-input/facet-value-input.tsx +78 -0
- package/src/lib/components/data-input/index.ts +24 -0
- package/src/lib/components/data-input/money-input.stories.tsx +88 -0
- package/src/lib/components/data-input/money-input.tsx +117 -0
- package/src/lib/components/data-input/number-input.stories.tsx +103 -0
- package/src/lib/components/data-input/number-input.tsx +85 -0
- package/src/lib/components/data-input/password-form-input.stories.tsx +65 -0
- package/src/lib/components/data-input/password-form-input.tsx +23 -0
- package/src/lib/components/data-input/product-multi-selector-input.tsx +416 -0
- package/src/lib/components/data-input/relation-input.tsx +165 -0
- package/src/lib/components/data-input/relation-selector.tsx +476 -0
- package/src/lib/components/data-input/rich-text-input.stories.tsx +92 -0
- package/src/lib/components/data-input/rich-text-input.tsx +16 -0
- package/src/lib/components/data-input/select-with-options.tsx +112 -0
- package/src/lib/components/data-input/slug-input.stories.tsx +232 -0
- package/src/lib/components/data-input/slug-input.tsx +290 -0
- package/src/lib/components/data-input/string-list-input.tsx +268 -0
- package/src/lib/components/data-input/struct-form-input.tsx +352 -0
- package/src/lib/components/data-input/text-input.stories.tsx +52 -0
- package/src/lib/components/data-input/text-input.tsx +16 -0
- package/src/lib/components/data-input/textarea-input.stories.tsx +55 -0
- package/src/lib/components/data-input/textarea-input.tsx +23 -0
- package/src/lib/components/data-table/add-filter-menu.tsx +64 -0
- package/src/lib/components/data-table/column-header-wrapper.tsx +106 -0
- package/src/lib/components/data-table/data-table-bulk-action-item.tsx +141 -0
- package/src/lib/components/data-table/data-table-bulk-actions.tsx +100 -0
- package/src/lib/components/data-table/data-table-column-header.tsx +50 -0
- package/src/lib/components/data-table/data-table-context.tsx +98 -0
- package/src/lib/components/data-table/data-table-facet-value-faceted-filter.tsx +308 -0
- package/src/lib/components/data-table/data-table-faceted-filter.tsx +195 -0
- package/src/lib/components/data-table/data-table-filter-badge-editable.tsx +35 -0
- package/src/lib/components/data-table/data-table-filter-badge.tsx +115 -0
- package/src/lib/components/data-table/data-table-filter-dialog.tsx +92 -0
- package/src/lib/components/data-table/data-table-pagination.tsx +105 -0
- package/src/lib/components/data-table/data-table-utils.ts +313 -0
- package/src/lib/components/data-table/data-table-view-options.tsx +132 -0
- package/src/lib/components/data-table/data-table.stories.tsx +249 -0
- package/src/lib/components/data-table/data-table.tsx +554 -0
- package/src/lib/components/data-table/filters/data-table-boolean-filter.tsx +60 -0
- package/src/lib/components/data-table/filters/data-table-datetime-filter.tsx +159 -0
- package/src/lib/components/data-table/filters/data-table-id-filter.tsx +63 -0
- package/src/lib/components/data-table/filters/data-table-number-filter.tsx +123 -0
- package/src/lib/components/data-table/filters/data-table-string-filter.tsx +79 -0
- package/src/lib/components/data-table/global-views-bar.tsx +97 -0
- package/src/lib/components/data-table/global-views-sheet.tsx +11 -0
- package/src/lib/components/data-table/human-readable-operator.tsx +65 -0
- package/src/lib/components/data-table/manage-global-views-button.tsx +26 -0
- package/src/lib/components/data-table/my-views-button.tsx +47 -0
- package/src/lib/components/data-table/refresh-button.tsx +49 -0
- package/src/lib/components/data-table/save-view-button.tsx +45 -0
- package/src/lib/components/data-table/save-view-dialog.tsx +134 -0
- package/src/lib/components/data-table/types.ts +40 -0
- package/src/lib/components/data-table/use-all-bulk-actions.ts +19 -0
- package/src/lib/components/data-table/use-generated-columns.tsx +418 -0
- package/src/lib/components/data-table/user-views-sheet.tsx +11 -0
- package/src/lib/components/data-table/views-sheet.tsx +305 -0
- package/src/lib/components/date-range-picker.tsx +186 -0
- package/src/lib/components/labeled-data.tsx +21 -0
- package/src/lib/components/layout/app-layout.tsx +35 -0
- package/src/lib/components/layout/app-sidebar.tsx +37 -0
- package/src/lib/components/layout/channel-switcher.tsx +228 -0
- package/src/lib/components/layout/content-language-selector.tsx +46 -0
- package/src/lib/components/layout/dev-mode-indicator.tsx +18 -0
- package/src/lib/components/layout/generated-breadcrumbs.tsx +136 -0
- package/src/lib/components/layout/language-dialog.tsx +133 -0
- package/src/lib/components/layout/manage-languages-dialog.tsx +387 -0
- package/src/lib/components/layout/nav-item-wrapper.tsx +107 -0
- package/src/lib/components/layout/nav-main.tsx +331 -0
- package/src/lib/components/layout/nav-projects.tsx +81 -0
- package/src/lib/components/layout/nav-user.tsx +180 -0
- package/src/lib/components/login/login-form.tsx +124 -0
- package/src/lib/components/shared/alerts.tsx +52 -0
- package/src/lib/components/shared/animated-number.tsx +49 -0
- package/src/lib/components/shared/asset/asset-bulk-actions.tsx +109 -0
- package/src/lib/components/shared/asset/asset-focal-point-editor.tsx +103 -0
- package/src/lib/components/shared/asset/asset-gallery.stories.tsx +76 -0
- package/src/lib/components/shared/asset/asset-gallery.tsx +623 -0
- package/src/lib/components/shared/asset/asset-picker-dialog.stories.tsx +58 -0
- package/src/lib/components/shared/asset/asset-picker-dialog.tsx +109 -0
- package/src/lib/components/shared/asset/asset-preview-dialog.tsx +38 -0
- package/src/lib/components/shared/asset/asset-preview-selector.tsx +32 -0
- package/src/lib/components/shared/asset/asset-preview.tsx +114 -0
- package/src/lib/components/shared/asset/asset-properties.tsx +44 -0
- package/src/lib/components/shared/assign-to-channel-bulk-action.tsx +71 -0
- package/src/lib/components/shared/assign-to-channel-dialog.tsx +156 -0
- package/src/lib/components/shared/assigned-channels.tsx +108 -0
- package/src/lib/components/shared/assigned-facet-values.tsx +61 -0
- package/src/lib/components/shared/channel-chip.tsx +43 -0
- package/src/lib/components/shared/channel-code-label.tsx +6 -0
- package/src/lib/components/shared/channel-selector.tsx +51 -0
- package/src/lib/components/shared/configurable-operation-arg-input.tsx +29 -0
- package/src/lib/components/shared/configurable-operation-input.tsx +190 -0
- package/src/lib/components/shared/configurable-operation-multi-selector.tsx +308 -0
- package/src/lib/components/shared/configurable-operation-selector.tsx +161 -0
- package/src/lib/components/shared/confirmation-dialog.tsx +58 -0
- package/src/lib/components/shared/copyable-text.tsx +30 -0
- package/src/lib/components/shared/country-selector.tsx +108 -0
- package/src/lib/components/shared/currency-selector.tsx +33 -0
- package/src/lib/components/shared/custom-fields-form.tsx +305 -0
- package/src/lib/components/shared/customer-address-form.tsx +338 -0
- package/src/lib/components/shared/customer-group-chip.tsx +30 -0
- package/src/lib/components/shared/customer-group-selector.tsx +65 -0
- package/src/lib/components/shared/customer-selector.tsx +112 -0
- package/src/lib/components/shared/detail-page-button.stories.tsx +52 -0
- package/src/lib/components/shared/detail-page-button.tsx +59 -0
- package/src/lib/components/shared/entity-assets.tsx +411 -0
- package/src/lib/components/shared/error-page.tsx +31 -0
- package/src/lib/components/shared/facet-value-chip.tsx +59 -0
- package/src/lib/components/shared/facet-value-selector.stories.tsx +48 -0
- package/src/lib/components/shared/facet-value-selector.tsx +274 -0
- package/src/lib/components/shared/form-field-wrapper.tsx +111 -0
- package/src/lib/components/shared/history-timeline/history-entry-date.tsx +37 -0
- package/src/lib/components/shared/history-timeline/history-note-checkbox.tsx +28 -0
- package/src/lib/components/shared/history-timeline/history-note-editor.tsx +60 -0
- package/src/lib/components/shared/history-timeline/history-note-entry.tsx +65 -0
- package/src/lib/components/shared/history-timeline/history-note-input.tsx +39 -0
- package/src/lib/components/shared/history-timeline/history-timeline-with-grouping.tsx +144 -0
- package/src/lib/components/shared/history-timeline/history-timeline.tsx +16 -0
- package/src/lib/components/shared/history-timeline/use-history-note-editor.ts +26 -0
- package/src/lib/components/shared/icon-mark.tsx +18 -0
- package/src/lib/components/shared/language-selector.tsx +56 -0
- package/src/lib/components/shared/logo-mark.tsx +24 -0
- package/src/lib/components/shared/multi-select.tsx +159 -0
- package/src/lib/components/shared/navigation-confirmation.tsx +64 -0
- package/src/lib/components/shared/option-value-input.tsx +97 -0
- package/src/lib/components/shared/paginated-list-context.ts +10 -0
- package/src/lib/components/shared/paginated-list-data-table.stories.tsx +212 -0
- package/src/lib/components/shared/paginated-list-data-table.tsx +497 -0
- package/src/lib/components/shared/permission-guard.stories.tsx +46 -0
- package/src/lib/components/shared/permission-guard.tsx +51 -0
- package/src/lib/components/shared/product-variant-selector.tsx +136 -0
- package/src/lib/components/shared/remove-from-channel-bulk-action.tsx +93 -0
- package/src/lib/components/shared/rich-text-editor/image-dialog.tsx +223 -0
- package/src/lib/components/shared/rich-text-editor/link-dialog.tsx +151 -0
- package/src/lib/components/shared/rich-text-editor/responsive-toolbar.tsx +443 -0
- package/src/lib/components/shared/rich-text-editor/rich-text-editor.tsx +339 -0
- package/src/lib/components/shared/rich-text-editor/table-delete-menu.tsx +104 -0
- package/src/lib/components/shared/rich-text-editor/table-edit-icons.tsx +225 -0
- package/src/lib/components/shared/role-code-label.tsx +12 -0
- package/src/lib/components/shared/role-selector.tsx +56 -0
- package/src/lib/components/shared/seller-selector.tsx +111 -0
- package/src/lib/components/shared/stock-level-label.tsx +22 -0
- package/src/lib/components/shared/table-cell/order-table-cell-components.tsx +80 -0
- package/src/lib/components/shared/tax-category-selector.tsx +65 -0
- package/src/lib/components/shared/translatable-form-field.tsx +149 -0
- package/src/lib/components/shared/vendure-image.stories.tsx +167 -0
- package/src/lib/components/shared/vendure-image.tsx +307 -0
- package/src/lib/components/shared/zone-selector.tsx +65 -0
- package/src/lib/components/ui/accordion.stories.tsx +33 -0
- package/src/lib/components/ui/accordion.tsx +59 -0
- package/src/lib/components/ui/alert-dialog.stories.tsx +48 -0
- package/src/lib/components/ui/alert-dialog.tsx +128 -0
- package/src/lib/components/ui/alert.stories.tsx +35 -0
- package/src/lib/components/ui/alert.tsx +62 -0
- package/src/lib/components/ui/aspect-ratio.stories.tsx +28 -0
- package/src/lib/components/ui/aspect-ratio.tsx +9 -0
- package/src/lib/components/ui/badge.stories.tsx +28 -0
- package/src/lib/components/ui/badge.tsx +38 -0
- package/src/lib/components/ui/breadcrumb.stories.tsx +41 -0
- package/src/lib/components/ui/breadcrumb.tsx +102 -0
- package/src/lib/components/ui/button.stories.tsx +38 -0
- package/src/lib/components/ui/button.tsx +58 -0
- package/src/lib/components/ui/calendar.stories.tsx +22 -0
- package/src/lib/components/ui/calendar.tsx +447 -0
- package/src/lib/components/ui/card.stories.tsx +28 -0
- package/src/lib/components/ui/card.tsx +47 -0
- package/src/lib/components/ui/carousel.stories.tsx +34 -0
- package/src/lib/components/ui/carousel.tsx +241 -0
- package/src/lib/components/ui/chart.tsx +351 -0
- package/src/lib/components/ui/checkbox.stories.tsx +31 -0
- package/src/lib/components/ui/checkbox.tsx +27 -0
- package/src/lib/components/ui/collapsible.stories.tsx +39 -0
- package/src/lib/components/ui/collapsible.tsx +33 -0
- package/src/lib/components/ui/command.stories.tsx +44 -0
- package/src/lib/components/ui/command.tsx +139 -0
- package/src/lib/components/ui/context-menu.stories.tsx +38 -0
- package/src/lib/components/ui/context-menu.tsx +252 -0
- package/src/lib/components/ui/dialog.stories.tsx +52 -0
- package/src/lib/components/ui/dialog.tsx +116 -0
- package/src/lib/components/ui/drawer.stories.tsx +50 -0
- package/src/lib/components/ui/drawer.tsx +133 -0
- package/src/lib/components/ui/dropdown-menu.stories.tsx +41 -0
- package/src/lib/components/ui/dropdown-menu.tsx +223 -0
- package/src/lib/components/ui/form.tsx +141 -0
- package/src/lib/components/ui/grid-layout.tsx +376 -0
- package/src/lib/components/ui/hover-card.stories.tsx +38 -0
- package/src/lib/components/ui/hover-card.tsx +36 -0
- package/src/lib/components/ui/input-group.tsx +149 -0
- package/src/lib/components/ui/input-otp.stories.tsx +30 -0
- package/src/lib/components/ui/input-otp.tsx +77 -0
- package/src/lib/components/ui/input.stories.tsx +38 -0
- package/src/lib/components/ui/input.tsx +19 -0
- package/src/lib/components/ui/label.stories.tsx +24 -0
- package/src/lib/components/ui/label.tsx +21 -0
- package/src/lib/components/ui/menubar.stories.tsx +53 -0
- package/src/lib/components/ui/menubar.tsx +274 -0
- package/src/lib/components/ui/navigation-menu.stories.tsx +54 -0
- package/src/lib/components/ui/navigation-menu.tsx +168 -0
- package/src/lib/components/ui/pagination.stories.tsx +51 -0
- package/src/lib/components/ui/pagination.tsx +106 -0
- package/src/lib/components/ui/password-input.stories.tsx +32 -0
- package/src/lib/components/ui/password-input.tsx +29 -0
- package/src/lib/components/ui/popover.stories.tsx +33 -0
- package/src/lib/components/ui/popover.tsx +40 -0
- package/src/lib/components/ui/progress.stories.tsx +27 -0
- package/src/lib/components/ui/progress.tsx +29 -0
- package/src/lib/components/ui/radio-group.stories.tsx +34 -0
- package/src/lib/components/ui/radio-group.tsx +45 -0
- package/src/lib/components/ui/resizable.stories.tsx +32 -0
- package/src/lib/components/ui/resizable.tsx +54 -0
- package/src/lib/components/ui/scroll-area.stories.tsx +31 -0
- package/src/lib/components/ui/scroll-area.tsx +50 -0
- package/src/lib/components/ui/select.stories.tsx +36 -0
- package/src/lib/components/ui/select.tsx +183 -0
- package/src/lib/components/ui/separator.stories.tsx +35 -0
- package/src/lib/components/ui/separator.tsx +26 -0
- package/src/lib/components/ui/sheet.stories.tsx +50 -0
- package/src/lib/components/ui/sheet.tsx +118 -0
- package/src/lib/components/ui/sidebar-context.ts +16 -0
- package/src/lib/components/ui/sidebar.tsx +686 -0
- package/src/lib/components/ui/skeleton.stories.tsx +26 -0
- package/src/lib/components/ui/skeleton.tsx +13 -0
- package/src/lib/components/ui/slider.stories.tsx +37 -0
- package/src/lib/components/ui/slider.tsx +63 -0
- package/src/lib/components/ui/sonner.tsx +27 -0
- package/src/lib/components/ui/switch.stories.tsx +31 -0
- package/src/lib/components/ui/switch.tsx +26 -0
- package/src/lib/components/ui/table.stories.tsx +52 -0
- package/src/lib/components/ui/table.tsx +82 -0
- package/src/lib/components/ui/tabs.stories.tsx +29 -0
- package/src/lib/components/ui/tabs.tsx +48 -0
- package/src/lib/components/ui/textarea.stories.tsx +32 -0
- package/src/lib/components/ui/textarea.tsx +18 -0
- package/src/lib/components/ui/toggle-group.stories.tsx +31 -0
- package/src/lib/components/ui/toggle-group.tsx +73 -0
- package/src/lib/components/ui/toggle.stories.tsx +39 -0
- package/src/lib/components/ui/toggle.tsx +45 -0
- package/src/lib/components/ui/tooltip.stories.tsx +30 -0
- package/src/lib/components/ui/tooltip.tsx +51 -0
- package/src/lib/constants.ts +24 -0
- package/src/lib/framework/alert/alert-extensions.tsx +19 -0
- package/src/lib/framework/alert/alert-item.tsx +44 -0
- package/src/lib/framework/alert/alerts-indicator.tsx +22 -0
- package/src/lib/framework/alert/search-index-buffer-alert/search-index-buffer-alert.ts +41 -0
- package/src/lib/framework/component-registry/component-registry.tsx +18 -0
- package/src/lib/framework/component-registry/display-component.tsx +28 -0
- package/src/lib/framework/dashboard-widget/base-widget.tsx +92 -0
- package/src/lib/framework/dashboard-widget/latest-orders-widget/index.tsx +153 -0
- package/src/lib/framework/dashboard-widget/latest-orders-widget/latest-orders-widget.graphql.ts +35 -0
- package/src/lib/framework/dashboard-widget/metrics-widget/chart.tsx +50 -0
- package/src/lib/framework/dashboard-widget/metrics-widget/index.tsx +108 -0
- package/src/lib/framework/dashboard-widget/metrics-widget/metrics-widget.graphql.ts +20 -0
- package/src/lib/framework/dashboard-widget/orders-summary/index.tsx +113 -0
- package/src/lib/framework/dashboard-widget/orders-summary/order-summary-widget.graphql.ts +14 -0
- package/src/lib/framework/dashboard-widget/widget-extensions.tsx +19 -0
- package/src/lib/framework/dashboard-widget/widget-filters-context.tsx +18 -0
- package/src/lib/framework/data-table/data-table-extensions.ts +35 -0
- package/src/lib/framework/defaults.ts +270 -0
- package/src/lib/framework/document-extension/extend-detail-form-query.ts +50 -0
- package/src/lib/framework/document-extension/extend-document.spec.ts +884 -0
- package/src/lib/framework/document-extension/extend-document.ts +159 -0
- package/src/lib/framework/document-introspection/add-custom-fields.spec.ts +1458 -0
- package/src/lib/framework/document-introspection/add-custom-fields.ts +452 -0
- package/src/lib/framework/document-introspection/get-document-structure.spec.ts +581 -0
- package/src/lib/framework/document-introspection/get-document-structure.ts +669 -0
- package/src/lib/framework/document-introspection/hooks.ts +13 -0
- package/src/lib/framework/document-introspection/include-only-selected-list-fields.spec.ts +1840 -0
- package/src/lib/framework/document-introspection/include-only-selected-list-fields.ts +940 -0
- package/src/lib/framework/document-introspection/testing-utils.ts +161 -0
- package/src/lib/framework/extension-api/define-dashboard-extension.ts +99 -0
- package/src/lib/framework/extension-api/display-component-extensions.tsx +58 -0
- package/src/lib/framework/extension-api/extension-api-types.ts +92 -0
- package/src/lib/framework/extension-api/input-component-extensions.tsx +100 -0
- package/src/lib/framework/extension-api/logic/alerts.ts +11 -0
- package/src/lib/framework/extension-api/logic/data-table.ts +37 -0
- package/src/lib/framework/extension-api/logic/detail-forms.ts +35 -0
- package/src/lib/framework/extension-api/logic/form-components.ts +14 -0
- package/src/lib/framework/extension-api/logic/history-entries.ts +24 -0
- package/src/lib/framework/extension-api/logic/index.ts +10 -0
- package/src/lib/framework/extension-api/logic/layout.ts +22 -0
- package/src/lib/framework/extension-api/logic/login.ts +17 -0
- package/src/lib/framework/extension-api/logic/navigation.ts +41 -0
- package/src/lib/framework/extension-api/logic/widgets.ts +10 -0
- package/src/lib/framework/extension-api/types/alerts.ts +59 -0
- package/src/lib/framework/extension-api/types/data-table.ts +159 -0
- package/src/lib/framework/extension-api/types/detail-forms.ts +58 -0
- package/src/lib/framework/extension-api/types/form-components.ts +41 -0
- package/src/lib/framework/extension-api/types/history-entries.ts +120 -0
- package/src/lib/framework/extension-api/types/index.ts +10 -0
- package/src/lib/framework/extension-api/types/layout.ts +141 -0
- package/src/lib/framework/extension-api/types/login.ts +76 -0
- package/src/lib/framework/extension-api/types/navigation.ts +105 -0
- package/src/lib/framework/extension-api/types/widgets.ts +101 -0
- package/src/lib/framework/extension-api/use-dashboard-extensions.ts +27 -0
- package/src/lib/framework/extension-api/use-login-extensions.ts +26 -0
- package/src/lib/framework/form-engine/custom-form-component-extensions.ts +15 -0
- package/src/lib/framework/form-engine/custom-form-component.tsx +26 -0
- package/src/lib/framework/form-engine/default-input-for-type.tsx +35 -0
- package/src/lib/framework/form-engine/form-control-adapter.tsx +193 -0
- package/src/lib/framework/form-engine/form-engine-types.ts +167 -0
- package/src/lib/framework/form-engine/form-schema-tools.spec.ts +683 -0
- package/src/lib/framework/form-engine/form-schema-tools.ts +440 -0
- package/src/lib/framework/form-engine/overridden-form-component.tsx +51 -0
- package/src/lib/framework/form-engine/use-generated-form.tsx +242 -0
- package/src/lib/framework/form-engine/utils.spec.ts +419 -0
- package/src/lib/framework/form-engine/utils.ts +457 -0
- package/src/lib/framework/form-engine/value-transformers.ts +156 -0
- package/src/lib/framework/history-entry/history-entry-extensions.ts +11 -0
- package/src/lib/framework/history-entry/history-entry.tsx +129 -0
- package/src/lib/framework/layout-engine/custom-form-page.stories.tsx +344 -0
- package/src/lib/framework/layout-engine/dev-mode-button.tsx +24 -0
- package/src/lib/framework/layout-engine/layout-extensions.ts +27 -0
- package/src/lib/framework/layout-engine/location-wrapper.tsx +122 -0
- package/src/lib/framework/layout-engine/page-block-provider.tsx +6 -0
- package/src/lib/framework/layout-engine/page-layout.spec.tsx +138 -0
- package/src/lib/framework/layout-engine/page-layout.tsx +700 -0
- package/src/lib/framework/layout-engine/page-provider.tsx +10 -0
- package/src/lib/framework/layout-engine/page.stories.tsx +275 -0
- package/src/lib/framework/nav-menu/nav-menu-extensions.ts +112 -0
- package/src/lib/framework/page/detail-page-route-loader.tsx +69 -0
- package/src/lib/framework/page/detail-page.stories.tsx +151 -0
- package/src/lib/framework/page/detail-page.tsx +240 -0
- package/src/lib/framework/page/list-page.stories.tsx +256 -0
- package/src/lib/framework/page/list-page.tsx +621 -0
- package/src/lib/framework/page/page-api.ts +9 -0
- package/src/lib/framework/page/page-types.ts +51 -0
- package/src/lib/framework/page/use-detail-page.ts +341 -0
- package/src/lib/framework/page/use-extended-router.tsx +139 -0
- package/src/lib/framework/registry/global-registry.ts +50 -0
- package/src/lib/framework/registry/registry-types.ts +32 -0
- package/src/lib/graphql/api.ts +123 -0
- package/src/lib/graphql/common-operations.ts +37 -0
- package/src/lib/graphql/fragments.ts +71 -0
- package/src/lib/graphql/graphql-env.d.ts +540 -0
- package/src/lib/graphql/graphql.ts +15 -0
- package/src/lib/graphql/schema-enums.ts +13 -0
- package/src/lib/graphql/settings-store-operations.ts +17 -0
- package/src/lib/hooks/use-alerts-context.ts +10 -0
- package/src/lib/hooks/use-alerts.ts +84 -0
- package/src/lib/hooks/use-auth.tsx +21 -0
- package/src/lib/hooks/use-channel.ts +27 -0
- package/src/lib/hooks/use-custom-field-config.ts +27 -0
- package/src/lib/hooks/use-data-table-context.ts +11 -0
- package/src/lib/hooks/use-display-locale.ts +40 -0
- package/src/lib/hooks/use-drag-and-drop.ts +86 -0
- package/src/lib/hooks/use-dynamic-translations.ts +53 -0
- package/src/lib/hooks/use-extended-detail-query.ts +37 -0
- package/src/lib/hooks/use-extended-list-query.ts +80 -0
- package/src/lib/hooks/use-facet-value-browser.ts +292 -0
- package/src/lib/hooks/use-floating-bulk-actions.ts +83 -0
- package/src/lib/hooks/use-grouped-permissions.ts +55 -0
- package/src/lib/hooks/use-job-queue-polling.ts +160 -0
- package/src/lib/hooks/use-local-format.ts +175 -0
- package/src/lib/hooks/use-mobile.ts +19 -0
- package/src/lib/hooks/use-page-block.tsx +27 -0
- package/src/lib/hooks/use-page.tsx +10 -0
- package/src/lib/hooks/use-paginated-list.ts +28 -0
- package/src/lib/hooks/use-permissions.ts +40 -0
- package/src/lib/hooks/use-saved-views.ts +238 -0
- package/src/lib/hooks/use-server-config.ts +4 -0
- package/src/lib/hooks/use-sorted-languages.ts +41 -0
- package/src/lib/hooks/use-theme.ts +10 -0
- package/src/lib/hooks/use-ui-language-loader.ts +30 -0
- package/src/lib/hooks/use-user-settings.tsx +12 -0
- package/src/lib/hooks/use-widget-dimensions.ts +12 -0
- package/src/lib/hooks/use-widget-filters.ts +21 -0
- package/src/lib/index.ts +307 -0
- package/src/lib/lib/load-i18n-messages.ts +20 -0
- package/src/lib/lib/trans.tsx +20 -0
- package/src/lib/lib/utils.ts +111 -0
- package/src/lib/providers/alerts-provider.tsx +52 -0
- package/src/lib/providers/auth.tsx +232 -0
- package/src/lib/providers/channel-provider.tsx +245 -0
- package/src/lib/providers/i18n-provider.tsx +21 -0
- package/src/lib/providers/server-config.tsx +289 -0
- package/src/lib/providers/theme-provider.tsx +56 -0
- package/src/lib/providers/user-settings.tsx +244 -0
- package/src/lib/types/saved-views.ts +42 -0
- package/src/lib/utils/config-utils.ts +19 -0
- package/src/lib/utils/saved-views-utils.ts +40 -0
- package/src/lib/virtual.d.ts +44 -0
- package/src/vite-env.d.ts +2 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
import { CompileResult, CompilerOptions } from './utils/compiler.js';
|
|
3
|
+
export interface ConfigLoaderApi {
|
|
4
|
+
getVendureConfig(): Promise<CompileResult>;
|
|
5
|
+
}
|
|
6
|
+
export declare const configLoaderName = "vendure:config-loader";
|
|
7
|
+
/**
|
|
8
|
+
* This Vite plugin loads the VendureConfig from the specified file path, and
|
|
9
|
+
* makes it available to other plugins via the `ConfigLoaderApi`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function configLoaderPlugin(options: CompilerOptions): Plugin;
|
|
12
|
+
/**
|
|
13
|
+
* Inter-plugin dependencies implemented following the pattern given here:
|
|
14
|
+
* https://rollupjs.org/plugin-development/#direct-plugin-communication
|
|
15
|
+
*/
|
|
16
|
+
export declare function getConfigLoaderApi(plugins: readonly Plugin[]): ConfigLoaderApi;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { compile } from './utils/compiler.js';
|
|
2
|
+
import { debugLogger } from './utils/logger.js';
|
|
3
|
+
export const configLoaderName = 'vendure:config-loader';
|
|
4
|
+
/**
|
|
5
|
+
* This Vite plugin loads the VendureConfig from the specified file path, and
|
|
6
|
+
* makes it available to other plugins via the `ConfigLoaderApi`.
|
|
7
|
+
*/
|
|
8
|
+
export function configLoaderPlugin(options) {
|
|
9
|
+
let result;
|
|
10
|
+
const onConfigLoaded = [];
|
|
11
|
+
return {
|
|
12
|
+
name: configLoaderName,
|
|
13
|
+
async buildStart() {
|
|
14
|
+
this.info(`Loading Vendure config. This can take a short while depending on the size of your project...`);
|
|
15
|
+
try {
|
|
16
|
+
const startTime = Date.now();
|
|
17
|
+
result = await compile(Object.assign(Object.assign({}, options), { logger: process.env.LOG
|
|
18
|
+
? debugLogger
|
|
19
|
+
: {
|
|
20
|
+
info: (message) => this.info(message),
|
|
21
|
+
warn: (message) => this.warn(message),
|
|
22
|
+
debug: (message) => this.debug(message),
|
|
23
|
+
error: (message) => this.error(message),
|
|
24
|
+
} }));
|
|
25
|
+
const endTime = Date.now();
|
|
26
|
+
const duration = endTime - startTime;
|
|
27
|
+
const pluginNames = result.pluginInfo
|
|
28
|
+
.map(p => `${p.name} ${p.sourcePluginPath ? '(local)' : '(npm)'}`)
|
|
29
|
+
.join(', ');
|
|
30
|
+
this.info(`Found ${result.pluginInfo.length} plugins: ${pluginNames}`);
|
|
31
|
+
this.info(`Vendure config loaded (using export "${result.exportedSymbolName}") in ${duration}ms`);
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
if (e instanceof Error) {
|
|
35
|
+
const message = [
|
|
36
|
+
e.message,
|
|
37
|
+
`If you are using a monorepo, you may need to provide a custom pathAdapter to resolve the paths correctly.`,
|
|
38
|
+
].join('\n');
|
|
39
|
+
this.error(`Error loading Vendure config: ${message}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
onConfigLoaded.forEach(fn => fn());
|
|
43
|
+
},
|
|
44
|
+
api: {
|
|
45
|
+
getVendureConfig() {
|
|
46
|
+
if (result) {
|
|
47
|
+
return Promise.resolve(result);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return new Promise(resolve => {
|
|
51
|
+
onConfigLoaded.push(() => {
|
|
52
|
+
resolve(result);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Inter-plugin dependencies implemented following the pattern given here:
|
|
62
|
+
* https://rollupjs.org/plugin-development/#direct-plugin-communication
|
|
63
|
+
*/
|
|
64
|
+
export function getConfigLoaderApi(plugins) {
|
|
65
|
+
const parentPlugin = plugins.find(plugin => plugin.name === configLoaderName);
|
|
66
|
+
if (!parentPlugin) {
|
|
67
|
+
throw new Error(`This plugin depends on the "${configLoaderName}" plugin.`);
|
|
68
|
+
}
|
|
69
|
+
return parentPlugin.api;
|
|
70
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
export function viteConfigPlugin({ packageRoot }) {
|
|
3
|
+
return {
|
|
4
|
+
name: 'vendure:vite-config-plugin',
|
|
5
|
+
config: (config, env) => {
|
|
6
|
+
var _a, _b, _c, _d, _e, _f;
|
|
7
|
+
// Only set the vite `root` to the dashboard package when running the dev server.
|
|
8
|
+
// During a production build we still need to reference the dashboard source which
|
|
9
|
+
// lives in `node_modules`, but we don't want the build output to be emitted in there.
|
|
10
|
+
// Therefore, we set `root` only for `serve` and, for `build`, we instead make sure that
|
|
11
|
+
// an `outDir` **outside** of `node_modules` is used (defaulting to the current working
|
|
12
|
+
// directory if the user did not provide one already).
|
|
13
|
+
config.root = packageRoot;
|
|
14
|
+
config.publicDir = (_a = config.publicDir) !== null && _a !== void 0 ? _a : path.join(packageRoot, 'public');
|
|
15
|
+
// If we are building and no explicit outDir has been provided (or it is a relative path),
|
|
16
|
+
// set it to an **absolute** path relative to the cwd so that the output never ends up in
|
|
17
|
+
// `node_modules`.
|
|
18
|
+
if (env.command === 'build') {
|
|
19
|
+
const buildConfig = (_b = config.build) !== null && _b !== void 0 ? _b : {};
|
|
20
|
+
const outDir = buildConfig.outDir;
|
|
21
|
+
const hasOutDir = typeof outDir === 'string' && outDir.length > 0;
|
|
22
|
+
const outDirIsAbsolute = hasOutDir && path.isAbsolute(outDir);
|
|
23
|
+
const normalizedOutDir = hasOutDir
|
|
24
|
+
? outDirIsAbsolute
|
|
25
|
+
? outDir
|
|
26
|
+
: path.resolve(process.cwd(), outDir)
|
|
27
|
+
: path.resolve(process.cwd(), 'dist');
|
|
28
|
+
config.build = Object.assign(Object.assign({}, buildConfig), { outDir: normalizedOutDir });
|
|
29
|
+
}
|
|
30
|
+
config.resolve = {
|
|
31
|
+
alias: Object.assign(Object.assign({}, ((_d = (_c = config.resolve) === null || _c === void 0 ? void 0 : _c.alias) !== null && _d !== void 0 ? _d : {})), {
|
|
32
|
+
// See the readme for an explanation of this alias.
|
|
33
|
+
'@/vdb': path.resolve(packageRoot, './src/lib'), '@/graphql': path.resolve(packageRoot, './src/lib/graphql') }),
|
|
34
|
+
};
|
|
35
|
+
// This is required to prevent Vite from pre-bundling the
|
|
36
|
+
// dashboard source when it resides in node_modules.
|
|
37
|
+
config.optimizeDeps = Object.assign(Object.assign({}, config.optimizeDeps), { exclude: [
|
|
38
|
+
...(((_e = config.optimizeDeps) === null || _e === void 0 ? void 0 : _e.exclude) || []),
|
|
39
|
+
'@vendure/dashboard',
|
|
40
|
+
'@/vdb',
|
|
41
|
+
'virtual:vendure-ui-config',
|
|
42
|
+
'virtual:admin-api-schema',
|
|
43
|
+
'virtual:dashboard-extensions',
|
|
44
|
+
],
|
|
45
|
+
// We however do want to pre-bundle recharts, as it depends
|
|
46
|
+
// on lodash which is a CJS packages and _does_ require
|
|
47
|
+
// pre-bundling.
|
|
48
|
+
include: [
|
|
49
|
+
...(((_f = config.optimizeDeps) === null || _f === void 0 ? void 0 : _f.include) || []),
|
|
50
|
+
'@/components > recharts',
|
|
51
|
+
'@/components > react-dropzone',
|
|
52
|
+
'@/components > @tiptap/react', // https://github.com/fawmi/vue-google-maps/issues/148#issuecomment-1235143844
|
|
53
|
+
'@vendure/common/lib/generated-types',
|
|
54
|
+
'@radix-ui/react-portal > react-dom',
|
|
55
|
+
'@messageformat/parser',
|
|
56
|
+
] });
|
|
57
|
+
return config;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
/**
|
|
3
|
+
* This Vite plugin scans the configured plugins for any dashboard extensions and dynamically
|
|
4
|
+
* generates an import statement for each one, wrapped up in a `runDashboardExtensions()`
|
|
5
|
+
* function which can then be imported and executed in the Dashboard app.
|
|
6
|
+
*/
|
|
7
|
+
export declare function dashboardMetadataPlugin(): Plugin;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import { getConfigLoaderApi } from './vite-plugin-config-loader.js';
|
|
4
|
+
const virtualModuleId = 'virtual:dashboard-extensions';
|
|
5
|
+
const resolvedVirtualModuleId = `\0${virtualModuleId}`;
|
|
6
|
+
/**
|
|
7
|
+
* This Vite plugin scans the configured plugins for any dashboard extensions and dynamically
|
|
8
|
+
* generates an import statement for each one, wrapped up in a `runDashboardExtensions()`
|
|
9
|
+
* function which can then be imported and executed in the Dashboard app.
|
|
10
|
+
*/
|
|
11
|
+
export function dashboardMetadataPlugin() {
|
|
12
|
+
let configLoaderApi;
|
|
13
|
+
let loadVendureConfigResult;
|
|
14
|
+
return {
|
|
15
|
+
name: 'vendure:dashboard-extensions-metadata',
|
|
16
|
+
configResolved({ plugins }) {
|
|
17
|
+
configLoaderApi = getConfigLoaderApi(plugins);
|
|
18
|
+
},
|
|
19
|
+
resolveId(id) {
|
|
20
|
+
if (id === virtualModuleId) {
|
|
21
|
+
return resolvedVirtualModuleId;
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
async load(id) {
|
|
25
|
+
var _a;
|
|
26
|
+
if (id === resolvedVirtualModuleId) {
|
|
27
|
+
const startTime = Date.now();
|
|
28
|
+
this.debug('Loading dashboard extensions...');
|
|
29
|
+
if (!loadVendureConfigResult) {
|
|
30
|
+
const configStart = Date.now();
|
|
31
|
+
loadVendureConfigResult = await configLoaderApi.getVendureConfig();
|
|
32
|
+
this.debug(`Loaded Vendure config in ${Date.now() - configStart}ms`);
|
|
33
|
+
}
|
|
34
|
+
const { pluginInfo } = loadVendureConfigResult;
|
|
35
|
+
const resolveStart = Date.now();
|
|
36
|
+
const pluginsWithExtensions = (_a = pluginInfo === null || pluginInfo === void 0 ? void 0 : pluginInfo.map(({ dashboardEntryPath, pluginPath, sourcePluginPath }) => {
|
|
37
|
+
if (!dashboardEntryPath) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
// For local plugins, use the sourcePluginPath to resolve the dashboard extension
|
|
41
|
+
const basePath = sourcePluginPath
|
|
42
|
+
? path.dirname(sourcePluginPath)
|
|
43
|
+
: path.dirname(pluginPath);
|
|
44
|
+
const resolved = path.resolve(basePath, dashboardEntryPath);
|
|
45
|
+
this.debug(`Resolved extension path: ${resolved}`);
|
|
46
|
+
return resolved;
|
|
47
|
+
}).filter(x => x != null)) !== null && _a !== void 0 ? _a : [];
|
|
48
|
+
this.info(`Found ${pluginsWithExtensions.length} Dashboard extensions in ${Date.now() - resolveStart}ms`);
|
|
49
|
+
this.debug(`Total dashboard extension loading completed in ${Date.now() - startTime}ms`);
|
|
50
|
+
return `
|
|
51
|
+
export async function runDashboardExtensions() {
|
|
52
|
+
${pluginsWithExtensions
|
|
53
|
+
.map(extension => {
|
|
54
|
+
return `await import(\`${pathToFileURL(extension)}\`);`;
|
|
55
|
+
})
|
|
56
|
+
.join('\n')}
|
|
57
|
+
}`;
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { generateOutput } from '@gql.tada/cli-utils';
|
|
2
|
+
import * as fs from 'fs/promises';
|
|
3
|
+
import { printSchema } from 'graphql';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { generateSchema } from './utils/schema-generator.js';
|
|
6
|
+
import { getConfigLoaderApi } from './vite-plugin-config-loader.js';
|
|
7
|
+
export function gqlTadaPlugin(options) {
|
|
8
|
+
let configLoaderApi;
|
|
9
|
+
return {
|
|
10
|
+
name: 'vendure:gql-tada',
|
|
11
|
+
configResolved({ plugins }) {
|
|
12
|
+
configLoaderApi = getConfigLoaderApi(plugins);
|
|
13
|
+
},
|
|
14
|
+
async buildStart() {
|
|
15
|
+
const { vendureConfig } = await configLoaderApi.getVendureConfig();
|
|
16
|
+
const safeSchema = await generateSchema({ vendureConfig });
|
|
17
|
+
const tsConfigContent = {
|
|
18
|
+
compilerOptions: {
|
|
19
|
+
plugins: [
|
|
20
|
+
{
|
|
21
|
+
name: 'gql.tada/ts-plugin',
|
|
22
|
+
schema: './schema.graphql',
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
const tsConfigPath = path.join(options.tempDir, 'tsconfig.json');
|
|
28
|
+
await fs.writeFile(tsConfigPath, JSON.stringify(tsConfigContent, null, 2));
|
|
29
|
+
const schemaPath = path.join(options.tempDir, 'schema.graphql');
|
|
30
|
+
await fs.writeFile(schemaPath, printSchema(safeSchema));
|
|
31
|
+
await generateOutput({
|
|
32
|
+
output: path.join(options.gqlTadaOutputPath, 'graphql-env.d.ts'),
|
|
33
|
+
tsconfig: tsConfigPath,
|
|
34
|
+
});
|
|
35
|
+
// Copy the graphql.ts file to the output path
|
|
36
|
+
const graphqlTsPath = path.join(options.packageRoot, 'src/lib/graphql/graphql.ts');
|
|
37
|
+
try {
|
|
38
|
+
await fs.copyFile(graphqlTsPath, path.join(options.gqlTadaOutputPath, 'graphql.ts'));
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (error instanceof Error) {
|
|
42
|
+
this.error(error.message);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.error('Failed to copy graphql.ts file');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
this.info('graphql introspection files output to ' + options.gqlTadaOutputPath);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
/**
|
|
3
|
+
* @description
|
|
4
|
+
* This plugin enables kind-of HMR for when dashboard extension files change.
|
|
5
|
+
* It is not true HMR because it triggers a page reload. Making real HMR work is very
|
|
6
|
+
* tricky in this case due to the way we load extension files via virtual modules.
|
|
7
|
+
*/
|
|
8
|
+
export declare function hmrPlugin(): Plugin;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description
|
|
3
|
+
* This plugin enables kind-of HMR for when dashboard extension files change.
|
|
4
|
+
* It is not true HMR because it triggers a page reload. Making real HMR work is very
|
|
5
|
+
* tricky in this case due to the way we load extension files via virtual modules.
|
|
6
|
+
*/
|
|
7
|
+
export function hmrPlugin() {
|
|
8
|
+
let viteRoot;
|
|
9
|
+
return {
|
|
10
|
+
name: 'vendure:hmr',
|
|
11
|
+
configResolved(config) {
|
|
12
|
+
viteRoot = config.root;
|
|
13
|
+
},
|
|
14
|
+
handleHotUpdate({ server, modules, timestamp, file }) {
|
|
15
|
+
const invalidatedModules = new Set();
|
|
16
|
+
for (const mod of modules) {
|
|
17
|
+
server.moduleGraph.invalidateModule(mod, invalidatedModules, timestamp, true);
|
|
18
|
+
// Check if this is a file outside the Vite root (e.g., dashboard extensions)
|
|
19
|
+
const isOutsideRoot = mod.file && !mod.file.startsWith(viteRoot);
|
|
20
|
+
if (isOutsideRoot) {
|
|
21
|
+
// For files outside root, trigger a full page reload
|
|
22
|
+
// This ensures all extension code is fresh
|
|
23
|
+
server.ws.send({
|
|
24
|
+
type: 'full-reload',
|
|
25
|
+
path: '*',
|
|
26
|
+
});
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Let Vite handle normal HMR for files inside root
|
|
31
|
+
return undefined;
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
/**
|
|
3
|
+
* Options for the linguiBabelPlugin.
|
|
4
|
+
*/
|
|
5
|
+
export interface LinguiBabelPluginOptions {
|
|
6
|
+
/**
|
|
7
|
+
* For testing: manually specify package paths that should have Lingui macros transformed.
|
|
8
|
+
* In production, these are automatically discovered from the VendureConfig plugins.
|
|
9
|
+
*/
|
|
10
|
+
additionalPackagePaths?: string[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* @description
|
|
14
|
+
* A custom Vite plugin that transforms Lingui macros in files using Babel instead of SWC.
|
|
15
|
+
*
|
|
16
|
+
* This plugin solves a critical compatibility issue with SWC plugins:
|
|
17
|
+
* - SWC plugins are compiled Wasm binaries that require exact version matching with `@swc/core`
|
|
18
|
+
* - When users have different SWC versions in their projects (e.g., from Next.js, Nx, etc.),
|
|
19
|
+
* the Lingui SWC plugin fails with "failed to invoke plugin" errors
|
|
20
|
+
* - Babel has no such binary compatibility issues, making it much more reliable for library code
|
|
21
|
+
*
|
|
22
|
+
* The plugin runs BEFORE `@vitejs/plugin-react` and transforms files containing Lingui macros
|
|
23
|
+
* (imports from `@lingui/core/macro` or `@lingui/react/macro`) using the Babel-based
|
|
24
|
+
* `@lingui/babel-plugin-lingui-macro`.
|
|
25
|
+
*
|
|
26
|
+
* Files processed:
|
|
27
|
+
* - `@vendure/dashboard/src` files (in node_modules for external projects)
|
|
28
|
+
* - `packages/dashboard/src` files (in monorepo development)
|
|
29
|
+
* - User's dashboard extension files (e.g., custom plugins using Lingui)
|
|
30
|
+
* - Third-party npm packages that provide dashboard extensions (discovered automatically)
|
|
31
|
+
*
|
|
32
|
+
* Files NOT processed:
|
|
33
|
+
* - Files that don't contain Lingui macro imports (fast check via string matching)
|
|
34
|
+
* - Non-JS/TS files
|
|
35
|
+
* - node_modules packages that are not discovered as Vendure plugins
|
|
36
|
+
*
|
|
37
|
+
* @see https://github.com/vendurehq/vendure/issues/3929
|
|
38
|
+
* @see https://github.com/lingui/swc-plugin/issues/179
|
|
39
|
+
*/
|
|
40
|
+
export declare function linguiBabelPlugin(options?: LinguiBabelPluginOptions): Plugin;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import * as babel from '@babel/core';
|
|
2
|
+
import { getConfigLoaderApi } from './vite-plugin-config-loader.js';
|
|
3
|
+
/**
|
|
4
|
+
* @description
|
|
5
|
+
* A custom Vite plugin that transforms Lingui macros in files using Babel instead of SWC.
|
|
6
|
+
*
|
|
7
|
+
* This plugin solves a critical compatibility issue with SWC plugins:
|
|
8
|
+
* - SWC plugins are compiled Wasm binaries that require exact version matching with `@swc/core`
|
|
9
|
+
* - When users have different SWC versions in their projects (e.g., from Next.js, Nx, etc.),
|
|
10
|
+
* the Lingui SWC plugin fails with "failed to invoke plugin" errors
|
|
11
|
+
* - Babel has no such binary compatibility issues, making it much more reliable for library code
|
|
12
|
+
*
|
|
13
|
+
* The plugin runs BEFORE `@vitejs/plugin-react` and transforms files containing Lingui macros
|
|
14
|
+
* (imports from `@lingui/core/macro` or `@lingui/react/macro`) using the Babel-based
|
|
15
|
+
* `@lingui/babel-plugin-lingui-macro`.
|
|
16
|
+
*
|
|
17
|
+
* Files processed:
|
|
18
|
+
* - `@vendure/dashboard/src` files (in node_modules for external projects)
|
|
19
|
+
* - `packages/dashboard/src` files (in monorepo development)
|
|
20
|
+
* - User's dashboard extension files (e.g., custom plugins using Lingui)
|
|
21
|
+
* - Third-party npm packages that provide dashboard extensions (discovered automatically)
|
|
22
|
+
*
|
|
23
|
+
* Files NOT processed:
|
|
24
|
+
* - Files that don't contain Lingui macro imports (fast check via string matching)
|
|
25
|
+
* - Non-JS/TS files
|
|
26
|
+
* - node_modules packages that are not discovered as Vendure plugins
|
|
27
|
+
*
|
|
28
|
+
* @see https://github.com/vendurehq/vendure/issues/3929
|
|
29
|
+
* @see https://github.com/lingui/swc-plugin/issues/179
|
|
30
|
+
*/
|
|
31
|
+
export function linguiBabelPlugin(options) {
|
|
32
|
+
var _a;
|
|
33
|
+
// Paths of npm packages that should have Lingui macros transformed.
|
|
34
|
+
// This is populated from plugin discovery when transform is first called.
|
|
35
|
+
const allowedNodeModulesPackages = new Set((_a = options === null || options === void 0 ? void 0 : options.additionalPackagePaths) !== null && _a !== void 0 ? _a : []);
|
|
36
|
+
// API reference to the config loader plugin (set in configResolved)
|
|
37
|
+
let configLoaderApi;
|
|
38
|
+
// Cached result from config loader (set on first transform that needs it)
|
|
39
|
+
let configResult;
|
|
40
|
+
return {
|
|
41
|
+
name: 'vendure:lingui-babel',
|
|
42
|
+
// Run BEFORE @vitejs/plugin-react so the macros are already transformed
|
|
43
|
+
// when the react plugin processes the file
|
|
44
|
+
enforce: 'pre',
|
|
45
|
+
configResolved({ plugins }) {
|
|
46
|
+
// Get reference to the config loader API.
|
|
47
|
+
// This doesn't load the config yet - that happens lazily in transform.
|
|
48
|
+
try {
|
|
49
|
+
configLoaderApi = getConfigLoaderApi(plugins);
|
|
50
|
+
}
|
|
51
|
+
catch (_a) {
|
|
52
|
+
// configLoaderPlugin not available (e.g., plugin used standalone for testing)
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
async transform(code, id) {
|
|
56
|
+
// Strip query params for path matching (Vite adds ?v=xxx for cache busting)
|
|
57
|
+
const cleanId = id.split('?')[0];
|
|
58
|
+
// Only process TypeScript/JavaScript files
|
|
59
|
+
if (!/\.[tj]sx?$/.test(cleanId)) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
// Only process files that actually contain Lingui macro imports
|
|
63
|
+
// This is a fast check to avoid running Babel on files that don't need it
|
|
64
|
+
if (!code.includes('@lingui/') || !code.includes('/macro')) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
// Check if this file should be transformed
|
|
68
|
+
if (cleanId.includes('node_modules')) {
|
|
69
|
+
// Always allow @vendure/dashboard source files
|
|
70
|
+
const isVendureDashboard = cleanId.includes('@vendure/dashboard/src') || cleanId.includes('packages/dashboard/src');
|
|
71
|
+
if (!isVendureDashboard) {
|
|
72
|
+
// Load discovered plugins on first need (lazy loading with caching)
|
|
73
|
+
if (configLoaderApi && !configResult) {
|
|
74
|
+
try {
|
|
75
|
+
configResult = await configLoaderApi.getVendureConfig();
|
|
76
|
+
// Extract package paths from discovered npm plugins
|
|
77
|
+
for (const plugin of configResult.pluginInfo) {
|
|
78
|
+
if (!plugin.sourcePluginPath && plugin.pluginPath.includes('node_modules')) {
|
|
79
|
+
const packagePath = extractPackagePath(plugin.pluginPath);
|
|
80
|
+
if (packagePath) {
|
|
81
|
+
allowedNodeModulesPackages.add(packagePath);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
// Log but continue - will use only manually specified paths
|
|
88
|
+
// eslint-disable-next-line no-console
|
|
89
|
+
console.warn('[vendure:lingui-babel] Failed to load plugin config:', error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Check if this is from a discovered Vendure plugin package
|
|
93
|
+
let isDiscoveredPlugin = false;
|
|
94
|
+
for (const pkgPath of allowedNodeModulesPackages) {
|
|
95
|
+
if (cleanId.includes(pkgPath)) {
|
|
96
|
+
isDiscoveredPlugin = true;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (!isDiscoveredPlugin) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
const result = await babel.transformAsync(code, {
|
|
107
|
+
filename: id,
|
|
108
|
+
presets: [
|
|
109
|
+
['@babel/preset-typescript', { isTSX: true, allExtensions: true }],
|
|
110
|
+
['@babel/preset-react', { runtime: 'automatic' }],
|
|
111
|
+
],
|
|
112
|
+
plugins: ['@lingui/babel-plugin-lingui-macro'],
|
|
113
|
+
sourceMaps: true,
|
|
114
|
+
// Don't look for babel config files - we want to control the config completely
|
|
115
|
+
configFile: false,
|
|
116
|
+
babelrc: false,
|
|
117
|
+
});
|
|
118
|
+
if (!(result === null || result === void 0 ? void 0 : result.code)) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
code: result.code,
|
|
123
|
+
map: result.map,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
// Log the error but don't crash - let the build continue
|
|
128
|
+
// The lingui vite plugin will catch untransformed macros later
|
|
129
|
+
// eslint-disable-next-line no-console
|
|
130
|
+
console.error(`[vendure:lingui-babel] Failed to transform ${id}:`, error);
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Extracts the npm package name from a full file path.
|
|
138
|
+
*
|
|
139
|
+
* Examples:
|
|
140
|
+
* - /path/to/node_modules/@vendure-ee/plugin/dist/index.js -> @vendure-ee/plugin
|
|
141
|
+
* - /path/to/node_modules/some-plugin/lib/index.js -> some-plugin
|
|
142
|
+
* - /path/to/node_modules/.pnpm/@vendure-ee+plugin@1.0.0/node_modules/@vendure-ee/plugin/dist/index.js -> @vendure-ee/plugin
|
|
143
|
+
*/
|
|
144
|
+
function extractPackagePath(filePath) {
|
|
145
|
+
// Normalize path separators
|
|
146
|
+
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
147
|
+
// Find the last occurrence of node_modules (handles pnpm structure)
|
|
148
|
+
const lastNodeModulesIndex = normalizedPath.lastIndexOf('node_modules/');
|
|
149
|
+
if (lastNodeModulesIndex === -1) {
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
const afterNodeModules = normalizedPath.slice(lastNodeModulesIndex + 'node_modules/'.length);
|
|
153
|
+
// Handle scoped packages (@scope/package)
|
|
154
|
+
if (afterNodeModules.startsWith('@')) {
|
|
155
|
+
const parts = afterNodeModules.split('/');
|
|
156
|
+
if (parts.length >= 2) {
|
|
157
|
+
return `${parts[0]}/${parts[1]}`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
// Unscoped package
|
|
162
|
+
const parts = afterNodeModules.split('/');
|
|
163
|
+
if (parts.length >= 1) {
|
|
164
|
+
return parts[0];
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
@@ -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 {};
|