diff --git a/change/@fluentui-react-drawer-abefd0d8-1c44-421b-96e5-723c20a91d46.json b/change/@fluentui-react-drawer-abefd0d8-1c44-421b-96e5-723c20a91d46.json new file mode 100644 index 00000000000000..22f14226d9c676 --- /dev/null +++ b/change/@fluentui-react-drawer-abefd0d8-1c44-421b-96e5-723c20a91d46.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "docs: improve types descriptions and fix TS circular references", + "packageName": "@fluentui/react-drawer", + "email": "marcosvmmoura@gmail.com", + "dependentChangeType": "patch" +} diff --git a/packages/react-components/react-drawer/etc/react-drawer.api.md b/packages/react-components/react-drawer/etc/react-drawer.api.md index 44c1d47ba968b4..23284d4c1ac322 100644 --- a/packages/react-components/react-drawer/etc/react-drawer.api.md +++ b/packages/react-components/react-drawer/etc/react-drawer.api.md @@ -10,6 +10,7 @@ import type { ComponentProps } from '@fluentui/react-utilities'; import type { ComponentState } from '@fluentui/react-utilities'; import { DialogProps } from '@fluentui/react-dialog'; import { DialogSurfaceProps } from '@fluentui/react-dialog'; +import { DialogSurfaceSlots } from '@fluentui/react-dialog'; import { DialogTitleSlots } from '@fluentui/react-dialog'; import type { ForwardRefComponent } from '@fluentui/react-utilities'; import * as React_2 from 'react'; @@ -115,7 +116,7 @@ export const DrawerInline: ForwardRefComponent; export const drawerInlineClassNames: SlotClassNames; // @public -export type DrawerInlineProps = ComponentProps & DrawerBaseTypes & { +export type DrawerInlineProps = ComponentProps & DrawerBaseProps & { separator?: boolean; }; @@ -125,7 +126,7 @@ export type DrawerInlineSlots = { }; // @public -export type DrawerInlineState = ComponentState & DrawerBaseTypes & Pick; +export type DrawerInlineState = ComponentState & DrawerInlineProps; // @public export const DrawerOverlay: ForwardRefComponent; @@ -134,20 +135,20 @@ export const DrawerOverlay: ForwardRefComponent; export const drawerOverlayClassNames: SlotClassNames; // @public -export type DrawerOverlayProps = ComponentProps & DrawerBaseTypes & Pick; +export type DrawerOverlayProps = ComponentProps & DrawerBaseProps & Pick; // @public (undocumented) -export type DrawerOverlaySlots = { +export type DrawerOverlaySlots = DialogSurfaceSlots & { root: Slot; }; // @public -export type DrawerOverlayState = ComponentState & DrawerBaseTypes & { +export type DrawerOverlayState = ComponentState & DrawerBaseProps & { dialog: DialogProps; }; // @public -export type DrawerProps = ComponentProps> & DrawerOverlayProps & DrawerInlineProps & { +export type DrawerProps = ComponentProps> & { type?: 'inline' | 'overlay'; }; diff --git a/packages/react-components/react-drawer/src/components/Drawer/Drawer.types.ts b/packages/react-components/react-drawer/src/components/Drawer/Drawer.types.ts index 1a463882c5ec68..65750604e41263 100644 --- a/packages/react-components/react-drawer/src/components/Drawer/Drawer.types.ts +++ b/packages/react-components/react-drawer/src/components/Drawer/Drawer.types.ts @@ -12,18 +12,16 @@ export type DrawerSlots = { /** * Drawer Props */ -export type DrawerProps = ComponentProps> & - DrawerOverlayProps & - DrawerInlineProps & { - /** - * Type of the drawer. - * @default overlay - * - * - 'overlay' - Drawer is hidden by default and can be opened by clicking on the trigger. - * - 'inline' - Drawer is stacked with the content - */ - type?: 'inline' | 'overlay'; - }; +export type DrawerProps = ComponentProps> & { + /** + * Type of the drawer. + * @default overlay + * + * - 'overlay' - Drawer is hidden by default and can be opened by clicking on the trigger. + * - 'inline' - Drawer is stacked with the content + */ + type?: 'inline' | 'overlay'; +}; /** * State used in rendering Drawer diff --git a/packages/react-components/react-drawer/src/components/DrawerInline/DrawerInline.types.ts b/packages/react-components/react-drawer/src/components/DrawerInline/DrawerInline.types.ts index 38457435b5fda4..5d3c963be6e513 100644 --- a/packages/react-components/react-drawer/src/components/DrawerInline/DrawerInline.types.ts +++ b/packages/react-components/react-drawer/src/components/DrawerInline/DrawerInline.types.ts @@ -1,5 +1,5 @@ import type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities'; -import { DrawerBaseTypes } from '../../util/DrawerBase.types'; +import { DrawerBaseProps } from '../../util/DrawerBase.types'; export type DrawerInlineSlots = { root: Slot<'div'>; @@ -9,7 +9,7 @@ export type DrawerInlineSlots = { * DrawerInline Props */ export type DrawerInlineProps = ComponentProps & - DrawerBaseTypes & { + DrawerBaseProps & { /** * Whether the drawer has a separator line. * @@ -21,6 +21,4 @@ export type DrawerInlineProps = ComponentProps & /** * State used in rendering DrawerInline */ -export type DrawerInlineState = ComponentState & - DrawerBaseTypes & - Pick; +export type DrawerInlineState = ComponentState & DrawerInlineProps; diff --git a/packages/react-components/react-drawer/src/components/DrawerOverlay/DrawerOverlay.types.ts b/packages/react-components/react-drawer/src/components/DrawerOverlay/DrawerOverlay.types.ts index 863a8cd8776d0f..db4aa3e5476322 100644 --- a/packages/react-components/react-drawer/src/components/DrawerOverlay/DrawerOverlay.types.ts +++ b/packages/react-components/react-drawer/src/components/DrawerOverlay/DrawerOverlay.types.ts @@ -1,8 +1,8 @@ -import { DialogProps, DialogSurfaceProps } from '@fluentui/react-dialog'; +import { DialogProps, DialogSurfaceProps, DialogSurfaceSlots } from '@fluentui/react-dialog'; import type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities'; -import { DrawerBaseTypes } from '../../util/DrawerBase.types'; +import { DrawerBaseProps } from '../../util/DrawerBase.types'; -export type DrawerOverlaySlots = { +export type DrawerOverlaySlots = DialogSurfaceSlots & { root: Slot; }; @@ -10,13 +10,13 @@ export type DrawerOverlaySlots = { * DrawerOverlay Props */ export type DrawerOverlayProps = ComponentProps & - DrawerBaseTypes & + DrawerBaseProps & Pick; /** * State used in rendering DrawerOverlay */ export type DrawerOverlayState = ComponentState & - DrawerBaseTypes & { + DrawerBaseProps & { dialog: DialogProps; }; diff --git a/packages/react-components/react-drawer/src/components/DrawerOverlay/useDrawerOverlay.ts b/packages/react-components/react-drawer/src/components/DrawerOverlay/useDrawerOverlay.ts index 8f13d0447a4e5a..fd18e686a9ae9e 100644 --- a/packages/react-components/react-drawer/src/components/DrawerOverlay/useDrawerOverlay.ts +++ b/packages/react-components/react-drawer/src/components/DrawerOverlay/useDrawerOverlay.ts @@ -23,6 +23,7 @@ export const useDrawerOverlay_unstable = ( return { components: { root: DialogSurface, + backdrop: 'div', }, root: getNativeElementProps('div', { diff --git a/packages/react-components/react-drawer/src/components/DrawerOverlay/useDrawerOverlayStyles.styles.ts b/packages/react-components/react-drawer/src/components/DrawerOverlay/useDrawerOverlayStyles.styles.ts index ca1366036dac56..737bccaa0439cf 100644 --- a/packages/react-components/react-drawer/src/components/DrawerOverlay/useDrawerOverlayStyles.styles.ts +++ b/packages/react-components/react-drawer/src/components/DrawerOverlay/useDrawerOverlayStyles.styles.ts @@ -2,9 +2,11 @@ import { makeStyles, mergeClasses } from '@griffel/react'; import type { DrawerOverlaySlots, DrawerOverlayState } from './DrawerOverlay.types'; import type { SlotClassNames } from '@fluentui/react-utilities'; import { useDrawerBaseStyles } from '../../util/useDrawerBaseStyles.styles'; +import * as React from 'react'; export const drawerOverlayClassNames: SlotClassNames = { root: 'fui-DrawerOverlay', + backdrop: 'fui-DrawerOverlay__backdrop', }; /** @@ -25,6 +27,8 @@ export const useDrawerOverlayStyles_unstable = (state: DrawerOverlayState): Draw const baseStyles = useDrawerBaseStyles(); const styles = useStyles(); + const backdrop = state.root.backdrop as React.HTMLAttributes; + state.root.className = mergeClasses( drawerOverlayClassNames.root, baseStyles.root, @@ -34,5 +38,9 @@ export const useDrawerOverlayStyles_unstable = (state: DrawerOverlayState): Draw state.root.className, ); + if (backdrop) { + backdrop.className = mergeClasses(drawerOverlayClassNames.backdrop, backdrop.className); + } + return state; }; diff --git a/packages/react-components/react-drawer/src/util/DrawerBase.types.ts b/packages/react-components/react-drawer/src/util/DrawerBase.types.ts index fbfc6246092a99..6376e1fb72eacc 100644 --- a/packages/react-components/react-drawer/src/util/DrawerBase.types.ts +++ b/packages/react-components/react-drawer/src/util/DrawerBase.types.ts @@ -1,4 +1,4 @@ -export type DrawerBaseTypes = { +export type DrawerBaseProps = { /** * Position of the drawer. * diff --git a/packages/react-components/react-drawer/src/util/getDefaultDrawerProps.ts b/packages/react-components/react-drawer/src/util/getDefaultDrawerProps.ts index be958c60d828a5..af835f0465ff97 100644 --- a/packages/react-components/react-drawer/src/util/getDefaultDrawerProps.ts +++ b/packages/react-components/react-drawer/src/util/getDefaultDrawerProps.ts @@ -1,6 +1,6 @@ -import { DrawerBaseTypes } from './DrawerBase.types'; +import { DrawerBaseProps } from './DrawerBase.types'; -export function getDefaultDrawerProps(props: DrawerBaseTypes) { +export function getDefaultDrawerProps(props: DrawerBaseProps) { const { open = false, defaultOpen = false, size = 'small', position = 'left' } = props; return {