Просмотр исходного кода

docs: Update generated reference docs

Michael Bromley 6 месяцев назад
Родитель
Сommit
bdff99c767
30 измененных файлов с 728 добавлено и 160 удалено
  1. 1 1
      docs/docs/reference/core-plugins/email-plugin/email-event-handler-with-async-data.md
  2. 98 89
      docs/docs/reference/core-plugins/email-plugin/email-event-handler.md
  3. 18 12
      docs/docs/reference/core-plugins/email-plugin/template-loader.md
  4. 41 0
      docs/docs/reference/dashboard/components/data-table-bulk-actions.md
  5. 2 2
      docs/docs/reference/dashboard/components/detail-page.md
  6. 10 4
      docs/docs/reference/dashboard/components/list-page.md
  7. 12 9
      docs/docs/reference/dashboard/components/page-action-bar.md
  8. 11 11
      docs/docs/reference/dashboard/components/page-block.md
  9. 4 4
      docs/docs/reference/dashboard/components/page-layout.md
  10. 3 3
      docs/docs/reference/dashboard/components/page-title.md
  11. 3 3
      docs/docs/reference/dashboard/components/page.md
  12. 21 1
      docs/docs/reference/dashboard/extensions/dashboard-action-bar-item.md
  13. 80 0
      docs/docs/reference/dashboard/extensions/dashboard-alert-definition.md
  14. 28 0
      docs/docs/reference/dashboard/extensions/dashboard-base-widget-props.md
  15. 1 1
      docs/docs/reference/dashboard/extensions/dashboard-custom-form-component.md
  16. 35 0
      docs/docs/reference/dashboard/extensions/dashboard-custom-form-components.md
  17. 41 0
      docs/docs/reference/dashboard/extensions/dashboard-data-table-display-component.md
  18. 61 0
      docs/docs/reference/dashboard/extensions/dashboard-data-table-extension-definition.md
  19. 47 0
      docs/docs/reference/dashboard/extensions/dashboard-detail-form-display-component.md
  20. 47 0
      docs/docs/reference/dashboard/extensions/dashboard-detail-form-input-component.md
  21. 20 7
      docs/docs/reference/dashboard/extensions/dashboard-extension.md
  22. 1 1
      docs/docs/reference/dashboard/extensions/dashboard-page-block-definition.md
  23. 65 0
      docs/docs/reference/dashboard/extensions/dashboard-widget-definition.md
  24. 58 0
      docs/docs/reference/dashboard/extensions/dashboard-widget-instance.md
  25. 1 1
      docs/docs/reference/dashboard/extensions/define-dashboard-extension.md
  26. 1 1
      docs/docs/reference/dashboard/extensions/page-block-location.md
  27. 2 2
      docs/docs/reference/dashboard/hooks/use-auth.md
  28. 14 6
      docs/docs/reference/dashboard/hooks/use-detail-page.md
  29. 1 1
      docs/docs/reference/dashboard/hooks/use-permissions.md
  30. 1 1
      docs/docs/reference/typescript-api/configuration/merge-config.md

+ 1 - 1
docs/docs/reference/core-plugins/email-plugin/email-event-handler-with-async-data.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## EmailEventHandlerWithAsyncData
 
-<GenerationInfo sourceFile="packages/email-plugin/src/handler/event-handler.ts" sourceLine="492" packageName="@vendure/email-plugin" />
+<GenerationInfo sourceFile="packages/email-plugin/src/handler/event-handler.ts" sourceLine="506" packageName="@vendure/email-plugin" />
 
 Identical to the <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a> but with a `data` property added to the `event` based on the result
 of the `.loadData()` function.

+ 98 - 89
docs/docs/reference/core-plugins/email-plugin/email-event-handler.md

@@ -1,34 +1,33 @@
 ---
-title: 'EmailEventHandler'
+title: "EmailEventHandler"
 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';
 
+
 ## EmailEventHandler
 
-<GenerationInfo sourceFile="packages/email-plugin/src/handler/event-handler.ts" sourceLine="136" packageName="@vendure/email-plugin" />
+<GenerationInfo sourceFile="packages/email-plugin/src/handler/event-handler.ts" sourceLine="150" packageName="@vendure/email-plugin" />
 
 The EmailEventHandler defines how the EmailPlugin will respond to a given event.
 
 A handler is created by creating a new <a href='/reference/core-plugins/email-plugin/email-event-listener#emaileventlistener'>EmailEventListener</a> and calling the `.on()` method
 to specify which event to respond to.
 
-_Example_
+*Example*
 
 ```ts
 const confirmationHandler = new EmailEventListener('order-confirmation')
-    .on(OrderStateTransitionEvent)
-    .filter(event => event.toState === 'PaymentSettled')
-    .setRecipient(event => event.order.customer.emailAddress)
-    .setFrom('{{ fromAddress }}')
-    .setSubject(`Order confirmation for #{{ order.code }}`)
-    .setTemplateVars(event => ({ order: event.order }));
+  .on(OrderStateTransitionEvent)
+  .filter(event => event.toState === 'PaymentSettled')
+  .setRecipient(event => event.order.customer.emailAddress)
+  .setFrom('{{ fromAddress }}')
+  .setSubject(`Order confirmation for #{{ order.code }}`)
+  .setTemplateVars(event => ({ order: event.order }));
 ```
 
 This example creates a handler which listens for the `OrderStateTransitionEvent` and if the Order has
@@ -40,16 +39,16 @@ also to locate the directory of the email template files. So in the example abov
 
 ## Handling other languages
 
-By default, a handler will respond to all events on all channels and use the same subject ("Order confirmation for #12345" above)
+By default, the handler will respond to all events on all channels and use the same subject ("Order confirmation for #12345" above)
 and body template.
 
-Since v2.0 the `.addTemplate()` method has been **deprecated**. To serve different templates—for example, based on the current
-`languageCode`—implement a custom <a href='/reference/core-plugins/email-plugin/template-loader#templateloader'>TemplateLoader</a> and pass it to `EmailPlugin.init({ templateLoader: new MyTemplateLoader() })`.
+Since v2.0 the `.addTemplate()` method has been **deprecated**. To serve different templates  for example, based on the current
+`languageCode`  implement a custom <a href='/reference/core-plugins/email-plugin/template-loader#templateloader'>TemplateLoader</a> and pass it to `EmailPlugin.init({ templateLoader: new MyTemplateLoader() })`.
 
 The language is typically determined by the `languageCode` property of the event's `ctx` (<a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>) object, so the
 `loadTemplate()` method can use that to locate the correct template file.
 
-_Example_
+*Example*
 
 ```ts
 import { EmailPlugin, TemplateLoader } from '@vendure/email-plugin';
@@ -57,18 +56,18 @@ import { readFileSync } from 'fs';
 import path from 'path';
 
 class CustomLanguageAwareTemplateLoader implements TemplateLoader {
-    constructor(private templateDir: string) {}
+  constructor(private templateDir: string) {}
 
-    async loadTemplate(_injector, ctx, { type, templateName }) {
-        // e.g. returns the content of "body.de.hbs" or "body.en.hbs" depending on ctx.languageCode
-        const filePath = path.join(this.templateDir, type, `${templateName}.${ctx.languageCode}.hbs`);
-        return readFileSync(filePath, 'utf-8');
-    }
+  async loadTemplate(_injector, ctx, { type, templateName }) {
+    // e.g. returns the content of "body.de.hbs" or "body.en.hbs" depending on ctx.languageCode
+    const filePath = path.join(this.templateDir, type, `${templateName}.${ctx.languageCode}.hbs`);
+    return readFileSync(filePath, 'utf-8');
+  }
 }
 
 EmailPlugin.init({
-    templateLoader: new CustomLanguageAwareTemplateLoader(path.join(__dirname, '../static/email/templates')),
-    handlers: defaultEmailHandlers,
+  templateLoader: new CustomLanguageAwareTemplateLoader(path.join(__dirname, '../static/email/templates')),
+  handlers: defaultEmailHandlers,
 });
 ```
 
@@ -111,7 +110,7 @@ The template would look something like this:
             of the quote you recently requested:
         </mj-text>
 
-        <--! your custom email layout goes here -->
+        <!-- your custom email layout goes here -->
     </mj-column>
 </mj-section>
 
@@ -130,75 +129,87 @@ import { defaultEmailHandlers, EmailPlugin } from '@vendure/email-plugin';
 import { quoteRequestedHandler } from './plugins/quote-plugin';
 
 const config: VendureConfig = {
-    // Add an instance of the plugin to the plugins array
-    plugins: [
-        EmailPlugin.init({
-            handler: [...defaultEmailHandlers, quoteRequestedHandler],
-            // ... etc
-        }),
-    ],
+  // Add an instance of the plugin to the plugins array
+  plugins: [
+    EmailPlugin.init({
+      handler: [...defaultEmailHandlers, quoteRequestedHandler],
+      // ... etc
+    }),
+  ],
 };
 ```
 
+```ts title="Signature"
+class EmailEventHandler<T extends string = string, Event extends EventWithContext = EventWithContext> {
+    constructor(listener: EmailEventListener<T>, event: Type<Event>)
+    filter(filterFn: (event: Event) => boolean) => EmailEventHandler<T, Event>;
+    setRecipient(setRecipientFn: (event: Event) => string) => EmailEventHandler<T, Event>;
+    setLanguageCode(setLanguageCodeFn: (event: Event) => LanguageCode | undefined) => EmailEventHandler<T, Event>;
+    setTemplateVars(templateVarsFn: SetTemplateVarsFn<Event>) => EmailEventHandler<T, Event>;
+    setSubject(defaultSubject: string | SetSubjectFn<Event>) => EmailEventHandler<T, Event>;
+    setFrom(from: string) => EmailEventHandler<T, Event>;
+    setOptionalAddressFields(optionalAddressFieldsFn: SetOptionalAddressFieldsFn<Event>) => ;
+    setMetadata(optionalSetMetadataFn: SetMetadataFn<Event>) => ;
+    setAttachments(setAttachmentsFn: SetAttachmentsFn<Event>) => ;
+    addTemplate(config: EmailTemplateConfig) => EmailEventHandler<T, Event>;
+    loadData(loadDataFn: LoadDataFn<Event, R>) => EmailEventHandlerWithAsyncData<R, T, Event, EventWithAsyncData<Event, R>>;
+    setMockEvent(event: Omit<Event, 'ctx' | 'data'>) => EmailEventHandler<T, Event>;
+}
+```
+
 <div className="members-wrapper">
 
 ### constructor
 
-<MemberInfo kind="method" type={`(listener: <a href='/reference/core-plugins/email-plugin/email-event-listener#emaileventlistener'>EmailEventListener</a>&#60;T&#62;, event: Type&#60;Event&#62;) => EmailEventHandler`} />
+<MemberInfo kind="method" type={`(listener: <a href='/reference/core-plugins/email-plugin/email-event-listener#emaileventlistener'>EmailEventListener</a>&#60;T&#62;, event: Type&#60;Event&#62;) => EmailEventHandler`}   />
+
 
 ### filter
 
-<MemberInfo kind="method" type={`(filterFn: (event: Event) =&#62; boolean) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`} />
+<MemberInfo kind="method" type={`(filterFn: (event: Event) =&#62; boolean) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`}   />
 
 Defines a predicate function which is used to determine whether the event will trigger an email.
 Multiple filter functions may be defined.
-
 ### setRecipient
 
-<MemberInfo kind="method" type={`(setRecipientFn: (event: Event) =&#62; string) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`} />
+<MemberInfo kind="method" type={`(setRecipientFn: (event: Event) =&#62; string) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`}   />
 
 A function which defines how the recipient email address should be extracted from the incoming event.
 
 The recipient can be a plain email address: `'foobar@example.com'`
 Or with a formatted name (includes unicode support): `'Ноде Майлер <foobar@example.com>'`
 Or a comma-separated list of addresses: `'foobar@example.com, "Ноде Майлер" <bar@example.com>'`
-
 ### setLanguageCode
 
-<MemberInfo kind="method" type={`(setLanguageCodeFn: (event: Event) =&#62; <a href='/reference/typescript-api/common/language-code#languagecode'>LanguageCode</a> | undefined) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`} since="1.8.0" />
+<MemberInfo kind="method" type={`(setLanguageCodeFn: (event: Event) =&#62; <a href='/reference/typescript-api/common/language-code#languagecode'>LanguageCode</a> | undefined) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`}  since="1.8.0"  />
 
 A function which allows to override the language of the email. If not defined, the language from the context will be used.
-
 ### setTemplateVars
 
-<MemberInfo kind="method" type={`(templateVarsFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#settemplatevarsfn'>SetTemplateVarsFn</a>&#60;Event&#62;) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`} />
+<MemberInfo kind="method" type={`(templateVarsFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#settemplatevarsfn'>SetTemplateVarsFn</a>&#60;Event&#62;) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`}   />
 
 A function which returns an object hash of variables which will be made available to the Handlebars template
 and subject line for interpolation.
-
 ### setSubject
 
-<MemberInfo kind="method" type={`(defaultSubject: string | <a href='/reference/core-plugins/email-plugin/email-plugin-types#setsubjectfn'>SetSubjectFn</a>&#60;Event&#62;) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`} />
+<MemberInfo kind="method" type={`(defaultSubject: string | <a href='/reference/core-plugins/email-plugin/email-plugin-types#setsubjectfn'>SetSubjectFn</a>&#60;Event&#62;) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`}   />
 
 Sets the default subject of the email. The subject string may use Handlebars variables defined by the
 setTemplateVars() method.
-
 ### setFrom
 
-<MemberInfo kind="method" type={`(from: string) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`} />
+<MemberInfo kind="method" type={`(from: string) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`}   />
 
 Sets the default from field of the email. The from string may use Handlebars variables defined by the
 setTemplateVars() method.
-
 ### setOptionalAddressFields
 
-<MemberInfo kind="method" type={`(optionalAddressFieldsFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#setoptionaladdressfieldsfn'>SetOptionalAddressFieldsFn</a>&#60;Event&#62;) => `} since="1.1.0" />
+<MemberInfo kind="method" type={`(optionalAddressFieldsFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#setoptionaladdressfieldsfn'>SetOptionalAddressFieldsFn</a>&#60;Event&#62;) => `}  since="1.1.0"  />
 
 A function which allows <a href='/reference/core-plugins/email-plugin/email-plugin-types#optionaladdressfields'>OptionalAddressFields</a> to be specified such as "cc" and "bcc".
-
 ### setMetadata
 
-<MemberInfo kind="method" type={`(optionalSetMetadataFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#setmetadatafn'>SetMetadataFn</a>&#60;Event&#62;) => `} since="3.1.0" />
+<MemberInfo kind="method" type={`(optionalSetMetadataFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#setmetadatafn'>SetMetadataFn</a>&#60;Event&#62;) => `}  since="3.1.0"  />
 
 A function which allows <a href='/reference/core-plugins/email-plugin/email-plugin-types#emailmetadata'>EmailMetadata</a> to be specified for the email. This can be used
 to store arbitrary data about the email which can be used for tracking or other purposes.
@@ -207,22 +218,23 @@ It will be exposed in the <a href='/reference/core-plugins/email-plugin/email-se
 
 - An <a href='/reference/typescript-api/events/event-types#orderstatetransitionevent'>OrderStateTransitionEvent</a> occurs, and the EmailEventListener starts processing it.
 - The EmailEventHandler attaches metadata to the email:
-    ```ts
-    new EmailEventListener(EventType.ORDER_CONFIRMATION).on(OrderStateTransitionEvent).setMetadata(event => ({
-        type: EventType.ORDER_CONFIRMATION,
-        orderId: event.order.id,
-    }));
-    ```
+   ```ts
+   new EmailEventListener(EventType.ORDER_CONFIRMATION)
+     .on(OrderStateTransitionEvent)
+     .setMetadata(event => ({
+       type: EventType.ORDER_CONFIRMATION,
+       orderId: event.order.id,
+     }));
+  ```
 - Then, the EmailPlugin tries to send the email and publishes <a href='/reference/core-plugins/email-plugin/email-send-event#emailsendevent'>EmailSendEvent</a>,
-  passing `ctx`, emailDetails, error or success, and this metadata.
+  passing ctx, emailDetails, error or success, and this metadata.
 - In another part of the server, we have an eventBus that subscribes to EmailSendEvent. We can use
   `metadata.type` and `metadata.orderId` to identify the related order. For example, we can indicate on the
-  order that the email was successfully sent, or in case of an error, send a notification confirming
-  the order in another available way.
-
+   order that the email was successfully sent, or in case of an error, send a notification confirming
+   the order in another available way.
 ### setAttachments
 
-<MemberInfo kind="method" type={`(setAttachmentsFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#setattachmentsfn'>SetAttachmentsFn</a>&#60;Event&#62;) => `} />
+<MemberInfo kind="method" type={`(setAttachmentsFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#setattachmentsfn'>SetAttachmentsFn</a>&#60;Event&#62;) => `}   />
 
 Defines one or more files to be attached to the email. An attachment can be specified
 as either a `path` (to a file or URL) or as `content` which can be a string, Buffer or Stream.
@@ -232,34 +244,31 @@ into the job queue. For this reason the total size of all attachments passed as
 **less than ~50k**. If the attachments are greater than that limit, a warning will be logged and
 errors may result if using the DefaultJobQueuePlugin with certain DBs such as MySQL/MariaDB.
 
-_Example_
+*Example*
 
 ```ts
 const testAttachmentHandler = new EmailEventListener('activate-voucher')
-    .on(ActivateVoucherEvent)
-    // ... omitted some steps for brevity
-    .setAttachments(async event => {
-        const { imageUrl, voucherCode } = await getVoucherDataForUser(event.user.id);
-        return [
-            {
-                filename: `voucher-${voucherCode}.jpg`,
-                path: imageUrl,
-            },
-        ];
-    });
+  .on(ActivateVoucherEvent)
+  // ... omitted some steps for brevity
+  .setAttachments(async (event) => {
+    const { imageUrl, voucherCode } = await getVoucherDataForUser(event.user.id);
+    return [
+      {
+        filename: `voucher-${voucherCode}.jpg`,
+        path: imageUrl,
+      },
+    ];
+  });
 ```
-
 ### addTemplate
 
-<MemberInfo kind="method" deprecated="Define a custom TemplateLoader on plugin initalization to define templates based on the RequestContext.
-E.g. `EmailPlugin.init({ templateLoader: new CustomTemplateLoader() })`" type={`(config: EmailTemplateConfig) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`} />
+<MemberInfo kind="method" type={`(config: EmailTemplateConfig) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`}   />
 
 Add configuration for another template other than the default `"body.hbs"`. Use this method to define specific
 templates for channels or languageCodes other than the default.
-
 ### loadData
 
-<MemberInfo kind="method" type={`(loadDataFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#loaddatafn'>LoadDataFn</a>&#60;Event, R&#62;) => <a href='/reference/core-plugins/email-plugin/email-event-handler-with-async-data#emaileventhandlerwithasyncdata'>EmailEventHandlerWithAsyncData</a>&#60;R, T, Event, <a href='/reference/core-plugins/email-plugin/email-plugin-types#eventwithasyncdata'>EventWithAsyncData</a>&#60;Event, R&#62;&#62;`} />
+<MemberInfo kind="method" type={`(loadDataFn: <a href='/reference/core-plugins/email-plugin/email-plugin-types#loaddatafn'>LoadDataFn</a>&#60;Event, R&#62;) => <a href='/reference/core-plugins/email-plugin/email-event-handler-with-async-data#emaileventhandlerwithasyncdata'>EmailEventHandlerWithAsyncData</a>&#60;R, T, Event, <a href='/reference/core-plugins/email-plugin/email-plugin-types#eventwithasyncdata'>EventWithAsyncData</a>&#60;Event, R&#62;&#62;`}   />
 
 Allows data to be loaded asynchronously which can then be used as template variables.
 The `loadDataFn` has access to the event, the TypeORM `Connection` object, and an
@@ -267,28 +276,28 @@ The `loadDataFn` has access to the event, the TypeORM `Connection` object, and a
 by the <a href='/reference/typescript-api/plugin/plugin-common-module#plugincommonmodule'>PluginCommonModule</a>. The return value of the `loadDataFn` will be
 added to the `event` as the `data` property.
 
-_Example_
+*Example*
 
 ```ts
 new EmailEventListener('order-confirmation')
-    .on(OrderStateTransitionEvent)
-    .filter(event => event.toState === 'PaymentSettled' && !!event.order.customer)
-    .loadData(({ event, injector }) => {
-        const orderService = injector.get(OrderService);
-        return orderService.getOrderPayments(event.order.id);
-    })
-    .setTemplateVars(event => ({
-        order: event.order,
-        payments: event.data,
-    }));
-// ...
+  .on(OrderStateTransitionEvent)
+  .filter(event => event.toState === 'PaymentSettled' && !!event.order.customer)
+  .loadData(({ event, injector }) => {
+    const orderService = injector.get(OrderService);
+    return orderService.getOrderPayments(event.order.id);
+  })
+  .setTemplateVars(event => ({
+    order: event.order,
+    payments: event.data,
+  }))
+  // ...
 ```
-
 ### setMockEvent
 
-<MemberInfo kind="method" type={`(event: Omit&#60;Event, 'ctx' | 'data'&#62;) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`} />
+<MemberInfo kind="method" type={`(event: Omit&#60;Event, 'ctx' | 'data'&#62;) => <a href='/reference/core-plugins/email-plugin/email-event-handler#emaileventhandler'>EmailEventHandler</a>&#60;T, Event&#62;`}   />
 
 Optionally define a mock Event which is used by the dev mode mailbox app for generating mock emails
 from this handler, which is useful when developing the email templates.
 
+
 </div>

+ 18 - 12
docs/docs/reference/core-plugins/email-plugin/template-loader.md

@@ -1,23 +1,22 @@
 ---
-title: 'TemplateLoader'
+title: "TemplateLoader"
 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';
 
+
 ## TemplateLoader
 
 <GenerationInfo sourceFile="packages/email-plugin/src/template-loader/template-loader.ts" sourceLine="32" packageName="@vendure/email-plugin" />
 
 Loads email templates based on the given request context, type and template name
-and returns the template as a string.
+and return the template as a string.
 
-_Example_
+*Example*
 
 ```ts
 import { EmailPlugin, TemplateLoader } from '@vendure/email-plugin';
@@ -47,19 +46,20 @@ interface TemplateLoader {
 
 ### loadTemplate
 
-<MemberInfo kind="method" type={`(injector: <a href='/reference/typescript-api/common/injector#injector'>Injector</a>, ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, input: <a href='/reference/core-plugins/email-plugin/email-plugin-types#loadtemplateinput'>LoadTemplateInput</a>) => Promise&#60;string&#62;`} />
+<MemberInfo kind="method" type={`(injector: <a href='/reference/typescript-api/common/injector#injector'>Injector</a>, ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, input: <a href='/reference/core-plugins/email-plugin/email-plugin-types#loadtemplateinput'>LoadTemplateInput</a>) => Promise&#60;string&#62;`}   />
 
 Load template and return it's content as a string
-
 ### loadPartials
 
-<MemberInfo kind="method" type={`() => Promise&#60;Partial[]&#62;`} />
+<MemberInfo kind="method" type={`() => Promise&#60;Partial[]&#62;`}   />
 
 Load partials and return their contents.
 This method is only called during initialization, i.e. during server startup.
 
+
 </div>
 
+
 ## FileBasedTemplateLoader
 
 <GenerationInfo sourceFile="packages/email-plugin/src/template-loader/file-based-template-loader.ts" sourceLine="17" packageName="@vendure/email-plugin" />
@@ -74,21 +74,27 @@ class FileBasedTemplateLoader implements TemplateLoader {
     loadPartials() => Promise<Partial[]>;
 }
 ```
+* Implements: <code><a href='/reference/core-plugins/email-plugin/template-loader#templateloader'>TemplateLoader</a></code>
+
 
-- Implements: <code><a href='/reference/core-plugins/email-plugin/template-loader#templateloader'>TemplateLoader</a></code>
 
 <div className="members-wrapper">
 
 ### constructor
 
-<MemberInfo kind="method" type={`(templatePath: string) => FileBasedTemplateLoader`} />
+<MemberInfo kind="method" type={`(templatePath: string) => FileBasedTemplateLoader`}   />
+
 
 ### loadTemplate
 
-<MemberInfo kind="method" type={`(_injector: <a href='/reference/typescript-api/common/injector#injector'>Injector</a>, _ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, { type, templateName }: <a href='/reference/core-plugins/email-plugin/email-plugin-types#loadtemplateinput'>LoadTemplateInput</a>) => Promise&#60;string&#62;`} />
+<MemberInfo kind="method" type={`(_injector: <a href='/reference/typescript-api/common/injector#injector'>Injector</a>, _ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, { type, templateName }: <a href='/reference/core-plugins/email-plugin/email-plugin-types#loadtemplateinput'>LoadTemplateInput</a>) => Promise&#60;string&#62;`}   />
+
 
 ### loadPartials
 
-<MemberInfo kind="method" type={`() => Promise&#60;Partial[]&#62;`} />
+<MemberInfo kind="method" type={`() => Promise&#60;Partial[]&#62;`}   />
+
+
+
 
 </div>

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

@@ -0,0 +1,41 @@
+---
+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>

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

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## DetailPage
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/detail-page.tsx" sourceLine="124" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/detail-page.tsx" sourceLine="152" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -32,7 +32,7 @@ Parameters
 
 ## DetailPageProps
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/detail-page.tsx" sourceLine="39" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/detail-page.tsx" sourceLine="42" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 

+ 10 - 4
docs/docs/reference/dashboard/components/list-page.md

@@ -11,26 +11,26 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## ListPage
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/list-page.tsx" sourceLine="73" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/list-page.tsx" sourceLine="69" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
 Auto-generates a list page with columns generated based on the provided query document fields.
 
 ```ts title="Signature"
-function ListPage<T extends TypedDocumentNode<U, V>, U extends Record<string, any> = any, V extends ListQueryOptionsShape = ListQueryOptionsShape, AC extends AdditionalColumns<T> = AdditionalColumns<T>>(props: ListPageProps<T, U, V, AC>): void
+function ListPage<T extends TypedDocumentNode<U, V>, U extends Record<string, any> = any, V extends ListQueryOptionsShape = ListQueryOptionsShape, AC extends AdditionalColumns<T> = AdditionalColumns<T>>(props: Readonly<ListPageProps<T, U, V, AC>>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`<a href='/reference/dashboard/components/list-page#listpageprops'>ListPageProps</a>&#60;T, U, V, AC&#62;`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;<a href='/reference/dashboard/components/list-page#listpageprops'>ListPageProps</a>&#60;T, U, V, AC&#62;&#62;`} />
 
 
 
 ## ListPageProps
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/list-page.tsx" sourceLine="35" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/list-page.tsx" sourceLine="30" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -55,6 +55,7 @@ interface ListPageProps<T extends TypedDocumentNode<U, V>, U extends ListQuerySh
     rowActions?: RowAction<ListQueryFields<T>>[];
     transformData?: (data: any[]) => any[];
     setTableOptions?: (table: TableOptions<any>) => TableOptions<any>;
+    bulkActions?: BulkAction[];
 }
 ```
 
@@ -145,6 +146,11 @@ interface ListPageProps<T extends TypedDocumentNode<U, V>, U extends ListQuerySh
 <MemberInfo kind="property" type={`(table: TableOptions&#60;any&#62;) =&#62; TableOptions&#60;any&#62;`}   />
 
 
+### bulkActions
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/components/data-table-bulk-actions#bulkaction'>BulkAction</a>[]`}   />
+
+
 
 
 </div>

+ 12 - 9
docs/docs/reference/dashboard/components/page-action-bar.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## PageActionBar
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="261" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="275" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -20,45 +20,48 @@ It should be used in conjunction with the <a href='/reference/dashboard/componen
 as direct children.
 
 ```ts title="Signature"
-function PageActionBar(props: { children: React.ReactNode }): void
+function PageActionBar(props: Readonly<{ children: React.ReactNode }>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`{ children: React.ReactNode }`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;{ children: React.ReactNode }&#62;`} />
 
 
 
 ## PageActionBarLeft
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="287" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="297" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
 ```ts title="Signature"
-function PageActionBarLeft(props: { children: React.ReactNode }): void
+function PageActionBarLeft(props: Readonly<{ children: React.ReactNode }>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`{ children: React.ReactNode }`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;{ children: React.ReactNode }&#62;`} />
 
 
 
 ## PageActionBarRight
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="299" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="311" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
 ```ts title="Signature"
-function PageActionBarRight(props: { children: React.ReactNode }): void
+function PageActionBarRight(props: Readonly<{
+    children: React.ReactNode;
+    dropdownMenuItems?: InlineDropdownItem[];
+}>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`{ children: React.ReactNode }`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;{     children: React.ReactNode;     dropdownMenuItems?: InlineDropdownItem[]; }&#62;`} />
 

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

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## PageBlock
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="351" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="407" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -20,19 +20,19 @@ It should be provided with a `column` prop to determine which column it should a
 to identify the block.
 
 ```ts title="Signature"
-function PageBlock(props: PageBlockProps): void
+function PageBlock(props: Readonly<PageBlockProps>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`<a href='/reference/dashboard/components/page-block#pageblockprops'>PageBlockProps</a>`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;<a href='/reference/dashboard/components/page-block#pageblockprops'>PageBlockProps</a>&#62;`} />
 
 
 
 ## PageBlockProps
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="328" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="384" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -86,7 +86,7 @@ type PageBlockProps = {
 
 ## FullWidthPageBlock
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="378" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="444" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -94,34 +94,34 @@ A component for displaying a block of content on a page that takes up the full w
 This should be used inside the <a href='/reference/dashboard/components/page-layout#pagelayout'>PageLayout</a> component.
 
 ```ts title="Signature"
-function FullWidthPageBlock(props: Pick<PageBlockProps, 'children' | 'className' | 'blockId'>): void
+function FullWidthPageBlock(props: Readonly<Pick<PageBlockProps, 'children' | 'className' | 'blockId'>>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`Pick&#60;<a href='/reference/dashboard/components/page-block#pageblockprops'>PageBlockProps</a>, 'children' | 'className' | 'blockId'&#62;`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;Pick&#60;<a href='/reference/dashboard/components/page-block#pageblockprops'>PageBlockProps</a>, 'children' | 'className' | 'blockId'&#62;&#62;`} />
 
 
 
 ## CustomFieldsPageBlock
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="400" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="469" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
 A component for displaying an auto-generated form for custom fields on a page.
 
 ```ts title="Signature"
-function CustomFieldsPageBlock(props: {
+function CustomFieldsPageBlock(props: Readonly<{
     column: 'main' | 'side';
     entityType: string;
     control: Control<any, any>;
-}): void
+}>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`{     column: 'main' | 'side';     entityType: string;     control: Control&#60;any, any&#62;; }`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;{     column: 'main' | 'side';     entityType: string;     control: Control&#60;any, any&#62;; }&#62;`} />
 

+ 4 - 4
docs/docs/reference/dashboard/components/page-layout.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## PageLayout
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="157" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="170" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -19,19 +19,19 @@ This component governs the layout of the contents of a <a href='/reference/dashb
 It should contain all the <a href='/reference/dashboard/components/page-block#pageblock'>PageBlock</a> components that are to be displayed on the page.
 
 ```ts title="Signature"
-function PageLayout(props: PageLayoutProps): void
+function PageLayout(props: Readonly<PageLayoutProps>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`<a href='/reference/dashboard/components/page-layout#pagelayoutprops'>PageLayoutProps</a>`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;<a href='/reference/dashboard/components/page-layout#pagelayoutprops'>PageLayoutProps</a>&#62;`} />
 
 
 
 ## PageLayoutProps
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="127" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="140" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 

+ 3 - 3
docs/docs/reference/dashboard/components/page-title.md

@@ -11,18 +11,18 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## PageTitle
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="244" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="258" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
 A component for displaying the title of a page. This should be used inside the <a href='/reference/dashboard/components/page#page'>Page</a> component.
 
 ```ts title="Signature"
-function PageTitle(props: { children: React.ReactNode }): void
+function PageTitle(props: Readonly<{ children: React.ReactNode }>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`{ children: React.ReactNode }`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;{ children: React.ReactNode }&#62;`} />
 

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

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## Page
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="44" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/layout-engine/page-layout.tsx" sourceLine="48" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -25,11 +25,11 @@ The typical hierarchy of a page is as follows:
  - <a href='/reference/dashboard/components/page-layout#pagelayout'>PageLayout</a>
 
 ```ts title="Signature"
-function Page(props: PageProps): void
+function Page(props: Readonly<PageProps>): void
 ```
 Parameters
 
 ### props
 
-<MemberInfo kind="parameter" type={`PageProps`} />
+<MemberInfo kind="parameter" type={`Readonly&#60;PageProps&#62;`} />
 

+ 21 - 1
docs/docs/reference/dashboard/extensions/dashboard-action-bar-item.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## DashboardActionBarItem
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/extension-api-types.ts" sourceLine="51" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/layout.ts" sourceLine="19" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -21,6 +21,7 @@ Allows you to define custom action bar items for any page in the dashboard.
 interface DashboardActionBarItem {
     pageId: string;
     component: React.FunctionComponent<{ context: PageContextValue }>;
+    type?: 'button' | 'dropdown';
     requiresPermission?: string | string[];
 }
 ```
@@ -37,6 +38,25 @@ The ID of the page where the action bar item should be displayed.
 <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[]`}   />

+ 80 - 0
docs/docs/reference/dashboard/extensions/dashboard-alert-definition.md

@@ -0,0 +1,80 @@
+---
+title: "DashboardAlertDefinition"
+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';
+
+
+## DashboardAlertDefinition
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/alerts.ts" sourceLine="10" packageName="@vendure/dashboard" since="3.3.0" />
+
+**Status: Developer Preview**
+
+Allows you to define custom alerts that can be displayed in the dashboard.
+
+```ts title="Signature"
+interface DashboardAlertDefinition<TResponse = any> {
+    id: string;
+    title: string | ((data: TResponse) => string);
+    description?: string | ((data: TResponse) => string);
+    severity: 'info' | 'warning' | 'error';
+    check: () => Promise<TResponse> | TResponse;
+    recheckInterval?: number;
+    shouldShow?: (data: TResponse) => boolean;
+    actions?: Array<{
+        label: string;
+        onClick: (data: TResponse) => void;
+    }>;
+}
+```
+
+<div className="members-wrapper">
+
+### id
+
+<MemberInfo kind="property" type={`string`}   />
+
+A unique identifier for the alert.
+### title
+
+<MemberInfo kind="property" type={`string | ((data: TResponse) =&#62; string)`}   />
+
+The title of the alert. Can be a string or a function that returns a string based on the response data.
+### description
+
+<MemberInfo kind="property" type={`string | ((data: TResponse) =&#62; string)`}   />
+
+The description of the alert. Can be a string or a function that returns a string based on the response data.
+### severity
+
+<MemberInfo kind="property" type={`'info' | 'warning' | 'error'`}   />
+
+The severity level of the alert.
+### check
+
+<MemberInfo kind="property" type={`() =&#62; Promise&#60;TResponse&#62; | TResponse`}   />
+
+A function that checks the condition and returns the response data.
+### recheckInterval
+
+<MemberInfo kind="property" type={`number`}   />
+
+The interval in milliseconds to recheck the condition.
+### shouldShow
+
+<MemberInfo kind="property" type={`(data: TResponse) =&#62; boolean`}   />
+
+A function that determines whether the alert should be shown based on the response data.
+### actions
+
+<MemberInfo kind="property" type={`Array&#60;{         label: string;         onClick: (data: TResponse) =&#62; void;     }&#62;`}   />
+
+Optional actions that can be performed when the alert is shown.
+
+
+</div>

+ 28 - 0
docs/docs/reference/dashboard/extensions/dashboard-base-widget-props.md

@@ -0,0 +1,28 @@
+---
+title: "DashboardBaseWidgetProps"
+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';
+
+
+## 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**
+
+Base props interface for dashboard widgets.
+
+```ts title="Signature"
+type DashboardBaseWidgetProps = PropsWithChildren<{
+    id: string;
+    title?: string;
+    description?: string;
+    config?: Record<string, unknown>;
+    actions?: React.ReactNode;
+}>
+```

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

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## DashboardCustomFormComponent
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/extension-api-types.ts" sourceLine="18" packageName="@vendure/dashboard" since="3.4.0" />
+<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.
 

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

@@ -0,0 +1,35 @@
+---
+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>

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

@@ -0,0 +1,41 @@
+---
+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>

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

@@ -0,0 +1,61 @@
+---
+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>

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

@@ -0,0 +1,47 @@
+---
+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>

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

@@ -0,0 +1,47 @@
+---
+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>

+ 20 - 7
docs/docs/reference/dashboard/extensions/dashboard-extension.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## DashboardExtension
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/extension-api-types.ts" sourceLine="121" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/extension-api-types.ts" sourceLine="23" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -25,7 +25,9 @@ interface DashboardExtension {
     actionBarItems?: DashboardActionBarItem[];
     alerts?: DashboardAlertDefinition[];
     widgets?: DashboardWidgetDefinition[];
-    customFormComponents?: DashboardCustomFormComponent[];
+    customFormComponents?: DashboardCustomFormComponents;
+    dataTables?: DashboardDataTableExtensionDefinition[];
+    detailForms?: DashboardDetailFormExtensionDefinition[];
 }
 ```
 
@@ -53,20 +55,31 @@ Allows you to define custom page blocks for any page in the dashboard.
 Allows you to define custom action bar items for any page in the dashboard.
 ### alerts
 
-<MemberInfo kind="property" type={`DashboardAlertDefinition[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-alert-definition#dashboardalertdefinition'>DashboardAlertDefinition</a>[]`}   />
 
-Not yet implemented
+Allows you to define custom alerts that can be displayed in the dashboard.
 ### widgets
 
-<MemberInfo kind="property" type={`DashboardWidgetDefinition[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-widget-definition#dashboardwidgetdefinition'>DashboardWidgetDefinition</a>[]`}   />
 
 Allows you to define custom routes for the dashboard, which will render the
 given components and optionally also add a nav menu item.
 ### customFormComponents
 
-<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-custom-form-component#dashboardcustomformcomponent'>DashboardCustomFormComponent</a>[]`}   />
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-custom-form-components#dashboardcustomformcomponents'>DashboardCustomFormComponents</a>`}   />
+
+Unified registration for custom form components including custom field components,
+input components, and display components.
+### dataTables
+
+<MemberInfo kind="property" type={`<a href='/reference/dashboard/extensions/dashboard-data-table-extension-definition#dashboarddatatableextensiondefinition'>DashboardDataTableExtensionDefinition</a>[]`}   />
+
+Allows you to customize aspects of existing data tables in the dashboard.
+### detailForms
+
+<MemberInfo kind="property" type={`DashboardDetailFormExtensionDefinition[]`}   />
+
 
-Allows you to define custom form components for custom fields in the dashboard.
 
 
 </div>

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

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

+ 65 - 0
docs/docs/reference/dashboard/extensions/dashboard-widget-definition.md

@@ -0,0 +1,65 @@
+---
+title: "DashboardWidgetDefinition"
+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';
+
+
+## DashboardWidgetDefinition
+
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/extension-api/types/widgets.ts" sourceLine="66" packageName="@vendure/dashboard" since="3.3.0" />
+
+**Status: Developer Preview**
+
+Defines a dashboard widget that can be added to the dashboard.
+
+```ts title="Signature"
+type DashboardWidgetDefinition = {
+    id: string;
+    name: string;
+    component: React.ComponentType<DashboardBaseWidgetProps>;
+    defaultSize: { w: number; h: number; x?: number; y?: number };
+    minSize?: { w: number; h: number };
+    maxSize?: { w: number; h: number };
+}
+```
+
+<div className="members-wrapper">
+
+### id
+
+<MemberInfo kind="property" type={`string`}   />
+
+A unique identifier for the widget.
+### name
+
+<MemberInfo kind="property" type={`string`}   />
+
+The display name of the widget.
+### component
+
+<MemberInfo kind="property" type={`React.ComponentType&#60;<a href='/reference/dashboard/extensions/dashboard-base-widget-props#dashboardbasewidgetprops'>DashboardBaseWidgetProps</a>&#62;`}   />
+
+The React component that renders the widget.
+### defaultSize
+
+<MemberInfo kind="property" type={`{ w: number; h: number; x?: number; y?: number }`}   />
+
+The default size and position of the widget.
+### minSize
+
+<MemberInfo kind="property" type={`{ w: number; h: number }`}   />
+
+The minimum size constraints for the widget.
+### maxSize
+
+<MemberInfo kind="property" type={`{ w: number; h: number }`}   />
+
+The maximum size constraints for the widget.
+
+
+</div>

+ 58 - 0
docs/docs/reference/dashboard/extensions/dashboard-widget-instance.md

@@ -0,0 +1,58 @@
+---
+title: "DashboardWidgetInstance"
+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';
+
+
+## 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**
+
+Represents an instance of a dashboard widget with its layout and configuration.
+
+```ts title="Signature"
+type DashboardWidgetInstance = {
+    id: string;
+    widgetId: string;
+    layout: {
+        x: number;
+        y: number;
+        w: number;
+        h: number;
+    };
+    config?: Record<string, unknown>;
+}
+```
+
+<div className="members-wrapper">
+
+### id
+
+<MemberInfo kind="property" type={`string`}   />
+
+A unique identifier for the widget instance.
+### widgetId
+
+<MemberInfo kind="property" type={`string`}   />
+
+The ID of the widget definition this instance is based on.
+### layout
+
+<MemberInfo kind="property" type={`{         x: number;         y: number;         w: number;         h: number;     }`}   />
+
+The layout configuration for the widget.
+### config
+
+<MemberInfo kind="property" type={`Record&#60;string, unknown&#62;`}   />
+
+Optional configuration data for the widget.
+
+
+</div>

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

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

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

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

+ 2 - 2
docs/docs/reference/dashboard/hooks/use-auth.md

@@ -31,7 +31,7 @@ function useAuth(): void
 
 ```ts title="Signature"
 interface AuthContext {
-    status: 'authenticated' | 'verifying' | 'unauthenticated';
+    status: 'initial' | 'authenticated' | 'verifying' | 'unauthenticated';
     authenticationError?: string;
     isAuthenticated: boolean;
     login: (username: string, password: string, onSuccess?: () => void) => void;
@@ -45,7 +45,7 @@ interface AuthContext {
 
 ### status
 
-<MemberInfo kind="property" type={`'authenticated' | 'verifying' | 'unauthenticated'`}   />
+<MemberInfo kind="property" type={`'initial' | 'authenticated' | 'verifying' | 'unauthenticated'`}   />
 
 
 ### authenticationError

+ 14 - 6
docs/docs/reference/dashboard/hooks/use-detail-page.md

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## useDetailPage
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/use-detail-page.ts" sourceLine="224" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/use-detail-page.ts" sourceLine="239" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
@@ -77,7 +77,7 @@ const { form, submitHandler, entity, isPending, resetForm } = useDetailPage({
 ```
 
 ```ts title="Signature"
-function useDetailPage<T extends TypedDocumentNode<any, any>, C extends TypedDocumentNode<any, any>, U extends TypedDocumentNode<any, any>, EntityField extends keyof ResultOf<T> = keyof ResultOf<T>, VarNameUpdate extends keyof VariablesOf<U> = 'input', VarNameCreate extends keyof VariablesOf<C> = 'input'>(options: DetailPageOptions<T, C, U, EntityField, VarNameCreate, VarNameUpdate>): UseDetailPageResult<T, C, U, EntityField>
+function useDetailPage<T extends TypedDocumentNode<any, any>, C extends TypedDocumentNode<any, any>, U extends TypedDocumentNode<any, any>, EntityField extends keyof ResultOf<T> = keyof ResultOf<T>, VarNameUpdate extends keyof VariablesOf<U> = 'input', VarNameCreate extends keyof VariablesOf<C> = 'input'>(options: DetailPageOptions<T, C, U, EntityField, VarNameCreate, VarNameUpdate>): UseDetailPageResult<T, U, EntityField>
 ```
 Parameters
 
@@ -89,18 +89,19 @@ Parameters
 
 ## DetailPageOptions
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/use-detail-page.ts" sourceLine="39" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/use-detail-page.ts" sourceLine="46" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
 ```ts title="Signature"
 interface DetailPageOptions<T extends TypedDocumentNode<any, any>, C extends TypedDocumentNode<any, any>, U extends TypedDocumentNode<any, any>, EntityField extends keyof ResultOf<T> = DetailEntityPath<T>, VarNameCreate extends keyof VariablesOf<C> = 'input', VarNameUpdate extends keyof VariablesOf<U> = 'input'> {
+    pageId?: string;
     queryDocument: T;
     entityField?: EntityField;
     params: {
         id: string;
     };
-    entityName: string;
+    entityName?: string;
     createDocument?: C;
     updateDocument?: U;
     setValuesForUpdate: (entity: NonNullable<ResultOf<T>[EntityField]>) => VariablesOf<U>[VarNameUpdate];
@@ -113,6 +114,12 @@ interface DetailPageOptions<T extends TypedDocumentNode<any, any>, C extends Typ
 
 <div className="members-wrapper">
 
+### pageId
+
+<MemberInfo kind="property" type={`string`}   />
+
+The page id. This is optional, but if provided, it will be used to
+identify the page when extending the detail page query
 ### queryDocument
 
 <MemberInfo kind="property" type={`T`}   />
@@ -134,6 +141,7 @@ The parameters used to identify the entity.
 
 The entity type name for custom field configuration lookup.
 Required to filter out readonly custom fields before mutations.
+If not provided, the function will try to infer it from the query document.
 ### createDocument
 
 <MemberInfo kind="property" type={`C`}   />
@@ -176,12 +184,12 @@ The function to call when the update is successful.
 
 ## UseDetailPageResult
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/use-detail-page.ts" sourceLine="141" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/framework/page/use-detail-page.ts" sourceLine="157" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 
 ```ts title="Signature"
-interface UseDetailPageResult<T extends TypedDocumentNode<any, any>, C extends TypedDocumentNode<any, any>, U extends TypedDocumentNode<any, any>, EntityField extends keyof ResultOf<T>> {
+interface UseDetailPageResult<T extends TypedDocumentNode<any, any>, U extends TypedDocumentNode<any, any>, EntityField extends keyof ResultOf<T>> {
     form: UseFormReturn<RemoveNullFields<VariablesOf<U>['input']>>;
     submitHandler: (event: FormEvent<HTMLFormElement>) => void;
     entity?: DetailPageEntity<T, EntityField>;

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

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## usePermissions
 
-<GenerationInfo sourceFile="packages/dashboard/src/lib/hooks/use-permissions.ts" sourceLine="18" packageName="@vendure/dashboard" since="3.3.0" />
+<GenerationInfo sourceFile="packages/dashboard/src/lib/hooks/use-permissions.ts" sourceLine="19" packageName="@vendure/dashboard" since="3.3.0" />
 
 **Status: Developer Preview**
 

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

@@ -11,7 +11,7 @@ import MemberDescription from '@site/src/components/MemberDescription';
 
 ## mergeConfig
 
-<GenerationInfo sourceFile="packages/core/src/config/merge-config.ts" sourceLine="30" packageName="@vendure/core" />
+<GenerationInfo sourceFile="packages/core/src/config/merge-config.ts" sourceLine="32" packageName="@vendure/core" />
 
 Performs a deep merge of two VendureConfig objects. Unlike `Object.assign()` the `target` object is
 not mutated, instead the function returns a new object which is the result of deeply merging the