Bläddra i källkod

chore(dashboard): Fix typescript compiler errors (#3996)

Co-authored-by: Michael Bromley <michael@michaelbromley.co.uk>
Martin Grolmus 1 månad sedan
förälder
incheckning
b336df418c
46 ändrade filer med 1514 tillägg och 398 borttagningar
  1. 0 1
      packages/dashboard/.gitignore
  2. 2 1
      packages/dashboard/package.json
  3. 1221 0
      packages/dashboard/src/app/routeTree.gen.ts
  4. 0 1
      packages/dashboard/src/app/routes/_authenticated/_customers/components/customer-history/index.ts
  5. 0 129
      packages/dashboard/src/app/routes/_authenticated/_facets/components/edit-facet-value.tsx
  6. 3 0
      packages/dashboard/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx
  7. 3 3
      packages/dashboard/src/app/routes/_authenticated/_orders/components/order-address.tsx
  8. 3 3
      packages/dashboard/src/app/routes/_authenticated/_product-variants/components/add-currency-dropdown.tsx
  9. 2 2
      packages/dashboard/src/app/routes/_authenticated/_product-variants/components/add-stock-location-dropdown.tsx
  10. 1 0
      packages/dashboard/src/app/routes/_authenticated/_products/products.graphql.ts
  11. 1 1
      packages/dashboard/src/lib/components/data-input/datetime-input.tsx
  12. 1 1
      packages/dashboard/src/lib/components/data-input/relation-selector.tsx
  13. 175 174
      packages/dashboard/src/lib/components/data-input/struct-form-input.tsx
  14. 13 8
      packages/dashboard/src/lib/components/shared/custom-fields-form.tsx
  15. 2 2
      packages/dashboard/src/lib/components/ui/carousel.tsx
  16. 1 1
      packages/dashboard/src/lib/components/ui/chart.tsx
  17. 1 1
      packages/dashboard/src/lib/components/ui/context-menu.tsx
  18. 1 1
      packages/dashboard/src/lib/components/ui/drawer.tsx
  19. 1 1
      packages/dashboard/src/lib/components/ui/grid-layout.tsx
  20. 1 0
      packages/dashboard/src/lib/components/ui/input-group.tsx
  21. 1 1
      packages/dashboard/src/lib/components/ui/input-otp.tsx
  22. 1 1
      packages/dashboard/src/lib/components/ui/menubar.tsx
  23. 1 1
      packages/dashboard/src/lib/components/ui/navigation-menu.tsx
  24. 1 1
      packages/dashboard/src/lib/components/ui/progress.tsx
  25. 1 1
      packages/dashboard/src/lib/components/ui/radio-group.tsx
  26. 1 1
      packages/dashboard/src/lib/components/ui/resizable.tsx
  27. 1 1
      packages/dashboard/src/lib/components/ui/select.tsx
  28. 1 1
      packages/dashboard/src/lib/components/ui/slider.tsx
  29. 2 2
      packages/dashboard/src/lib/components/ui/toggle-group.tsx
  30. 1 1
      packages/dashboard/src/lib/components/ui/toggle.tsx
  31. 2 6
      packages/dashboard/src/lib/framework/component-registry/component-registry.tsx
  32. 4 3
      packages/dashboard/src/lib/framework/extension-api/display-component-extensions.tsx
  33. 0 13
      packages/dashboard/src/lib/framework/extension-api/logic/detail-forms.ts
  34. 4 2
      packages/dashboard/src/lib/framework/extension-api/types/data-table.ts
  35. 2 2
      packages/dashboard/src/lib/framework/extension-api/types/navigation.ts
  36. 7 1
      packages/dashboard/src/lib/framework/form-engine/use-generated-form.tsx
  37. 1 1
      packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx
  38. 1 1
      packages/dashboard/src/lib/framework/nav-menu/nav-menu-extensions.ts
  39. 1 1
      packages/dashboard/src/lib/framework/page/detail-page-route-loader.tsx
  40. 1 1
      packages/dashboard/src/lib/framework/page/page-api.ts
  41. 4 2
      packages/dashboard/src/lib/framework/page/use-detail-page.ts
  42. 20 16
      packages/dashboard/src/lib/framework/page/use-extended-router.tsx
  43. 2 1
      packages/dashboard/src/lib/framework/registry/registry-types.ts
  44. 0 0
      packages/dashboard/src/lib/graphql/graphql-env.d.ts
  45. 11 7
      packages/dashboard/src/lib/providers/channel-provider.tsx
  46. 11 0
      packages/dashboard/tsconfig.check.json

+ 0 - 1
packages/dashboard/.gitignore

@@ -25,7 +25,6 @@ dist-ssr
 *.sln
 *.sw?
 
-src/app/routeTree.gen.ts
 vite/tests/__temp
 
 *storybook.log

+ 2 - 1
packages/dashboard/package.json

@@ -14,10 +14,11 @@
     },
     "scripts": {
         "dev": "vite",
+        "check-types": "tsc --project tsconfig.check.json --noEmit",
         "build:standalone": "vite build",
         "build:vite": "tsc --project tsconfig.vite.json",
         "build:plugin": "tsc --project tsconfig.plugin.json && node scripts/build-plugin.js",
-        "build": "npm run build:vite && npm run build:plugin",
+        "build": "npm run check-types && npm run build:vite && npm run build:plugin",
         "watch": "tsc --project tsconfig.vite.json --watch",
         "test": "vitest run",
         "lint": "eslint .",

+ 1221 - 0
packages/dashboard/src/app/routeTree.gen.ts

@@ -0,0 +1,1221 @@
+/* eslint-disable */
+
+// @ts-nocheck
+
+// noinspection JSUnusedGlobalSymbols
+
+// This file was automatically generated by TanStack Router.
+// You should NOT make any changes in this file as it will be overwritten.
+// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
+
+import { Route as rootRouteImport } from './routes/__root';
+import { Route as AuthenticatedRouteImport } from './routes/_authenticated';
+import { Route as AuthenticatedAdministratorsAdministratorsRouteImport } from './routes/_authenticated/_administrators/administrators';
+import { Route as AuthenticatedAdministratorsAdministratorsIdRouteImport } from './routes/_authenticated/_administrators/administrators_.$id';
+import { Route as AuthenticatedAssetsAssetsRouteImport } from './routes/_authenticated/_assets/assets';
+import { Route as AuthenticatedAssetsAssetsIdRouteImport } from './routes/_authenticated/_assets/assets_.$id';
+import { Route as AuthenticatedChannelsChannelsRouteImport } from './routes/_authenticated/_channels/channels';
+import { Route as AuthenticatedChannelsChannelsIdRouteImport } from './routes/_authenticated/_channels/channels_.$id';
+import { Route as AuthenticatedCollectionsCollectionsRouteImport } from './routes/_authenticated/_collections/collections';
+import { Route as AuthenticatedCollectionsCollectionsIdRouteImport } from './routes/_authenticated/_collections/collections_.$id';
+import { Route as AuthenticatedCountriesCountriesRouteImport } from './routes/_authenticated/_countries/countries';
+import { Route as AuthenticatedCountriesCountriesIdRouteImport } from './routes/_authenticated/_countries/countries_.$id';
+import { Route as AuthenticatedCustomerGroupsCustomerGroupsRouteImport } from './routes/_authenticated/_customer-groups/customer-groups';
+import { Route as AuthenticatedCustomerGroupsCustomerGroupsIdRouteImport } from './routes/_authenticated/_customer-groups/customer-groups_.$id';
+import { Route as AuthenticatedCustomersCustomersRouteImport } from './routes/_authenticated/_customers/customers';
+import { Route as AuthenticatedCustomersCustomersIdRouteImport } from './routes/_authenticated/_customers/customers_.$id';
+import { Route as AuthenticatedFacetsFacetsRouteImport } from './routes/_authenticated/_facets/facets';
+import { Route as AuthenticatedFacetsFacetsFacetIdValuesIdRouteImport } from './routes/_authenticated/_facets/facets_.$facetId.values_.$id';
+import { Route as AuthenticatedFacetsFacetsIdRouteImport } from './routes/_authenticated/_facets/facets_.$id';
+import { Route as AuthenticatedGlobalSettingsGlobalSettingsRouteImport } from './routes/_authenticated/_global-settings/global-settings';
+import { Route as AuthenticatedOrdersOrdersRouteImport } from './routes/_authenticated/_orders/orders';
+import { Route as AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRouteImport } from './routes/_authenticated/_orders/orders_.$aggregateOrderId_.seller-orders.$sellerOrderId';
+import { Route as AuthenticatedOrdersOrdersIdRouteImport } from './routes/_authenticated/_orders/orders_.$id';
+import { Route as AuthenticatedOrdersOrdersIdModifyRouteImport } from './routes/_authenticated/_orders/orders_.$id_.modify';
+import { Route as AuthenticatedOrdersOrdersDraftIdRouteImport } from './routes/_authenticated/_orders/orders_.draft.$id';
+import { Route as AuthenticatedPaymentMethodsPaymentMethodsRouteImport } from './routes/_authenticated/_payment-methods/payment-methods';
+import { Route as AuthenticatedPaymentMethodsPaymentMethodsIdRouteImport } from './routes/_authenticated/_payment-methods/payment-methods_.$id';
+import { Route as AuthenticatedProductVariantsProductVariantsRouteImport } from './routes/_authenticated/_product-variants/product-variants';
+import { Route as AuthenticatedProductVariantsProductVariantsIdRouteImport } from './routes/_authenticated/_product-variants/product-variants_.$id';
+import { Route as AuthenticatedProductsProductsRouteImport } from './routes/_authenticated/_products/products';
+import { Route as AuthenticatedProductsProductsIdRouteImport } from './routes/_authenticated/_products/products_.$id';
+import { Route as AuthenticatedProductsProductsIdVariantsRouteImport } from './routes/_authenticated/_products/products_.$id_.variants';
+import { Route as AuthenticatedProductsProductsProductIdOptionGroupsIdRouteImport } from './routes/_authenticated/_products/products_.$productId.option-groups.$id';
+import { Route as AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRouteImport } from './routes/_authenticated/_products/products_.$productId.option-groups.$productOptionGroupId.options_.$id';
+import { Route as AuthenticatedProfileProfileRouteImport } from './routes/_authenticated/_profile/profile';
+import { Route as AuthenticatedPromotionsPromotionsRouteImport } from './routes/_authenticated/_promotions/promotions';
+import { Route as AuthenticatedPromotionsPromotionsIdRouteImport } from './routes/_authenticated/_promotions/promotions_.$id';
+import { Route as AuthenticatedRolesRolesRouteImport } from './routes/_authenticated/_roles/roles';
+import { Route as AuthenticatedRolesRolesIdRouteImport } from './routes/_authenticated/_roles/roles_.$id';
+import { Route as AuthenticatedSellersSellersRouteImport } from './routes/_authenticated/_sellers/sellers';
+import { Route as AuthenticatedSellersSellersIdRouteImport } from './routes/_authenticated/_sellers/sellers_.$id';
+import { Route as AuthenticatedShippingMethodsShippingMethodsRouteImport } from './routes/_authenticated/_shipping-methods/shipping-methods';
+import { Route as AuthenticatedShippingMethodsShippingMethodsIdRouteImport } from './routes/_authenticated/_shipping-methods/shipping-methods_.$id';
+import { Route as AuthenticatedStockLocationsStockLocationsRouteImport } from './routes/_authenticated/_stock-locations/stock-locations';
+import { Route as AuthenticatedStockLocationsStockLocationsIdRouteImport } from './routes/_authenticated/_stock-locations/stock-locations_.$id';
+import { Route as AuthenticatedSystemHealthchecksRouteImport } from './routes/_authenticated/_system/healthchecks';
+import { Route as AuthenticatedSystemJobQueueRouteImport } from './routes/_authenticated/_system/job-queue';
+import { Route as AuthenticatedSystemScheduledTasksRouteImport } from './routes/_authenticated/_system/scheduled-tasks';
+import { Route as AuthenticatedTaxCategoriesTaxCategoriesRouteImport } from './routes/_authenticated/_tax-categories/tax-categories';
+import { Route as AuthenticatedTaxCategoriesTaxCategoriesIdRouteImport } from './routes/_authenticated/_tax-categories/tax-categories_.$id';
+import { Route as AuthenticatedTaxRatesTaxRatesRouteImport } from './routes/_authenticated/_tax-rates/tax-rates';
+import { Route as AuthenticatedTaxRatesTaxRatesIdRouteImport } from './routes/_authenticated/_tax-rates/tax-rates_.$id';
+import { Route as AuthenticatedZonesZonesRouteImport } from './routes/_authenticated/_zones/zones';
+import { Route as AuthenticatedZonesZonesIdRouteImport } from './routes/_authenticated/_zones/zones_.$id';
+import { Route as AuthenticatedIndexRouteImport } from './routes/_authenticated/index';
+import { Route as LoginRouteImport } from './routes/login';
+
+const LoginRoute = LoginRouteImport.update({
+    id: '/login',
+    path: '/login',
+    getParentRoute: () => rootRouteImport,
+} as any);
+const AuthenticatedRoute = AuthenticatedRouteImport.update({
+    id: '/_authenticated',
+    getParentRoute: () => rootRouteImport,
+} as any);
+const AuthenticatedIndexRoute = AuthenticatedIndexRouteImport.update({
+    id: '/',
+    path: '/',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedZonesZonesRoute = AuthenticatedZonesZonesRouteImport.update({
+    id: '/_zones/zones',
+    path: '/zones',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedTaxRatesTaxRatesRoute = AuthenticatedTaxRatesTaxRatesRouteImport.update({
+    id: '/_tax-rates/tax-rates',
+    path: '/tax-rates',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedTaxCategoriesTaxCategoriesRoute =
+    AuthenticatedTaxCategoriesTaxCategoriesRouteImport.update({
+        id: '/_tax-categories/tax-categories',
+        path: '/tax-categories',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedSystemScheduledTasksRoute = AuthenticatedSystemScheduledTasksRouteImport.update({
+    id: '/_system/scheduled-tasks',
+    path: '/scheduled-tasks',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedSystemJobQueueRoute = AuthenticatedSystemJobQueueRouteImport.update({
+    id: '/_system/job-queue',
+    path: '/job-queue',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedSystemHealthchecksRoute = AuthenticatedSystemHealthchecksRouteImport.update({
+    id: '/_system/healthchecks',
+    path: '/healthchecks',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedStockLocationsStockLocationsRoute =
+    AuthenticatedStockLocationsStockLocationsRouteImport.update({
+        id: '/_stock-locations/stock-locations',
+        path: '/stock-locations',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedShippingMethodsShippingMethodsRoute =
+    AuthenticatedShippingMethodsShippingMethodsRouteImport.update({
+        id: '/_shipping-methods/shipping-methods',
+        path: '/shipping-methods',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedSellersSellersRoute = AuthenticatedSellersSellersRouteImport.update({
+    id: '/_sellers/sellers',
+    path: '/sellers',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedRolesRolesRoute = AuthenticatedRolesRolesRouteImport.update({
+    id: '/_roles/roles',
+    path: '/roles',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedPromotionsPromotionsRoute = AuthenticatedPromotionsPromotionsRouteImport.update({
+    id: '/_promotions/promotions',
+    path: '/promotions',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedProfileProfileRoute = AuthenticatedProfileProfileRouteImport.update({
+    id: '/_profile/profile',
+    path: '/profile',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedProductsProductsRoute = AuthenticatedProductsProductsRouteImport.update({
+    id: '/_products/products',
+    path: '/products',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedProductVariantsProductVariantsRoute =
+    AuthenticatedProductVariantsProductVariantsRouteImport.update({
+        id: '/_product-variants/product-variants',
+        path: '/product-variants',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedPaymentMethodsPaymentMethodsRoute =
+    AuthenticatedPaymentMethodsPaymentMethodsRouteImport.update({
+        id: '/_payment-methods/payment-methods',
+        path: '/payment-methods',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedOrdersOrdersRoute = AuthenticatedOrdersOrdersRouteImport.update({
+    id: '/_orders/orders',
+    path: '/orders',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedGlobalSettingsGlobalSettingsRoute =
+    AuthenticatedGlobalSettingsGlobalSettingsRouteImport.update({
+        id: '/_global-settings/global-settings',
+        path: '/global-settings',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedFacetsFacetsRoute = AuthenticatedFacetsFacetsRouteImport.update({
+    id: '/_facets/facets',
+    path: '/facets',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedCustomersCustomersRoute = AuthenticatedCustomersCustomersRouteImport.update({
+    id: '/_customers/customers',
+    path: '/customers',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedCustomerGroupsCustomerGroupsRoute =
+    AuthenticatedCustomerGroupsCustomerGroupsRouteImport.update({
+        id: '/_customer-groups/customer-groups',
+        path: '/customer-groups',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedCountriesCountriesRoute = AuthenticatedCountriesCountriesRouteImport.update({
+    id: '/_countries/countries',
+    path: '/countries',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedCollectionsCollectionsRoute = AuthenticatedCollectionsCollectionsRouteImport.update({
+    id: '/_collections/collections',
+    path: '/collections',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedChannelsChannelsRoute = AuthenticatedChannelsChannelsRouteImport.update({
+    id: '/_channels/channels',
+    path: '/channels',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedAssetsAssetsRoute = AuthenticatedAssetsAssetsRouteImport.update({
+    id: '/_assets/assets',
+    path: '/assets',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedAdministratorsAdministratorsRoute =
+    AuthenticatedAdministratorsAdministratorsRouteImport.update({
+        id: '/_administrators/administrators',
+        path: '/administrators',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedZonesZonesIdRoute = AuthenticatedZonesZonesIdRouteImport.update({
+    id: '/_zones/zones_/$id',
+    path: '/zones/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedTaxRatesTaxRatesIdRoute = AuthenticatedTaxRatesTaxRatesIdRouteImport.update({
+    id: '/_tax-rates/tax-rates_/$id',
+    path: '/tax-rates/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedTaxCategoriesTaxCategoriesIdRoute =
+    AuthenticatedTaxCategoriesTaxCategoriesIdRouteImport.update({
+        id: '/_tax-categories/tax-categories_/$id',
+        path: '/tax-categories/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedStockLocationsStockLocationsIdRoute =
+    AuthenticatedStockLocationsStockLocationsIdRouteImport.update({
+        id: '/_stock-locations/stock-locations_/$id',
+        path: '/stock-locations/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedShippingMethodsShippingMethodsIdRoute =
+    AuthenticatedShippingMethodsShippingMethodsIdRouteImport.update({
+        id: '/_shipping-methods/shipping-methods_/$id',
+        path: '/shipping-methods/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedSellersSellersIdRoute = AuthenticatedSellersSellersIdRouteImport.update({
+    id: '/_sellers/sellers_/$id',
+    path: '/sellers/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedRolesRolesIdRoute = AuthenticatedRolesRolesIdRouteImport.update({
+    id: '/_roles/roles_/$id',
+    path: '/roles/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedPromotionsPromotionsIdRoute = AuthenticatedPromotionsPromotionsIdRouteImport.update({
+    id: '/_promotions/promotions_/$id',
+    path: '/promotions/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedProductsProductsIdRoute = AuthenticatedProductsProductsIdRouteImport.update({
+    id: '/_products/products_/$id',
+    path: '/products/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedProductVariantsProductVariantsIdRoute =
+    AuthenticatedProductVariantsProductVariantsIdRouteImport.update({
+        id: '/_product-variants/product-variants_/$id',
+        path: '/product-variants/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedPaymentMethodsPaymentMethodsIdRoute =
+    AuthenticatedPaymentMethodsPaymentMethodsIdRouteImport.update({
+        id: '/_payment-methods/payment-methods_/$id',
+        path: '/payment-methods/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedOrdersOrdersIdRoute = AuthenticatedOrdersOrdersIdRouteImport.update({
+    id: '/_orders/orders_/$id',
+    path: '/orders/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedFacetsFacetsIdRoute = AuthenticatedFacetsFacetsIdRouteImport.update({
+    id: '/_facets/facets_/$id',
+    path: '/facets/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedCustomersCustomersIdRoute = AuthenticatedCustomersCustomersIdRouteImport.update({
+    id: '/_customers/customers_/$id',
+    path: '/customers/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedCustomerGroupsCustomerGroupsIdRoute =
+    AuthenticatedCustomerGroupsCustomerGroupsIdRouteImport.update({
+        id: '/_customer-groups/customer-groups_/$id',
+        path: '/customer-groups/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedCountriesCountriesIdRoute = AuthenticatedCountriesCountriesIdRouteImport.update({
+    id: '/_countries/countries_/$id',
+    path: '/countries/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedCollectionsCollectionsIdRoute = AuthenticatedCollectionsCollectionsIdRouteImport.update({
+    id: '/_collections/collections_/$id',
+    path: '/collections/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedChannelsChannelsIdRoute = AuthenticatedChannelsChannelsIdRouteImport.update({
+    id: '/_channels/channels_/$id',
+    path: '/channels/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedAssetsAssetsIdRoute = AuthenticatedAssetsAssetsIdRouteImport.update({
+    id: '/_assets/assets_/$id',
+    path: '/assets/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedAdministratorsAdministratorsIdRoute =
+    AuthenticatedAdministratorsAdministratorsIdRouteImport.update({
+        id: '/_administrators/administrators_/$id',
+        path: '/administrators/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedProductsProductsIdVariantsRoute =
+    AuthenticatedProductsProductsIdVariantsRouteImport.update({
+        id: '/_products/products_/$id_/variants',
+        path: '/products/$id/variants',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedOrdersOrdersDraftIdRoute = AuthenticatedOrdersOrdersDraftIdRouteImport.update({
+    id: '/_orders/orders_/draft/$id',
+    path: '/orders/draft/$id',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedOrdersOrdersIdModifyRoute = AuthenticatedOrdersOrdersIdModifyRouteImport.update({
+    id: '/_orders/orders_/$id_/modify',
+    path: '/orders/$id/modify',
+    getParentRoute: () => AuthenticatedRoute,
+} as any);
+const AuthenticatedProductsProductsProductIdOptionGroupsIdRoute =
+    AuthenticatedProductsProductsProductIdOptionGroupsIdRouteImport.update({
+        id: '/_products/products_/$productId/option-groups/$id',
+        path: '/products/$productId/option-groups/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRoute =
+    AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRouteImport.update({
+        id: '/_orders/orders_/$aggregateOrderId_/seller-orders/$sellerOrderId',
+        path: '/orders/$aggregateOrderId/seller-orders/$sellerOrderId',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedFacetsFacetsFacetIdValuesIdRoute =
+    AuthenticatedFacetsFacetsFacetIdValuesIdRouteImport.update({
+        id: '/_facets/facets_/$facetId/values_/$id',
+        path: '/facets/$facetId/values/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+const AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRoute =
+    AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRouteImport.update({
+        id: '/_products/products_/$productId/option-groups/$productOptionGroupId/options_/$id',
+        path: '/products/$productId/option-groups/$productOptionGroupId/options/$id',
+        getParentRoute: () => AuthenticatedRoute,
+    } as any);
+
+export interface FileRoutesByFullPath {
+    '/login': typeof LoginRoute;
+    '/': typeof AuthenticatedIndexRoute;
+    '/administrators': typeof AuthenticatedAdministratorsAdministratorsRoute;
+    '/assets': typeof AuthenticatedAssetsAssetsRoute;
+    '/channels': typeof AuthenticatedChannelsChannelsRoute;
+    '/collections': typeof AuthenticatedCollectionsCollectionsRoute;
+    '/countries': typeof AuthenticatedCountriesCountriesRoute;
+    '/customer-groups': typeof AuthenticatedCustomerGroupsCustomerGroupsRoute;
+    '/customers': typeof AuthenticatedCustomersCustomersRoute;
+    '/facets': typeof AuthenticatedFacetsFacetsRoute;
+    '/global-settings': typeof AuthenticatedGlobalSettingsGlobalSettingsRoute;
+    '/orders': typeof AuthenticatedOrdersOrdersRoute;
+    '/payment-methods': typeof AuthenticatedPaymentMethodsPaymentMethodsRoute;
+    '/product-variants': typeof AuthenticatedProductVariantsProductVariantsRoute;
+    '/products': typeof AuthenticatedProductsProductsRoute;
+    '/profile': typeof AuthenticatedProfileProfileRoute;
+    '/promotions': typeof AuthenticatedPromotionsPromotionsRoute;
+    '/roles': typeof AuthenticatedRolesRolesRoute;
+    '/sellers': typeof AuthenticatedSellersSellersRoute;
+    '/shipping-methods': typeof AuthenticatedShippingMethodsShippingMethodsRoute;
+    '/stock-locations': typeof AuthenticatedStockLocationsStockLocationsRoute;
+    '/healthchecks': typeof AuthenticatedSystemHealthchecksRoute;
+    '/job-queue': typeof AuthenticatedSystemJobQueueRoute;
+    '/scheduled-tasks': typeof AuthenticatedSystemScheduledTasksRoute;
+    '/tax-categories': typeof AuthenticatedTaxCategoriesTaxCategoriesRoute;
+    '/tax-rates': typeof AuthenticatedTaxRatesTaxRatesRoute;
+    '/zones': typeof AuthenticatedZonesZonesRoute;
+    '/administrators/$id': typeof AuthenticatedAdministratorsAdministratorsIdRoute;
+    '/assets/$id': typeof AuthenticatedAssetsAssetsIdRoute;
+    '/channels/$id': typeof AuthenticatedChannelsChannelsIdRoute;
+    '/collections/$id': typeof AuthenticatedCollectionsCollectionsIdRoute;
+    '/countries/$id': typeof AuthenticatedCountriesCountriesIdRoute;
+    '/customer-groups/$id': typeof AuthenticatedCustomerGroupsCustomerGroupsIdRoute;
+    '/customers/$id': typeof AuthenticatedCustomersCustomersIdRoute;
+    '/facets/$id': typeof AuthenticatedFacetsFacetsIdRoute;
+    '/orders/$id': typeof AuthenticatedOrdersOrdersIdRoute;
+    '/payment-methods/$id': typeof AuthenticatedPaymentMethodsPaymentMethodsIdRoute;
+    '/product-variants/$id': typeof AuthenticatedProductVariantsProductVariantsIdRoute;
+    '/products/$id': typeof AuthenticatedProductsProductsIdRoute;
+    '/promotions/$id': typeof AuthenticatedPromotionsPromotionsIdRoute;
+    '/roles/$id': typeof AuthenticatedRolesRolesIdRoute;
+    '/sellers/$id': typeof AuthenticatedSellersSellersIdRoute;
+    '/shipping-methods/$id': typeof AuthenticatedShippingMethodsShippingMethodsIdRoute;
+    '/stock-locations/$id': typeof AuthenticatedStockLocationsStockLocationsIdRoute;
+    '/tax-categories/$id': typeof AuthenticatedTaxCategoriesTaxCategoriesIdRoute;
+    '/tax-rates/$id': typeof AuthenticatedTaxRatesTaxRatesIdRoute;
+    '/zones/$id': typeof AuthenticatedZonesZonesIdRoute;
+    '/orders/$id/modify': typeof AuthenticatedOrdersOrdersIdModifyRoute;
+    '/orders/draft/$id': typeof AuthenticatedOrdersOrdersDraftIdRoute;
+    '/products/$id/variants': typeof AuthenticatedProductsProductsIdVariantsRoute;
+    '/facets/$facetId/values/$id': typeof AuthenticatedFacetsFacetsFacetIdValuesIdRoute;
+    '/orders/$aggregateOrderId/seller-orders/$sellerOrderId': typeof AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRoute;
+    '/products/$productId/option-groups/$id': typeof AuthenticatedProductsProductsProductIdOptionGroupsIdRoute;
+    '/products/$productId/option-groups/$productOptionGroupId/options/$id': typeof AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRoute;
+}
+export interface FileRoutesByTo {
+    '/login': typeof LoginRoute;
+    '/': typeof AuthenticatedIndexRoute;
+    '/administrators': typeof AuthenticatedAdministratorsAdministratorsRoute;
+    '/assets': typeof AuthenticatedAssetsAssetsRoute;
+    '/channels': typeof AuthenticatedChannelsChannelsRoute;
+    '/collections': typeof AuthenticatedCollectionsCollectionsRoute;
+    '/countries': typeof AuthenticatedCountriesCountriesRoute;
+    '/customer-groups': typeof AuthenticatedCustomerGroupsCustomerGroupsRoute;
+    '/customers': typeof AuthenticatedCustomersCustomersRoute;
+    '/facets': typeof AuthenticatedFacetsFacetsRoute;
+    '/global-settings': typeof AuthenticatedGlobalSettingsGlobalSettingsRoute;
+    '/orders': typeof AuthenticatedOrdersOrdersRoute;
+    '/payment-methods': typeof AuthenticatedPaymentMethodsPaymentMethodsRoute;
+    '/product-variants': typeof AuthenticatedProductVariantsProductVariantsRoute;
+    '/products': typeof AuthenticatedProductsProductsRoute;
+    '/profile': typeof AuthenticatedProfileProfileRoute;
+    '/promotions': typeof AuthenticatedPromotionsPromotionsRoute;
+    '/roles': typeof AuthenticatedRolesRolesRoute;
+    '/sellers': typeof AuthenticatedSellersSellersRoute;
+    '/shipping-methods': typeof AuthenticatedShippingMethodsShippingMethodsRoute;
+    '/stock-locations': typeof AuthenticatedStockLocationsStockLocationsRoute;
+    '/healthchecks': typeof AuthenticatedSystemHealthchecksRoute;
+    '/job-queue': typeof AuthenticatedSystemJobQueueRoute;
+    '/scheduled-tasks': typeof AuthenticatedSystemScheduledTasksRoute;
+    '/tax-categories': typeof AuthenticatedTaxCategoriesTaxCategoriesRoute;
+    '/tax-rates': typeof AuthenticatedTaxRatesTaxRatesRoute;
+    '/zones': typeof AuthenticatedZonesZonesRoute;
+    '/administrators/$id': typeof AuthenticatedAdministratorsAdministratorsIdRoute;
+    '/assets/$id': typeof AuthenticatedAssetsAssetsIdRoute;
+    '/channels/$id': typeof AuthenticatedChannelsChannelsIdRoute;
+    '/collections/$id': typeof AuthenticatedCollectionsCollectionsIdRoute;
+    '/countries/$id': typeof AuthenticatedCountriesCountriesIdRoute;
+    '/customer-groups/$id': typeof AuthenticatedCustomerGroupsCustomerGroupsIdRoute;
+    '/customers/$id': typeof AuthenticatedCustomersCustomersIdRoute;
+    '/facets/$id': typeof AuthenticatedFacetsFacetsIdRoute;
+    '/orders/$id': typeof AuthenticatedOrdersOrdersIdRoute;
+    '/payment-methods/$id': typeof AuthenticatedPaymentMethodsPaymentMethodsIdRoute;
+    '/product-variants/$id': typeof AuthenticatedProductVariantsProductVariantsIdRoute;
+    '/products/$id': typeof AuthenticatedProductsProductsIdRoute;
+    '/promotions/$id': typeof AuthenticatedPromotionsPromotionsIdRoute;
+    '/roles/$id': typeof AuthenticatedRolesRolesIdRoute;
+    '/sellers/$id': typeof AuthenticatedSellersSellersIdRoute;
+    '/shipping-methods/$id': typeof AuthenticatedShippingMethodsShippingMethodsIdRoute;
+    '/stock-locations/$id': typeof AuthenticatedStockLocationsStockLocationsIdRoute;
+    '/tax-categories/$id': typeof AuthenticatedTaxCategoriesTaxCategoriesIdRoute;
+    '/tax-rates/$id': typeof AuthenticatedTaxRatesTaxRatesIdRoute;
+    '/zones/$id': typeof AuthenticatedZonesZonesIdRoute;
+    '/orders/$id/modify': typeof AuthenticatedOrdersOrdersIdModifyRoute;
+    '/orders/draft/$id': typeof AuthenticatedOrdersOrdersDraftIdRoute;
+    '/products/$id/variants': typeof AuthenticatedProductsProductsIdVariantsRoute;
+    '/facets/$facetId/values/$id': typeof AuthenticatedFacetsFacetsFacetIdValuesIdRoute;
+    '/orders/$aggregateOrderId/seller-orders/$sellerOrderId': typeof AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRoute;
+    '/products/$productId/option-groups/$id': typeof AuthenticatedProductsProductsProductIdOptionGroupsIdRoute;
+    '/products/$productId/option-groups/$productOptionGroupId/options/$id': typeof AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRoute;
+}
+export interface FileRoutesById {
+    __root__: typeof rootRouteImport;
+    '/_authenticated': typeof AuthenticatedRouteWithChildren;
+    '/login': typeof LoginRoute;
+    '/_authenticated/': typeof AuthenticatedIndexRoute;
+    '/_authenticated/_administrators/administrators': typeof AuthenticatedAdministratorsAdministratorsRoute;
+    '/_authenticated/_assets/assets': typeof AuthenticatedAssetsAssetsRoute;
+    '/_authenticated/_channels/channels': typeof AuthenticatedChannelsChannelsRoute;
+    '/_authenticated/_collections/collections': typeof AuthenticatedCollectionsCollectionsRoute;
+    '/_authenticated/_countries/countries': typeof AuthenticatedCountriesCountriesRoute;
+    '/_authenticated/_customer-groups/customer-groups': typeof AuthenticatedCustomerGroupsCustomerGroupsRoute;
+    '/_authenticated/_customers/customers': typeof AuthenticatedCustomersCustomersRoute;
+    '/_authenticated/_facets/facets': typeof AuthenticatedFacetsFacetsRoute;
+    '/_authenticated/_global-settings/global-settings': typeof AuthenticatedGlobalSettingsGlobalSettingsRoute;
+    '/_authenticated/_orders/orders': typeof AuthenticatedOrdersOrdersRoute;
+    '/_authenticated/_payment-methods/payment-methods': typeof AuthenticatedPaymentMethodsPaymentMethodsRoute;
+    '/_authenticated/_product-variants/product-variants': typeof AuthenticatedProductVariantsProductVariantsRoute;
+    '/_authenticated/_products/products': typeof AuthenticatedProductsProductsRoute;
+    '/_authenticated/_profile/profile': typeof AuthenticatedProfileProfileRoute;
+    '/_authenticated/_promotions/promotions': typeof AuthenticatedPromotionsPromotionsRoute;
+    '/_authenticated/_roles/roles': typeof AuthenticatedRolesRolesRoute;
+    '/_authenticated/_sellers/sellers': typeof AuthenticatedSellersSellersRoute;
+    '/_authenticated/_shipping-methods/shipping-methods': typeof AuthenticatedShippingMethodsShippingMethodsRoute;
+    '/_authenticated/_stock-locations/stock-locations': typeof AuthenticatedStockLocationsStockLocationsRoute;
+    '/_authenticated/_system/healthchecks': typeof AuthenticatedSystemHealthchecksRoute;
+    '/_authenticated/_system/job-queue': typeof AuthenticatedSystemJobQueueRoute;
+    '/_authenticated/_system/scheduled-tasks': typeof AuthenticatedSystemScheduledTasksRoute;
+    '/_authenticated/_tax-categories/tax-categories': typeof AuthenticatedTaxCategoriesTaxCategoriesRoute;
+    '/_authenticated/_tax-rates/tax-rates': typeof AuthenticatedTaxRatesTaxRatesRoute;
+    '/_authenticated/_zones/zones': typeof AuthenticatedZonesZonesRoute;
+    '/_authenticated/_administrators/administrators_/$id': typeof AuthenticatedAdministratorsAdministratorsIdRoute;
+    '/_authenticated/_assets/assets_/$id': typeof AuthenticatedAssetsAssetsIdRoute;
+    '/_authenticated/_channels/channels_/$id': typeof AuthenticatedChannelsChannelsIdRoute;
+    '/_authenticated/_collections/collections_/$id': typeof AuthenticatedCollectionsCollectionsIdRoute;
+    '/_authenticated/_countries/countries_/$id': typeof AuthenticatedCountriesCountriesIdRoute;
+    '/_authenticated/_customer-groups/customer-groups_/$id': typeof AuthenticatedCustomerGroupsCustomerGroupsIdRoute;
+    '/_authenticated/_customers/customers_/$id': typeof AuthenticatedCustomersCustomersIdRoute;
+    '/_authenticated/_facets/facets_/$id': typeof AuthenticatedFacetsFacetsIdRoute;
+    '/_authenticated/_orders/orders_/$id': typeof AuthenticatedOrdersOrdersIdRoute;
+    '/_authenticated/_payment-methods/payment-methods_/$id': typeof AuthenticatedPaymentMethodsPaymentMethodsIdRoute;
+    '/_authenticated/_product-variants/product-variants_/$id': typeof AuthenticatedProductVariantsProductVariantsIdRoute;
+    '/_authenticated/_products/products_/$id': typeof AuthenticatedProductsProductsIdRoute;
+    '/_authenticated/_promotions/promotions_/$id': typeof AuthenticatedPromotionsPromotionsIdRoute;
+    '/_authenticated/_roles/roles_/$id': typeof AuthenticatedRolesRolesIdRoute;
+    '/_authenticated/_sellers/sellers_/$id': typeof AuthenticatedSellersSellersIdRoute;
+    '/_authenticated/_shipping-methods/shipping-methods_/$id': typeof AuthenticatedShippingMethodsShippingMethodsIdRoute;
+    '/_authenticated/_stock-locations/stock-locations_/$id': typeof AuthenticatedStockLocationsStockLocationsIdRoute;
+    '/_authenticated/_tax-categories/tax-categories_/$id': typeof AuthenticatedTaxCategoriesTaxCategoriesIdRoute;
+    '/_authenticated/_tax-rates/tax-rates_/$id': typeof AuthenticatedTaxRatesTaxRatesIdRoute;
+    '/_authenticated/_zones/zones_/$id': typeof AuthenticatedZonesZonesIdRoute;
+    '/_authenticated/_orders/orders_/$id_/modify': typeof AuthenticatedOrdersOrdersIdModifyRoute;
+    '/_authenticated/_orders/orders_/draft/$id': typeof AuthenticatedOrdersOrdersDraftIdRoute;
+    '/_authenticated/_products/products_/$id_/variants': typeof AuthenticatedProductsProductsIdVariantsRoute;
+    '/_authenticated/_facets/facets_/$facetId/values_/$id': typeof AuthenticatedFacetsFacetsFacetIdValuesIdRoute;
+    '/_authenticated/_orders/orders_/$aggregateOrderId_/seller-orders/$sellerOrderId': typeof AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRoute;
+    '/_authenticated/_products/products_/$productId/option-groups/$id': typeof AuthenticatedProductsProductsProductIdOptionGroupsIdRoute;
+    '/_authenticated/_products/products_/$productId/option-groups/$productOptionGroupId/options_/$id': typeof AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRoute;
+}
+export interface FileRouteTypes {
+    fileRoutesByFullPath: FileRoutesByFullPath;
+    fullPaths:
+        | '/login'
+        | '/'
+        | '/administrators'
+        | '/assets'
+        | '/channels'
+        | '/collections'
+        | '/countries'
+        | '/customer-groups'
+        | '/customers'
+        | '/facets'
+        | '/global-settings'
+        | '/orders'
+        | '/payment-methods'
+        | '/product-variants'
+        | '/products'
+        | '/profile'
+        | '/promotions'
+        | '/roles'
+        | '/sellers'
+        | '/shipping-methods'
+        | '/stock-locations'
+        | '/healthchecks'
+        | '/job-queue'
+        | '/scheduled-tasks'
+        | '/tax-categories'
+        | '/tax-rates'
+        | '/zones'
+        | '/administrators/$id'
+        | '/assets/$id'
+        | '/channels/$id'
+        | '/collections/$id'
+        | '/countries/$id'
+        | '/customer-groups/$id'
+        | '/customers/$id'
+        | '/facets/$id'
+        | '/orders/$id'
+        | '/payment-methods/$id'
+        | '/product-variants/$id'
+        | '/products/$id'
+        | '/promotions/$id'
+        | '/roles/$id'
+        | '/sellers/$id'
+        | '/shipping-methods/$id'
+        | '/stock-locations/$id'
+        | '/tax-categories/$id'
+        | '/tax-rates/$id'
+        | '/zones/$id'
+        | '/orders/$id/modify'
+        | '/orders/draft/$id'
+        | '/products/$id/variants'
+        | '/facets/$facetId/values/$id'
+        | '/orders/$aggregateOrderId/seller-orders/$sellerOrderId'
+        | '/products/$productId/option-groups/$id'
+        | '/products/$productId/option-groups/$productOptionGroupId/options/$id';
+    fileRoutesByTo: FileRoutesByTo;
+    to:
+        | '/login'
+        | '/'
+        | '/administrators'
+        | '/assets'
+        | '/channels'
+        | '/collections'
+        | '/countries'
+        | '/customer-groups'
+        | '/customers'
+        | '/facets'
+        | '/global-settings'
+        | '/orders'
+        | '/payment-methods'
+        | '/product-variants'
+        | '/products'
+        | '/profile'
+        | '/promotions'
+        | '/roles'
+        | '/sellers'
+        | '/shipping-methods'
+        | '/stock-locations'
+        | '/healthchecks'
+        | '/job-queue'
+        | '/scheduled-tasks'
+        | '/tax-categories'
+        | '/tax-rates'
+        | '/zones'
+        | '/administrators/$id'
+        | '/assets/$id'
+        | '/channels/$id'
+        | '/collections/$id'
+        | '/countries/$id'
+        | '/customer-groups/$id'
+        | '/customers/$id'
+        | '/facets/$id'
+        | '/orders/$id'
+        | '/payment-methods/$id'
+        | '/product-variants/$id'
+        | '/products/$id'
+        | '/promotions/$id'
+        | '/roles/$id'
+        | '/sellers/$id'
+        | '/shipping-methods/$id'
+        | '/stock-locations/$id'
+        | '/tax-categories/$id'
+        | '/tax-rates/$id'
+        | '/zones/$id'
+        | '/orders/$id/modify'
+        | '/orders/draft/$id'
+        | '/products/$id/variants'
+        | '/facets/$facetId/values/$id'
+        | '/orders/$aggregateOrderId/seller-orders/$sellerOrderId'
+        | '/products/$productId/option-groups/$id'
+        | '/products/$productId/option-groups/$productOptionGroupId/options/$id';
+    id:
+        | '__root__'
+        | '/_authenticated'
+        | '/login'
+        | '/_authenticated/'
+        | '/_authenticated/_administrators/administrators'
+        | '/_authenticated/_assets/assets'
+        | '/_authenticated/_channels/channels'
+        | '/_authenticated/_collections/collections'
+        | '/_authenticated/_countries/countries'
+        | '/_authenticated/_customer-groups/customer-groups'
+        | '/_authenticated/_customers/customers'
+        | '/_authenticated/_facets/facets'
+        | '/_authenticated/_global-settings/global-settings'
+        | '/_authenticated/_orders/orders'
+        | '/_authenticated/_payment-methods/payment-methods'
+        | '/_authenticated/_product-variants/product-variants'
+        | '/_authenticated/_products/products'
+        | '/_authenticated/_profile/profile'
+        | '/_authenticated/_promotions/promotions'
+        | '/_authenticated/_roles/roles'
+        | '/_authenticated/_sellers/sellers'
+        | '/_authenticated/_shipping-methods/shipping-methods'
+        | '/_authenticated/_stock-locations/stock-locations'
+        | '/_authenticated/_system/healthchecks'
+        | '/_authenticated/_system/job-queue'
+        | '/_authenticated/_system/scheduled-tasks'
+        | '/_authenticated/_tax-categories/tax-categories'
+        | '/_authenticated/_tax-rates/tax-rates'
+        | '/_authenticated/_zones/zones'
+        | '/_authenticated/_administrators/administrators_/$id'
+        | '/_authenticated/_assets/assets_/$id'
+        | '/_authenticated/_channels/channels_/$id'
+        | '/_authenticated/_collections/collections_/$id'
+        | '/_authenticated/_countries/countries_/$id'
+        | '/_authenticated/_customer-groups/customer-groups_/$id'
+        | '/_authenticated/_customers/customers_/$id'
+        | '/_authenticated/_facets/facets_/$id'
+        | '/_authenticated/_orders/orders_/$id'
+        | '/_authenticated/_payment-methods/payment-methods_/$id'
+        | '/_authenticated/_product-variants/product-variants_/$id'
+        | '/_authenticated/_products/products_/$id'
+        | '/_authenticated/_promotions/promotions_/$id'
+        | '/_authenticated/_roles/roles_/$id'
+        | '/_authenticated/_sellers/sellers_/$id'
+        | '/_authenticated/_shipping-methods/shipping-methods_/$id'
+        | '/_authenticated/_stock-locations/stock-locations_/$id'
+        | '/_authenticated/_tax-categories/tax-categories_/$id'
+        | '/_authenticated/_tax-rates/tax-rates_/$id'
+        | '/_authenticated/_zones/zones_/$id'
+        | '/_authenticated/_orders/orders_/$id_/modify'
+        | '/_authenticated/_orders/orders_/draft/$id'
+        | '/_authenticated/_products/products_/$id_/variants'
+        | '/_authenticated/_facets/facets_/$facetId/values_/$id'
+        | '/_authenticated/_orders/orders_/$aggregateOrderId_/seller-orders/$sellerOrderId'
+        | '/_authenticated/_products/products_/$productId/option-groups/$id'
+        | '/_authenticated/_products/products_/$productId/option-groups/$productOptionGroupId/options_/$id';
+    fileRoutesById: FileRoutesById;
+}
+export interface RootRouteChildren {
+    AuthenticatedRoute: typeof AuthenticatedRouteWithChildren;
+    LoginRoute: typeof LoginRoute;
+}
+
+declare module '@tanstack/react-router' {
+    interface FileRoutesByPath {
+        '/login': {
+            id: '/login';
+            path: '/login';
+            fullPath: '/login';
+            preLoaderRoute: typeof LoginRouteImport;
+            parentRoute: typeof rootRouteImport;
+        };
+        '/_authenticated': {
+            id: '/_authenticated';
+            path: '';
+            fullPath: '';
+            preLoaderRoute: typeof AuthenticatedRouteImport;
+            parentRoute: typeof rootRouteImport;
+        };
+        '/_authenticated/': {
+            id: '/_authenticated/';
+            path: '/';
+            fullPath: '/';
+            preLoaderRoute: typeof AuthenticatedIndexRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_zones/zones': {
+            id: '/_authenticated/_zones/zones';
+            path: '/zones';
+            fullPath: '/zones';
+            preLoaderRoute: typeof AuthenticatedZonesZonesRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_tax-rates/tax-rates': {
+            id: '/_authenticated/_tax-rates/tax-rates';
+            path: '/tax-rates';
+            fullPath: '/tax-rates';
+            preLoaderRoute: typeof AuthenticatedTaxRatesTaxRatesRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_tax-categories/tax-categories': {
+            id: '/_authenticated/_tax-categories/tax-categories';
+            path: '/tax-categories';
+            fullPath: '/tax-categories';
+            preLoaderRoute: typeof AuthenticatedTaxCategoriesTaxCategoriesRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_system/scheduled-tasks': {
+            id: '/_authenticated/_system/scheduled-tasks';
+            path: '/scheduled-tasks';
+            fullPath: '/scheduled-tasks';
+            preLoaderRoute: typeof AuthenticatedSystemScheduledTasksRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_system/job-queue': {
+            id: '/_authenticated/_system/job-queue';
+            path: '/job-queue';
+            fullPath: '/job-queue';
+            preLoaderRoute: typeof AuthenticatedSystemJobQueueRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_system/healthchecks': {
+            id: '/_authenticated/_system/healthchecks';
+            path: '/healthchecks';
+            fullPath: '/healthchecks';
+            preLoaderRoute: typeof AuthenticatedSystemHealthchecksRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_stock-locations/stock-locations': {
+            id: '/_authenticated/_stock-locations/stock-locations';
+            path: '/stock-locations';
+            fullPath: '/stock-locations';
+            preLoaderRoute: typeof AuthenticatedStockLocationsStockLocationsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_shipping-methods/shipping-methods': {
+            id: '/_authenticated/_shipping-methods/shipping-methods';
+            path: '/shipping-methods';
+            fullPath: '/shipping-methods';
+            preLoaderRoute: typeof AuthenticatedShippingMethodsShippingMethodsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_sellers/sellers': {
+            id: '/_authenticated/_sellers/sellers';
+            path: '/sellers';
+            fullPath: '/sellers';
+            preLoaderRoute: typeof AuthenticatedSellersSellersRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_roles/roles': {
+            id: '/_authenticated/_roles/roles';
+            path: '/roles';
+            fullPath: '/roles';
+            preLoaderRoute: typeof AuthenticatedRolesRolesRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_promotions/promotions': {
+            id: '/_authenticated/_promotions/promotions';
+            path: '/promotions';
+            fullPath: '/promotions';
+            preLoaderRoute: typeof AuthenticatedPromotionsPromotionsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_profile/profile': {
+            id: '/_authenticated/_profile/profile';
+            path: '/profile';
+            fullPath: '/profile';
+            preLoaderRoute: typeof AuthenticatedProfileProfileRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_products/products': {
+            id: '/_authenticated/_products/products';
+            path: '/products';
+            fullPath: '/products';
+            preLoaderRoute: typeof AuthenticatedProductsProductsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_product-variants/product-variants': {
+            id: '/_authenticated/_product-variants/product-variants';
+            path: '/product-variants';
+            fullPath: '/product-variants';
+            preLoaderRoute: typeof AuthenticatedProductVariantsProductVariantsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_payment-methods/payment-methods': {
+            id: '/_authenticated/_payment-methods/payment-methods';
+            path: '/payment-methods';
+            fullPath: '/payment-methods';
+            preLoaderRoute: typeof AuthenticatedPaymentMethodsPaymentMethodsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_orders/orders': {
+            id: '/_authenticated/_orders/orders';
+            path: '/orders';
+            fullPath: '/orders';
+            preLoaderRoute: typeof AuthenticatedOrdersOrdersRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_global-settings/global-settings': {
+            id: '/_authenticated/_global-settings/global-settings';
+            path: '/global-settings';
+            fullPath: '/global-settings';
+            preLoaderRoute: typeof AuthenticatedGlobalSettingsGlobalSettingsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_facets/facets': {
+            id: '/_authenticated/_facets/facets';
+            path: '/facets';
+            fullPath: '/facets';
+            preLoaderRoute: typeof AuthenticatedFacetsFacetsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_customers/customers': {
+            id: '/_authenticated/_customers/customers';
+            path: '/customers';
+            fullPath: '/customers';
+            preLoaderRoute: typeof AuthenticatedCustomersCustomersRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_customer-groups/customer-groups': {
+            id: '/_authenticated/_customer-groups/customer-groups';
+            path: '/customer-groups';
+            fullPath: '/customer-groups';
+            preLoaderRoute: typeof AuthenticatedCustomerGroupsCustomerGroupsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_countries/countries': {
+            id: '/_authenticated/_countries/countries';
+            path: '/countries';
+            fullPath: '/countries';
+            preLoaderRoute: typeof AuthenticatedCountriesCountriesRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_collections/collections': {
+            id: '/_authenticated/_collections/collections';
+            path: '/collections';
+            fullPath: '/collections';
+            preLoaderRoute: typeof AuthenticatedCollectionsCollectionsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_channels/channels': {
+            id: '/_authenticated/_channels/channels';
+            path: '/channels';
+            fullPath: '/channels';
+            preLoaderRoute: typeof AuthenticatedChannelsChannelsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_assets/assets': {
+            id: '/_authenticated/_assets/assets';
+            path: '/assets';
+            fullPath: '/assets';
+            preLoaderRoute: typeof AuthenticatedAssetsAssetsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_administrators/administrators': {
+            id: '/_authenticated/_administrators/administrators';
+            path: '/administrators';
+            fullPath: '/administrators';
+            preLoaderRoute: typeof AuthenticatedAdministratorsAdministratorsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_zones/zones_/$id': {
+            id: '/_authenticated/_zones/zones_/$id';
+            path: '/zones/$id';
+            fullPath: '/zones/$id';
+            preLoaderRoute: typeof AuthenticatedZonesZonesIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_tax-rates/tax-rates_/$id': {
+            id: '/_authenticated/_tax-rates/tax-rates_/$id';
+            path: '/tax-rates/$id';
+            fullPath: '/tax-rates/$id';
+            preLoaderRoute: typeof AuthenticatedTaxRatesTaxRatesIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_tax-categories/tax-categories_/$id': {
+            id: '/_authenticated/_tax-categories/tax-categories_/$id';
+            path: '/tax-categories/$id';
+            fullPath: '/tax-categories/$id';
+            preLoaderRoute: typeof AuthenticatedTaxCategoriesTaxCategoriesIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_stock-locations/stock-locations_/$id': {
+            id: '/_authenticated/_stock-locations/stock-locations_/$id';
+            path: '/stock-locations/$id';
+            fullPath: '/stock-locations/$id';
+            preLoaderRoute: typeof AuthenticatedStockLocationsStockLocationsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_shipping-methods/shipping-methods_/$id': {
+            id: '/_authenticated/_shipping-methods/shipping-methods_/$id';
+            path: '/shipping-methods/$id';
+            fullPath: '/shipping-methods/$id';
+            preLoaderRoute: typeof AuthenticatedShippingMethodsShippingMethodsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_sellers/sellers_/$id': {
+            id: '/_authenticated/_sellers/sellers_/$id';
+            path: '/sellers/$id';
+            fullPath: '/sellers/$id';
+            preLoaderRoute: typeof AuthenticatedSellersSellersIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_roles/roles_/$id': {
+            id: '/_authenticated/_roles/roles_/$id';
+            path: '/roles/$id';
+            fullPath: '/roles/$id';
+            preLoaderRoute: typeof AuthenticatedRolesRolesIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_promotions/promotions_/$id': {
+            id: '/_authenticated/_promotions/promotions_/$id';
+            path: '/promotions/$id';
+            fullPath: '/promotions/$id';
+            preLoaderRoute: typeof AuthenticatedPromotionsPromotionsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_products/products_/$id': {
+            id: '/_authenticated/_products/products_/$id';
+            path: '/products/$id';
+            fullPath: '/products/$id';
+            preLoaderRoute: typeof AuthenticatedProductsProductsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_product-variants/product-variants_/$id': {
+            id: '/_authenticated/_product-variants/product-variants_/$id';
+            path: '/product-variants/$id';
+            fullPath: '/product-variants/$id';
+            preLoaderRoute: typeof AuthenticatedProductVariantsProductVariantsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_payment-methods/payment-methods_/$id': {
+            id: '/_authenticated/_payment-methods/payment-methods_/$id';
+            path: '/payment-methods/$id';
+            fullPath: '/payment-methods/$id';
+            preLoaderRoute: typeof AuthenticatedPaymentMethodsPaymentMethodsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_orders/orders_/$id': {
+            id: '/_authenticated/_orders/orders_/$id';
+            path: '/orders/$id';
+            fullPath: '/orders/$id';
+            preLoaderRoute: typeof AuthenticatedOrdersOrdersIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_facets/facets_/$id': {
+            id: '/_authenticated/_facets/facets_/$id';
+            path: '/facets/$id';
+            fullPath: '/facets/$id';
+            preLoaderRoute: typeof AuthenticatedFacetsFacetsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_customers/customers_/$id': {
+            id: '/_authenticated/_customers/customers_/$id';
+            path: '/customers/$id';
+            fullPath: '/customers/$id';
+            preLoaderRoute: typeof AuthenticatedCustomersCustomersIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_customer-groups/customer-groups_/$id': {
+            id: '/_authenticated/_customer-groups/customer-groups_/$id';
+            path: '/customer-groups/$id';
+            fullPath: '/customer-groups/$id';
+            preLoaderRoute: typeof AuthenticatedCustomerGroupsCustomerGroupsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_countries/countries_/$id': {
+            id: '/_authenticated/_countries/countries_/$id';
+            path: '/countries/$id';
+            fullPath: '/countries/$id';
+            preLoaderRoute: typeof AuthenticatedCountriesCountriesIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_collections/collections_/$id': {
+            id: '/_authenticated/_collections/collections_/$id';
+            path: '/collections/$id';
+            fullPath: '/collections/$id';
+            preLoaderRoute: typeof AuthenticatedCollectionsCollectionsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_channels/channels_/$id': {
+            id: '/_authenticated/_channels/channels_/$id';
+            path: '/channels/$id';
+            fullPath: '/channels/$id';
+            preLoaderRoute: typeof AuthenticatedChannelsChannelsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_assets/assets_/$id': {
+            id: '/_authenticated/_assets/assets_/$id';
+            path: '/assets/$id';
+            fullPath: '/assets/$id';
+            preLoaderRoute: typeof AuthenticatedAssetsAssetsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_administrators/administrators_/$id': {
+            id: '/_authenticated/_administrators/administrators_/$id';
+            path: '/administrators/$id';
+            fullPath: '/administrators/$id';
+            preLoaderRoute: typeof AuthenticatedAdministratorsAdministratorsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_products/products_/$id_/variants': {
+            id: '/_authenticated/_products/products_/$id_/variants';
+            path: '/products/$id/variants';
+            fullPath: '/products/$id/variants';
+            preLoaderRoute: typeof AuthenticatedProductsProductsIdVariantsRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_orders/orders_/draft/$id': {
+            id: '/_authenticated/_orders/orders_/draft/$id';
+            path: '/orders/draft/$id';
+            fullPath: '/orders/draft/$id';
+            preLoaderRoute: typeof AuthenticatedOrdersOrdersDraftIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_orders/orders_/$id_/modify': {
+            id: '/_authenticated/_orders/orders_/$id_/modify';
+            path: '/orders/$id/modify';
+            fullPath: '/orders/$id/modify';
+            preLoaderRoute: typeof AuthenticatedOrdersOrdersIdModifyRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_products/products_/$productId/option-groups/$id': {
+            id: '/_authenticated/_products/products_/$productId/option-groups/$id';
+            path: '/products/$productId/option-groups/$id';
+            fullPath: '/products/$productId/option-groups/$id';
+            preLoaderRoute: typeof AuthenticatedProductsProductsProductIdOptionGroupsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_orders/orders_/$aggregateOrderId_/seller-orders/$sellerOrderId': {
+            id: '/_authenticated/_orders/orders_/$aggregateOrderId_/seller-orders/$sellerOrderId';
+            path: '/orders/$aggregateOrderId/seller-orders/$sellerOrderId';
+            fullPath: '/orders/$aggregateOrderId/seller-orders/$sellerOrderId';
+            preLoaderRoute: typeof AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_facets/facets_/$facetId/values_/$id': {
+            id: '/_authenticated/_facets/facets_/$facetId/values_/$id';
+            path: '/facets/$facetId/values/$id';
+            fullPath: '/facets/$facetId/values/$id';
+            preLoaderRoute: typeof AuthenticatedFacetsFacetsFacetIdValuesIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+        '/_authenticated/_products/products_/$productId/option-groups/$productOptionGroupId/options_/$id': {
+            id: '/_authenticated/_products/products_/$productId/option-groups/$productOptionGroupId/options_/$id';
+            path: '/products/$productId/option-groups/$productOptionGroupId/options/$id';
+            fullPath: '/products/$productId/option-groups/$productOptionGroupId/options/$id';
+            preLoaderRoute: typeof AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRouteImport;
+            parentRoute: typeof AuthenticatedRoute;
+        };
+    }
+}
+
+interface AuthenticatedRouteChildren {
+    AuthenticatedIndexRoute: typeof AuthenticatedIndexRoute;
+    AuthenticatedAdministratorsAdministratorsRoute: typeof AuthenticatedAdministratorsAdministratorsRoute;
+    AuthenticatedAssetsAssetsRoute: typeof AuthenticatedAssetsAssetsRoute;
+    AuthenticatedChannelsChannelsRoute: typeof AuthenticatedChannelsChannelsRoute;
+    AuthenticatedCollectionsCollectionsRoute: typeof AuthenticatedCollectionsCollectionsRoute;
+    AuthenticatedCountriesCountriesRoute: typeof AuthenticatedCountriesCountriesRoute;
+    AuthenticatedCustomerGroupsCustomerGroupsRoute: typeof AuthenticatedCustomerGroupsCustomerGroupsRoute;
+    AuthenticatedCustomersCustomersRoute: typeof AuthenticatedCustomersCustomersRoute;
+    AuthenticatedFacetsFacetsRoute: typeof AuthenticatedFacetsFacetsRoute;
+    AuthenticatedGlobalSettingsGlobalSettingsRoute: typeof AuthenticatedGlobalSettingsGlobalSettingsRoute;
+    AuthenticatedOrdersOrdersRoute: typeof AuthenticatedOrdersOrdersRoute;
+    AuthenticatedPaymentMethodsPaymentMethodsRoute: typeof AuthenticatedPaymentMethodsPaymentMethodsRoute;
+    AuthenticatedProductVariantsProductVariantsRoute: typeof AuthenticatedProductVariantsProductVariantsRoute;
+    AuthenticatedProductsProductsRoute: typeof AuthenticatedProductsProductsRoute;
+    AuthenticatedProfileProfileRoute: typeof AuthenticatedProfileProfileRoute;
+    AuthenticatedPromotionsPromotionsRoute: typeof AuthenticatedPromotionsPromotionsRoute;
+    AuthenticatedRolesRolesRoute: typeof AuthenticatedRolesRolesRoute;
+    AuthenticatedSellersSellersRoute: typeof AuthenticatedSellersSellersRoute;
+    AuthenticatedShippingMethodsShippingMethodsRoute: typeof AuthenticatedShippingMethodsShippingMethodsRoute;
+    AuthenticatedStockLocationsStockLocationsRoute: typeof AuthenticatedStockLocationsStockLocationsRoute;
+    AuthenticatedSystemHealthchecksRoute: typeof AuthenticatedSystemHealthchecksRoute;
+    AuthenticatedSystemJobQueueRoute: typeof AuthenticatedSystemJobQueueRoute;
+    AuthenticatedSystemScheduledTasksRoute: typeof AuthenticatedSystemScheduledTasksRoute;
+    AuthenticatedTaxCategoriesTaxCategoriesRoute: typeof AuthenticatedTaxCategoriesTaxCategoriesRoute;
+    AuthenticatedTaxRatesTaxRatesRoute: typeof AuthenticatedTaxRatesTaxRatesRoute;
+    AuthenticatedZonesZonesRoute: typeof AuthenticatedZonesZonesRoute;
+    AuthenticatedAdministratorsAdministratorsIdRoute: typeof AuthenticatedAdministratorsAdministratorsIdRoute;
+    AuthenticatedAssetsAssetsIdRoute: typeof AuthenticatedAssetsAssetsIdRoute;
+    AuthenticatedChannelsChannelsIdRoute: typeof AuthenticatedChannelsChannelsIdRoute;
+    AuthenticatedCollectionsCollectionsIdRoute: typeof AuthenticatedCollectionsCollectionsIdRoute;
+    AuthenticatedCountriesCountriesIdRoute: typeof AuthenticatedCountriesCountriesIdRoute;
+    AuthenticatedCustomerGroupsCustomerGroupsIdRoute: typeof AuthenticatedCustomerGroupsCustomerGroupsIdRoute;
+    AuthenticatedCustomersCustomersIdRoute: typeof AuthenticatedCustomersCustomersIdRoute;
+    AuthenticatedFacetsFacetsIdRoute: typeof AuthenticatedFacetsFacetsIdRoute;
+    AuthenticatedOrdersOrdersIdRoute: typeof AuthenticatedOrdersOrdersIdRoute;
+    AuthenticatedPaymentMethodsPaymentMethodsIdRoute: typeof AuthenticatedPaymentMethodsPaymentMethodsIdRoute;
+    AuthenticatedProductVariantsProductVariantsIdRoute: typeof AuthenticatedProductVariantsProductVariantsIdRoute;
+    AuthenticatedProductsProductsIdRoute: typeof AuthenticatedProductsProductsIdRoute;
+    AuthenticatedPromotionsPromotionsIdRoute: typeof AuthenticatedPromotionsPromotionsIdRoute;
+    AuthenticatedRolesRolesIdRoute: typeof AuthenticatedRolesRolesIdRoute;
+    AuthenticatedSellersSellersIdRoute: typeof AuthenticatedSellersSellersIdRoute;
+    AuthenticatedShippingMethodsShippingMethodsIdRoute: typeof AuthenticatedShippingMethodsShippingMethodsIdRoute;
+    AuthenticatedStockLocationsStockLocationsIdRoute: typeof AuthenticatedStockLocationsStockLocationsIdRoute;
+    AuthenticatedTaxCategoriesTaxCategoriesIdRoute: typeof AuthenticatedTaxCategoriesTaxCategoriesIdRoute;
+    AuthenticatedTaxRatesTaxRatesIdRoute: typeof AuthenticatedTaxRatesTaxRatesIdRoute;
+    AuthenticatedZonesZonesIdRoute: typeof AuthenticatedZonesZonesIdRoute;
+    AuthenticatedOrdersOrdersIdModifyRoute: typeof AuthenticatedOrdersOrdersIdModifyRoute;
+    AuthenticatedOrdersOrdersDraftIdRoute: typeof AuthenticatedOrdersOrdersDraftIdRoute;
+    AuthenticatedProductsProductsIdVariantsRoute: typeof AuthenticatedProductsProductsIdVariantsRoute;
+    AuthenticatedFacetsFacetsFacetIdValuesIdRoute: typeof AuthenticatedFacetsFacetsFacetIdValuesIdRoute;
+    AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRoute: typeof AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRoute;
+    AuthenticatedProductsProductsProductIdOptionGroupsIdRoute: typeof AuthenticatedProductsProductsProductIdOptionGroupsIdRoute;
+    AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRoute: typeof AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRoute;
+}
+
+const AuthenticatedRouteChildren: AuthenticatedRouteChildren = {
+    AuthenticatedIndexRoute: AuthenticatedIndexRoute,
+    AuthenticatedAdministratorsAdministratorsRoute: AuthenticatedAdministratorsAdministratorsRoute,
+    AuthenticatedAssetsAssetsRoute: AuthenticatedAssetsAssetsRoute,
+    AuthenticatedChannelsChannelsRoute: AuthenticatedChannelsChannelsRoute,
+    AuthenticatedCollectionsCollectionsRoute: AuthenticatedCollectionsCollectionsRoute,
+    AuthenticatedCountriesCountriesRoute: AuthenticatedCountriesCountriesRoute,
+    AuthenticatedCustomerGroupsCustomerGroupsRoute: AuthenticatedCustomerGroupsCustomerGroupsRoute,
+    AuthenticatedCustomersCustomersRoute: AuthenticatedCustomersCustomersRoute,
+    AuthenticatedFacetsFacetsRoute: AuthenticatedFacetsFacetsRoute,
+    AuthenticatedGlobalSettingsGlobalSettingsRoute: AuthenticatedGlobalSettingsGlobalSettingsRoute,
+    AuthenticatedOrdersOrdersRoute: AuthenticatedOrdersOrdersRoute,
+    AuthenticatedPaymentMethodsPaymentMethodsRoute: AuthenticatedPaymentMethodsPaymentMethodsRoute,
+    AuthenticatedProductVariantsProductVariantsRoute: AuthenticatedProductVariantsProductVariantsRoute,
+    AuthenticatedProductsProductsRoute: AuthenticatedProductsProductsRoute,
+    AuthenticatedProfileProfileRoute: AuthenticatedProfileProfileRoute,
+    AuthenticatedPromotionsPromotionsRoute: AuthenticatedPromotionsPromotionsRoute,
+    AuthenticatedRolesRolesRoute: AuthenticatedRolesRolesRoute,
+    AuthenticatedSellersSellersRoute: AuthenticatedSellersSellersRoute,
+    AuthenticatedShippingMethodsShippingMethodsRoute: AuthenticatedShippingMethodsShippingMethodsRoute,
+    AuthenticatedStockLocationsStockLocationsRoute: AuthenticatedStockLocationsStockLocationsRoute,
+    AuthenticatedSystemHealthchecksRoute: AuthenticatedSystemHealthchecksRoute,
+    AuthenticatedSystemJobQueueRoute: AuthenticatedSystemJobQueueRoute,
+    AuthenticatedSystemScheduledTasksRoute: AuthenticatedSystemScheduledTasksRoute,
+    AuthenticatedTaxCategoriesTaxCategoriesRoute: AuthenticatedTaxCategoriesTaxCategoriesRoute,
+    AuthenticatedTaxRatesTaxRatesRoute: AuthenticatedTaxRatesTaxRatesRoute,
+    AuthenticatedZonesZonesRoute: AuthenticatedZonesZonesRoute,
+    AuthenticatedAdministratorsAdministratorsIdRoute: AuthenticatedAdministratorsAdministratorsIdRoute,
+    AuthenticatedAssetsAssetsIdRoute: AuthenticatedAssetsAssetsIdRoute,
+    AuthenticatedChannelsChannelsIdRoute: AuthenticatedChannelsChannelsIdRoute,
+    AuthenticatedCollectionsCollectionsIdRoute: AuthenticatedCollectionsCollectionsIdRoute,
+    AuthenticatedCountriesCountriesIdRoute: AuthenticatedCountriesCountriesIdRoute,
+    AuthenticatedCustomerGroupsCustomerGroupsIdRoute: AuthenticatedCustomerGroupsCustomerGroupsIdRoute,
+    AuthenticatedCustomersCustomersIdRoute: AuthenticatedCustomersCustomersIdRoute,
+    AuthenticatedFacetsFacetsIdRoute: AuthenticatedFacetsFacetsIdRoute,
+    AuthenticatedOrdersOrdersIdRoute: AuthenticatedOrdersOrdersIdRoute,
+    AuthenticatedPaymentMethodsPaymentMethodsIdRoute: AuthenticatedPaymentMethodsPaymentMethodsIdRoute,
+    AuthenticatedProductVariantsProductVariantsIdRoute: AuthenticatedProductVariantsProductVariantsIdRoute,
+    AuthenticatedProductsProductsIdRoute: AuthenticatedProductsProductsIdRoute,
+    AuthenticatedPromotionsPromotionsIdRoute: AuthenticatedPromotionsPromotionsIdRoute,
+    AuthenticatedRolesRolesIdRoute: AuthenticatedRolesRolesIdRoute,
+    AuthenticatedSellersSellersIdRoute: AuthenticatedSellersSellersIdRoute,
+    AuthenticatedShippingMethodsShippingMethodsIdRoute: AuthenticatedShippingMethodsShippingMethodsIdRoute,
+    AuthenticatedStockLocationsStockLocationsIdRoute: AuthenticatedStockLocationsStockLocationsIdRoute,
+    AuthenticatedTaxCategoriesTaxCategoriesIdRoute: AuthenticatedTaxCategoriesTaxCategoriesIdRoute,
+    AuthenticatedTaxRatesTaxRatesIdRoute: AuthenticatedTaxRatesTaxRatesIdRoute,
+    AuthenticatedZonesZonesIdRoute: AuthenticatedZonesZonesIdRoute,
+    AuthenticatedOrdersOrdersIdModifyRoute: AuthenticatedOrdersOrdersIdModifyRoute,
+    AuthenticatedOrdersOrdersDraftIdRoute: AuthenticatedOrdersOrdersDraftIdRoute,
+    AuthenticatedProductsProductsIdVariantsRoute: AuthenticatedProductsProductsIdVariantsRoute,
+    AuthenticatedFacetsFacetsFacetIdValuesIdRoute: AuthenticatedFacetsFacetsFacetIdValuesIdRoute,
+    AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRoute:
+        AuthenticatedOrdersOrdersAggregateOrderIdSellerOrdersSellerOrderIdRoute,
+    AuthenticatedProductsProductsProductIdOptionGroupsIdRoute:
+        AuthenticatedProductsProductsProductIdOptionGroupsIdRoute,
+    AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRoute:
+        AuthenticatedProductsProductsProductIdOptionGroupsProductOptionGroupIdOptionsIdRoute,
+};
+
+const AuthenticatedRouteWithChildren = AuthenticatedRoute._addFileChildren(AuthenticatedRouteChildren);
+
+const rootRouteChildren: RootRouteChildren = {
+    AuthenticatedRoute: AuthenticatedRouteWithChildren,
+    LoginRoute: LoginRoute,
+};
+export const routeTree = rootRouteImport._addFileChildren(rootRouteChildren)._addFileTypes<FileRouteTypes>();

+ 0 - 1
packages/dashboard/src/app/routes/_authenticated/_customers/components/customer-history/index.ts

@@ -2,4 +2,3 @@ export * from './customer-history-container.js';
 export * from './customer-history-utils.js';
 export * from './customer-history.js';
 export * from './default-customer-history-components.js';
-export * from './default-customer-history-registry.js';

+ 0 - 129
packages/dashboard/src/app/routes/_authenticated/_facets/components/edit-facet-value.tsx

@@ -1,129 +0,0 @@
-import { usePaginatedList } from '@/vdb/components/shared/paginated-list-data-table.js';
-import { Button } from '@/vdb/components/ui/button.js';
-import { Form, FormControl, FormItem, FormLabel, FormMessage } from '@/vdb/components/ui/form.js';
-import { Input } from '@/vdb/components/ui/input.js';
-import { api } from '@/vdb/graphql/api.js';
-import { graphql } from '@/vdb/graphql/graphql.js';
-import { useUserSettings } from '@/vdb/hooks/use-user-settings.js';
-import { Trans } from '@lingui/react/macro';
-import { useMutation, useQuery } from '@tanstack/react-query';
-import { useForm } from 'react-hook-form';
-
-const facetValuesDocument = graphql(`
-    query FacetValue($options: FacetValueListOptions) {
-        facetValues(options: $options) {
-            items {
-                id
-                name
-                code
-                customFields
-                translations {
-                    id
-                    languageCode
-                    name
-                }
-            }
-        }
-    }
-`);
-
-const updateFacetValueDocument = graphql(`
-    mutation UpdateFacetValue($input: [UpdateFacetValueInput!]!) {
-        updateFacetValues(input: $input) {
-            id
-        }
-    }
-`);
-
-export interface EditFacetValueProps {
-    facetValueId: string;
-    onSuccess?: () => void;
-}
-
-export function EditFacetValue({ facetValueId, onSuccess }: Readonly<EditFacetValueProps>) {
-    const {
-        settings: { contentLanguage },
-    } = useUserSettings();
-    const { refetchPaginatedList } = usePaginatedList();
-    const { data: facetValues } = useQuery({
-        queryKey: ['facetValues', facetValueId],
-        queryFn: () => api.query(facetValuesDocument, { options: { filter: { id: { eq: facetValueId } } } }),
-    });
-    const { mutate: updateFacetValue } = useMutation({
-        mutationFn: api.mutate(updateFacetValueDocument),
-        onSuccess: () => {
-            refetchPaginatedList();
-            onSuccess?.();
-        },
-    });
-    const facetValue = facetValues?.facetValues.items[0];
-
-    const form = useForm({
-        values: {
-            name: facetValue?.name ?? '',
-            code: facetValue?.code ?? '',
-        },
-    });
-
-    if (!facetValue) {
-        return <div>Facet value not found</div>;
-    }
-
-    const handleSave = (values: { name: string; code: string }) => {
-        const translations = facetValue.translations.map(translation => {
-            if (translation.languageCode === contentLanguage) {
-                return {
-                    id: translation.id,
-                    languageCode: translation.languageCode,
-                    name: values.name,
-                };
-            }
-            return translation;
-        });
-        updateFacetValue({
-            input: [
-                {
-                    id: facetValue.id,
-                    translations,
-                    code: values.code,
-                },
-            ],
-        });
-    };
-
-    return (
-        <div className="grid gap-4">
-            <div className="space-y-2">
-                <h4 className="font-medium leading-none">Edit Facet Value</h4>
-                <p className="text-sm text-muted-foreground">Update the name and code of this facet value.</p>
-            </div>
-            <Form {...form}>
-                <form onSubmit={form.handleSubmit(handleSave)} className="grid gap-2">
-                    <FormItem>
-                        <FormLabel>
-                            <Trans>Name</Trans>
-                        </FormLabel>
-                        <FormControl>
-                            <Input placeholder="" {...form.register('name')} />
-                        </FormControl>
-                        <FormMessage />
-                    </FormItem>
-                    <FormItem>
-                        <FormLabel>
-                            <Trans>Code</Trans>
-                        </FormLabel>
-                        <FormControl>
-                            <Input placeholder="" {...form.register('code')} />
-                        </FormControl>
-                        <FormMessage />
-                    </FormItem>
-                    <div className="flex justify-end">
-                        <Button type="submit" size="sm">
-                            <Trans>Save changes</Trans>
-                        </Button>
-                    </div>
-                </form>
-            </Form>
-        </div>
-    );
-}

+ 3 - 0
packages/dashboard/src/app/routes/_authenticated/_orders/components/edit-order-table.tsx

@@ -270,6 +270,9 @@ export function EditOrderTable({
                                         }}
                                         value={''}
                                         selectorLabel={<Trans>Add coupon code</Trans>}
+                                        onBlur={() => {}}
+                                        name={'couponCode'}
+                                        ref={() => {}}
                                         onChange={code => onApplyCouponCode({ couponCode: code })}
                                     />
                                 </div>

+ 3 - 3
packages/dashboard/src/app/routes/_authenticated/_orders/components/order-address.tsx

@@ -3,8 +3,8 @@ import { ResultOf } from 'gql.tada';
 import { Globe, Phone } from 'lucide-react';
 import { orderAddressFragment } from '../orders.graphql.js';
 
-type OrderAddress = Omit<ResultOf<typeof orderAddressFragment>, 'country'> & {
-    country: string | { code: string; name: string } | null;
+type OrderAddress = Partial<Omit<ResultOf<typeof orderAddressFragment>, 'country'>> & {
+    country?: string | { code: string; name: string } | null;
 };
 
 export function OrderAddress({ address }: Readonly<{ address?: OrderAddress }>) {
@@ -19,7 +19,7 @@ export function OrderAddress({ address }: Readonly<{ address?: OrderAddress }>)
         country,
         countryCode,
         phoneNumber,
-    } = address;
+    } = address ?? {};
 
     const countryName = typeof country === 'string' ? country : country?.name;
     const countryCodeString = country && typeof country !== 'string' ? country?.code : countryCode;

+ 3 - 3
packages/dashboard/src/app/routes/_authenticated/_product-variants/components/add-currency-dropdown.tsx

@@ -1,14 +1,14 @@
 import { useLingui } from '@lingui/react/macro';
 import { PlusIcon } from 'lucide-react';
 
-import { Button } from '@/vdb/components/ui/button';
+import { Button } from '@/vdb/components/ui/button.js';
 import {
     DropdownMenu,
     DropdownMenuContent,
     DropdownMenuItem,
     DropdownMenuTrigger,
-} from '@/vdb/components/ui/dropdown-menu';
-import { useLocalFormat } from '@/vdb/hooks/use-local-format';
+} from '@/vdb/components/ui/dropdown-menu.js';
+import { useLocalFormat } from '@/vdb/hooks/use-local-format.js';
 
 interface AddCurrencyDropdownProps {
     unusedCurrencies: string[];

+ 2 - 2
packages/dashboard/src/app/routes/_authenticated/_product-variants/components/add-stock-location-dropdown.tsx

@@ -1,13 +1,13 @@
 import { useLingui } from '@lingui/react/macro';
 import { PlusIcon } from 'lucide-react';
 
-import { Button } from '@/vdb/components/ui/button';
+import { Button } from '@/vdb/components/ui/button.js';
 import {
     DropdownMenu,
     DropdownMenuContent,
     DropdownMenuItem,
     DropdownMenuTrigger,
-} from '@/vdb/components/ui/dropdown-menu';
+} from '@/vdb/components/ui/dropdown-menu.js';
 import { ResultOf } from 'gql.tada';
 
 import { stockLocationsQueryDocument } from '../product-variants.graphql.js';

+ 1 - 0
packages/dashboard/src/app/routes/_authenticated/_products/products.graphql.ts

@@ -60,6 +60,7 @@ export const productDetailFragment = graphql(
                     code
                 }
             }
+            customFields
         }
     `,
     [assetFragment],

+ 1 - 1
packages/dashboard/src/lib/components/data-input/datetime-input.tsx

@@ -185,7 +185,7 @@ function bcpTagToDatePickerLocale(
         case 'pt-BR':
             return module.ptBR;
         default: {
-            const lang = tag.split('-').at(0);
+            const lang = tag.split('-')[0];
             return lang ? module[lang as keyof typeof module] : undefined;
         }
     }

+ 1 - 1
packages/dashboard/src/lib/components/data-input/relation-selector.tsx

@@ -28,7 +28,7 @@ export interface RelationSelectorConfig<T = any> {
     /** Number of items to load per page */
     pageSize?: number;
     /** Placeholder text for the search input */
-    placeholder?: React.ReactNode;
+    placeholder?: string;
     /** Whether to enable multi-select mode */
     multiple?: boolean;
     /** Custom filter function for search */

+ 175 - 174
packages/dashboard/src/lib/components/data-input/struct-form-input.tsx

@@ -20,7 +20,7 @@ import {
     StructCustomFieldConfig,
     StructField,
 } from '@/vdb/framework/form-engine/form-engine-types.js';
-import { isStructFieldConfig } from '@/vdb/framework/form-engine/utils.js';
+import { isReadonlyField, isStructFieldConfig } from '@/vdb/framework/form-engine/utils.js';
 import { useUserSettings } from '@/vdb/hooks/use-user-settings.js';
 import { CustomFieldListInput } from './custom-field-list-input.js';
 import { DateTimeInput } from './datetime-input.js';
@@ -98,185 +98,61 @@ export function StructFormInput({ fieldDef, ...field }: Readonly<DashboardFormCo
         return input?.find(t => t.languageCode === displayLanguage)?.value;
     };
 
-    const isReadonly = fieldDef?.readonly === true;
-
-    // Helper function to render individual struct field inputs
-    const renderStructFieldInput = (
-        structField: StructField,
-        inputField: ControllerRenderProps<any, any>,
-    ) => {
-        const isList = structField.list ?? false;
-
-        // Helper function to render single input for a struct field
-        const renderSingleStructInput = (singleField: ControllerRenderProps<any, any>) => {
-            switch (structField.type) {
-                case 'string': {
-                    // Check if the field has options (dropdown)
-                    const stringField = structField as any; // GraphQL union types need casting
-                    if (stringField.options && stringField.options.length > 0) {
-                        return (
-                            <SelectWithOptions {...singleField} fieldDef={stringField} isListField={false} />
-                        );
-                    }
-                    return (
-                        <Input
-                            value={singleField.value ?? ''}
-                            onChange={e => singleField.onChange(e.target.value)}
-                            onBlur={singleField.onBlur}
-                            name={singleField.name}
-                            disabled={isReadonly}
-                        />
-                    );
-                }
-                case 'int':
-                case 'float': {
-                    const isFloat = structField.type === 'float';
-                    const numericField = structField as any; // GraphQL union types need casting
-                    const min = isFloat ? numericField.floatMin : numericField.intMin;
-                    const max = isFloat ? numericField.floatMax : numericField.intMax;
-                    const step = isFloat ? numericField.floatStep : numericField.intStep;
-
-                    return (
-                        <Input
-                            type="number"
-                            value={singleField.value ?? ''}
-                            onChange={e => {
-                                const value = e.target.valueAsNumber;
-                                singleField.onChange(isNaN(value) ? undefined : value);
-                            }}
-                            onBlur={singleField.onBlur}
-                            name={singleField.name}
-                            disabled={isReadonly}
-                            min={min}
-                            max={max}
-                            step={step}
-                        />
-                    );
-                }
-                case 'boolean':
-                    return (
-                        <Switch
-                            checked={singleField.value}
-                            onCheckedChange={singleField.onChange}
-                            disabled={isReadonly}
-                        />
-                    );
-                case 'datetime':
-                    return <DateTimeInput {...singleField} />;
-                default:
-                    return (
-                        <Input
-                            value={singleField.value ?? ''}
-                            onChange={e => singleField.onChange(e.target.value)}
-                            onBlur={singleField.onBlur}
-                            name={singleField.name}
-                            disabled={isReadonly}
-                        />
-                    );
-            }
-        };
-
-        // Handle string fields with options (dropdown) - already handles list case with multi-select
-        if (structField.type === 'string') {
-            const stringField = structField as any; // GraphQL union types need casting
-            if (stringField.options && stringField.options.length > 0) {
-                return (
-                    <SelectWithOptions
-                        {...inputField}
-                        fieldDef={stringField}
-                        disabled={isReadonly}
-                        isListField={isList}
-                    />
-                );
-            }
-        }
-
-        // For list struct fields, wrap with list input
-        if (isList) {
-            const getDefaultValue = () => {
-                switch (structField.type) {
-                    case 'string':
-                        return '';
-                    case 'int':
-                    case 'float':
-                        return 0;
-                    case 'boolean':
-                        return false;
-                    case 'datetime':
-                        return '';
-                    default:
-                        return '';
-                }
-            };
-
-            // Determine if the field type needs full width
-            const needsFullWidth = structField.type === 'text' || structField.type === 'localeText';
-
-            return (
-                <CustomFieldListInput
-                    {...inputField}
-                    disabled={isReadonly}
-                    renderInput={(index, listItemField) => renderSingleStructInput(listItemField)}
-                    defaultValue={getDefaultValue()}
-                />
-            );
-        }
-
-        // For non-list fields, render directly
-        return renderSingleStructInput(inputField);
-    };
+    const isReadonly = isReadonlyField(fieldDef);
 
     // Edit mode - memoized to prevent focus loss from re-renders
     const EditMode = useMemo(
-        () => (
-            <div className="space-y-4 border rounded-md p-4">
-                {!isReadonly && (
-                    <div className="flex justify-end">
-                        <Button
-                            variant="ghost"
-                            size="sm"
-                            onClick={() => setIsEditing(false)}
-                            className="h-8 w-8 p-0 text-muted-foreground hover:text-foreground"
-                        >
-                            <CheckIcon className="h-4 w-4" />
-                            <span className="sr-only">Done</span>
-                        </Button>
-                    </div>
-                )}
-                {fieldDef?.fields?.map(structField => (
-                    <FormField
-                        key={structField.name}
-                        control={control}
-                        name={`${field.name}.${structField.name}`}
-                        render={({ field: structInputField }) => (
-                            <FormItem>
-                                <div className="flex items-baseline gap-4">
-                                    <div className="flex-1">
-                                        <FormLabel>
-                                            {getTranslation(structField.label) ?? structField.name}
-                                        </FormLabel>
-                                        {getTranslation(structField.description) && (
-                                            <FormDescription>
-                                                {getTranslation(structField.description)}
-                                            </FormDescription>
-                                        )}
+        () =>
+            fieldDef && isStructFieldConfig(fieldDef) ? (
+                <div className="space-y-4 border rounded-md p-4">
+                    {!isReadonly && (
+                        <div className="flex justify-end">
+                            <Button
+                                variant="ghost"
+                                size="sm"
+                                onClick={() => setIsEditing(false)}
+                                className="h-8 w-8 p-0 text-muted-foreground hover:text-foreground"
+                            >
+                                <CheckIcon className="h-4 w-4" />
+                                <span className="sr-only">Done</span>
+                            </Button>
+                        </div>
+                    )}
+                    {fieldDef?.fields.map(structField => (
+                        <FormField
+                            key={structField.name}
+                            control={control}
+                            name={`${field.name}.${structField.name}`}
+                            render={({ field: structInputField }) => (
+                                <FormItem>
+                                    <div className="flex items-baseline gap-4">
+                                        <div className="flex-1">
+                                            <FormLabel>
+                                                {getTranslation(structField.label) ?? structField.name}
+                                            </FormLabel>
+                                            {getTranslation(structField.description) && (
+                                                <FormDescription>
+                                                    {getTranslation(structField.description)}
+                                                </FormDescription>
+                                            )}
+                                        </div>
+                                        <div className="flex-[2]">
+                                            <FormControl>
+                                                {renderStructFieldInput(structField, structInputField)}
+                                            </FormControl>
+                                            <FormMessage />
+                                        </div>
                                     </div>
-                                    <div className="flex-[2]">
-                                        <FormControl>
-                                            {renderStructFieldInput(structField, structInputField)}
-                                        </FormControl>
-                                        <FormMessage />
-                                    </div>
-                                </div>
-                            </FormItem>
-                        )}
-                    />
-                ))}
-            </div>
-        ),
-        [fieldDef, control, field.name, getTranslation, renderStructFieldInput, isReadonly],
+                                </FormItem>
+                            )}
+                        />
+                    ))}
+                </div>
+            ) : null,
+        [fieldDef, control, field.name, getTranslation, isReadonly],
     );
 
+    // Early return if not a struct field config
     if (!fieldDef || !isStructFieldConfig(fieldDef)) {
         return null;
     }
@@ -317,3 +193,128 @@ export function StructFormInput({ fieldDef, ...field }: Readonly<DashboardFormCo
         />
     );
 }
+
+// Helper function to render individual struct field inputs
+const renderStructFieldInput = (
+    structField: StructField,
+    inputField: ControllerRenderProps<any, any>,
+    isReadonly: boolean = false,
+) => {
+    const isList = structField.list ?? false;
+
+    // Helper function to render single input for a struct field
+    const renderSingleStructInput = (singleField: ControllerRenderProps<any, any>) => {
+        switch (structField.type) {
+            case 'string': {
+                // Check if the field has options (dropdown)
+                const stringField = structField as any; // GraphQL union types need casting
+                if (stringField.options && stringField.options.length > 0) {
+                    return <SelectWithOptions {...singleField} fieldDef={stringField} isListField={false} />;
+                }
+                return (
+                    <Input
+                        value={singleField.value ?? ''}
+                        onChange={e => singleField.onChange(e.target.value)}
+                        onBlur={singleField.onBlur}
+                        name={singleField.name}
+                        disabled={isReadonly}
+                    />
+                );
+            }
+            case 'int':
+            case 'float': {
+                const isFloat = structField.type === 'float';
+                const numericField = structField as any; // GraphQL union types need casting
+                const min = isFloat ? numericField.floatMin : numericField.intMin;
+                const max = isFloat ? numericField.floatMax : numericField.intMax;
+                const step = isFloat ? numericField.floatStep : numericField.intStep;
+
+                return (
+                    <Input
+                        type="number"
+                        value={singleField.value ?? ''}
+                        onChange={e => {
+                            const value = e.target.valueAsNumber;
+                            singleField.onChange(isNaN(value) ? undefined : value);
+                        }}
+                        onBlur={singleField.onBlur}
+                        name={singleField.name}
+                        disabled={isReadonly}
+                        min={min}
+                        max={max}
+                        step={step}
+                    />
+                );
+            }
+            case 'boolean':
+                return (
+                    <Switch
+                        checked={singleField.value}
+                        onCheckedChange={singleField.onChange}
+                        disabled={isReadonly}
+                    />
+                );
+            case 'datetime':
+                return <DateTimeInput {...singleField} />;
+            default:
+                return (
+                    <Input
+                        value={singleField.value ?? ''}
+                        onChange={e => singleField.onChange(e.target.value)}
+                        onBlur={singleField.onBlur}
+                        name={singleField.name}
+                        disabled={isReadonly}
+                    />
+                );
+        }
+    };
+
+    // Handle string fields with options (dropdown) - already handles list case with multi-select
+    if (structField.type === 'string') {
+        const stringField = structField as any; // GraphQL union types need casting
+        if (stringField.options && stringField.options.length > 0) {
+            return (
+                <SelectWithOptions
+                    {...inputField}
+                    fieldDef={stringField}
+                    disabled={isReadonly}
+                    isListField={isList}
+                />
+            );
+        }
+    }
+
+    // For list struct fields, wrap with list input
+    if (isList) {
+        const getDefaultValue = () => {
+            switch (structField.type) {
+                case 'string':
+                    return '';
+                case 'int':
+                case 'float':
+                    return 0;
+                case 'boolean':
+                    return false;
+                case 'datetime':
+                    return '';
+                default:
+                    return '';
+            }
+        };
+
+        // Determine if the field type needs full width
+        const needsFullWidth = structField.type === 'text' || structField.type === 'localeText';
+
+        return (
+            <CustomFieldListInput
+                {...inputField}
+                disabled={isReadonly}
+                renderInput={(index, listItemField) => renderSingleStructInput(listItemField)}
+                defaultValue={getDefaultValue()}
+            />
+        );
+    }
+
+    // For non-list fields, render directly
+    return renderSingleStructInput(inputField);
+};

+ 13 - 8
packages/dashboard/src/lib/components/shared/custom-fields-form.tsx

@@ -10,6 +10,7 @@ import {
 } from '@/vdb/components/ui/form.js';
 import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/vdb/components/ui/tabs.js';
 import { CustomFormComponent } from '@/vdb/framework/form-engine/custom-form-component.js';
+import { ConfigurableFieldDef } from '@/vdb/framework/form-engine/form-engine-types.js';
 import { useCustomFieldConfig } from '@/vdb/hooks/use-custom-field-config.js';
 import { useUserSettings } from '@/vdb/hooks/use-user-settings.js';
 import { customFieldConfigFragment } from '@/vdb/providers/server-config.js';
@@ -20,7 +21,7 @@ import { Control } from 'react-hook-form';
 import { FormControlAdapter } from '../../framework/form-engine/form-control-adapter.js';
 import { TranslatableFormField } from './translatable-form-field.js';
 
-type CustomFieldConfig = ResultOf<typeof customFieldConfigFragment>;
+type CustomFieldConfig = Omit<ResultOf<typeof customFieldConfigFragment>, '__typename'>;
 
 interface CustomFieldsFormProps {
     entityType: string;
@@ -120,8 +121,8 @@ export function CustomFieldsForm({ entityType, control, formPathPrefix }: Readon
 }
 
 interface CustomFieldItemProps {
-    fieldDef: CustomFieldConfig;
-    control: Control<any, any>;
+    fieldDef: ConfigurableFieldDef;
+    control: Control<any>;
     fieldName: string;
 }
 
@@ -130,14 +131,19 @@ function CustomFieldItem({ fieldDef, control, fieldName }: Readonly<CustomFieldI
         settings: { displayLanguage },
     } = useUserSettings();
 
-    const getTranslation = (input: Array<{ languageCode: string; value: string }> | null | undefined) => {
+    const getTranslation = (
+        input: string | Array<{ languageCode: string; value: string }> | null | undefined,
+    ) => {
+        if (typeof input === 'string') {
+            return input;
+        }
         return input?.find(t => t.languageCode === displayLanguage)?.value;
     };
     const hasCustomFormComponent = fieldDef.ui?.component;
     const isLocaleField = fieldDef.type === 'localeString' || fieldDef.type === 'localeText';
     const shouldBeFullWidth = fieldDef.ui?.fullWidth === true;
     const containerClassName = shouldBeFullWidth ? 'col-span-2' : '';
-    const isReadonly = fieldDef.readonly ?? false;
+    const isReadonly = (fieldDef as CustomFieldConfig).readonly ?? false;
 
     // For locale fields, always use TranslatableFormField regardless of custom components
     if (isLocaleField) {
@@ -212,7 +218,6 @@ function CustomFieldItem({ fieldDef, control, fieldName }: Readonly<CustomFieldI
                                             <StructFormInput {...inputField} fieldDef={fieldDef} />
                                         )}
                                         defaultValue={{}} // Empty struct object as default
-                                        isFullWidth={true} // Structs should always be full-width
                                     />
                                 </FormControl>
                                 <FormDescription>{getTranslation(fieldDef.description)}</FormDescription>
@@ -266,9 +271,9 @@ function CustomFieldItem({ fieldDef, control, fieldName }: Readonly<CustomFieldI
 }
 
 interface CustomFieldFormItemProps {
-    fieldDef: CustomFieldConfig;
+    fieldDef: ConfigurableFieldDef;
     getTranslation: (
-        input: Array<{ languageCode: string; value: string }> | null | undefined,
+        input: string | Array<{ languageCode: string; value: string }> | null | undefined,
     ) => string | undefined;
     fieldName: string;
     children: React.ReactNode;

+ 2 - 2
packages/dashboard/src/lib/components/ui/carousel.tsx

@@ -6,8 +6,8 @@ import useEmblaCarousel, {
 } from "embla-carousel-react"
 import { ArrowLeft, ArrowRight } from "lucide-react"
 
-import { cn } from "@/vdb/lib/utils"
-import { Button } from "@/vdb/components/ui/button"
+import { cn } from "@/vdb/lib/utils.js"
+import { Button } from "@/vdb/components/ui/button.js"
 
 type CarouselApi = UseEmblaCarouselType[1]
 type UseCarouselParameters = Parameters<typeof useEmblaCarousel>

+ 1 - 1
packages/dashboard/src/lib/components/ui/chart.tsx

@@ -1,7 +1,7 @@
 import * as React from "react"
 import * as RechartsPrimitive from "recharts"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 // Format: { THEME_NAME: CSS_SELECTOR }
 const THEMES = { light: "", dark: ".dark" } as const

+ 1 - 1
packages/dashboard/src/lib/components/ui/context-menu.tsx

@@ -4,7 +4,7 @@ import * as React from "react"
 import * as ContextMenuPrimitive from "@radix-ui/react-context-menu"
 import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function ContextMenu({
   ...props

+ 1 - 1
packages/dashboard/src/lib/components/ui/drawer.tsx

@@ -1,7 +1,7 @@
 import * as React from "react"
 import { Drawer as DrawerPrimitive } from "vaul"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function Drawer({
   ...props

+ 1 - 1
packages/dashboard/src/lib/components/ui/grid-layout.tsx

@@ -1,6 +1,6 @@
 import * as React from "react";
 import { useState, useRef, useCallback, useEffect } from "react";
-import { cn } from "@/vdb/lib/utils";
+import { cn } from "@/vdb/lib/utils.js";
 
 export interface GridLayout {
     x: number;

+ 1 - 0
packages/dashboard/src/lib/components/ui/input-group.tsx

@@ -127,6 +127,7 @@ function InputGroupInput({ className, ...props }: React.ComponentProps<'input'>)
                 'flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent',
                 className,
             )}
+            value={props.value}
             {...props}
         />
     );

+ 1 - 1
packages/dashboard/src/lib/components/ui/input-otp.tsx

@@ -4,7 +4,7 @@ import * as React from "react"
 import { OTPInput, OTPInputContext } from "input-otp"
 import { MinusIcon } from "lucide-react"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function InputOTP({
   className,

+ 1 - 1
packages/dashboard/src/lib/components/ui/menubar.tsx

@@ -2,7 +2,7 @@ import * as React from "react"
 import * as MenubarPrimitive from "@radix-ui/react-menubar"
 import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function Menubar({
   className,

+ 1 - 1
packages/dashboard/src/lib/components/ui/navigation-menu.tsx

@@ -3,7 +3,7 @@ import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
 import { cva } from "class-variance-authority"
 import { ChevronDownIcon } from "lucide-react"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function NavigationMenu({
   className,

+ 1 - 1
packages/dashboard/src/lib/components/ui/progress.tsx

@@ -1,7 +1,7 @@
 import * as React from "react"
 import * as ProgressPrimitive from "@radix-ui/react-progress"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function Progress({
   className,

+ 1 - 1
packages/dashboard/src/lib/components/ui/radio-group.tsx

@@ -4,7 +4,7 @@ import * as React from "react"
 import * as RadioGroupPrimitive from "@radix-ui/react-radio-group"
 import { CircleIcon } from "lucide-react"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function RadioGroup({
   className,

+ 1 - 1
packages/dashboard/src/lib/components/ui/resizable.tsx

@@ -2,7 +2,7 @@ import * as React from "react"
 import { GripVerticalIcon } from "lucide-react"
 import * as ResizablePrimitive from "react-resizable-panels"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function ResizablePanelGroup({
   className,

+ 1 - 1
packages/dashboard/src/lib/components/ui/select.tsx

@@ -2,7 +2,7 @@ import * as React from "react"
 import * as SelectPrimitive from "@radix-ui/react-select"
 import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function Select({
   ...props

+ 1 - 1
packages/dashboard/src/lib/components/ui/slider.tsx

@@ -3,7 +3,7 @@
 import * as React from "react"
 import * as SliderPrimitive from "@radix-ui/react-slider"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 function Slider({
   className,

+ 2 - 2
packages/dashboard/src/lib/components/ui/toggle-group.tsx

@@ -4,8 +4,8 @@ import * as React from "react"
 import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group"
 import { type VariantProps } from "class-variance-authority"
 
-import { cn } from "@/vdb/lib/utils"
-import { toggleVariants } from "@/vdb/components/ui/toggle"
+import { cn } from "@/vdb/lib/utils.js"
+import { toggleVariants } from "@/vdb/components/ui/toggle.js"
 
 const ToggleGroupContext = React.createContext<
   VariantProps<typeof toggleVariants>

+ 1 - 1
packages/dashboard/src/lib/components/ui/toggle.tsx

@@ -2,7 +2,7 @@ import * as React from "react"
 import * as TogglePrimitive from "@radix-ui/react-toggle"
 import { cva, type VariantProps } from "class-variance-authority"
 
-import { cn } from "@/vdb/lib/utils"
+import { cn } from "@/vdb/lib/utils.js"
 
 const toggleVariants = cva(
   "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",

+ 2 - 6
packages/dashboard/src/lib/framework/component-registry/component-registry.tsx

@@ -1,13 +1,9 @@
 import { DashboardFormComponent } from '@/vdb/framework/form-engine/form-engine-types.js';
-import * as React from 'react';
+import React from 'react';
 import { getDisplayComponent } from '../extension-api/display-component-extensions.js';
 import { getInputComponent } from '../extension-api/input-component-extensions.js';
 
-export type DataDisplayComponentProps<T extends Record<string, any> = Record<string, any>> = {
-    value: any;
-} & T;
-
-export type DataDisplayComponent = React.ComponentType<DataDisplayComponentProps>;
+export type DataDisplayComponent<T extends Record<string, any> = Record<string, any>> = React.ComponentType<T & { value: any}>;
 
 // Component registry hook that uses the global registry
 export function useComponentRegistry() {

+ 4 - 3
packages/dashboard/src/lib/framework/extension-api/display-component-extensions.tsx

@@ -5,6 +5,7 @@ import { Money } from '@/vdb/components/data-display/money.js';
 import { VendureImage } from '@/vdb/components/shared/vendure-image.js';
 import { DataDisplayComponent } from '../component-registry/component-registry.js';
 import { globalRegistry } from '../registry/global-registry.js';
+import { DataTableDisplayComponent } from './types/data-table.js';
 
 globalRegistry.register('displayComponents', new Map<string, DataDisplayComponent>());
 
@@ -21,7 +22,7 @@ displayComponents.set('vendure:money', Money);
 displayComponents.set('vendure:json', Json);
 
 export function getDisplayComponent(id: string): DataDisplayComponent | undefined {
-    return globalRegistry.get('displayComponents').get(id);
+    return globalRegistry.get('displayComponents').get(id) as DataDisplayComponent | undefined;
 }
 
 /**
@@ -42,10 +43,10 @@ export function addDisplayComponent({
     pageId: string;
     blockId: string;
     field: string;
-    component: React.ComponentType<{ value: any; [key: string]: any }>;
+    component: DataDisplayComponent | DataTableDisplayComponent;
 }) {
     const displayComponents = globalRegistry.get('displayComponents');
-
+    
     // Generate the key using the helper function
     const key = generateDisplayComponentKey(pageId, blockId, field);
 

+ 0 - 13
packages/dashboard/src/lib/framework/extension-api/logic/detail-forms.ts

@@ -1,7 +1,6 @@
 import { addDetailQueryDocument } from '@/vdb/framework/form-engine/custom-form-component-extensions.js';
 import { parse } from 'graphql';
 
-import { addDisplayComponent } from '../display-component-extensions.js';
 import { addInputComponent } from '../input-component-extensions.js';
 import { DashboardDetailFormExtensionDefinition } from '../types/detail-forms.js';
 
@@ -31,18 +30,6 @@ export function registerDetailFormExtensions(detailForms?: DashboardDetailFormEx
                     });
                 }
             }
-
-            // Register display components for this detail form
-            if (detailForm.displays) {
-                for (const displayComponent of detailForm.displays) {
-                    addDisplayComponent({
-                        pageId: detailForm.pageId,
-                        blockId: displayComponent.blockId,
-                        field: displayComponent.field,
-                        component: displayComponent.component,
-                    });
-                }
-            }
         }
     }
 }

+ 4 - 2
packages/dashboard/src/lib/framework/extension-api/types/data-table.ts

@@ -1,9 +1,11 @@
-import { DataDisplayComponentProps } from '@/vdb/framework/component-registry/component-registry.js';
+import { DataDisplayComponent } from '@/vdb/framework/component-registry/component-registry.js';
 import { Table } from '@tanstack/react-table';
 import { CellContext } from '@tanstack/table-core';
 import { DocumentNode } from 'graphql';
 import React from 'react';
 
+export type DataTableDisplayComponent = DataDisplayComponent<CellContext<any, any>>;
+
 /**
  * @description
  * Allows you to define custom display components for specific columns in data tables.
@@ -24,7 +26,7 @@ export interface DashboardDataTableDisplayComponent {
      * The React component that will be rendered as the display.
      * It should accept `value` and other standard display props.
      */
-    component: React.ComponentType<DataDisplayComponentProps<CellContext<any, any>>>;
+    component: DataTableDisplayComponent;
 }
 
 export type BulkActionContext<Item extends { id: string } & Record<string, any>> = {

+ 2 - 2
packages/dashboard/src/lib/framework/extension-api/types/navigation.ts

@@ -39,7 +39,7 @@ export interface DashboardRouteDefinition {
      * The value is a Tanstack Router
      * [loader function](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#route-loaders)
      */
-    loader?: RouteOptions['loader'];
+    loader?: RouteOptions<any>['loader'];
 
     /**
      * @description
@@ -47,7 +47,7 @@ export interface DashboardRouteDefinition {
      * The value is a Tanstack Router
      * [validateSearch function](https://tanstack.com/router/latest/docs/framework/react/guide/search-params#search-param-validation)
      */
-    validateSearch?: RouteOptions['validateSearch'];
+    validateSearch?: RouteOptions<any>['validateSearch'];
 
     /**
      * @description

+ 7 - 1
packages/dashboard/src/lib/framework/form-engine/use-generated-form.tsx

@@ -9,6 +9,10 @@ import { getOperationVariablesFields } from '../document-introspection/get-docum
 import { createFormSchemaFromFields, getDefaultValuesFromFields } from './form-schema-tools.js';
 import { removeEmptyIdFields, transformRelationFields } from './utils.js';
 
+export type WithLooseCustomFields<T> = T extends { customFields?: any }
+    ? Omit<T, 'customFields'> & { customFields?: T['customFields'] | unknown }
+    : T;
+
 /**
  * @description
  * Options for the useGeneratedForm hook.
@@ -40,7 +44,9 @@ export interface GeneratedFormOptions<
     customFieldConfig?: any[]; // Add custom field config for validation
     setValues: (
         entity: NonNullable<E>,
-    ) => VarName extends keyof VariablesOf<T> ? VariablesOf<T>[VarName] : VariablesOf<T>;
+    ) => WithLooseCustomFields<
+        VarName extends keyof VariablesOf<T> ? VariablesOf<T>[VarName] : VariablesOf<T>
+    >;
     onSubmit?: (
         values: VarName extends keyof VariablesOf<T> ? VariablesOf<T>[VarName] : VariablesOf<T>,
     ) => void;

+ 1 - 1
packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx

@@ -547,7 +547,7 @@ export type PageBlockProps = {
      * @description
      * Which column this block should appear in
      */
-    column: 'main' | 'side';
+    column: 'main' | 'side' | 'full';
     /**
      * @description
      * The ID of the block, e.g. "gift-cards" or "related-products".

+ 1 - 1
packages/dashboard/src/lib/framework/nav-menu/nav-menu-extensions.ts

@@ -13,7 +13,7 @@ export type NavMenuSectionPlacement = 'top' | 'bottom';
  * @docsPage Navigation
  * @since 3.4.0
  */
-interface NavMenuItem {
+export interface NavMenuItem {
     /**
      * @description
      * A unique ID for this nav menu item

+ 1 - 1
packages/dashboard/src/lib/framework/page/detail-page-route-loader.tsx

@@ -29,7 +29,7 @@ export function detailPageRouteLoader<T extends TypedDocumentNode<any, any>>({
     queryDocument,
     breadcrumb,
 }: DetailPageRouteLoaderConfig<T>) {
-    const loader: FileBaseRouteOptions<any, any>['loader'] = async ({
+    const loader: FileBaseRouteOptions<any, any, any>['loader'] = async ({
         context,
         params,
         location,

+ 1 - 1
packages/dashboard/src/lib/framework/page/page-api.ts

@@ -1,4 +1,4 @@
-import { DashboardRouteDefinition } from '../extension-api/extension-api-types.js';
+import { DashboardRouteDefinition } from '../extension-api/types/navigation.js';
 
 export const extensionRoutes = new Map<string, DashboardRouteDefinition>();
 

+ 4 - 2
packages/dashboard/src/lib/framework/page/use-detail-page.ts

@@ -22,7 +22,7 @@ import {
     getMutationName,
     getQueryName,
 } from '../document-introspection/get-document-structure.js';
-import { useGeneratedForm } from '../form-engine/use-generated-form.js';
+import { useGeneratedForm, WithLooseCustomFields } from '../form-engine/use-generated-form.js';
 
 import { DetailEntityPath } from './page-types.js';
 
@@ -95,7 +95,9 @@ export interface DetailPageOptions<
      * @description
      * The function to set the values for the update document.
      */
-    setValuesForUpdate: (entity: NonNullable<ResultOf<T>[EntityField]>) => VariablesOf<U>[VarNameUpdate];
+    setValuesForUpdate: (
+        entity: NonNullable<ResultOf<T>[EntityField]>,
+    ) => WithLooseCustomFields<VariablesOf<U>[VarNameUpdate]>;
     transformCreateInput?: (input: VariablesOf<C>[VarNameCreate]) => VariablesOf<C>[VarNameCreate];
     transformUpdateInput?: (input: VariablesOf<U>[VarNameUpdate]) => VariablesOf<U>[VarNameUpdate];
     /**

+ 20 - 16
packages/dashboard/src/lib/framework/page/use-extended-router.tsx

@@ -21,10 +21,7 @@ export const useExtendedRouter = (
 
         // Only extend if extensions are loaded
         if (!extensionsLoaded) {
-            return createRouter({
-                ...routerOptions,
-                routeTree,
-            });
+            return createExtendedRouter(routerOptions, routeTree);
         }
 
         const authenticatedRouteIndex = routeTree.children.findIndex(
@@ -33,10 +30,7 @@ export const useExtendedRouter = (
 
         if (authenticatedRouteIndex === -1) {
             // No authenticated route found, return router with base tree
-            return createRouter({
-                ...routerOptions,
-                routeTree,
-            });
+            return createExtendedRouter(routerOptions, routeTree);
         }
 
         let authenticatedRoute: AnyRoute = routeTree.children[authenticatedRouteIndex];
@@ -106,10 +100,7 @@ export const useExtendedRouter = (
 
         // Only extend the tree if we have new routes to add
         if (newAuthenticatedRoutes.length === 0 && newRootRoutes.length === 0) {
-            return createRouter({
-                ...routerOptions,
-                routeTree,
-            });
+            return createExtendedRouter(routerOptions, routeTree);
         }
 
         const childrenWithoutAuthenticated = routeTree.children.filter(
@@ -127,9 +118,22 @@ export const useExtendedRouter = (
             ...newRootRoutes,
         ]);
 
-        return createRouter({
-            ...routerOptions,
-            routeTree: extendedRouteTree,
-        });
+        return createExtendedRouter(routerOptions, extendedRouteTree);
     }, [baseRouteTree, routerOptions, extensionsLoaded]);
 };
+
+/**
+ * Helper to create a router with extended route tree, handling some
+ * type issues with hydrate/dehydrate functions.
+ */
+function createExtendedRouter(
+    routerOptions: Omit<RouterOptions<AnyRoute, any>, 'routeTree'>,
+    extendedRouteTree: AnyRoute,
+) {
+    return createRouter({
+        ...routerOptions,
+        dehydrate: routerOptions.dehydrate as any,
+        hydrate: routerOptions.hydrate as any,
+        routeTree: extendedRouteTree,
+    });
+}

+ 2 - 1
packages/dashboard/src/lib/framework/registry/registry-types.ts

@@ -11,6 +11,7 @@ import { DocumentNode } from 'graphql';
 
 import { DataDisplayComponent } from '../component-registry/component-registry.js';
 import { DashboardAlertDefinition } from '../extension-api/types/alerts.js';
+import { DataTableDisplayComponent } from '../extension-api/types/data-table.js';
 import { NavMenuConfig } from '../nav-menu/nav-menu-extensions.js';
 
 export interface GlobalRegistryContents {
@@ -22,7 +23,7 @@ export interface GlobalRegistryContents {
     dashboardWidgetRegistry: Map<string, DashboardWidgetDefinition>;
     dashboardAlertRegistry: Map<string, DashboardAlertDefinition>;
     inputComponents: Map<string, DashboardFormComponent>;
-    displayComponents: Map<string, DataDisplayComponent>;
+    displayComponents: Map<string, DataDisplayComponent | DataTableDisplayComponent>;
     bulkActionsRegistry: Map<string, BulkAction[]>;
     listQueryDocumentRegistry: Map<string, DocumentNode[]>;
     detailQueryDocumentRegistry: Map<string, DocumentNode[]>;

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
packages/dashboard/src/lib/graphql/graphql-env.d.ts


+ 11 - 7
packages/dashboard/src/lib/providers/channel-provider.tsx

@@ -147,6 +147,7 @@ export function ChannelProvider({ children }: Readonly<{ children: React.ReactNo
                     defaultCurrencyCode: fullChannelData?.defaultCurrencyCode || 'USD',
                     pricesIncludeTax: fullChannelData?.pricesIncludeTax || false,
                     availableLanguageCodes: fullChannelData?.availableLanguageCodes || ['en'],
+                    availableCurrencyCodes: fullChannelData?.availableCurrencyCodes || ['USD'],
                 };
             });
         }
@@ -198,13 +199,16 @@ export function ChannelProvider({ children }: Readonly<{ children: React.ReactNo
         });
     };
 
-    const contextValue: ChannelContext = {
-        channels,
-        activeChannel: selectedChannel,
-        isLoading,
-        setActiveChannel: setSelectedChannel,
-        refreshChannels,
-    };
+    const contextValue: ChannelContext = React.useMemo(
+        () => ({
+            channels,
+            activeChannel: selectedChannel,
+            isLoading,
+            setActiveChannel: setSelectedChannel,
+            refreshChannels,
+        }),
+        [channels, selectedChannel, isLoading, setSelectedChannel, refreshChannels],
+    );
 
     return <ChannelContext.Provider value={contextValue}>{children}</ChannelContext.Provider>;
 }

+ 11 - 0
packages/dashboard/tsconfig.check.json

@@ -0,0 +1,11 @@
+{
+  "extends": "./tsconfig.json",
+  "exclude": [
+    "vite/tests",
+    "**/*.spec.ts",
+    "**/*.spec.tsx",
+    "**/*.stories.ts",
+    "**/*.stories.tsx",
+    "node_modules"
+  ]
+}

Vissa filer visades inte eftersom för många filer har ändrats