From c9271750baf5a2c9f0a17002d5e962c474955f66 Mon Sep 17 00:00:00 2001 From: Blesilda Ramirez Date: Tue, 24 Sep 2024 17:52:51 +0800 Subject: [PATCH] pkp/pkp-lib#10447 Create new ButtonIcon component (#413) * pkp/pkp-lib#i10447 Add new icons to Icon Gallery * pkp/pkp-lib#10447 Add ButtonIcon component * pkp/pkp-lib#10447 Add Copy icon and remove fixed width and height on Expand and History icons * pkp/pkp-lib#10447 Update ButtonIcon style and props, provide documentation * pkp/pkp-lib#10447 Update DropdownActions component to use ButtonIcon * pkp/pkp-lib#10447 Adjust button size for ButtonIcon component * pkp/pkp-lib#10447 Remove prop enlarged icon for ButtonIcon component * pkp/pkp-lib#10447 Update how button is clicked in DropdownActions story for ellipsis/icon only mode --- src/components/ButtonIcon/ButtonIcon.mdx | 19 + .../ButtonIcon/ButtonIcon.stories.js | 35 ++ src/components/ButtonIcon/ButtonIcon.vue | 47 ++ .../DropdownActions.stories.js | 2 +- .../DropdownActions/DropdownActions.vue | 17 +- src/components/Icon/Icon.stories.js | 11 +- src/components/Icon/Icon.vue | 20 +- src/components/Icon/icons/Add.vue | 8 + src/components/Icon/icons/ArrowLeft.vue | 8 + src/components/Icon/icons/ArrowRight.vue | 18 + src/components/Icon/icons/Attention.vue | 8 + src/components/Icon/icons/Book.vue | 13 + src/components/Icon/icons/Calendar.vue | 514 ++++++++++++++++++ src/components/Icon/icons/ChevronLeft.vue | 10 + src/components/Icon/icons/ChevronRight.vue | 10 + src/components/Icon/icons/Clock.vue | 10 + src/components/Icon/icons/Copy.vue | 14 + src/components/Icon/icons/Expand.vue | 8 +- src/components/Icon/icons/History.vue | 8 +- 19 files changed, 758 insertions(+), 22 deletions(-) create mode 100644 src/components/ButtonIcon/ButtonIcon.mdx create mode 100644 src/components/ButtonIcon/ButtonIcon.stories.js create mode 100644 src/components/ButtonIcon/ButtonIcon.vue create mode 100644 src/components/Icon/icons/Add.vue create mode 100644 src/components/Icon/icons/ArrowLeft.vue create mode 100644 src/components/Icon/icons/ArrowRight.vue create mode 100644 src/components/Icon/icons/Attention.vue create mode 100644 src/components/Icon/icons/Book.vue create mode 100644 src/components/Icon/icons/Calendar.vue create mode 100644 src/components/Icon/icons/ChevronLeft.vue create mode 100644 src/components/Icon/icons/ChevronRight.vue create mode 100644 src/components/Icon/icons/Clock.vue create mode 100644 src/components/Icon/icons/Copy.vue diff --git a/src/components/ButtonIcon/ButtonIcon.mdx b/src/components/ButtonIcon/ButtonIcon.mdx new file mode 100644 index 000000000..b9f006991 --- /dev/null +++ b/src/components/ButtonIcon/ButtonIcon.mdx @@ -0,0 +1,19 @@ +import {Primary, Controls, Stories, Meta, Description} from '@storybook/blocks'; + +import * as ButtonIconStories from './ButtonIcon.stories.js'; + + + +# ButtonIcon + +## Usage + +Use the ButtonIcon component to create a button that displays only an icon, without any visible text. + +## Accessibility + +Since the button has no visible text, use a descriptive aria-label to ensure it's accessible to screen reader users. + + + + diff --git a/src/components/ButtonIcon/ButtonIcon.stories.js b/src/components/ButtonIcon/ButtonIcon.stories.js new file mode 100644 index 000000000..0c664b3a8 --- /dev/null +++ b/src/components/ButtonIcon/ButtonIcon.stories.js @@ -0,0 +1,35 @@ +import ButtonIcon from './ButtonIcon.vue'; +export default { + title: 'Components/ButtonIcon', + component: ButtonIcon, + render: (args) => ({ + components: {ButtonIcon}, + setup() { + return {args}; + }, + template: '', + }), +}; + +export const Default = { + args: { + icon: 'Add', + ariaLabel: 'Add more items', + }, +}; + +export const Disabled = { + args: { + icon: 'Cancel', + ariaLabel: 'Cancel', + isDisabled: true, + }, +}; + +export const Active = { + args: { + icon: 'Complete', + ariaLabel: 'Complete', + isActive: true, + }, +}; diff --git a/src/components/ButtonIcon/ButtonIcon.vue b/src/components/ButtonIcon/ButtonIcon.vue new file mode 100644 index 000000000..ad1032ee8 --- /dev/null +++ b/src/components/ButtonIcon/ButtonIcon.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/components/DropdownActions/DropdownActions.stories.js b/src/components/DropdownActions/DropdownActions.stories.js index 197042e17..85abcd785 100644 --- a/src/components/DropdownActions/DropdownActions.stories.js +++ b/src/components/DropdownActions/DropdownActions.stories.js @@ -146,7 +146,7 @@ export const EllipsisMenu = { const canvas = within(canvasElement); const user = userEvent.setup(); - await user.click(canvas.getByText('User management options')); + await user.click(canvas.getByLabelText('User management options')); }, }; diff --git a/src/components/DropdownActions/DropdownActions.vue b/src/components/DropdownActions/DropdownActions.vue index f1dbba826..923fccb0a 100644 --- a/src/components/DropdownActions/DropdownActions.vue +++ b/src/components/DropdownActions/DropdownActions.vue @@ -3,20 +3,26 @@
- {{ label }} + {{ label }}
@@ -72,6 +78,7 @@