Michael Bromley 5 месяцев назад
Родитель
Сommit
c085985c48
49 измененных файлов с 823 добавлено и 619 удалено
  1. 8 0
      docs/docs/reference/core-plugins/admin-ui-plugin/admin-ui-plugin-options.md
  2. 1 1
      docs/docs/reference/core-plugins/admin-ui-plugin/index.md
  3. 4 4
      docs/docs/reference/core-plugins/elasticsearch-plugin/elasticsearch-options.md
  4. 5 13
      docs/docs/reference/core-plugins/email-plugin/email-utils.md
  5. 0 41
      docs/docs/reference/dashboard/components/data-table-bulk-actions.md
  6. 9 3
      docs/docs/reference/dashboard/components/list-page.md
  7. 2 2
      docs/docs/reference/dashboard/components/page-block.md
  8. 0 67
      docs/docs/reference/dashboard/extensions/dashboard-action-bar-item.md
  9. 1 3
      docs/docs/reference/dashboard/extensions/dashboard-base-widget-props.md
  10. 0 39
      docs/docs/reference/dashboard/extensions/dashboard-custom-form-component.md
  11. 0 35
      docs/docs/reference/dashboard/extensions/dashboard-custom-form-components.md
  12. 0 41
      docs/docs/reference/dashboard/extensions/dashboard-data-table-display-component.md
  13. 0 61
      docs/docs/reference/dashboard/extensions/dashboard-data-table-extension-definition.md
  14. 0 47
      docs/docs/reference/dashboard/extensions/dashboard-detail-form-display-component.md
  15. 0 47
      docs/docs/reference/dashboard/extensions/dashboard-detail-form-input-component.md
  16. 15 10
      docs/docs/reference/dashboard/extensions/dashboard-extension.md
  17. 0 60
      docs/docs/reference/dashboard/extensions/dashboard-page-block-definition.md
  18. 1 1
      docs/docs/reference/dashboard/extensions/dashboard-widget-definition.md
  19. 1 3
      docs/docs/reference/dashboard/extensions/dashboard-widget-instance.md
  20. 124 0
      docs/docs/reference/dashboard/extensions/data-table.md
  21. 1 1
      docs/docs/reference/dashboard/extensions/define-dashboard-extension.md
  22. 129 0
      docs/docs/reference/dashboard/extensions/detail-forms.md
  23. 66 0
      docs/docs/reference/dashboard/extensions/form-components.md
  24. 152 0
      docs/docs/reference/dashboard/extensions/layout.md
  25. 147 0
      docs/docs/reference/dashboard/extensions/login.md
  26. 103 0
      docs/docs/reference/dashboard/extensions/navigation.md
  27. 0 49
      docs/docs/reference/dashboard/extensions/page-block-location.md
  28. 1 1
      docs/docs/reference/dashboard/hooks/use-channel.md
  29. 0 12
      docs/docs/reference/graphql-api/admin/input-types.md
  30. 24 24
      docs/docs/reference/graphql-api/admin/mutations.md
  31. 0 14
      docs/docs/reference/graphql-api/admin/object-types.md
  32. 8 23
      docs/docs/reference/graphql-api/admin/queries.md
  33. 1 1
      docs/docs/reference/typescript-api/common/language-code.md
  34. 1 1
      docs/docs/reference/typescript-api/common/permission.md
  35. 1 1
      docs/docs/reference/typescript-api/configuration/default-config.md
  36. 1 1
      docs/docs/reference/typescript-api/configuration/settings-store-fields.md
  37. 1 1
      docs/docs/reference/typescript-api/custom-fields/custom-field-config.md
  38. 1 1
      docs/docs/reference/typescript-api/custom-fields/index.md
  39. 1 1
      docs/docs/reference/typescript-api/custom-fields/struct-custom-field-config.md
  40. 1 1
      docs/docs/reference/typescript-api/custom-fields/struct-field-config.md
  41. 1 1
      docs/docs/reference/typescript-api/custom-fields/typed-custom-single-field-config.md
  42. 1 1
      docs/docs/reference/typescript-api/settings-store/cleanup-orphaned-settings-store-entries-options.md
  43. 1 1
      docs/docs/reference/typescript-api/settings-store/cleanup-orphaned-settings-store-entries-result.md
  44. 1 1
      docs/docs/reference/typescript-api/settings-store/orphaned-settings-store-entry.md
  45. 1 1
      docs/docs/reference/typescript-api/settings-store/set-settings-store-value-result.md
  46. 1 1
      docs/docs/reference/typescript-api/settings-store/settings-store-field-config.md
  47. 1 1
      docs/docs/reference/typescript-api/settings-store/settings-store-registration.md
  48. 5 1
      docs/docs/reference/typescript-api/settings-store/settings-store-scope-function.md
  49. 1 1
      docs/docs/reference/typescript-api/settings-store/settings-store-scopes.md

+ 8 - 0
docs/docs/reference/core-plugins/admin-ui-plugin/admin-ui-plugin-options.md

@@ -22,6 +22,7 @@ interface AdminUiPluginOptions {
     hostname?: string;
     hostname?: string;
     app?: AdminUiAppConfig | AdminUiAppDevModeConfig;
     app?: AdminUiAppConfig | AdminUiAppDevModeConfig;
     adminUiConfig?: Partial<AdminUiConfig>;
     adminUiConfig?: Partial<AdminUiConfig>;
+    compatibilityMode?: boolean;
 }
 }
 ```
 ```
 
 
@@ -60,6 +61,13 @@ version, e.g. one pre-compiled with one or more ui extensions.
 
 
 Allows the contents of the `vendure-ui-config.json` file to be set, e.g.
 Allows the contents of the `vendure-ui-config.json` file to be set, e.g.
 for specifying the Vendure GraphQL API host, available UI languages, etc.
 for specifying the Vendure GraphQL API host, available UI languages, etc.
+### compatibilityMode
+
+<MemberInfo kind="property" type={`boolean`}  since="3.4.0"  />
+
+If you are running the AdminUiPlugin at the same time as the new {@link DashboardPlugin}, you should
+set this to `true` in order to avoid a conflict caused by both plugins defining the same
+schema extensions.
 
 
 
 
 </div>
 </div>

+ 1 - 1
docs/docs/reference/core-plugins/admin-ui-plugin/index.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## AdminUiPlugin
 ## AdminUiPlugin
 
 
-<GenerationInfo sourceFile="packages/admin-ui-plugin/src/plugin.ts" sourceLine="130" packageName="@vendure/admin-ui-plugin" />
+<GenerationInfo sourceFile="packages/admin-ui-plugin/src/plugin.ts" sourceLine="139" packageName="@vendure/admin-ui-plugin" />
 
 
 This plugin starts a static server for the Admin UI app, and proxies it via the `/admin/` path of the main Vendure server.
 This plugin starts a static server for the Admin UI app, and proxies it via the `/admin/` path of the main Vendure server.
 
 

+ 4 - 4
docs/docs/reference/core-plugins/elasticsearch-plugin/elasticsearch-options.md

@@ -192,8 +192,8 @@ The `public` (default = `true`) property is used to reveal or hide the property
 If this property is set to `false` it's not accessible in the `customMappings` field but it's still getting
 If this property is set to `false` it's not accessible in the `customMappings` field but it's still getting
 parsed to the elasticsearch index.
 parsed to the elasticsearch index.
 
 
-This config option defines custom mappings which are accessible when the "groupByProduct"
-input options is set to `true`. In addition, custom variant mappings can be accessed by using
+This config option defines custom mappings which are accessible when the "groupByProduct" or "groupBySKU"
+input options is set to `true` (Do not set both to true at the same time). In addition, custom variant mappings can be accessed by using
 the `customProductVariantMappings` field, which is always available.
 the `customProductVariantMappings` field, which is always available.
 
 
 *Example*
 *Example*
@@ -244,8 +244,8 @@ query SearchProducts($input: SearchInput!) {
 
 
 <MemberInfo kind="property" type={`{         [fieldName: string]: CustomMapping&#60;[<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>, <a href='/reference/typescript-api/common/language-code#languagecode'>LanguageCode</a>, <a href='/reference/typescript-api/common/injector#injector'>Injector</a>, <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>]&#62;;     }`}   />
 <MemberInfo kind="property" type={`{         [fieldName: string]: CustomMapping&#60;[<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>, <a href='/reference/typescript-api/common/language-code#languagecode'>LanguageCode</a>, <a href='/reference/typescript-api/common/injector#injector'>Injector</a>, <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>]&#62;;     }`}   />
 
 
-This config option defines custom mappings which are accessible when the "groupByProduct"
-input options is set to `false`. In addition, custom product mappings can be accessed by using
+This config option defines custom mappings which are accessible when the "groupByProduct" and "groupBySKU"
+input options are both set to `false`. In addition, custom product mappings can be accessed by using
 the `customProductMappings` field, which is always available.
 the `customProductMappings` field, which is always available.
 
 
 *Example*
 *Example*

+ 5 - 13
docs/docs/reference/core-plugins/email-plugin/email-utils.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## transformOrderLineAssetUrls
 ## transformOrderLineAssetUrls
 
 
-<GenerationInfo sourceFile="packages/email-plugin/src/handler/default-email-handlers.ts" sourceLine="101" packageName="@vendure/email-plugin" />
+<GenerationInfo sourceFile="packages/email-plugin/src/handler/default-email-handlers.ts" sourceLine="106" packageName="@vendure/email-plugin" />
 
 
 Applies the configured `AssetStorageStrategy.toAbsoluteUrl()` function to each of the
 Applies the configured `AssetStorageStrategy.toAbsoluteUrl()` function to each of the
 OrderLine's `featuredAsset.preview` properties, so that they can be correctly displayed
 OrderLine's `featuredAsset.preview` properties, so that they can be correctly displayed
@@ -40,27 +40,19 @@ Parameters
 
 
 
 
 
 
-## hydrateShippingLines
+## shippingLinesWithMethod
 
 
-<GenerationInfo sourceFile="packages/email-plugin/src/handler/default-email-handlers.ts" sourceLine="122" packageName="@vendure/email-plugin" />
+<GenerationInfo sourceFile="packages/email-plugin/src/handler/default-email-handlers.ts" sourceLine="127" packageName="@vendure/email-plugin" />
 
 
-Ensures that the ShippingLines are hydrated so that we can use the
+Ensures that the ShippingLines have a shippingMethod so that we can use the
 `shippingMethod.name` property in the email template.
 `shippingMethod.name` property in the email template.
 
 
 ```ts title="Signature"
 ```ts title="Signature"
-function hydrateShippingLines(ctx: RequestContext, order: Order, injector: Injector): Promise<ShippingLine[]>
+function shippingLinesWithMethod(order: Order): ShippingLine[]
 ```
 ```
 Parameters
 Parameters
 
 
-### ctx
-
-<MemberInfo kind="parameter" type={`<a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>`} />
-
 ### order
 ### order
 
 
 <MemberInfo kind="parameter" type={`<a href='/reference/typescript-api/entities/order#order'>Order</a>`} />
 <MemberInfo kind="parameter" type={`<a href='/reference/typescript-api/entities/order#order'>Order</a>`} />
 
 
-### injector
-
-<MemberInfo kind="parameter" type={`<a href='/reference/typescript-api/common/injector#injector'>Injector</a>`} />
-

+ 0 - 41
docs/docs/reference/dashboard/components/data-table-bulk-actions.md

@@ -1,41 +0,0 @@
----
-title: "DataTableBulkActions"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## BulkAction
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/data-table.ts" sourceLine="45" packageName="@vendure/dashboard" since="3.4.0" />
-
-**Status: Developer Preview**
-
-A bulk action is a component that will be rendered in the bulk actions dropdown.
-
-```ts title="Signature"
-type BulkAction = {
-    order?: number;
-    component: BulkActionComponent<any>;
-}
-```
-
-<div className="members-wrapper">
-
-### order
-
-<MemberInfo kind="property" type={`number`}   />
-
-
-### component
-
-<MemberInfo kind="property" type={`BulkActionComponent&#60;any&#62;`}   />
-
-
-
-
-</div>

+ 9 - 3
docs/docs/reference/dashboard/components/list-page.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## ListPage
 ## ListPage
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/list-page.tsx" sourceLine="69" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/list-page.tsx" sourceLine="76" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 **Status: Developer Preview**
 **Status: Developer Preview**
 
 
@@ -30,7 +30,7 @@ Parameters
 
 
 ## ListPageProps
 ## ListPageProps
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/list-page.tsx" sourceLine="30" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/list-page.tsx" sourceLine="31" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 **Status: Developer Preview**
 **Status: Developer Preview**
 
 
@@ -56,6 +56,7 @@ interface ListPageProps<T extends TypedDocumentNode<U, V>, U extends ListQuerySh
     transformData?: (data: any[]) => any[];
     transformData?: (data: any[]) => any[];
     setTableOptions?: (table: TableOptions<any>) => TableOptions<any>;
     setTableOptions?: (table: TableOptions<any>) => TableOptions<any>;
     bulkActions?: BulkAction[];
     bulkActions?: BulkAction[];
+    registerRefresher?: PaginatedListRefresherRegisterFn;
 }
 }
 ```
 ```
 
 
@@ -148,7 +149,12 @@ interface ListPageProps<T extends TypedDocumentNode<U, V>, U extends ListQuerySh
 
 
 ### bulkActions
 ### bulkActions
 
 
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/components/data-table-bulk-actions#bulkaction'>BulkAction</a>[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/data-table#bulkaction'>BulkAction</a>[]`}   />
+
+
+### registerRefresher
+
+<MemberInfo kind="property" type={`PaginatedListRefresherRegisterFn`}   />
 
 
 
 
 
 

+ 2 - 2
docs/docs/reference/dashboard/components/page-block.md

@@ -86,7 +86,7 @@ type PageBlockProps = {
 
 
 ## FullWidthPageBlock
 ## FullWidthPageBlock
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="444" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="452" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 **Status: Developer Preview**
 **Status: Developer Preview**
 
 
@@ -106,7 +106,7 @@ Parameters
 
 
 ## CustomFieldsPageBlock
 ## CustomFieldsPageBlock
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="469" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="477" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 **Status: Developer Preview**
 **Status: Developer Preview**
 
 

+ 0 - 67
docs/docs/reference/dashboard/extensions/dashboard-action-bar-item.md

@@ -1,67 +0,0 @@
----
-title: "DashboardActionBarItem"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## DashboardActionBarItem
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/layout.ts" sourceLine="19" packageName="@vendure/dashboard" since="3.3.0" />
-
-**Status: Developer Preview**
-
-Allows you to define custom action bar items for any page in the dashboard.
-
-```ts title="Signature"
-interface DashboardActionBarItem {
-    pageId: string;
-    component: React.FunctionComponent<{ context: PageContextValue }>;
-    type?: 'button' | 'dropdown';
-    requiresPermission?: string | string[];
-}
-```
-
-<div className="members-wrapper">
-
-### pageId
-
-<MemberInfo kind="property" type={`string`}   />
-
-The ID of the page where the action bar item should be displayed.
-### component
-
-<MemberInfo kind="property" type={`React.FunctionComponent&#60;{ context: PageContextValue }&#62;`}   />
-
-A React component that will be rendered in the action bar.
-### type
-
-<MemberInfo kind="property" type={`'button' | 'dropdown'`} default={`'button'`}   />
-
-The type of action bar item to display. Defaults to `button`.
-The 'dropdown' type is used to display the action bar item as a dropdown menu item.
-
-When using the dropdown type, use a suitable [dropdown item](https://ui.shadcn.com/docs/components/dropdown-menu)
-component, such as:
-
-```tsx
-import { DropdownMenuItem } from '@vendure/dashboard';
-
-// ...
-
-{
-  component: () => <DropdownMenuItem>My Item</DropdownMenuItem>
-}
-```
-### requiresPermission
-
-<MemberInfo kind="property" type={`string | string[]`}   />
-
-Any permissions that are required to display this action bar item.
-
-
-</div>

+ 1 - 3
docs/docs/reference/dashboard/extensions/dashboard-base-widget-props.md

@@ -11,9 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## DashboardBaseWidgetProps
 ## DashboardBaseWidgetProps
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/widgets.ts" sourceLine="12" packageName="@vendure/dashboard" since="3.3.0" />
-
-**Status: Developer Preview**
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/widgets.ts" sourceLine="10" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 Base props interface for dashboard widgets.
 Base props interface for dashboard widgets.
 
 

+ 0 - 39
docs/docs/reference/dashboard/extensions/dashboard-custom-form-component.md

@@ -1,39 +0,0 @@
----
-title: "DashboardCustomFormComponent"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## DashboardCustomFormComponent
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/form-components.ts" sourceLine="12" packageName="@vendure/dashboard" since="3.4.0" />
-
-Allows you to define custom form components for custom fields in the dashboard.
-
-```ts title="Signature"
-interface DashboardCustomFormComponent {
-    id: string;
-    component: React.FunctionComponent<CustomFormComponentInputProps>;
-}
-```
-
-<div className="members-wrapper">
-
-### id
-
-<MemberInfo kind="property" type={`string`}   />
-
-
-### component
-
-<MemberInfo kind="property" type={`React.FunctionComponent&#60;CustomFormComponentInputProps&#62;`}   />
-
-
-
-
-</div>

+ 0 - 35
docs/docs/reference/dashboard/extensions/dashboard-custom-form-components.md

@@ -1,35 +0,0 @@
----
-title: "DashboardCustomFormComponents"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## DashboardCustomFormComponents
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/form-components.ts" sourceLine="25" packageName="@vendure/dashboard" since="3.4.0" />
-
-Interface for registering custom field components in the dashboard.
-For input and display components, use the co-located approach with detailForms.
-
-```ts title="Signature"
-interface DashboardCustomFormComponents {
-    customFields?: DashboardCustomFormComponent[];
-}
-```
-
-<div className="members-wrapper">
-
-### customFields
-
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-custom-form-component#dashboardcustomformcomponent'>DashboardCustomFormComponent</a>[]`}   />
-
-Custom form components for custom fields. These are used when rendering
-custom fields in forms.
-
-
-</div>

+ 0 - 41
docs/docs/reference/dashboard/extensions/dashboard-data-table-display-component.md

@@ -1,41 +0,0 @@
----
-title: "DashboardDataTableDisplayComponent"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## DashboardDataTableDisplayComponent
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/data-table.ts" sourceLine="12" packageName="@vendure/dashboard" since="3.4.0" />
-
-Allows you to define custom display components for specific columns in data tables.
-The pageId is already defined in the data table extension, so only the column name is needed.
-
-```ts title="Signature"
-interface DashboardDataTableDisplayComponent {
-    column: string;
-    component: React.ComponentType<{ value: any; [key: string]: any }>;
-}
-```
-
-<div className="members-wrapper">
-
-### column
-
-<MemberInfo kind="property" type={`string`}   />
-
-The name of the column where this display component should be used.
-### component
-
-<MemberInfo kind="property" type={`React.ComponentType&#60;{ value: any; [key: string]: any }&#62;`}   />
-
-The React component that will be rendered as the display.
-It should accept `value` and other standard display props.
-
-
-</div>

+ 0 - 61
docs/docs/reference/dashboard/extensions/dashboard-data-table-extension-definition.md

@@ -1,61 +0,0 @@
----
-title: "DashboardDataTableExtensionDefinition"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## DashboardDataTableExtensionDefinition
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/data-table.ts" sourceLine="59" packageName="@vendure/dashboard" since="3.4.0" />
-
-**Status: Developer Preview**
-
-This allows you to customize aspects of existing data tables in the dashboard.
-
-```ts title="Signature"
-interface DashboardDataTableExtensionDefinition {
-    pageId: string;
-    blockId?: string;
-    bulkActions?: BulkAction[];
-    extendListDocument?: string | DocumentNode | (() => DocumentNode | string);
-    displayComponents?: DashboardDataTableDisplayComponent[];
-}
-```
-
-<div className="members-wrapper">
-
-### pageId
-
-<MemberInfo kind="property" type={`string`}   />
-
-The ID of the page where the data table is located, e.g. `'product-list'`, `'order-list'`.
-### blockId
-
-<MemberInfo kind="property" type={`string`}   />
-
-The ID of the data table block. Defaults to `'list-table'`, which is the default blockId
-for the standard list pages. However, some other pages may use a different blockId,
-such as `'product-variants-table'` on the `'product-detail'` page.
-### bulkActions
-
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/components/data-table-bulk-actions#bulkaction'>BulkAction</a>[]`}   />
-
-An array of additional bulk actions that will be available on the data table.
-### extendListDocument
-
-<MemberInfo kind="property" type={`string | DocumentNode | (() =&#62; DocumentNode | string)`}   />
-
-Allows you to extend the list document for the data table.
-### displayComponents
-
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-data-table-display-component#dashboarddatatabledisplaycomponent'>DashboardDataTableDisplayComponent</a>[]`}   />
-
-Custom display components for specific columns in the data table.
-
-
-</div>

+ 0 - 47
docs/docs/reference/dashboard/extensions/dashboard-detail-form-display-component.md

@@ -1,47 +0,0 @@
----
-title: "DashboardDetailFormDisplayComponent"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## DashboardDetailFormDisplayComponent
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/detail-forms.ts" sourceLine="42" packageName="@vendure/dashboard" since="3.4.0" />
-
-Allows you to define custom display components for specific fields in detail forms.
-The pageId is already defined in the detail form extension, so only the blockId and field are needed.
-
-```ts title="Signature"
-interface DashboardDetailFormDisplayComponent {
-    blockId: string;
-    field: string;
-    component: DataDisplayComponent;
-}
-```
-
-<div className="members-wrapper">
-
-### blockId
-
-<MemberInfo kind="property" type={`string`}   />
-
-The ID of the block where this display component should be used.
-### field
-
-<MemberInfo kind="property" type={`string`}   />
-
-The name of the field where this display component should be used.
-### component
-
-<MemberInfo kind="property" type={`DataDisplayComponent`}   />
-
-The React component that will be rendered as the display.
-It should accept `value` and other standard display props.
-
-
-</div>

+ 0 - 47
docs/docs/reference/dashboard/extensions/dashboard-detail-form-input-component.md

@@ -1,47 +0,0 @@
----
-title: "DashboardDetailFormInputComponent"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## DashboardDetailFormInputComponent
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/detail-forms.ts" sourceLine="15" packageName="@vendure/dashboard" since="3.4.0" />
-
-Allows you to define custom input components for specific fields in detail forms.
-The pageId is already defined in the detail form extension, so only the blockId and field are needed.
-
-```ts title="Signature"
-interface DashboardDetailFormInputComponent {
-    blockId: string;
-    field: string;
-    component: DataInputComponent;
-}
-```
-
-<div className="members-wrapper">
-
-### blockId
-
-<MemberInfo kind="property" type={`string`}   />
-
-The ID of the block where this input component should be used.
-### field
-
-<MemberInfo kind="property" type={`string`}   />
-
-The name of the field where this input component should be used.
-### component
-
-<MemberInfo kind="property" type={`DataInputComponent`}   />
-
-The React component that will be rendered as the input.
-It should accept `value`, `onChange`, and other standard input props.
-
-
-</div>

+ 15 - 10
docs/docs/reference/dashboard/extensions/dashboard-extension.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## DashboardExtension
 ## DashboardExtension
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/extension-api-types.ts" sourceLine="23" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/extension-api-types.ts" sourceLine="24" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 **Status: Developer Preview**
 **Status: Developer Preview**
 
 
@@ -28,6 +28,7 @@ interface DashboardExtension {
     customFormComponents?: DashboardCustomFormComponents;
     customFormComponents?: DashboardCustomFormComponents;
     dataTables?: DashboardDataTableExtensionDefinition[];
     dataTables?: DashboardDataTableExtensionDefinition[];
     detailForms?: DashboardDetailFormExtensionDefinition[];
     detailForms?: DashboardDetailFormExtensionDefinition[];
+    login?: DashboardLoginExtensions;
 }
 }
 ```
 ```
 
 
@@ -35,22 +36,22 @@ interface DashboardExtension {
 
 
 ### routes
 ### routes
 
 
-<MemberInfo kind="property" type={`DashboardRouteDefinition[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/navigation#dashboardroutedefinition'>DashboardRouteDefinition</a>[]`}   />
 
 
 Allows you to define custom routes such as list or detail views.
 Allows you to define custom routes such as list or detail views.
 ### navSections
 ### navSections
 
 
-<MemberInfo kind="property" type={`DashboardNavSectionDefinition[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/navigation#dashboardnavsectiondefinition'>DashboardNavSectionDefinition</a>[]`}   />
 
 
 Allows you to define custom nav sections for the dashboard.
 Allows you to define custom nav sections for the dashboard.
 ### pageBlocks
 ### pageBlocks
 
 
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-page-block-definition#dashboardpageblockdefinition'>DashboardPageBlockDefinition</a>[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/layout#dashboardpageblockdefinition'>DashboardPageBlockDefinition</a>[]`}   />
 
 
 Allows you to define custom page blocks for any page in the dashboard.
 Allows you to define custom page blocks for any page in the dashboard.
 ### actionBarItems
 ### actionBarItems
 
 
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-action-bar-item#dashboardactionbaritem'>DashboardActionBarItem</a>[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/layout#dashboardactionbaritem'>DashboardActionBarItem</a>[]`}   />
 
 
 Allows you to define custom action bar items for any page in the dashboard.
 Allows you to define custom action bar items for any page in the dashboard.
 ### alerts
 ### alerts
@@ -66,20 +67,24 @@ Allows you to define custom routes for the dashboard, which will render the
 given components and optionally also add a nav menu item.
 given components and optionally also add a nav menu item.
 ### customFormComponents
 ### customFormComponents
 
 
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-custom-form-components#dashboardcustomformcomponents'>DashboardCustomFormComponents</a>`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/form-components#dashboardcustomformcomponents'>DashboardCustomFormComponents</a>`}   />
 
 
-Unified registration for custom form components including custom field components,
-input components, and display components.
+Unified registration for custom form custom field components.
 ### dataTables
 ### dataTables
 
 
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-data-table-extension-definition#dashboarddatatableextensiondefinition'>DashboardDataTableExtensionDefinition</a>[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/data-table#dashboarddatatableextensiondefinition'>DashboardDataTableExtensionDefinition</a>[]`}   />
 
 
 Allows you to customize aspects of existing data tables in the dashboard.
 Allows you to customize aspects of existing data tables in the dashboard.
 ### detailForms
 ### detailForms
 
 
-<MemberInfo kind="property" type={`DashboardDetailFormExtensionDefinition[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/detail-forms#dashboarddetailformextensiondefinition'>DashboardDetailFormExtensionDefinition</a>[]`}   />
 
 
+Allows you to customize the detail form for any page in the dashboard.
+### login
 
 
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/login#dashboardloginextensions'>DashboardLoginExtensions</a>`}   />
+
+Allows you to customize the login page with custom components.
 
 
 
 
 </div>
 </div>

+ 0 - 60
docs/docs/reference/dashboard/extensions/dashboard-page-block-definition.md

@@ -1,60 +0,0 @@
----
-title: "DashboardPageBlockDefinition"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## DashboardPageBlockDefinition
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/layout.ts" sourceLine="87" packageName="@vendure/dashboard" since="3.3.0" />
-
-**Status: Developer Preview**
-
-This allows you to insert a custom component into a specific location
-on any page in the dashboard.
-
-```ts title="Signature"
-interface DashboardPageBlockDefinition {
-    id: string;
-    title?: React.ReactNode;
-    location: PageBlockLocation;
-    component: React.FunctionComponent<{ context: PageContextValue }>;
-    requiresPermission?: string | string[];
-}
-```
-
-<div className="members-wrapper">
-
-### id
-
-<MemberInfo kind="property" type={`string`}   />
-
-
-### title
-
-<MemberInfo kind="property" type={`React.ReactNode`}   />
-
-
-### location
-
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/page-block-location#pageblocklocation'>PageBlockLocation</a>`}   />
-
-
-### component
-
-<MemberInfo kind="property" type={`React.FunctionComponent&#60;{ context: PageContextValue }&#62;`}   />
-
-
-### requiresPermission
-
-<MemberInfo kind="property" type={`string | string[]`}   />
-
-
-
-
-</div>

+ 1 - 1
docs/docs/reference/dashboard/extensions/dashboard-widget-definition.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## DashboardWidgetDefinition
 ## DashboardWidgetDefinition
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/widgets.ts" sourceLine="66" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/widgets.ts" sourceLine="62" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 **Status: Developer Preview**
 **Status: Developer Preview**
 
 

+ 1 - 3
docs/docs/reference/dashboard/extensions/dashboard-widget-instance.md

@@ -11,9 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## DashboardWidgetInstance
 ## DashboardWidgetInstance
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/widgets.ts" sourceLine="29" packageName="@vendure/dashboard" since="3.3.0" />
-
-**Status: Developer Preview**
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/widgets.ts" sourceLine="25" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 Represents an instance of a dashboard widget with its layout and configuration.
 Represents an instance of a dashboard widget with its layout and configuration.
 
 

+ 124 - 0
docs/docs/reference/dashboard/extensions/data-table.md

@@ -0,0 +1,124 @@
+---
+title: "DataTable"
+isDefaultIndex: false
+generated: true
+---
+<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
+import MemberInfo from '@site/src/components/MemberInfo';
+import GenerationInfo from '@site/src/components/GenerationInfo';
+import MemberDescription from '@site/src/components/MemberDescription';
+
+
+## DashboardDataTableDisplayComponent
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/data-table.ts" sourceLine="13" packageName="@vendure/dashboard" since="3.4.0" />
+
+Allows you to define custom display components for specific columns in data tables.
+The pageId is already defined in the data table extension, so only the column name is needed.
+
+```ts title="Signature"
+interface DashboardDataTableDisplayComponent {
+    column: string;
+    component: React.ComponentType<{ value: any; [key: string]: any }>;
+}
+```
+
+<div className="members-wrapper">
+
+### column
+
+<MemberInfo kind="property" type={`string`}   />
+
+The name of the column where this display component should be used.
+### component
+
+<MemberInfo kind="property" type={`React.ComponentType&#60;{ value: any; [key: string]: any }&#62;`}   />
+
+The React component that will be rendered as the display.
+It should accept `value` and other standard display props.
+
+
+</div>
+
+
+## BulkAction
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/data-table.ts" sourceLine="46" packageName="@vendure/dashboard" since="3.4.0" />
+
+**Status: Developer Preview**
+
+A bulk action is a component that will be rendered in the bulk actions dropdown.
+
+```ts title="Signature"
+type BulkAction = {
+    order?: number;
+    component: BulkActionComponent<any>;
+}
+```
+
+<div className="members-wrapper">
+
+### order
+
+<MemberInfo kind="property" type={`number`}   />
+
+Optional order number to control the position of this bulk action in the dropdown.
+A larger number will appear lower in the list.
+### component
+
+<MemberInfo kind="property" type={`BulkActionComponent&#60;any&#62;`}   />
+
+The React component that will be rendered as the bulk action item.
+
+
+</div>
+
+
+## DashboardDataTableExtensionDefinition
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/data-table.ts" sourceLine="68" packageName="@vendure/dashboard" since="3.4.0" />
+
+This allows you to customize aspects of existing data tables in the dashboard.
+
+```ts title="Signature"
+interface DashboardDataTableExtensionDefinition {
+    pageId: string;
+    blockId?: string;
+    bulkActions?: BulkAction[];
+    extendListDocument?: string | DocumentNode | (() => DocumentNode | string);
+    displayComponents?: DashboardDataTableDisplayComponent[];
+}
+```
+
+<div className="members-wrapper">
+
+### pageId
+
+<MemberInfo kind="property" type={`string`}   />
+
+The ID of the page where the data table is located, e.g. `'product-list'`, `'order-list'`.
+### blockId
+
+<MemberInfo kind="property" type={`string`}   />
+
+The ID of the data table block. Defaults to `'list-table'`, which is the default blockId
+for the standard list pages. However, some other pages may use a different blockId,
+such as `'product-variants-table'` on the `'product-detail'` page.
+### bulkActions
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/data-table#bulkaction'>BulkAction</a>[]`}   />
+
+An array of additional bulk actions that will be available on the data table.
+### extendListDocument
+
+<MemberInfo kind="property" type={`string | DocumentNode | (() =&#62; DocumentNode | string)`}   />
+
+Allows you to extend the list document for the data table.
+### displayComponents
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/data-table#dashboarddatatabledisplaycomponent'>DashboardDataTableDisplayComponent</a>[]`}   />
+
+Custom display components for specific columns in the data table.
+
+
+</div>

+ 1 - 1
docs/docs/reference/dashboard/extensions/define-dashboard-extension.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## defineDashboardExtension
 ## defineDashboardExtension
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/define-dashboard-extension.ts" sourceLine="37" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/define-dashboard-extension.ts" sourceLine="38" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 **Status: Developer Preview**
 **Status: Developer Preview**
 
 

+ 129 - 0
docs/docs/reference/dashboard/extensions/detail-forms.md

@@ -0,0 +1,129 @@
+---
+title: "DetailForms"
+isDefaultIndex: false
+generated: true
+---
+<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
+import MemberInfo from '@site/src/components/MemberInfo';
+import GenerationInfo from '@site/src/components/GenerationInfo';
+import MemberDescription from '@site/src/components/MemberDescription';
+
+
+## DashboardDetailFormInputComponent
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/detail-forms.ts" sourceLine="16" packageName="@vendure/dashboard" since="3.4.0" />
+
+Allows you to define custom input components for specific fields in detail forms.
+The pageId is already defined in the detail form extension, so only the blockId and field are needed.
+
+```ts title="Signature"
+interface DashboardDetailFormInputComponent {
+    blockId: string;
+    field: string;
+    component: DataInputComponent;
+}
+```
+
+<div className="members-wrapper">
+
+### blockId
+
+<MemberInfo kind="property" type={`string`}   />
+
+The ID of the block where this input component should be used.
+### field
+
+<MemberInfo kind="property" type={`string`}   />
+
+The name of the field where this input component should be used.
+### component
+
+<MemberInfo kind="property" type={`DataInputComponent`}   />
+
+The React component that will be rendered as the input.
+It should accept `value`, `onChange`, and other standard input props.
+
+
+</div>
+
+
+## DashboardDetailFormDisplayComponent
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/detail-forms.ts" sourceLine="44" packageName="@vendure/dashboard" since="3.4.0" />
+
+Allows you to define custom display components for specific fields in detail forms.
+The pageId is already defined in the detail form extension, so only the blockId and field are needed.
+
+```ts title="Signature"
+interface DashboardDetailFormDisplayComponent {
+    blockId: string;
+    field: string;
+    component: DataDisplayComponent;
+}
+```
+
+<div className="members-wrapper">
+
+### blockId
+
+<MemberInfo kind="property" type={`string`}   />
+
+The ID of the block where this display component should be used.
+### field
+
+<MemberInfo kind="property" type={`string`}   />
+
+The name of the field where this display component should be used.
+### component
+
+<MemberInfo kind="property" type={`DataDisplayComponent`}   />
+
+The React component that will be rendered as the display.
+It should accept `value` and other standard display props.
+
+
+</div>
+
+
+## DashboardDetailFormExtensionDefinition
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/detail-forms.ts" sourceLine="72" packageName="@vendure/dashboard" since="3.4.0" />
+
+Allows you to extend existing detail forms (e.g. on the product detail or customer detail pages)
+with custom GraphQL queries, input components, and display components.
+
+```ts title="Signature"
+interface DashboardDetailFormExtensionDefinition {
+    pageId: string;
+    extendDetailDocument?: string | DocumentNode | (() => DocumentNode | string);
+    inputs?: DashboardDetailFormInputComponent[];
+    displays?: DashboardDetailFormDisplayComponent[];
+}
+```
+
+<div className="members-wrapper">
+
+### pageId
+
+<MemberInfo kind="property" type={`string`}   />
+
+The ID of the page where the detail form is located, e.g. `'product-detail'`, `'order-detail'`.
+### extendDetailDocument
+
+<MemberInfo kind="property" type={`string | DocumentNode | (() =&#62; DocumentNode | string)`}   />
+
+Extends the GraphQL query used to fetch data for the detail page, allowing you to add additional
+fields that can be used by custom input or display components.
+### inputs
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/detail-forms#dashboarddetailforminputcomponent'>DashboardDetailFormInputComponent</a>[]`}   />
+
+Custom input components for specific fields in the detail form.
+### displays
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/detail-forms#dashboarddetailformdisplaycomponent'>DashboardDetailFormDisplayComponent</a>[]`}   />
+
+Custom display components for specific fields in the detail form.
+
+
+</div>

+ 66 - 0
docs/docs/reference/dashboard/extensions/form-components.md

@@ -0,0 +1,66 @@
+---
+title: "FormComponents"
+isDefaultIndex: false
+generated: true
+---
+<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
+import MemberInfo from '@site/src/components/MemberInfo';
+import GenerationInfo from '@site/src/components/GenerationInfo';
+import MemberDescription from '@site/src/components/MemberDescription';
+
+
+## DashboardCustomFormComponent
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/form-components.ts" sourceLine="13" packageName="@vendure/dashboard" since="3.4.0" />
+
+Allows you to define custom form components for custom fields in the dashboard.
+
+```ts title="Signature"
+interface DashboardCustomFormComponent {
+    id: string;
+    component: React.FunctionComponent<CustomFormComponentInputProps>;
+}
+```
+
+<div className="members-wrapper">
+
+### id
+
+<MemberInfo kind="property" type={`string`}   />
+
+A unique identifier for the custom form component. It is a good practice to namespace
+these IDs to avoid naming collisions, for example `"my-plugin.markdown-editor"`.
+### component
+
+<MemberInfo kind="property" type={`React.FunctionComponent&#60;CustomFormComponentInputProps&#62;`}   />
+
+The React component that will be rendered as the custom form input.
+
+
+</div>
+
+
+## DashboardCustomFormComponents
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/form-components.ts" sourceLine="36" packageName="@vendure/dashboard" since="3.4.0" />
+
+Interface for registering custom field components in the dashboard.
+For input and display components, use the co-located approach with detailForms.
+
+```ts title="Signature"
+interface DashboardCustomFormComponents {
+    customFields?: DashboardCustomFormComponent[];
+}
+```
+
+<div className="members-wrapper">
+
+### customFields
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/form-components#dashboardcustomformcomponent'>DashboardCustomFormComponent</a>[]`}   />
+
+Custom form components for custom fields. These are used when rendering
+custom fields in forms.
+
+
+</div>

+ 152 - 0
docs/docs/reference/dashboard/extensions/layout.md

@@ -0,0 +1,152 @@
+---
+title: "Layout"
+isDefaultIndex: false
+generated: true
+---
+<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
+import MemberInfo from '@site/src/components/MemberInfo';
+import GenerationInfo from '@site/src/components/GenerationInfo';
+import MemberDescription from '@site/src/components/MemberDescription';
+
+
+## DashboardActionBarItem
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/layout.ts" sourceLine="18" packageName="@vendure/dashboard" since="3.3.0" />
+
+Allows you to define custom action bar items for any page in the dashboard.
+
+```ts title="Signature"
+interface DashboardActionBarItem {
+    pageId: string;
+    component: React.FunctionComponent<{ context: PageContextValue }>;
+    type?: 'button' | 'dropdown';
+    requiresPermission?: string | string[];
+}
+```
+
+<div className="members-wrapper">
+
+### pageId
+
+<MemberInfo kind="property" type={`string`}   />
+
+The ID of the page where the action bar item should be displayed.
+### component
+
+<MemberInfo kind="property" type={`React.FunctionComponent&#60;{ context: PageContextValue }&#62;`}   />
+
+A React component that will be rendered in the action bar.
+### type
+
+<MemberInfo kind="property" type={`'button' | 'dropdown'`} default={`'button'`}   />
+
+The type of action bar item to display. Defaults to `button`.
+The 'dropdown' type is used to display the action bar item as a dropdown menu item.
+
+When using the dropdown type, use a suitable [dropdown item](https://ui.shadcn.com/docs/components/dropdown-menu)
+component, such as:
+
+```tsx
+import { DropdownMenuItem } from '@vendure/dashboard';
+
+// ...
+
+{
+  component: () => <DropdownMenuItem>My Item</DropdownMenuItem>
+}
+```
+### requiresPermission
+
+<MemberInfo kind="property" type={`string | string[]`}   />
+
+Any permissions that are required to display this action bar item.
+
+
+</div>
+
+
+## PageBlockLocation
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/layout.ts" sourceLine="69" packageName="@vendure/dashboard" since="3.3.0" />
+
+The location of a page block in the dashboard. The location can be found by turning on
+"developer mode" in the dashboard user menu (bottom left corner) and then
+clicking the `< />` icon when hovering over a page block.
+
+```ts title="Signature"
+type PageBlockLocation = {
+    pageId: string;
+    position: PageBlockPosition;
+    column: 'main' | 'side';
+}
+```
+
+<div className="members-wrapper">
+
+### pageId
+
+<MemberInfo kind="property" type={`string`}   />
+
+
+### position
+
+<MemberInfo kind="property" type={`PageBlockPosition`}   />
+
+
+### column
+
+<MemberInfo kind="property" type={`'main' | 'side'`}   />
+
+
+
+
+</div>
+
+
+## DashboardPageBlockDefinition
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/layout.ts" sourceLine="84" packageName="@vendure/dashboard" since="3.3.0" />
+
+This allows you to insert a custom component into a specific location
+on any page in the dashboard.
+
+```ts title="Signature"
+interface DashboardPageBlockDefinition {
+    id: string;
+    title?: React.ReactNode;
+    location: PageBlockLocation;
+    component: React.FunctionComponent<{ context: PageContextValue }>;
+    requiresPermission?: string | string[];
+}
+```
+
+<div className="members-wrapper">
+
+### id
+
+<MemberInfo kind="property" type={`string`}   />
+
+
+### title
+
+<MemberInfo kind="property" type={`React.ReactNode`}   />
+
+
+### location
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/layout#pageblocklocation'>PageBlockLocation</a>`}   />
+
+
+### component
+
+<MemberInfo kind="property" type={`React.FunctionComponent&#60;{ context: PageContextValue }&#62;`}   />
+
+
+### requiresPermission
+
+<MemberInfo kind="property" type={`string | string[]`}   />
+
+
+
+
+</div>

+ 147 - 0
docs/docs/reference/dashboard/extensions/login.md

@@ -0,0 +1,147 @@
+---
+title: "Login"
+isDefaultIndex: false
+generated: true
+---
+<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
+import MemberInfo from '@site/src/components/MemberInfo';
+import GenerationInfo from '@site/src/components/GenerationInfo';
+import MemberDescription from '@site/src/components/MemberDescription';
+
+
+## LoginLogoExtension
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/login.ts" sourceLine="11" packageName="@vendure/dashboard" since="3.4.0" />
+
+Defines a custom logo component for the login page.
+
+```ts title="Signature"
+interface LoginLogoExtension {
+    component: React.ComponentType;
+}
+```
+
+<div className="members-wrapper">
+
+### component
+
+<MemberInfo kind="property" type={`React.ComponentType`}   />
+
+A React component that will replace the default Vendure logo.
+
+
+</div>
+
+
+## LoginBeforeFormExtension
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/login.ts" sourceLine="27" packageName="@vendure/dashboard" since="3.4.0" />
+
+Defines content to display before the login form.
+
+```ts title="Signature"
+interface LoginBeforeFormExtension {
+    component: React.ComponentType;
+}
+```
+
+<div className="members-wrapper">
+
+### component
+
+<MemberInfo kind="property" type={`React.ComponentType`}   />
+
+A React component that will be rendered before the login form.
+
+
+</div>
+
+
+## LoginAfterFormExtension
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/login.ts" sourceLine="43" packageName="@vendure/dashboard" since="3.4.0" />
+
+Defines content to display after the login form.
+
+```ts title="Signature"
+interface LoginAfterFormExtension {
+    component: React.ComponentType;
+}
+```
+
+<div className="members-wrapper">
+
+### component
+
+<MemberInfo kind="property" type={`React.ComponentType`}   />
+
+A React component that will be rendered after the login form.
+
+
+</div>
+
+
+## LoginImageExtension
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/login.ts" sourceLine="59" packageName="@vendure/dashboard" since="3.4.0" />
+
+Defines a custom login image component that replaces the default image panel.
+
+```ts title="Signature"
+interface LoginImageExtension {
+    component: React.ComponentType;
+}
+```
+
+<div className="members-wrapper">
+
+### component
+
+<MemberInfo kind="property" type={`React.ComponentType`}   />
+
+A React component that will replace the default login image panel.
+
+
+</div>
+
+
+## DashboardLoginExtensions
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/login.ts" sourceLine="75" packageName="@vendure/dashboard" since="3.4.0" />
+
+Defines all available login page extensions.
+
+```ts title="Signature"
+interface DashboardLoginExtensions {
+    logo?: LoginLogoExtension;
+    beforeForm?: LoginBeforeFormExtension;
+    afterForm?: LoginAfterFormExtension;
+    loginImage?: LoginImageExtension;
+}
+```
+
+<div className="members-wrapper">
+
+### logo
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/login#loginlogoextension'>LoginLogoExtension</a>`}   />
+
+Custom logo component to replace the default Vendure logo.
+### beforeForm
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/login#loginbeforeformextension'>LoginBeforeFormExtension</a>`}   />
+
+Component to render before the login form.
+### afterForm
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/login#loginafterformextension'>LoginAfterFormExtension</a>`}   />
+
+Component to render after the login form.
+### loginImage
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/login#loginimageextension'>LoginImageExtension</a>`}   />
+
+Custom login image component to replace the default image panel.
+
+
+</div>

+ 103 - 0
docs/docs/reference/dashboard/extensions/navigation.md

@@ -0,0 +1,103 @@
+---
+title: "Navigation"
+isDefaultIndex: false
+generated: true
+---
+<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
+import MemberInfo from '@site/src/components/MemberInfo';
+import GenerationInfo from '@site/src/components/GenerationInfo';
+import MemberDescription from '@site/src/components/MemberDescription';
+
+
+## DashboardRouteDefinition
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/navigation.ts" sourceLine="15" packageName="@vendure/dashboard" since="3.4.0" />
+
+Defines a custom route for the dashboard with optional navigation menu integration.
+
+```ts title="Signature"
+interface DashboardRouteDefinition {
+    component: (route: AnyRoute) => React.ReactNode;
+    path: string;
+    navMenuItem?: Partial<NavMenuItem> & { sectionId: string };
+    loader?: RouteOptions['loader'];
+}
+```
+
+<div className="members-wrapper">
+
+### component
+
+<MemberInfo kind="property" type={`(route: AnyRoute) =&#62; React.ReactNode`}   />
+
+The React component that will be rendered for this route.
+### path
+
+<MemberInfo kind="property" type={`string`}   />
+
+The URL path for this route, e.g. '/my-custom-page'.
+### navMenuItem
+
+<MemberInfo kind="property" type={`Partial&#60;<a href='/reference/admin-ui-api/nav-menu/nav-menu-item#navmenuitem'>NavMenuItem</a>&#62; &#38; { sectionId: string }`}   />
+
+Optional navigation menu item configuration to add this route to the nav menu
+on the left side of the dashboard.
+### loader
+
+<MemberInfo kind="property" type={`RouteOptions['loader']`}   />
+
+Optional loader function to fetch data before the route renders.
+The value is a Tanstack Router
+[loader function](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#route-loaders)
+
+
+</div>
+
+
+## DashboardNavSectionDefinition
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/navigation.ts" sourceLine="49" packageName="@vendure/dashboard" since="3.4.0" />
+
+Defines a custom navigation section in the dashboard sidebar.
+
+```ts title="Signature"
+interface DashboardNavSectionDefinition {
+    id: string;
+    title: string;
+    icon?: LucideIcon;
+    order?: number;
+}
+```
+
+<div className="members-wrapper">
+
+### id
+
+<MemberInfo kind="property" type={`string`}   />
+
+A unique identifier for the navigation section.
+### title
+
+<MemberInfo kind="property" type={`string`}   />
+
+The display title for the navigation section.
+### icon
+
+<MemberInfo kind="property" type={`LucideIcon`}   />
+
+Optional icon to display next to the section title. The icons should
+be imported from `'lucide-react'`.
+
+*Example*
+
+```ts
+import { PlusIcon } from 'lucide-react';
+```
+### order
+
+<MemberInfo kind="property" type={`number`}   />
+
+Optional order number to control the position of this section in the sidebar.
+
+
+</div>

+ 0 - 49
docs/docs/reference/dashboard/extensions/page-block-location.md

@@ -1,49 +0,0 @@
----
-title: "PageBlockLocation"
-isDefaultIndex: false
-generated: true
----
-<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
-import MemberInfo from '@site/src/components/MemberInfo';
-import GenerationInfo from '@site/src/components/GenerationInfo';
-import MemberDescription from '@site/src/components/MemberDescription';
-
-
-## PageBlockLocation
-
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/layout.ts" sourceLine="71" packageName="@vendure/dashboard" since="3.3.0" />
-
-**Status: Developer Preview**
-
-The location of a page block in the dashboard. The location can be found by turning on
-"developer mode" in the dashboard user menu (bottom left corner) and then
-clicking the `< />` icon when hovering over a page block.
-
-```ts title="Signature"
-type PageBlockLocation = {
-    pageId: string;
-    position: PageBlockPosition;
-    column: 'main' | 'side';
-}
-```
-
-<div className="members-wrapper">
-
-### pageId
-
-<MemberInfo kind="property" type={`string`}   />
-
-
-### position
-
-<MemberInfo kind="property" type={`PageBlockPosition`}   />
-
-
-### column
-
-<MemberInfo kind="property" type={`'main' | 'side'`}   />
-
-
-
-
-</div>

+ 1 - 1
docs/docs/reference/dashboard/hooks/use-channel.md

@@ -25,7 +25,7 @@ function useChannel(): void
 
 
 ## ChannelContext
 ## ChannelContext
 
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/providers/channel-provider.tsx" sourceLine="52" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/providers/channel-provider.tsx" sourceLine="53" packageName="@vendure/dashboard" since="3.3.0" />
 
 
 **Status: Developer Preview**
 **Status: Developer Preview**
 
 

+ 0 - 12
docs/docs/reference/graphql-api/admin/input-types.md

@@ -2023,18 +2023,6 @@ import MemberDescription from '@site/src/components/MemberDescription';
 <div class="graphql-code-line ">attempts: <a href="/reference/graphql-api/admin/enums#sortorder">SortOrder</a></div>
 <div class="graphql-code-line ">attempts: <a href="/reference/graphql-api/admin/enums#sortorder">SortOrder</a></div>
 
 
 
 
-<div class="graphql-code-line top-level">&#125;</div>
-</div>
-
-## KeyValueInput
-
-<div class="graphql-code-block">
-<div class="graphql-code-line top-level">input <span class="graphql-code-identifier">KeyValueInput</span> &#123;</div>
-<div class="graphql-code-line ">key: <a href="/reference/graphql-api/admin/object-types#string">String</a>!</div>
-
-<div class="graphql-code-line ">value: <a href="/reference/graphql-api/admin/object-types#json">JSON</a>!</div>
-
-
 <div class="graphql-code-line top-level">&#125;</div>
 <div class="graphql-code-line top-level">&#125;</div>
 </div>
 </div>
 
 

+ 24 - 24
docs/docs/reference/graphql-api/admin/mutations.md

@@ -409,6 +409,18 @@ import MemberDescription from '@site/src/components/MemberDescription';
 <div class="graphql-code-line ">createFacet(input: <a href="/reference/graphql-api/admin/input-types#createfacetinput">CreateFacetInput</a>!): <a href="/reference/graphql-api/admin/object-types#facet">Facet</a>!</div>
 <div class="graphql-code-line ">createFacet(input: <a href="/reference/graphql-api/admin/input-types#createfacetinput">CreateFacetInput</a>!): <a href="/reference/graphql-api/admin/object-types#facet">Facet</a>!</div>
 
 
 
 
+<div class="graphql-code-line top-level">&#125;</div>
+</div>
+
+## createFacetValue
+<div class="graphql-code-block">
+<div class="graphql-code-line top-level comment">"""</div>
+<div class="graphql-code-line top-level comment">Create a single FacetValue</div>
+<div class="graphql-code-line top-level comment">"""</div>
+<div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Mutation</span> &#123;</div>
+<div class="graphql-code-line ">createFacetValue(input: <a href="/reference/graphql-api/admin/input-types#createfacetvalueinput">CreateFacetValueInput</a>!): <a href="/reference/graphql-api/admin/object-types#facetvalue">FacetValue</a>!</div>
+
+
 <div class="graphql-code-line top-level">&#125;</div>
 <div class="graphql-code-line top-level">&#125;</div>
 </div>
 </div>
 
 
@@ -1481,30 +1493,6 @@ import MemberDescription from '@site/src/components/MemberDescription';
 <div class="graphql-code-line ">setDraftOrderShippingMethod(orderId: <a href="/reference/graphql-api/admin/object-types#id">ID</a>!, shippingMethodId: <a href="/reference/graphql-api/admin/object-types#id">ID</a>!): <a href="/reference/graphql-api/admin/object-types#setordershippingmethodresult">SetOrderShippingMethodResult</a>!</div>
 <div class="graphql-code-line ">setDraftOrderShippingMethod(orderId: <a href="/reference/graphql-api/admin/object-types#id">ID</a>!, shippingMethodId: <a href="/reference/graphql-api/admin/object-types#id">ID</a>!): <a href="/reference/graphql-api/admin/object-types#setordershippingmethodresult">SetOrderShippingMethodResult</a>!</div>
 
 
 
 
-<div class="graphql-code-line top-level">&#125;</div>
-</div>
-
-## setKeyValue
-<div class="graphql-code-block">
-<div class="graphql-code-line top-level comment">"""</div>
-<div class="graphql-code-line top-level comment">Set a single key-value pair (automatically scoped based on field configuration)</div>
-<div class="graphql-code-line top-level comment">"""</div>
-<div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Mutation</span> &#123;</div>
-<div class="graphql-code-line ">setKeyValue(input: <a href="/reference/graphql-api/admin/input-types#keyvalueinput">KeyValueInput</a>!): <a href="/reference/graphql-api/admin/object-types#setkeyvalueresult">SetKeyValueResult</a>!</div>
-
-
-<div class="graphql-code-line top-level">&#125;</div>
-</div>
-
-## setKeyValues
-<div class="graphql-code-block">
-<div class="graphql-code-line top-level comment">"""</div>
-<div class="graphql-code-line top-level comment">Set multiple key-value pairs in a transaction (each automatically scoped)</div>
-<div class="graphql-code-line top-level comment">"""</div>
-<div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Mutation</span> &#123;</div>
-<div class="graphql-code-line ">setKeyValues(inputs: [<a href="/reference/graphql-api/admin/input-types#keyvalueinput">KeyValueInput</a>!]!): [<a href="/reference/graphql-api/admin/object-types#setkeyvalueresult">SetKeyValueResult</a>!]!</div>
-
-
 <div class="graphql-code-line top-level">&#125;</div>
 <div class="graphql-code-line top-level">&#125;</div>
 </div>
 </div>
 
 
@@ -1748,6 +1736,18 @@ import MemberDescription from '@site/src/components/MemberDescription';
 <div class="graphql-code-line ">updateFacet(input: <a href="/reference/graphql-api/admin/input-types#updatefacetinput">UpdateFacetInput</a>!): <a href="/reference/graphql-api/admin/object-types#facet">Facet</a>!</div>
 <div class="graphql-code-line ">updateFacet(input: <a href="/reference/graphql-api/admin/input-types#updatefacetinput">UpdateFacetInput</a>!): <a href="/reference/graphql-api/admin/object-types#facet">Facet</a>!</div>
 
 
 
 
+<div class="graphql-code-line top-level">&#125;</div>
+</div>
+
+## updateFacetValue
+<div class="graphql-code-block">
+<div class="graphql-code-line top-level comment">"""</div>
+<div class="graphql-code-line top-level comment">Update a single FacetValue</div>
+<div class="graphql-code-line top-level comment">"""</div>
+<div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Mutation</span> &#123;</div>
+<div class="graphql-code-line ">updateFacetValue(input: <a href="/reference/graphql-api/admin/input-types#updatefacetvalueinput">UpdateFacetValueInput</a>!): <a href="/reference/graphql-api/admin/object-types#facetvalue">FacetValue</a>!</div>
+
+
 <div class="graphql-code-line top-level">&#125;</div>
 <div class="graphql-code-line top-level">&#125;</div>
 </div>
 </div>
 
 

+ 0 - 14
docs/docs/reference/graphql-api/admin/object-types.md

@@ -3713,20 +3713,6 @@ import MemberDescription from '@site/src/components/MemberDescription';
 <div class="graphql-code-line "><a href="/reference/graphql-api/admin/object-types#order">Order</a> | <a href="/reference/graphql-api/admin/object-types#emailaddressconflicterror">EmailAddressConflictError</a></div>
 <div class="graphql-code-line "><a href="/reference/graphql-api/admin/object-types#order">Order</a> | <a href="/reference/graphql-api/admin/object-types#emailaddressconflicterror">EmailAddressConflictError</a></div>
 </div>
 </div>
 
 
-## SetKeyValueResult
-
-<div class="graphql-code-block">
-<div class="graphql-code-line top-level">type <span class="graphql-code-identifier">SetKeyValueResult</span> &#123;</div>
-<div class="graphql-code-line ">key: <a href="/reference/graphql-api/admin/object-types#string">String</a>!</div>
-
-<div class="graphql-code-line ">result: <a href="/reference/graphql-api/admin/object-types#boolean">Boolean</a>!</div>
-
-<div class="graphql-code-line ">error: <a href="/reference/graphql-api/admin/object-types#string">String</a></div>
-
-
-<div class="graphql-code-line top-level">&#125;</div>
-</div>
-
 ## SetOrderShippingMethodResult
 ## SetOrderShippingMethodResult
 
 
 <div class="graphql-code-block">
 <div class="graphql-code-block">

+ 8 - 23
docs/docs/reference/graphql-api/admin/queries.md

@@ -205,52 +205,37 @@ import MemberDescription from '@site/src/components/MemberDescription';
 <div class="graphql-code-line top-level">&#125;</div>
 <div class="graphql-code-line top-level">&#125;</div>
 </div>
 </div>
 
 
-## facetValues
+## facetValue
 <div class="graphql-code-block">
 <div class="graphql-code-block">
 <div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Query</span> &#123;</div>
 <div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Query</span> &#123;</div>
-<div class="graphql-code-line ">facetValues(options: <a href="/reference/graphql-api/admin/input-types#facetvaluelistoptions">FacetValueListOptions</a>): <a href="/reference/graphql-api/admin/object-types#facetvaluelist">FacetValueList</a>!</div>
+<div class="graphql-code-line ">facetValue(id: <a href="/reference/graphql-api/admin/object-types#id">ID</a>!): <a href="/reference/graphql-api/admin/object-types#facetvalue">FacetValue</a></div>
 
 
 
 
 <div class="graphql-code-line top-level">&#125;</div>
 <div class="graphql-code-line top-level">&#125;</div>
 </div>
 </div>
 
 
-## facets
-<div class="graphql-code-block">
-<div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Query</span> &#123;</div>
-<div class="graphql-code-line ">facets(options: <a href="/reference/graphql-api/admin/input-types#facetlistoptions">FacetListOptions</a>): <a href="/reference/graphql-api/admin/object-types#facetlist">FacetList</a>!</div>
-
-
-<div class="graphql-code-line top-level">&#125;</div>
-</div>
-
-## fulfillmentHandlers
+## facetValues
 <div class="graphql-code-block">
 <div class="graphql-code-block">
 <div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Query</span> &#123;</div>
 <div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Query</span> &#123;</div>
-<div class="graphql-code-line ">fulfillmentHandlers: [<a href="/reference/graphql-api/admin/object-types#configurableoperationdefinition">ConfigurableOperationDefinition</a>!]!</div>
+<div class="graphql-code-line ">facetValues(options: <a href="/reference/graphql-api/admin/input-types#facetvaluelistoptions">FacetValueListOptions</a>): <a href="/reference/graphql-api/admin/object-types#facetvaluelist">FacetValueList</a>!</div>
 
 
 
 
 <div class="graphql-code-line top-level">&#125;</div>
 <div class="graphql-code-line top-level">&#125;</div>
 </div>
 </div>
 
 
-## getKeyValue
+## facets
 <div class="graphql-code-block">
 <div class="graphql-code-block">
-<div class="graphql-code-line top-level comment">"""</div>
-<div class="graphql-code-line top-level comment">Get value for a specific key (automatically scoped based on field configuration)</div>
-<div class="graphql-code-line top-level comment">"""</div>
 <div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Query</span> &#123;</div>
 <div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Query</span> &#123;</div>
-<div class="graphql-code-line ">getKeyValue(key: <a href="/reference/graphql-api/admin/object-types#string">String</a>!): <a href="/reference/graphql-api/admin/object-types#json">JSON</a></div>
+<div class="graphql-code-line ">facets(options: <a href="/reference/graphql-api/admin/input-types#facetlistoptions">FacetListOptions</a>): <a href="/reference/graphql-api/admin/object-types#facetlist">FacetList</a>!</div>
 
 
 
 
 <div class="graphql-code-line top-level">&#125;</div>
 <div class="graphql-code-line top-level">&#125;</div>
 </div>
 </div>
 
 
-## getKeyValues
+## fulfillmentHandlers
 <div class="graphql-code-block">
 <div class="graphql-code-block">
-<div class="graphql-code-line top-level comment">"""</div>
-<div class="graphql-code-line top-level comment">Get multiple key-value pairs (each automatically scoped)</div>
-<div class="graphql-code-line top-level comment">"""</div>
 <div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Query</span> &#123;</div>
 <div class="graphql-code-line top-level">type <span class="graphql-code-identifier">Query</span> &#123;</div>
-<div class="graphql-code-line ">getKeyValues(keys: [<a href="/reference/graphql-api/admin/object-types#string">String</a>!]!): <a href="/reference/graphql-api/admin/object-types#json">JSON</a></div>
+<div class="graphql-code-line ">fulfillmentHandlers: [<a href="/reference/graphql-api/admin/object-types#configurableoperationdefinition">ConfigurableOperationDefinition</a>!]!</div>
 
 
 
 
 <div class="graphql-code-line top-level">&#125;</div>
 <div class="graphql-code-line top-level">&#125;</div>

+ 1 - 1
docs/docs/reference/typescript-api/common/language-code.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## LanguageCode
 ## LanguageCode
 
 
-<GenerationInfo sourceFile="packages/common/src/generated-types.ts" sourceLine="2269" packageName="@vendure/common" />
+<GenerationInfo sourceFile="packages/common/src/generated-types.ts" sourceLine="2264" packageName="@vendure/common" />
 
 
 Languages in the form of a ISO 639-1 language code with optional
 Languages in the form of a ISO 639-1 language code with optional
 region or script modifier (e.g. de_AT). The selection available is based
 region or script modifier (e.g. de_AT). The selection available is based

+ 1 - 1
docs/docs/reference/typescript-api/common/permission.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## Permission
 ## Permission
 
 
-<GenerationInfo sourceFile="packages/common/src/generated-types.ts" sourceLine="4482" packageName="@vendure/common" />
+<GenerationInfo sourceFile="packages/common/src/generated-types.ts" sourceLine="4477" packageName="@vendure/common" />
 
 
 Permissions for administrators and customers. Used to control access to
 Permissions for administrators and customers. Used to control access to
 GraphQL resolvers via the <a href='/reference/typescript-api/request/allow-decorator#allow'>Allow</a> decorator.
 GraphQL resolvers via the <a href='/reference/typescript-api/request/allow-decorator#allow'>Allow</a> decorator.

+ 1 - 1
docs/docs/reference/typescript-api/configuration/default-config.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## defaultConfig
 ## defaultConfig
 
 
-<GenerationInfo sourceFile="packages/core/src/config/default-config.ts" sourceLine="72" packageName="@vendure/core" />
+<GenerationInfo sourceFile="packages/core/src/config/default-config.ts" sourceLine="68" packageName="@vendure/core" />
 
 
 The default configuration settings which are used if not explicitly overridden in the bootstrap() call.
 The default configuration settings which are used if not explicitly overridden in the bootstrap() call.
 
 

+ 1 - 1
docs/docs/reference/typescript-api/configuration/settings-store-fields.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## SettingsStoreFields
 ## SettingsStoreFields
 
 
-<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="107" packageName="@vendure/core" since="3.4.0" />
+<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="111" packageName="@vendure/core" since="3.4.0" />
 
 
 This is how SettingsStoreFields are defined in the <a href='/reference/typescript-api/configuration/vendure-config#vendureconfig'>VendureConfig</a> object.
 This is how SettingsStoreFields are defined in the <a href='/reference/typescript-api/configuration/vendure-config#vendureconfig'>VendureConfig</a> object.
 
 

+ 1 - 1
docs/docs/reference/typescript-api/custom-fields/custom-field-config.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## CustomFieldConfig
 ## CustomFieldConfig
 
 
-<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="228" packageName="@vendure/core" />
+<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="237" packageName="@vendure/core" />
 
 
 An object used to configure a custom field.
 An object used to configure a custom field.
 
 

+ 1 - 1
docs/docs/reference/typescript-api/custom-fields/index.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## CustomFields
 ## CustomFields
 
 
-<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="264" packageName="@vendure/core" />
+<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="273" packageName="@vendure/core" />
 
 
 Most entities can have additional fields added to them by defining an array of <a href='/reference/typescript-api/custom-fields/custom-field-config#customfieldconfig'>CustomFieldConfig</a>objects on against the corresponding key.
 Most entities can have additional fields added to them by defining an array of <a href='/reference/typescript-api/custom-fields/custom-field-config#customfieldconfig'>CustomFieldConfig</a>objects on against the corresponding key.
 
 

+ 1 - 1
docs/docs/reference/typescript-api/custom-fields/struct-custom-field-config.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## StructCustomFieldConfig
 ## StructCustomFieldConfig
 
 
-<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="215" packageName="@vendure/core" since="3.1.0" />
+<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="224" packageName="@vendure/core" since="3.1.0" />
 
 
 Configures a "struct" custom field.
 Configures a "struct" custom field.
 
 

+ 1 - 1
docs/docs/reference/typescript-api/custom-fields/struct-field-config.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## StructFieldConfig
 ## StructFieldConfig
 
 
-<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="200" packageName="@vendure/core" since="3.1.0" />
+<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="209" packageName="@vendure/core" since="3.1.0" />
 
 
 Configures an individual field of a "struct" custom field. The individual fields share
 Configures an individual field of a "struct" custom field. The individual fields share
 the same API as the top-level custom fields, with the exception that they do not support the
 the same API as the top-level custom fields, with the exception that they do not support the

+ 1 - 1
docs/docs/reference/typescript-api/custom-fields/typed-custom-single-field-config.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## TypedCustomSingleFieldConfig
 ## TypedCustomSingleFieldConfig
 
 
-<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="75" packageName="@vendure/core" />
+<GenerationInfo sourceFile="packages/core/src/config/custom-field/custom-field-types.ts" sourceLine="84" packageName="@vendure/core" />
 
 
 Configures a custom field on an entity in the <a href='/reference/typescript-api/custom-fields/#customfields'>CustomFields</a> config object.
 Configures a custom field on an entity in the <a href='/reference/typescript-api/custom-fields/#customfields'>CustomFields</a> config object.
 
 

+ 1 - 1
docs/docs/reference/typescript-api/settings-store/cleanup-orphaned-settings-store-entries-options.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## CleanupOrphanedSettingsStoreEntriesOptions
 ## CleanupOrphanedSettingsStoreEntriesOptions
 
 
-<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="236" packageName="@vendure/core" since="3.4.0" />
+<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="240" packageName="@vendure/core" since="3.4.0" />
 
 
 Options for cleaning up orphaned settings store entries.
 Options for cleaning up orphaned settings store entries.
 
 

+ 1 - 1
docs/docs/reference/typescript-api/settings-store/cleanup-orphaned-settings-store-entries-result.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## CleanupOrphanedSettingsStoreEntriesResult
 ## CleanupOrphanedSettingsStoreEntriesResult
 
 
-<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="274" packageName="@vendure/core" since="3.4.0" />
+<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="278" packageName="@vendure/core" since="3.4.0" />
 
 
 Result of a cleanup operation for orphaned settings store entries.
 Result of a cleanup operation for orphaned settings store entries.
 
 

+ 1 - 1
docs/docs/reference/typescript-api/settings-store/orphaned-settings-store-entry.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## OrphanedSettingsStoreEntry
 ## OrphanedSettingsStoreEntry
 
 
-<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="203" packageName="@vendure/core" since="3.4.0" />
+<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="207" packageName="@vendure/core" since="3.4.0" />
 
 
 Represents an orphaned settings store entry that no longer has a corresponding
 Represents an orphaned settings store entry that no longer has a corresponding
 field definition in the configuration.
 field definition in the configuration.

+ 1 - 1
docs/docs/reference/typescript-api/settings-store/set-settings-store-value-result.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## SetSettingsStoreValueResult
 ## SetSettingsStoreValueResult
 
 
-<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="175" packageName="@vendure/core" since="3.4.0" />
+<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="179" packageName="@vendure/core" since="3.4.0" />
 
 
 Result type for settings store set operations, providing detailed feedback
 Result type for settings store set operations, providing detailed feedback
 about the success or failure of each operation.
 about the success or failure of each operation.

+ 1 - 1
docs/docs/reference/typescript-api/settings-store/settings-store-field-config.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## SettingsStoreFieldConfig
 ## SettingsStoreFieldConfig
 
 
-<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="37" packageName="@vendure/core" since="3.4.0" />
+<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="41" packageName="@vendure/core" since="3.4.0" />
 
 
 Configuration for a settings store field, defining how it should be stored,
 Configuration for a settings store field, defining how it should be stored,
 scoped, validated, and accessed.
 scoped, validated, and accessed.

+ 1 - 1
docs/docs/reference/typescript-api/settings-store/settings-store-registration.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## SettingsStoreRegistration
 ## SettingsStoreRegistration
 
 
-<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="85" packageName="@vendure/core" since="3.4.0" />
+<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="89" packageName="@vendure/core" since="3.4.0" />
 
 
 Configuration for registering a namespace of settings store fields.
 Configuration for registering a namespace of settings store fields.
 
 

+ 5 - 1
docs/docs/reference/typescript-api/settings-store/settings-store-scope-function.md

@@ -31,5 +31,9 @@ const userAndChannelScope: SettingsStoreScopeFunction = ({ ctx }) =>
 ```
 ```
 
 
 ```ts title="Signature"
 ```ts title="Signature"
-type SettingsStoreScopeFunction = (params: { key: string; value?: any; ctx: RequestContext }) => string
+type SettingsStoreScopeFunction = (params: {
+    key: string;
+    value?: any;
+    ctx: RequestContext;
+}) => string
 ```
 ```

+ 1 - 1
docs/docs/reference/typescript-api/settings-store/settings-store-scopes.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 
 ## SettingsStoreScopes
 ## SettingsStoreScopes
 
 
-<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="140" packageName="@vendure/core" since="3.4.0" />
+<GenerationInfo sourceFile="packages/core/src/config/settings-store/settings-store-types.ts" sourceLine="144" packageName="@vendure/core" since="3.4.0" />
 
 
 Pre-built scope functions for common scoping patterns.
 Pre-built scope functions for common scoping patterns.