From a8f69761422b697991b0539a8bbc75570e087e0b Mon Sep 17 00:00:00 2001 From: Rivka Ungar Date: Thu, 20 Feb 2025 18:31:42 +0200 Subject: [PATCH 1/5] docs(Divider): uplift stories (#2773) --- .../core/src/components/Divider/Divider.tsx | 6 +++ .../Divider/__stories__/Divider.mdx | 2 +- .../__stories__/Divider.stories.module.scss | 16 ------- .../Divider/__stories__/Divider.stories.tsx | 42 +++++++++++++++---- 4 files changed, 42 insertions(+), 24 deletions(-) delete mode 100644 packages/core/src/components/Divider/__stories__/Divider.stories.module.scss diff --git a/packages/core/src/components/Divider/Divider.tsx b/packages/core/src/components/Divider/Divider.tsx index 2d74040e61..03e7fd0a4a 100644 --- a/packages/core/src/components/Divider/Divider.tsx +++ b/packages/core/src/components/Divider/Divider.tsx @@ -8,7 +8,13 @@ import { withStaticProps, VibeComponentProps } from "../../types"; import styles from "./Divider.module.scss"; export interface DividerProps extends VibeComponentProps { + /** + * The direction of the divider 'horizontal' or 'vertical'. + */ direction?: DividerDirection; + /** + * Removes margin from the divider. + */ withoutMargin?: boolean; } diff --git a/packages/core/src/components/Divider/__stories__/Divider.mdx b/packages/core/src/components/Divider/__stories__/Divider.mdx index 1d78e2c585..daf30d0770 100644 --- a/packages/core/src/components/Divider/__stories__/Divider.mdx +++ b/packages/core/src/components/Divider/__stories__/Divider.mdx @@ -1,4 +1,4 @@ -import { Canvas, Meta } from "@storybook/blocks"; +import { Meta } from "@storybook/blocks"; import { CHIP, ICONS, LABEL } from "../../../storybook/components/related-components/component-description-map"; import * as DividerStories from "./Divider.stories"; diff --git a/packages/core/src/components/Divider/__stories__/Divider.stories.module.scss b/packages/core/src/components/Divider/__stories__/Divider.stories.module.scss deleted file mode 100644 index 49e57933ca..0000000000 --- a/packages/core/src/components/Divider/__stories__/Divider.stories.module.scss +++ /dev/null @@ -1,16 +0,0 @@ -.divider-description { - &-container { - display: flex; - align-items: center; - height: 200px; - } - - &-text { - margin-right: var(--sb-spacing-large); - align-self: center; - } - - &-horizontal { - margin: 0 auto !important; - } -} diff --git a/packages/core/src/components/Divider/__stories__/Divider.stories.tsx b/packages/core/src/components/Divider/__stories__/Divider.stories.tsx index 6bfd50252f..ea3dffbe13 100644 --- a/packages/core/src/components/Divider/__stories__/Divider.stories.tsx +++ b/packages/core/src/components/Divider/__stories__/Divider.stories.tsx @@ -1,7 +1,6 @@ import React from "react"; import Divider, { DividerProps } from "../Divider"; import { createStoryMetaSettingsDecorator } from "../../../storybook"; -import styles from "./Divider.stories.module.scss"; const metaSettings = createStoryMetaSettingsDecorator({ component: Divider @@ -22,7 +21,15 @@ export default { export const Overview = { render: dividerTemplate.bind({}), - name: "Overview" + name: "Overview", + args: {}, + parameters: { + docs: { + liveEdit: { + isEnabled: false + } + } + } }; export const Directions = { @@ -35,17 +42,38 @@ export const Directions = { }} >
- Horizontal + + Horizontal +
-
- Vertical - +
+ + Vertical + +
), From a07969084be9088801263eac29d65aa344adf040 Mon Sep 17 00:00:00 2001 From: Tal Koren Date: Mon, 24 Feb 2025 10:11:23 +0200 Subject: [PATCH 2/5] feat(List): add role props (#2771) --- packages/core/src/components/List/List.tsx | 13 +++- .../components/List/__tests__/List.test.js | 59 +++++++++++++++++++ .../src/components/List/utils/ListUtils.ts | 4 +- .../core/src/components/ListItem/ListItem.tsx | 11 +++- 4 files changed, 80 insertions(+), 7 deletions(-) diff --git a/packages/core/src/components/List/List.tsx b/packages/core/src/components/List/List.tsx index 6710420c7a..29a0c2eb9f 100644 --- a/packages/core/src/components/List/List.tsx +++ b/packages/core/src/components/List/List.tsx @@ -1,6 +1,7 @@ import cx from "classnames"; import React, { AriaAttributes, + AriaRole, CSSProperties, forwardRef, ReactElement, @@ -52,6 +53,10 @@ export interface ListProps extends VibeComponentProps { */ renderOnlyVisibleItems?: boolean; style?: CSSProperties; + /** + * ARIA role for the list. + */ + role?: AriaRole; } const List: VibeComponent & { @@ -68,6 +73,7 @@ const List: VibeComponent & { "aria-controls": ariaControls, renderOnlyVisibleItems = false, style, + role = "listbox", "data-testid": dataTestId }: ListProps, ref @@ -139,7 +145,7 @@ const List: VibeComponent & { if (!React.isValidElement(child)) { return child; } - const id = (child.props as { id: string }).id || `${overrideId}-item-${index}`; + const id = (child.props as ListItemProps).id || `${overrideId}-item-${index}`; const currentRef = childrenRefs.current[index]; const isFocusableItem = currentRef === undefined || currentRef === null || isListItem(currentRef); return React.cloneElement(child, { @@ -147,7 +153,8 @@ const List: VibeComponent & { ref: ref => (childrenRefs.current[index] = ref), tabIndex: focusIndex === index && isFocusableItem ? 0 : -1, id, - component: getListItemComponentType(component) + component: getListItemComponentType(component), + role: (child.props as ListItemProps).role }); }); } @@ -167,7 +174,7 @@ const List: VibeComponent & { aria-describedby={ariaDescribedBy} aria-controls={ariaControls} tabIndex={-1} - role="listbox" + role={role} > {overrideChildren} diff --git a/packages/core/src/components/List/__tests__/List.test.js b/packages/core/src/components/List/__tests__/List.test.js index 4cfc31bc8e..086410ac11 100644 --- a/packages/core/src/components/List/__tests__/List.test.js +++ b/packages/core/src/components/List/__tests__/List.test.js @@ -102,4 +102,63 @@ describe("List", () => { expect(list).toHaveAttribute("aria-activedescendant", "list-item-1"); }); }); + + describe("custom roles", () => { + it("List render with a custom role", () => { + const { getByRole, getAllByRole } = render( + + 1 + 2 + + ); + expect(getByRole("list")).toBeInTheDocument(); + expect(getAllByRole("listitem")).toHaveLength(2); + }); + + it("selected ListItem should have aria-selected with custom roles", () => { + const { getByTestId } = render( + + + 1 + + + 2 + + + ); + expect(getByTestId("list-item-1")).toHaveAttribute("aria-selected", "true"); + expect(getByTestId("list-item-2")).not.toHaveAttribute("aria-selected"); + }); + + it("List should have aria-activedescendant with custom roles", () => { + const { getByRole } = render( + + + 1 + + + 2 + + + ); + expect(getByRole("list")).toHaveAttribute("aria-activedescendant", "list-item-2"); + }); + + it("List aria-activedescendant with custom roles", () => { + const { getByRole } = render( + + 1 + 2 + + 3 + + + ); + const list = getByRole("list"); + expect(list).toHaveAttribute("aria-activedescendant", "list-item-2"); + userEvent.tab(); + userEvent.keyboard("{arrowup}"); + expect(list).toHaveAttribute("aria-activedescendant", "list-item-1"); + }); + }); }); diff --git a/packages/core/src/components/List/utils/ListUtils.ts b/packages/core/src/components/List/utils/ListUtils.ts index e3560738f0..b329a2ad64 100644 --- a/packages/core/src/components/List/utils/ListUtils.ts +++ b/packages/core/src/components/List/utils/ListUtils.ts @@ -8,6 +8,8 @@ export const generateListId = () => { return `list-${listIdCounter++}`; }; +const VALID_ROLES = ["option", "listitem", "menuitem", "tab", "treeitem"]; + export const useListId = (id: string) => { const [listId, setListId] = useState(); useIsomorphicLayoutEffect(() => { @@ -37,7 +39,7 @@ export const getListItemComponentType = (listComponent: ListElement): ListItemEl }; export const isListItem = (element: HTMLElement) => { - return element && element instanceof HTMLElement && element.getAttribute("role") === "option"; + return element && element instanceof HTMLElement && VALID_ROLES.includes(element.getAttribute("role")); }; export const getNextListItemIndex = (currentIndex: number, childrenRefs: MutableRefObject) => { diff --git a/packages/core/src/components/ListItem/ListItem.tsx b/packages/core/src/components/ListItem/ListItem.tsx index 2e0c2a1c01..beb1337d3d 100644 --- a/packages/core/src/components/ListItem/ListItem.tsx +++ b/packages/core/src/components/ListItem/ListItem.tsx @@ -1,5 +1,5 @@ import cx from "classnames"; -import React, { AriaAttributes, forwardRef, useCallback, useContext, useEffect, useRef } from "react"; +import React, { AriaAttributes, AriaRole, forwardRef, useCallback, useContext, useEffect, useRef } from "react"; import { camelCase } from "lodash-es"; import { getStyle } from "../../helpers/typesciptCssModulesHelper"; import Text from "../Text/Text"; @@ -63,6 +63,10 @@ export interface ListItemProps extends VibeComponentProps { */ tabIndex?: number; "aria-current"?: AriaAttributes["aria-current"]; + /** + * ARIA role for the list item. + */ + role?: AriaRole; } const ListItem: VibeComponent & { sizes?: typeof SIZES; components?: typeof ListItemComponentTypeEnum } = @@ -80,7 +84,8 @@ const ListItem: VibeComponent & { sizes?: typeof SIZES; component tabIndex = 0, children, "aria-current": ariaCurrent, - "data-testid": dataTestId + "data-testid": dataTestId, + role = "option" }: ListItemProps, ref ) => { @@ -132,7 +137,7 @@ const ListItem: VibeComponent & { sizes?: typeof SIZES; component onClick={componentOnClick} onMouseEnter={componentOnHover} onFocus={componentOnHover} - role="option" + role={role} tabIndex={tabIndex} aria-current={ariaCurrent} > From 916a5a4712b7871ad0d521a644985979498073d8 Mon Sep 17 00:00:00 2001 From: vibe-bot Date: Mon, 24 Feb 2025 08:35:03 +0000 Subject: [PATCH 3/5] Publish [skip ci] - @vibe/core@3.29.0 --- packages/core/CHANGELOG.md | 11 +++++++++++ packages/core/package.json | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index cb2a58a230..06220747fc 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [3.29.0](https://github.com/mondaycom/vibe/compare/@vibe/core@3.28.2...@vibe/core@3.29.0) (2025-02-24) + + +### Features + +* **List:** add role props ([#2771](https://github.com/mondaycom/vibe/issues/2771)) ([a079690](https://github.com/mondaycom/vibe/commit/a07969084be9088801263eac29d65aa344adf040)) + + + + + ## [3.28.2](https://github.com/mondaycom/vibe/compare/@vibe/core@3.28.1...@vibe/core@3.28.2) (2025-02-19) diff --git a/packages/core/package.json b/packages/core/package.json index 2a45f4908b..7c853035f9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@vibe/core", - "version": "3.28.2", + "version": "3.29.0", "description": "Official monday.com UI resources for application development in React.js", "repository": { "type": "git", From b4d9ceeda6935a498aec2cd3ab0bc1180afd5c7b Mon Sep 17 00:00:00 2001 From: Rivka Ungar Date: Mon, 24 Feb 2025 12:12:19 +0200 Subject: [PATCH 4/5] chore(BaseListItem): internal component (#2764) --- .../BaseListItem/BaseListItem.module.scss | 50 +++++++++++ .../components/BaseListItem/BaseListItem.tsx | 64 ++++++++++++++ .../BaseListItem/BaseListItem.types.ts | 63 ++++++++++++++ .../__stories__/BaseListItem.stories.tsx | 32 +++++++ .../BaseListItem/__stories__/person1.png | Bin 0 -> 41652 bytes .../__tests__/BaseListItem.test.tsx | 80 ++++++++++++++++++ .../core/src/components/BaseListItem/index.ts | 2 + .../src/components/BaseListItem/utils.tsx | 44 ++++++++++ 8 files changed, 335 insertions(+) create mode 100644 packages/core/src/components/BaseListItem/BaseListItem.module.scss create mode 100644 packages/core/src/components/BaseListItem/BaseListItem.tsx create mode 100644 packages/core/src/components/BaseListItem/BaseListItem.types.ts create mode 100644 packages/core/src/components/BaseListItem/__stories__/BaseListItem.stories.tsx create mode 100644 packages/core/src/components/BaseListItem/__stories__/person1.png create mode 100644 packages/core/src/components/BaseListItem/__tests__/BaseListItem.test.tsx create mode 100644 packages/core/src/components/BaseListItem/index.ts create mode 100644 packages/core/src/components/BaseListItem/utils.tsx diff --git a/packages/core/src/components/BaseListItem/BaseListItem.module.scss b/packages/core/src/components/BaseListItem/BaseListItem.module.scss new file mode 100644 index 0000000000..9f888a9175 --- /dev/null +++ b/packages/core/src/components/BaseListItem/BaseListItem.module.scss @@ -0,0 +1,50 @@ +.wrapper { + display: flex; + align-items: center; + gap: var(--spacing-xs); + border-radius: var(--border-radius-small); + color: var(--primary-text-color); + + &:hover:not(.disabled), &.highlighted { + background-color: var(--primary-background-hover-color); + } + + &.disabled { + color: var(--disabled-text-color); + } + + &.selected { + background-color: var(--primary-selected-color); + + &:hover, &.highlighted { + background-color: var(--primary-selected-hover-color); + } + } + + &.small { + padding: 6px 8px; + } + + &.medium { + padding: 10px 12px; + } + + &.large { + padding: 14px 12px; + } + + .avatar, + .icon{ + flex-shrink: 0; + } + + .indent { + width: 20px; + } + + .endElement { + padding-inline-start: var(--spacing-small); + margin-inline-start: auto; + display: flex; + } +} diff --git a/packages/core/src/components/BaseListItem/BaseListItem.tsx b/packages/core/src/components/BaseListItem/BaseListItem.tsx new file mode 100644 index 0000000000..08cf88970f --- /dev/null +++ b/packages/core/src/components/BaseListItem/BaseListItem.tsx @@ -0,0 +1,64 @@ +import React, { forwardRef, useMemo } from "react"; +import cx from "classnames"; +import styles from "./BaseListItem.module.scss"; +import { getStyle } from "../../helpers/typesciptCssModulesHelper"; +import Text from "../Text/Text"; +import { BaseListItemProps } from "./BaseListItem.types"; +import { VibeComponent } from "../../types"; +import { Tooltip } from "../Tooltip"; +import { TextType } from "../Text"; +import { renderSideElement } from "./utils"; + +const BaseListItem: VibeComponent = forwardRef( + ( + { + label, + size = "medium", + selected, + disabled, + startElement, + endElement, + highlighted, + tooltipProps = {}, + className, + rtl = false, + id, + role = "option", + ...rest + }: BaseListItemProps, + ref + ) => { + const listItemClassNames = useMemo( + () => + cx( + styles.wrapper, + { + [styles.selected]: selected, + [styles.disabled]: disabled, + [styles.highlighted]: highlighted + }, + getStyle(styles, size), + className + ), + [selected, disabled, highlighted, size, className] + ); + + const textVariant: TextType = size === "small" ? "text2" : "text1"; + + return ( + +
  • + {startElement && renderSideElement(startElement, disabled, textVariant)} + + {label} + + {endElement && ( +
    {renderSideElement(endElement, disabled, textVariant)}
    + )} +
  • +
    + ); + } +); + +export default BaseListItem; diff --git a/packages/core/src/components/BaseListItem/BaseListItem.types.ts b/packages/core/src/components/BaseListItem/BaseListItem.types.ts new file mode 100644 index 0000000000..efa9f453fa --- /dev/null +++ b/packages/core/src/components/BaseListItem/BaseListItem.types.ts @@ -0,0 +1,63 @@ +import React, { ReactNode, AriaRole } from "react"; +import { SubIcon, VibeComponentProps } from "../../types"; +import { TooltipProps } from "../Tooltip"; + +export interface BaseListItemProps extends React.LiHTMLAttributes, VibeComponentProps { + value?: string; + /** + * Primary text content of the list item + */ + label: string; + /** + * Size of the list item. Will influence the padding and font size. + */ + size?: BaseListItemSizes; + /** + * Indicates whether the list item is selected. + */ + selected?: boolean; + /** + * Indicates whether the list item is disabled. + */ + disabled?: boolean; + /** + * Element to render at the start of the list item. + * Can be an avatar, icon, inset or a custom rendered element. + */ + startElement?: StartElement; + /** + * Element to render at the end of the list item. + * Can be an icon, suffix, or a custom rendered element. + */ + endElement?: EndElement; + /** + * Whether item should have highlight styling + */ + highlighted?: boolean; + /** + * Use when there's a need to display a tooltip on the list item (e.g., explain why disabled). + */ + tooltipProps?: Partial; + /** + * determines the position of the tooltip according to the direction. + */ + rtl?: boolean; + /** + * ARIA role for the list item. + */ + role?: AriaRole; + index?: number; +} + +export type BaseListItemSizes = "small" | "medium" | "large"; + +export type SideElement = + | { type: "avatar"; value: string; square?: boolean } + | { type: "icon"; value: SubIcon } + | { type: "indent" } + | { type: "suffix"; value: string } + | { type: "custom"; render: () => ReactNode }; + +export type StartElement = Extract; + +export type EndElement = Extract; diff --git a/packages/core/src/components/BaseListItem/__stories__/BaseListItem.stories.tsx b/packages/core/src/components/BaseListItem/__stories__/BaseListItem.stories.tsx new file mode 100644 index 0000000000..3e20815e96 --- /dev/null +++ b/packages/core/src/components/BaseListItem/__stories__/BaseListItem.stories.tsx @@ -0,0 +1,32 @@ +import { createStoryMetaSettingsDecorator } from "../../../storybook"; +import { createComponentTemplate } from "vibe-storybook-components"; +import BaseListItem from "../BaseListItem"; +import { Meta, StoryObj } from "@storybook/react"; + +type Story = StoryObj; + +const metaSettings = createStoryMetaSettingsDecorator({ + component: BaseListItem +}); + +export default { + title: "Internal/BaseListItem", + component: BaseListItem, + argTypes: metaSettings.argTypes, + decorators: metaSettings.decorators, + tags: ["internal"] +} satisfies Meta; + +const baseListItemTemplate = createComponentTemplate(BaseListItem); +import { Email } from "@vibe/icons"; +import person1 from "./person1.png"; + +export const Overview: Story = { + render: baseListItemTemplate.bind({}), + args: { + label: "This is a list item", + startElement: { type: "avatar", value: person1 }, + endElement: { type: "icon", value: Email }, + tooltipProps: { content: "tooltip content" } + } +}; diff --git a/packages/core/src/components/BaseListItem/__stories__/person1.png b/packages/core/src/components/BaseListItem/__stories__/person1.png new file mode 100644 index 0000000000000000000000000000000000000000..e25a6bfa1c17e40370a813925236cddf946af890 GIT binary patch literal 41652 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 +} + +describe("BaseListItem", () => { + const label = "Default Item"; + + it("should render correctly with all props", () => { + const { getByText } = renderBaseListItem({ + label, + value: "item1", + size: "large", + selected: true, + disabled: false, + highlighted: true, + startElement, + endElement, + className: "custom-wrapper" + }); + + expect(getByText("Default Item").parentNode).toHaveClass("large"); + expect(getByText("Default Item").parentNode).toHaveClass("selected"); + expect(getByText("Default Item").parentNode).toHaveClass("highlighted"); + expect(getByText("Default Item").parentNode).toHaveClass("custom-wrapper"); + }); + + describe("with declared props", () => { + it("should apply the size class", () => { + const { getByText } = renderBaseListItem({ label, size: "large" }); + expect(getByText("Default Item").parentNode).toHaveClass("large"); + }); + + it("should show start and end elements when provided", () => { + const { getByTestId } = renderBaseListItem({ + label, + startElement, + endElement + }); + + expect(getByTestId("avatar-content")).toBeInTheDocument(); + expect(getByTestId("icon")).toBeInTheDocument(); + }); + + it("should apply the selected class", () => { + const { getByText } = renderBaseListItem({ label, selected: true }); + expect(getByText("Default Item").parentNode).toHaveClass("selected"); + }); + + it("should apply the disabled class", () => { + const { getByText } = renderBaseListItem({ label, disabled: true }); + expect(getByText("Default Item").parentNode).toHaveClass("disabled"); + }); + + it("should apply the highlighted class", () => { + const { getByText } = renderBaseListItem({ label, highlighted: true }); + expect(getByText("Default Item").parentNode).toHaveClass("highlighted"); + }); + + it("should have role option", () => { + const { getByRole } = renderBaseListItem({ label }); + expect(getByRole("option")).toBeInTheDocument(); + }); + }); +}); diff --git a/packages/core/src/components/BaseListItem/index.ts b/packages/core/src/components/BaseListItem/index.ts new file mode 100644 index 0000000000..7bbee6ea48 --- /dev/null +++ b/packages/core/src/components/BaseListItem/index.ts @@ -0,0 +1,2 @@ +export { default as BaseListItem } from "./BaseListItem"; +export * from "./BaseListItem.types"; diff --git a/packages/core/src/components/BaseListItem/utils.tsx b/packages/core/src/components/BaseListItem/utils.tsx new file mode 100644 index 0000000000..fde32ffde9 --- /dev/null +++ b/packages/core/src/components/BaseListItem/utils.tsx @@ -0,0 +1,44 @@ +import { EndElement, StartElement } from "./BaseListItem.types"; +import { TextType } from "../Text"; +import React from "react"; +import Avatar from "../Avatar/Avatar"; +import styles from "./BaseListItem.module.scss"; +import Icon from "../Icon/Icon"; +import Text from "../Text/Text"; + +export function renderSideElement( + element: StartElement | EndElement, + disabled: boolean, + textVariant: TextType +): React.ReactNode { + switch (element.type) { + case "avatar": + return ( + + ); + + case "icon": + return ; + + case "indent": + return
    ; + + case "suffix": + return ( + + {element.value} + + ); + + case "custom": + return element.render(); + } +} From 1664fca35d9a8bfcea2724884f5ed0e132b46103 Mon Sep 17 00:00:00 2001 From: Rivka Ungar Date: Wed, 26 Feb 2025 09:33:36 +0200 Subject: [PATCH 5/5] docs(Avatar + AvatarGroup): uplift stories (#2774) --- .../components/Avatar/__stories__/Avatar.mdx | 2 +- .../Avatar/__stories__/Avatar.stories.tsx | 41 +++++++++++-------- .../AvatarGroup.stories.module.scss | 8 ---- .../__stories__/AvatarGroup.stories.tsx | 8 ++-- 4 files changed, 30 insertions(+), 29 deletions(-) delete mode 100644 packages/core/src/components/AvatarGroup/__stories__/AvatarGroup.stories.module.scss diff --git a/packages/core/src/components/Avatar/__stories__/Avatar.mdx b/packages/core/src/components/Avatar/__stories__/Avatar.mdx index 1badb7d903..087a0eacaf 100644 --- a/packages/core/src/components/Avatar/__stories__/Avatar.mdx +++ b/packages/core/src/components/Avatar/__stories__/Avatar.mdx @@ -1,5 +1,5 @@ import Avatar from "../Avatar"; -import { Canvas, Meta } from "@storybook/blocks"; +import { Meta } from "@storybook/blocks"; import { AVATAR_GROUP, BADGE, diff --git a/packages/core/src/components/Avatar/__stories__/Avatar.stories.tsx b/packages/core/src/components/Avatar/__stories__/Avatar.stories.tsx index 30f054beef..9ab9cf83db 100644 --- a/packages/core/src/components/Avatar/__stories__/Avatar.stories.tsx +++ b/packages/core/src/components/Avatar/__stories__/Avatar.stories.tsx @@ -26,23 +26,29 @@ export default { export const Overview = { render: avatarTemplate.bind({}), name: "Overview", - args: { size: "large", src: window.location.origin + "/" + person1, type: "img", ariaLabel: "Julia Martinez" + }, + parameters: { + docs: { + liveEdit: { + isEnabled: false + } + } } }; export const Size = { render: () => ( - <> + - + ), name: "Size" @@ -50,24 +56,24 @@ export const Size = { export const Disable = { render: () => ( - <> + - + ), name: "Disable" }; export const AvatarWithText = { render: () => ( - <> + - + ), name: "Avatar with text" @@ -75,12 +81,12 @@ export const AvatarWithText = { export const SquareAvatar = { render: () => ( - <> + - + ), name: "Square avatar" @@ -88,10 +94,10 @@ export const SquareAvatar = { export const AvatarWithRightBadge = { render: () => ( - <> + - + ), name: "Avatar with right badge" @@ -99,11 +105,10 @@ export const AvatarWithRightBadge = { export const AvatarWithLeftBadge = { render: () => ( - <> - {" "} + - + ), name: "Avatar with left badge" @@ -153,9 +158,11 @@ export const ClickableAvatar = { }, []); return ( - - - + + + + + ); }, diff --git a/packages/core/src/components/AvatarGroup/__stories__/AvatarGroup.stories.module.scss b/packages/core/src/components/AvatarGroup/__stories__/AvatarGroup.stories.module.scss deleted file mode 100644 index 58a87d780b..0000000000 --- a/packages/core/src/components/AvatarGroup/__stories__/AvatarGroup.stories.module.scss +++ /dev/null @@ -1,8 +0,0 @@ -.sliderCountContainer { - width: 100%; - align-content: start; -} - -.lastClickedAvatarIdText { - margin-left: var(--sb-spacing-medium); -} diff --git a/packages/core/src/components/AvatarGroup/__stories__/AvatarGroup.stories.tsx b/packages/core/src/components/AvatarGroup/__stories__/AvatarGroup.stories.tsx index 5f5a1501b5..b98e1ec722 100644 --- a/packages/core/src/components/AvatarGroup/__stories__/AvatarGroup.stories.tsx +++ b/packages/core/src/components/AvatarGroup/__stories__/AvatarGroup.stories.tsx @@ -15,7 +15,6 @@ import TableHeaderCell from "../../Table/TableHeaderCell/TableHeaderCell"; import TableBody from "../../Table/TableBody/TableBody"; import TableRow from "../../Table/TableRow/TableRow"; import TableCell from "../../Table/TableCell/TableCell"; -import styles from "./AvatarGroup.stories.module.scss"; const metaSettings = createStoryMetaSettingsDecorator({ component: AvatarGroup @@ -29,7 +28,7 @@ export default { parameters: { docs: { liveEdit: { - scope: { styles, StoryDescription, person1, person2, person3 } + scope: { StoryDescription, person1, person2, person3, person4 } } } } @@ -70,6 +69,9 @@ export const Overview: StoryObj = { person4: window.location.origin + "/" + person4 } }, + argTypes: { + persons: { table: { disable: true } } + }, parameters: { docs: { liveEdit: { @@ -220,7 +222,7 @@ export const MaxAvatarsToDisplay: Story = { const [max, setMax] = useState(4); return ( - +