From 6a345aabaecef2caaff74d3ddb2e9a503537896b Mon Sep 17 00:00:00 2001 From: Josh Black Date: Tue, 15 Mar 2022 15:02:15 -0500 Subject: [PATCH] refactor(popover): update popover usage and implementation (#10952) * refactor(popover): update popover usage and implementation * test(react): update public api snapshot * docs(react): remove light prop from storybook Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .../__snapshots__/PublicAPI-test.js.snap | 3 - .../react/src/components/Popover/index.js | 13 ++-- .../src/components/Popover/next/Popover.mdx | 78 +++++++++++++++++-- .../Popover/next/Popover.stories.js | 9 +-- .../src/components/Popover/next/story.scss | 4 +- .../scss/components/popover/_popover.scss | 8 -- 6 files changed, 81 insertions(+), 34 deletions(-) diff --git a/packages/react/__tests__/__snapshots__/PublicAPI-test.js.snap b/packages/react/__tests__/__snapshots__/PublicAPI-test.js.snap index c1a99c4d6b5a..25482eeb51b9 100644 --- a/packages/react/__tests__/__snapshots__/PublicAPI-test.js.snap +++ b/packages/react/__tests__/__snapshots__/PublicAPI-test.js.snap @@ -8669,9 +8669,6 @@ Map { "highContrast": Object { "type": "bool", }, - "light": Object { - "type": "bool", - }, "open": Object { "isRequired": true, "type": "bool", diff --git a/packages/react/src/components/Popover/index.js b/packages/react/src/components/Popover/index.js index 30a3b988027d..6e5726d9f580 100644 --- a/packages/react/src/components/Popover/index.js +++ b/packages/react/src/components/Popover/index.js @@ -19,7 +19,6 @@ const Popover = React.forwardRef(function Popover(props, ref) { children, dropShadow = true, highContrast = false, - light = false, open, ...rest } = props; @@ -29,7 +28,6 @@ const Popover = React.forwardRef(function Popover(props, ref) { [`${prefix}--popover--caret`]: caret, [`${prefix}--popover--drop-shadow`]: dropShadow, [`${prefix}--popover--high-contrast`]: highContrast, - [`${prefix}--popover--light`]: light, [`${prefix}--popover--open`]: open, [`${prefix}--popover--${align}`]: true, [customClassName]: !!customClassName, @@ -42,6 +40,12 @@ const Popover = React.forwardRef(function Popover(props, ref) { ); }); +// Note: this displayName is temporarily set so that Storybook ArgTable +// correctly displays the name of this component +if (__DEV__) { + Popover.displayName = 'Popover'; +} + Popover.propTypes = { /** * Specify how the popover should align with the trigger element @@ -96,11 +100,6 @@ Popover.propTypes = { */ highContrast: PropTypes.bool, - /** - * Render the component using the light variant - */ - light: PropTypes.bool, - /** * Specify whether the component is currently open or closed */ diff --git a/packages/react/src/components/Popover/next/Popover.mdx b/packages/react/src/components/Popover/next/Popover.mdx index 5cee9fc3c53f..558e96b54e48 100644 --- a/packages/react/src/components/Popover/next/Popover.mdx +++ b/packages/react/src/components/Popover/next/Popover.mdx @@ -1,8 +1,11 @@ -import { Preview, Props, Story } from '@storybook/addon-docs/blocks'; +import { ArgsTable, Canvas, Story } from '@storybook/addon-docs/blocks'; -# [Unstable] Popover +# Popover [Source code](https://github.com/carbon-design-system/carbon/tree/main/packages/react/src/components/Popover) + |  +[Usage guidelines](https://www.carbondesignsystem.com/components/popover/usage) + |  @@ -17,14 +20,77 @@ import { Preview, Props, Story } from '@storybook/addon-docs/blocks'; ## Overview -**Note: this component is currently experimental and does not follow semver.** +`Popover` is a primitive component used to build custom components which render +over other elements on the page. For example, `Popover` is used to build +our popover components in Carbon. -The Popover component is used to build layers that appear on top of the current -surface. +The `Popover` component accepts two items as `children`: a trigger element and +a `PopoverContent` component which contains the content to be rendered inside of the +`Popover`. + +```jsx +import { Popover, PopoverContent } from '@carbon/react'; +import React from 'react'; + +function CustomComponent() { + const [open, setOpen] = React.useState(false); + + return ( + + + + The content that is revealed by interacting with the Toggle button + + + ); +} +``` + +## Visibility + +The `open` prop allows you to control the visibility of the `Popover`. This is +often tracked in state and is toggled based on the trigger render inside of the +`Popover`. A trigger must be an interactive element and in most cases it will be +a `