@clicoh/orion-library 1.0.19 → 1.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/css/base.css +44 -6
- package/dist/components/00-base/RootLayout/RootLayout.d.ts.map +1 -1
- package/dist/components/00-base/RootLayout/RootLayout.jsx +7 -3
- package/dist/components/00-base/RootLayout/RootLayout.jsx.map +1 -1
- package/dist/components/01-atoms/Badge/Badge.d.ts.map +1 -1
- package/dist/components/01-atoms/Badge/Badge.jsx +7 -7
- package/dist/components/01-atoms/Badge/Badge.jsx.map +1 -1
- package/dist/components/01-atoms/Button/Button.jsx +2 -2
- package/dist/components/01-atoms/Button/Button.jsx.map +1 -1
- package/dist/components/01-atoms/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/01-atoms/Checkbox/Checkbox.jsx +17 -11
- package/dist/components/01-atoms/Checkbox/Checkbox.jsx.map +1 -1
- package/dist/components/01-atoms/FileUpload/FileUpload.d.ts +2 -0
- package/dist/components/01-atoms/FileUpload/FileUpload.d.ts.map +1 -1
- package/dist/components/01-atoms/FileUpload/FileUpload.jsx +21 -15
- package/dist/components/01-atoms/FileUpload/FileUpload.jsx.map +1 -1
- package/dist/components/01-atoms/Input/Input.d.ts +3 -1
- package/dist/components/01-atoms/Input/Input.d.ts.map +1 -1
- package/dist/components/01-atoms/Input/Input.jsx +22 -19
- package/dist/components/01-atoms/Input/Input.jsx.map +1 -1
- package/dist/components/01-atoms/Input/utils/RenderErrorOrHelperText.d.ts +5 -3
- package/dist/components/01-atoms/Input/utils/RenderErrorOrHelperText.d.ts.map +1 -1
- package/dist/components/01-atoms/Input/utils/RenderErrorOrHelperText.jsx +4 -4
- package/dist/components/01-atoms/Input/utils/RenderErrorOrHelperText.jsx.map +1 -1
- package/dist/components/01-atoms/Input/utils/border.d.ts.map +1 -1
- package/dist/components/01-atoms/Input/utils/border.js +4 -2
- package/dist/components/01-atoms/Input/utils/border.js.map +1 -1
- package/dist/components/01-atoms/Logo/Logo.d.ts +1 -1
- package/dist/components/01-atoms/Logo/Logo.d.ts.map +1 -1
- package/dist/components/01-atoms/Logo/Logo.jsx +3 -2
- package/dist/components/01-atoms/Logo/Logo.jsx.map +1 -1
- package/dist/components/01-atoms/MultiSelect/MultiSelect.d.ts +3 -1
- package/dist/components/01-atoms/MultiSelect/MultiSelect.d.ts.map +1 -1
- package/dist/components/01-atoms/MultiSelect/MultiSelect.jsx +112 -35
- package/dist/components/01-atoms/MultiSelect/MultiSelect.jsx.map +1 -1
- package/dist/components/01-atoms/OtpInput/OtpInput.d.ts +4 -2
- package/dist/components/01-atoms/OtpInput/OtpInput.d.ts.map +1 -1
- package/dist/components/01-atoms/OtpInput/OtpInput.jsx +14 -8
- package/dist/components/01-atoms/OtpInput/OtpInput.jsx.map +1 -1
- package/dist/components/01-atoms/RadialProgressBar/RadialProgressBar.d.ts.map +1 -1
- package/dist/components/01-atoms/RadialProgressBar/RadialProgressBar.jsx +4 -4
- package/dist/components/01-atoms/RadialProgressBar/RadialProgressBar.jsx.map +1 -1
- package/dist/components/01-atoms/Radio/Radio.d.ts.map +1 -1
- package/dist/components/01-atoms/Radio/Radio.jsx +24 -31
- package/dist/components/01-atoms/Radio/Radio.jsx.map +1 -1
- package/dist/components/01-atoms/Select/Select.d.ts.map +1 -1
- package/dist/components/01-atoms/Select/Select.jsx +18 -19
- package/dist/components/01-atoms/Select/Select.jsx.map +1 -1
- package/dist/components/01-atoms/SmallInput/SmallInput.d.ts +11 -0
- package/dist/components/01-atoms/SmallInput/SmallInput.d.ts.map +1 -0
- package/dist/components/01-atoms/SmallInput/SmallInput.jsx +19 -0
- package/dist/components/01-atoms/SmallInput/SmallInput.jsx.map +1 -0
- package/dist/components/01-atoms/SmallInput/index.d.ts +2 -0
- package/dist/components/01-atoms/SmallInput/index.d.ts.map +1 -0
- package/dist/components/01-atoms/SmallInput/index.js +2 -0
- package/dist/components/01-atoms/SmallInput/index.js.map +1 -0
- package/dist/components/01-atoms/Spinner/Spinner.d.ts +6 -1
- package/dist/components/01-atoms/Spinner/Spinner.d.ts.map +1 -1
- package/dist/components/01-atoms/Spinner/Spinner.jsx +3 -4
- package/dist/components/01-atoms/Spinner/Spinner.jsx.map +1 -1
- package/dist/components/01-atoms/Switch/Switch.d.ts.map +1 -1
- package/dist/components/01-atoms/Switch/Switch.jsx +6 -5
- package/dist/components/01-atoms/Switch/Switch.jsx.map +1 -1
- package/dist/components/01-atoms/ThemeSwitch/ThemeSwitch.d.ts +8 -0
- package/dist/components/01-atoms/ThemeSwitch/ThemeSwitch.d.ts.map +1 -0
- package/dist/components/01-atoms/ThemeSwitch/ThemeSwitch.jsx +17 -0
- package/dist/components/01-atoms/ThemeSwitch/ThemeSwitch.jsx.map +1 -0
- package/dist/components/01-atoms/ThemeSwitch/index.d.ts +2 -0
- package/dist/components/01-atoms/ThemeSwitch/index.d.ts.map +1 -0
- package/dist/components/01-atoms/ThemeSwitch/index.js +2 -0
- package/dist/components/01-atoms/ThemeSwitch/index.js.map +1 -0
- package/dist/components/01-atoms/Toast/Toast.d.ts.map +1 -1
- package/dist/components/01-atoms/Toast/Toast.jsx +9 -11
- package/dist/components/01-atoms/Toast/Toast.jsx.map +1 -1
- package/dist/components/01-atoms/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/01-atoms/Tooltip/Tooltip.jsx +2 -2
- package/dist/components/01-atoms/Tooltip/Tooltip.jsx.map +1 -1
- package/dist/components/01-atoms/index.d.ts +2 -0
- package/dist/components/01-atoms/index.d.ts.map +1 -1
- package/dist/components/01-atoms/index.js +2 -0
- package/dist/components/01-atoms/index.js.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.jsx +14 -10
- package/dist/components/02-molecules/Accordion/AccordionSection.jsx.map +1 -1
- package/dist/components/02-molecules/Autocomplete/Autocomplete.d.ts +4 -1
- package/dist/components/02-molecules/Autocomplete/Autocomplete.d.ts.map +1 -1
- package/dist/components/02-molecules/Autocomplete/Autocomplete.jsx +68 -8
- package/dist/components/02-molecules/Autocomplete/Autocomplete.jsx.map +1 -1
- package/dist/components/02-molecules/Avatar/Avatar.d.ts +3 -2
- package/dist/components/02-molecules/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/02-molecules/Avatar/Avatar.jsx +22 -5
- package/dist/components/02-molecules/Avatar/Avatar.jsx.map +1 -1
- package/dist/components/02-molecules/Avatar/AvatarItem.d.ts.map +1 -1
- package/dist/components/02-molecules/Avatar/AvatarItem.jsx +3 -3
- package/dist/components/02-molecules/Avatar/AvatarItem.jsx.map +1 -1
- package/dist/components/02-molecules/BellNotifications/BellNotification.d.ts +4 -1
- package/dist/components/02-molecules/BellNotifications/BellNotification.d.ts.map +1 -1
- package/dist/components/02-molecules/BellNotifications/BellNotification.jsx +24 -6
- package/dist/components/02-molecules/BellNotifications/BellNotification.jsx.map +1 -1
- package/dist/components/02-molecules/BellNotifications/NotificationPanel.d.ts +4 -1
- package/dist/components/02-molecules/BellNotifications/NotificationPanel.d.ts.map +1 -1
- package/dist/components/02-molecules/BellNotifications/NotificationPanel.jsx +48 -41
- package/dist/components/02-molecules/BellNotifications/NotificationPanel.jsx.map +1 -1
- package/dist/components/02-molecules/Breadcrumb/Breadcrumb.d.ts +3 -1
- package/dist/components/02-molecules/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/components/02-molecules/Breadcrumb/Breadcrumb.jsx +7 -7
- package/dist/components/02-molecules/Breadcrumb/Breadcrumb.jsx.map +1 -1
- package/dist/components/02-molecules/Breadcrumb/BreadcrumbSkeleton.d.ts +6 -2
- package/dist/components/02-molecules/Breadcrumb/BreadcrumbSkeleton.d.ts.map +1 -1
- package/dist/components/02-molecules/Breadcrumb/BreadcrumbSkeleton.jsx +3 -4
- package/dist/components/02-molecules/Breadcrumb/BreadcrumbSkeleton.jsx.map +1 -1
- package/dist/components/02-molecules/ButtonGroup/ButtonGroup.d.ts +1 -0
- package/dist/components/02-molecules/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/components/02-molecules/ButtonGroup/ButtonGroup.jsx +4 -3
- package/dist/components/02-molecules/ButtonGroup/ButtonGroup.jsx.map +1 -1
- package/dist/components/02-molecules/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/components/02-molecules/Dropdown/Dropdown.jsx +110 -19
- package/dist/components/02-molecules/Dropdown/Dropdown.jsx.map +1 -1
- package/dist/components/02-molecules/Filter/Filter.d.ts +4 -1
- package/dist/components/02-molecules/Filter/Filter.d.ts.map +1 -1
- package/dist/components/02-molecules/Filter/Filter.jsx +11 -8
- package/dist/components/02-molecules/Filter/Filter.jsx.map +1 -1
- package/dist/components/02-molecules/Menu/MenuItem.d.ts +4 -1
- package/dist/components/02-molecules/Menu/MenuItem.d.ts.map +1 -1
- package/dist/components/02-molecules/Menu/MenuItem.jsx +59 -28
- package/dist/components/02-molecules/Menu/MenuItem.jsx.map +1 -1
- package/dist/components/02-molecules/Menu/MenuList.d.ts +5 -2
- package/dist/components/02-molecules/Menu/MenuList.d.ts.map +1 -1
- package/dist/components/02-molecules/Menu/MenuList.jsx +60 -16
- package/dist/components/02-molecules/Menu/MenuList.jsx.map +1 -1
- package/dist/components/02-molecules/Modal/Modal.d.ts +5 -1
- package/dist/components/02-molecules/Modal/Modal.d.ts.map +1 -1
- package/dist/components/02-molecules/Modal/Modal.jsx +25 -10
- package/dist/components/02-molecules/Modal/Modal.jsx.map +1 -1
- package/dist/components/02-molecules/Modal/useDialogFocus.d.ts +10 -0
- package/dist/components/02-molecules/Modal/useDialogFocus.d.ts.map +1 -0
- package/dist/components/02-molecules/Modal/useDialogFocus.js +73 -0
- package/dist/components/02-molecules/Modal/useDialogFocus.js.map +1 -0
- package/dist/components/02-molecules/Pagination/Pagination.d.ts +5 -1
- package/dist/components/02-molecules/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/02-molecules/Pagination/Pagination.jsx +18 -15
- package/dist/components/02-molecules/Pagination/Pagination.jsx.map +1 -1
- package/dist/components/02-molecules/SlideOver/SlideOver.d.ts +6 -2
- package/dist/components/02-molecules/SlideOver/SlideOver.d.ts.map +1 -1
- package/dist/components/02-molecules/SlideOver/SlideOver.jsx +17 -15
- package/dist/components/02-molecules/SlideOver/SlideOver.jsx.map +1 -1
- package/dist/components/02-molecules/Tab/TabItem.d.ts +2 -2
- package/dist/components/02-molecules/Tab/TabItem.d.ts.map +1 -1
- package/dist/components/02-molecules/Tab/TabItem.jsx +4 -5
- package/dist/components/02-molecules/Tab/TabItem.jsx.map +1 -1
- package/dist/components/02-molecules/Tab/TabList.d.ts.map +1 -1
- package/dist/components/02-molecules/Tab/TabList.jsx +42 -13
- package/dist/components/02-molecules/Tab/TabList.jsx.map +1 -1
- package/dist/components/02-molecules/Table/Table.d.ts +5 -1
- package/dist/components/02-molecules/Table/Table.d.ts.map +1 -1
- package/dist/components/02-molecules/Table/Table.jsx +31 -14
- package/dist/components/02-molecules/Table/Table.jsx.map +1 -1
- package/dist/components/02-molecules/Table/TableEmpty.d.ts.map +1 -1
- package/dist/components/02-molecules/Table/TableEmpty.jsx +2 -2
- package/dist/components/02-molecules/Table/TableEmpty.jsx.map +1 -1
- package/dist/components/02-molecules/Table/TableSkeleton.jsx +2 -2
- package/dist/components/02-molecules/Table/TableSkeleton.jsx.map +1 -1
- package/dist/components/02-molecules/TimePicker/TimePicker.d.ts +6 -1
- package/dist/components/02-molecules/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/components/02-molecules/TimePicker/TimePicker.jsx +11 -11
- package/dist/components/02-molecules/TimePicker/TimePicker.jsx.map +1 -1
- package/dist/components/03-organisms/AsideFilters/AsideFilters.jsx +1 -1
- package/dist/components/03-organisms/AsideFilters/AsideFilters.jsx.map +1 -1
- package/dist/components/03-organisms/DataTable/DataTable.d.ts +2 -2
- package/dist/components/03-organisms/DataTable/DataTable.d.ts.map +1 -1
- package/dist/components/03-organisms/DataTable/DataTable.jsx +1 -1
- package/dist/components/03-organisms/DataTable/DataTable.jsx.map +1 -1
- package/dist/components/03-organisms/Header/Header.d.ts +3 -1
- package/dist/components/03-organisms/Header/Header.d.ts.map +1 -1
- package/dist/components/03-organisms/Header/Header.jsx +4 -3
- package/dist/components/03-organisms/Header/Header.jsx.map +1 -1
- package/dist/components/03-organisms/ModalMultiple/ModalMultiple.d.ts +9 -5
- package/dist/components/03-organisms/ModalMultiple/ModalMultiple.d.ts.map +1 -1
- package/dist/components/03-organisms/ModalMultiple/ModalMultiple.jsx +25 -12
- package/dist/components/03-organisms/ModalMultiple/ModalMultiple.jsx.map +1 -1
- package/dist/components/04-templates/DashboardTemplate/DashboardTemplate.d.ts +3 -1
- package/dist/components/04-templates/DashboardTemplate/DashboardTemplate.d.ts.map +1 -1
- package/dist/components/04-templates/DashboardTemplate/DashboardTemplate.jsx +5 -5
- package/dist/components/04-templates/DashboardTemplate/DashboardTemplate.jsx.map +1 -1
- package/dist/components/04-templates/DashboardTemplate/HeadingWithTitleSkeleton.d.ts +6 -2
- package/dist/components/04-templates/DashboardTemplate/HeadingWithTitleSkeleton.d.ts.map +1 -1
- package/dist/components/04-templates/DashboardTemplate/HeadingWithTitleSkeleton.jsx +3 -4
- package/dist/components/04-templates/DashboardTemplate/HeadingWithTitleSkeleton.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/LoginForm.d.ts +7 -1
- package/dist/components/04-templates/LoginTemplate/LoginForm.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/LoginForm.jsx +7 -7
- package/dist/components/04-templates/LoginTemplate/LoginForm.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/LoginTemplate.d.ts +1 -0
- package/dist/components/04-templates/LoginTemplate/LoginTemplate.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/LoginTemplate.jsx +4 -4
- package/dist/components/04-templates/LoginTemplate/LoginTemplate.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepFour.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepFour.jsx +3 -3
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepFour.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepOne.d.ts +2 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepOne.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepOne.jsx +5 -5
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepOne.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepThree.d.ts +3 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepThree.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepThree.jsx +9 -9
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepThree.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepTwo.d.ts +2 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepTwo.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepTwo.jsx +6 -6
- package/dist/components/04-templates/LoginTemplate/SetupMfa/StepTwo.jsx.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/index.d.ts +11 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/index.d.ts.map +1 -1
- package/dist/components/04-templates/LoginTemplate/SetupMfa/index.jsx +16 -6
- package/dist/components/04-templates/LoginTemplate/SetupMfa/index.jsx.map +1 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.d.ts.map +1 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.jsx +5 -3
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.jsx.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useTheme.d.ts +21 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTheme.jsx +82 -0
- package/dist/hooks/useTheme.jsx.map +1 -0
- package/package.json +3 -2
|
@@ -3,7 +3,6 @@ import clsx from 'clsx';
|
|
|
3
3
|
import Link from 'next/link';
|
|
4
4
|
import { FaChevronDown, FaRegStar, FaStar } from 'react-icons/fa';
|
|
5
5
|
import { Show } from '../../00-base';
|
|
6
|
-
import { Paragraph } from '../../01-atoms';
|
|
7
6
|
/**
|
|
8
7
|
* MenuItem component for rendering a navigation menu item with optional toggle functionality.
|
|
9
8
|
*
|
|
@@ -29,23 +28,42 @@ import { Paragraph } from '../../01-atoms';
|
|
|
29
28
|
*
|
|
30
29
|
* @returns {ReactNode} The rendered MenuItem component.
|
|
31
30
|
*/
|
|
32
|
-
export function MenuItem({ text, path, toggle, onClickToggle, icon, isActive, target, level = 1, isOpen = false, isFavorite = false, onFavoriteToggle, orientation = 'vertical', }) {
|
|
31
|
+
export function MenuItem({ text, path, toggle, onClickToggle, icon, isActive, target, level = 1, isOpen = false, isFavorite = false, onFavoriteToggle, getFavoriteAriaLabel, orientation = 'vertical', submenuId, toggleId, }) {
|
|
33
32
|
const isHorizontalTop = orientation === 'horizontal' && level === 1;
|
|
34
|
-
const linkStyleMap = clsx('link relative flex w-full cursor-pointer items-center justify-between gap-2', level === 1 && 'h-14 pl-12', level === 2 && 'h-10 pl-12', level >= 3 && 'text-gray-1 h-10 pl-16', isHorizontalTop && [
|
|
35
|
-
'text-gray-
|
|
36
|
-
!isActive && 'hover:text-gray-1',
|
|
37
|
-
isActive && 'text-gray-1',
|
|
33
|
+
const linkStyleMap = clsx('link focus-visible:ring-lavender relative flex w-full cursor-pointer items-center justify-between gap-2 focus-visible:ring-2 focus-visible:outline-none', level === 1 && 'h-14 pl-12', level === 2 && 'h-10 pl-12', level >= 3 && 'text-gray-1 dark:text-gray-3 h-10 pl-16', isHorizontalTop && [
|
|
34
|
+
'text-gray-1 dark:text-gray-3 transition-colors',
|
|
35
|
+
!isActive && 'hover:text-gray-1 dark:hover:text-white',
|
|
36
|
+
isActive && 'text-gray-1 dark:text-white',
|
|
38
37
|
'before:bg-lavender before:absolute before:-bottom-2.5 before:left-0 before:block before:h-0.5 before:w-full before:transition-opacity',
|
|
39
38
|
!isActive && 'before:opacity-0 hover:before:opacity-100',
|
|
40
39
|
isActive && 'before:opacity-100',
|
|
41
40
|
], !isHorizontalTop && [
|
|
42
|
-
'hover:bg-gray-6 hover:text-lavender',
|
|
43
|
-
|
|
41
|
+
'hover:bg-gray-6 hover:text-lavender dark:hover:bg-gray-1 dark:hover:text-lavender-dark',
|
|
42
|
+
isActive &&
|
|
43
|
+
'bg-gray-6 text-lavender dark:bg-gray-1 dark:text-lavender-dark',
|
|
44
|
+
level === 1 &&
|
|
45
|
+
isOpen &&
|
|
46
|
+
'bg-gray-6 text-lavender dark:bg-gray-1 dark:text-lavender-dark',
|
|
44
47
|
]);
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
event.
|
|
48
|
-
|
|
48
|
+
const handleToggleKeyDown = (event) => {
|
|
49
|
+
const openKey = orientation === 'horizontal' ? 'ArrowDown' : 'ArrowRight';
|
|
50
|
+
if (event.key === openKey && toggle) {
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
if (!isOpen) {
|
|
53
|
+
onClickToggle();
|
|
54
|
+
}
|
|
55
|
+
window.requestAnimationFrame(() => {
|
|
56
|
+
document
|
|
57
|
+
.getElementById(submenuId ?? '')
|
|
58
|
+
?.querySelector('.link')
|
|
59
|
+
?.focus();
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else if (event.key === 'Escape' && toggle && isOpen) {
|
|
63
|
+
event.preventDefault();
|
|
64
|
+
onClickToggle();
|
|
65
|
+
event.currentTarget.focus();
|
|
66
|
+
}
|
|
49
67
|
};
|
|
50
68
|
const handleFavoriteClick = (event) => {
|
|
51
69
|
event.preventDefault();
|
|
@@ -56,37 +74,50 @@ export function MenuItem({ text, path, toggle, onClickToggle, icon, isActive, ta
|
|
|
56
74
|
const canShowFavorite = isLink && Boolean(onFavoriteToggle);
|
|
57
75
|
return (<Show>
|
|
58
76
|
<Show.When isTrue={isLink}>
|
|
59
|
-
<
|
|
60
|
-
|
|
61
|
-
|
|
77
|
+
<div className={clsx('menu-item-row flex w-full items-center', !isHorizontalTop && [
|
|
78
|
+
'hover:bg-gray-6 dark:hover:bg-gray-1',
|
|
79
|
+
isActive && 'bg-gray-6 dark:bg-gray-1',
|
|
80
|
+
])}>
|
|
81
|
+
<Link href={path} className={clsx('slide-over__close flex-1', linkStyleMap)} target={target ?? '_self'} aria-current={isActive ? 'page' : undefined}>
|
|
82
|
+
<MenuItemContent text={text} icon={icon} toggle={toggle} level={level} hideIcon={isHorizontalTop}/>
|
|
83
|
+
</Link>
|
|
84
|
+
<Show>
|
|
85
|
+
<Show.When isTrue={canShowFavorite}>
|
|
86
|
+
<FavoriteStar isFavorite={isFavorite} ariaLabel={getFavoriteAriaLabel?.({
|
|
87
|
+
text,
|
|
88
|
+
path,
|
|
89
|
+
isFavorite,
|
|
90
|
+
})} onClick={handleFavoriteClick} size={level >= 3 ? 14 : 16}/>
|
|
91
|
+
</Show.When>
|
|
92
|
+
</Show>
|
|
93
|
+
</div>
|
|
62
94
|
</Show.When>
|
|
63
95
|
<Show.Else>
|
|
64
|
-
<
|
|
65
|
-
<MenuItemContent text={text} icon={icon} toggle={toggle}
|
|
66
|
-
</
|
|
96
|
+
<button type="button" id={toggleId} className={clsx(linkStyleMap, 'bg-transparent text-inherit')} aria-expanded={toggle ? isOpen : undefined} aria-controls={toggle ? submenuId : undefined} onClick={toggle ? onClickToggle : undefined} onKeyDown={handleToggleKeyDown}>
|
|
97
|
+
<MenuItemContent text={text} icon={icon} toggle={toggle} level={level} hideIcon={isHorizontalTop}/>
|
|
98
|
+
</button>
|
|
67
99
|
</Show.Else>
|
|
68
100
|
</Show>);
|
|
69
101
|
}
|
|
70
|
-
function MenuItemContent({ text, icon, toggle,
|
|
102
|
+
function MenuItemContent({ text, icon, toggle, level, hideIcon, }) {
|
|
71
103
|
return (<>
|
|
72
104
|
{level === 1 && !!icon && !hideIcon && (<span className="icon">{icon}</span>)}
|
|
73
|
-
<
|
|
74
|
-
{!!toggle && (<span
|
|
75
|
-
<FaChevronDown size={level >= 3 ? 12 : 16}/>
|
|
105
|
+
<span className={level >= 3 ? 'text-xs' : 'text-sm'}>{text}</span>
|
|
106
|
+
{!!toggle && (<span className="toggle p-2 transition-transform duration-500">
|
|
107
|
+
<FaChevronDown aria-hidden size={level >= 3 ? 12 : 16}/>
|
|
76
108
|
</span>)}
|
|
77
|
-
{!!showFavorite && (<FavoriteStar isFavorite={isFavorite} onClick={handleFavoriteClick} size={level >= 3 ? 14 : 16}/>)}
|
|
78
109
|
</>);
|
|
79
110
|
}
|
|
80
|
-
function FavoriteStar({ isFavorite, onClick, size, }) {
|
|
81
|
-
return (<button type="button" onClick={onClick} aria-pressed={isFavorite} aria-label={
|
|
111
|
+
function FavoriteStar({ isFavorite, ariaLabel, onClick, size, }) {
|
|
112
|
+
return (<button type="button" onClick={onClick} aria-pressed={isFavorite} aria-label={ariaLabel} className="favorite focus-visible:ring-lavender group ml-auto flex shrink-0 cursor-pointer items-center justify-center p-2 focus-visible:ring-2 focus-visible:outline-none">
|
|
82
113
|
<Show>
|
|
83
114
|
<Show.When isTrue={isFavorite}>
|
|
84
|
-
<FaStar size={size} className="text-
|
|
115
|
+
<FaStar aria-hidden size={size} className="text-warning dark:text-warning-dark"/>
|
|
85
116
|
</Show.When>
|
|
86
117
|
<Show.Else>
|
|
87
118
|
<span className="relative inline-flex" style={{ width: size, height: size }}>
|
|
88
|
-
<FaStar size={size} aria-hidden className="absolute inset-0 hidden
|
|
89
|
-
<FaRegStar size={size} className="text-gray-3 group-hover:text-
|
|
119
|
+
<FaStar size={size} aria-hidden className="text-warning-1 dark:text-warning-dark-1 absolute inset-0 hidden group-hover:block"/>
|
|
120
|
+
<FaRegStar aria-hidden size={size} className="text-gray-3 group-hover:text-warning dark:text-gray-2 dark:group-hover:text-warning-dark relative"/>
|
|
90
121
|
</span>
|
|
91
122
|
</Show.Else>
|
|
92
123
|
</Show>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItem.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Menu/MenuItem.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"MenuItem.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Menu/MenuItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,14 @@ type MenuListProps = {
|
|
|
5
5
|
orientation: ComponentProps<typeof List>['orientation'];
|
|
6
6
|
menu: ({
|
|
7
7
|
submenu?: MenuListProps['menu'];
|
|
8
|
-
} & Omit<ComponentProps<typeof MenuItem>, 'toggle' | 'onClickToggle' | 'callback' | 'onFavoriteToggle' | 'orientation'>)[];
|
|
8
|
+
} & Omit<ComponentProps<typeof MenuItem>, 'toggle' | 'onClickToggle' | 'callback' | 'onFavoriteToggle' | 'getFavoriteAriaLabel' | 'orientation'>)[];
|
|
9
9
|
level?: number;
|
|
10
10
|
isToggle?: boolean;
|
|
11
11
|
parentOpen?: boolean;
|
|
12
12
|
onFavoriteToggle?: ComponentProps<typeof MenuItem>['onFavoriteToggle'];
|
|
13
|
+
getFavoriteAriaLabel?: ComponentProps<typeof MenuItem>['getFavoriteAriaLabel'];
|
|
14
|
+
onEscape?: () => void;
|
|
15
|
+
parentToggleId?: string;
|
|
13
16
|
};
|
|
14
17
|
/**
|
|
15
18
|
* MenuList component for rendering a list of menu items with optional submenus.
|
|
@@ -36,6 +39,6 @@ type MenuListProps = {
|
|
|
36
39
|
*
|
|
37
40
|
* @returns {ReactNode} The rendered MenuList component.
|
|
38
41
|
*/
|
|
39
|
-
export declare function MenuList({ menu, orientation, level, isToggle, parentOpen, onFavoriteToggle, }: MenuListProps): ReactNode;
|
|
42
|
+
export declare function MenuList({ menu, orientation, level, isToggle, parentOpen, onFavoriteToggle, getFavoriteAriaLabel, onEscape, parentToggleId, }: MenuListProps): ReactNode;
|
|
40
43
|
export {};
|
|
41
44
|
//# sourceMappingURL=MenuList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Menu/MenuList.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Menu/MenuList.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,KAAK,aAAa,GAAG;IACnB,WAAW,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;IACxD,IAAI,EAAE,CAAC;QAAE,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAC/C,cAAc,CAAC,OAAO,QAAQ,CAAC,EAC7B,QAAQ,GACR,eAAe,GACf,UAAU,GACV,kBAAkB,GAClB,sBAAsB,GACtB,aAAa,CAChB,CAAC,EAAE,CAAC;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,cAAc,CAAC,OAAO,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACvE,oBAAoB,CAAC,EAAE,cAAc,CACnC,OAAO,QAAQ,CAChB,CAAC,sBAAsB,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AA4CF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,WAAW,EACX,KAAS,EACT,QAAgB,EAChB,UAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,cAAc,GACf,EAAE,aAAa,GAAG,SAAS,CA8J3B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
3
|
import { usePathname } from 'next/navigation';
|
|
4
|
-
import { useEffect, useState, } from 'react';
|
|
4
|
+
import { useEffect, useId, useState, } from 'react';
|
|
5
5
|
import { Each } from '../../00-base';
|
|
6
6
|
import { List } from '../../01-atoms';
|
|
7
7
|
import { MenuItem } from './MenuItem';
|
|
@@ -9,13 +9,13 @@ const styleMap = {
|
|
|
9
9
|
horizontal: 'menu--horizontal',
|
|
10
10
|
vertical: 'menu--vertical',
|
|
11
11
|
};
|
|
12
|
-
const styleMapLinkHorizontal = clsx('[.menu--horizontal_&>.link]:px-2 [.menu--horizontal_&>.link]:py-3');
|
|
13
|
-
const styleMapLinkVertical = clsx('[.menu--vertical_&>.link]:py-2 [.menu--vertical_&>.link]:pr-4');
|
|
12
|
+
const styleMapLinkHorizontal = clsx('[.menu--horizontal_&>.link]:px-2 [.menu--horizontal_&>.link]:py-3', '[.menu--horizontal_&>.menu-item-row>.link]:px-2 [.menu--horizontal_&>.menu-item-row>.link]:py-3');
|
|
13
|
+
const styleMapLinkVertical = clsx('[.menu--vertical_&>.link]:py-2 [.menu--vertical_&>.link]:pr-4', '[.menu--vertical_&>.menu-item-row>.link]:py-2 [.menu--vertical_&>.menu-item-row>.link]:pr-4', '[.menu--vertical_&>.menu-item-row>.favorite]:mr-4');
|
|
14
14
|
const styleMapLink = clsx(styleMapLinkHorizontal, styleMapLinkVertical);
|
|
15
|
-
const styleMapIcon = clsx('[.menu--vertical_&>.link>.icon]:absolute [.menu--vertical_&>.link>.icon]:left-4');
|
|
15
|
+
const styleMapIcon = clsx('[.menu--vertical_&>.link>.icon]:absolute [.menu--vertical_&>.link>.icon]:left-4', '[.menu--vertical_&>.menu-item-row>.link>.icon]:absolute [.menu--vertical_&>.menu-item-row>.link>.icon]:left-4');
|
|
16
16
|
const styleMapToggle = clsx('[.menu--horizontal_&:hover>.link>.toggle]:rotate-180 [.menu--vertical_&.open>.link>.toggle]:rotate-180');
|
|
17
17
|
const styleMapSubmenuHorizontal = (level) => clsx('[.menu--horizontal_&>.submenu]:invisible [.menu--horizontal_&>.submenu]:absolute [.menu--horizontal_&>.submenu]:w-max [.menu--horizontal_&>.submenu]:max-w-full [.menu--horizontal_&>.submenu]:min-w-32 [.menu--horizontal_&>.submenu]:rounded-sm [.menu--horizontal_&>.submenu]:opacity-0 [.menu--horizontal_&>.submenu]:shadow-md', level > 1 &&
|
|
18
|
-
'[.menu--horizontal_&>.submenu]:top-0 [.menu--horizontal_&>.submenu]:left-full', '[.menu--horizontal_&:hover>.submenu]:visible [.menu--horizontal_&:hover>.submenu]:opacity-100');
|
|
18
|
+
'[.menu--horizontal_&>.submenu]:top-0 [.menu--horizontal_&>.submenu]:left-full', '[.menu--horizontal_&:hover>.submenu]:visible [.menu--horizontal_&:hover>.submenu]:opacity-100', '[.menu--horizontal_&.open>.submenu]:visible [.menu--horizontal_&.open>.submenu]:opacity-100');
|
|
19
19
|
const styleMapSubmenuVertical = clsx('[.menu--vertical_&>.submenu]:grid [.menu--vertical_&>.submenu]:[grid-template-rows:0fr] [.menu--vertical_&>.submenu]:transition-[grid-template-rows] [.menu--vertical_&>.submenu]:duration-300 [.menu--vertical_&>.submenu]:ease-in-out', '[.menu--vertical_&.open>.submenu]:[grid-template-rows:1fr]');
|
|
20
20
|
const styleMapSubmenu = (level) => clsx(styleMapSubmenuHorizontal(level), styleMapSubmenuVertical);
|
|
21
21
|
/**
|
|
@@ -43,9 +43,10 @@ const styleMapSubmenu = (level) => clsx(styleMapSubmenuHorizontal(level), styleM
|
|
|
43
43
|
*
|
|
44
44
|
* @returns {ReactNode} The rendered MenuList component.
|
|
45
45
|
*/
|
|
46
|
-
export function MenuList({ menu, orientation, level = 1, isToggle = false, parentOpen = true, onFavoriteToggle, }) {
|
|
46
|
+
export function MenuList({ menu, orientation, level = 1, isToggle = false, parentOpen = true, onFavoriteToggle, getFavoriteAriaLabel, onEscape, parentToggleId, }) {
|
|
47
47
|
const pathname = usePathname();
|
|
48
48
|
const [showItems, setShowItems] = useState(menu.map(() => false));
|
|
49
|
+
const generatedId = useId();
|
|
49
50
|
useEffect(() => {
|
|
50
51
|
if (!parentOpen) {
|
|
51
52
|
setShowItems(menu.map(() => false));
|
|
@@ -54,18 +55,61 @@ export function MenuList({ menu, orientation, level = 1, isToggle = false, paren
|
|
|
54
55
|
const toggleShowItems = (index) => {
|
|
55
56
|
setShowItems((prevItems) => prevItems.map((item, i) => (i === index ? !item : false)));
|
|
56
57
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
const effectiveToggle = level === 1 ? orientation === 'vertical' : isToggle;
|
|
59
|
+
const handleKeyDown = (event) => {
|
|
60
|
+
const target = event.target;
|
|
61
|
+
if (target.closest('ul') !== event.currentTarget ||
|
|
62
|
+
target.closest('.favorite')) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const items = Array.from(event.currentTarget.children)
|
|
66
|
+
.map((child) => child.querySelector(':scope > .link, :scope > .menu-item-row > .link'))
|
|
67
|
+
.filter((element) => element instanceof HTMLElement);
|
|
68
|
+
const currentItem = target.closest('.link');
|
|
69
|
+
const currentIndex = currentItem ? items.indexOf(currentItem) : -1;
|
|
70
|
+
if (event.key === 'Escape') {
|
|
71
|
+
event.preventDefault();
|
|
72
|
+
if (currentIndex >= 0 && showItems[currentIndex]) {
|
|
73
|
+
toggleShowItems(currentIndex);
|
|
74
|
+
currentItem?.focus();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
onEscape?.();
|
|
78
|
+
document.getElementById(parentToggleId ?? '')?.focus();
|
|
79
|
+
}
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
let nextIndex;
|
|
83
|
+
const nextKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown';
|
|
84
|
+
const previousKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';
|
|
85
|
+
if (event.key === nextKey) {
|
|
86
|
+
nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;
|
|
87
|
+
}
|
|
88
|
+
else if (event.key === previousKey) {
|
|
89
|
+
nextIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;
|
|
90
|
+
}
|
|
91
|
+
else if (event.key === 'Home') {
|
|
92
|
+
nextIndex = 0;
|
|
93
|
+
}
|
|
94
|
+
else if (event.key === 'End') {
|
|
95
|
+
nextIndex = items.length - 1;
|
|
96
|
+
}
|
|
97
|
+
if (nextIndex !== undefined) {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
items[nextIndex]?.focus();
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return (<List orientation={orientation} className={clsx('menu', level === 1 && styleMap[orientation], orientation === 'horizontal' && 'gap-2', `level-${level}`)} onKeyDown={handleKeyDown}>
|
|
61
103
|
<Each of={menu} render={({ submenu, ...menuItem }, index) => {
|
|
62
104
|
const hasSubmenu = (submenu?.length ?? 0) > 0;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
105
|
+
const submenuId = `${generatedId}-submenu-${index}`;
|
|
106
|
+
const toggleId = `${generatedId}-toggle-${index}`;
|
|
107
|
+
return (<li key={`${menuItem.path ?? ''}::${menuItem.text}::${index}`} className={clsx('relative', level > 1 && 'w-full', showItems[index] && 'open', styleMapLink, styleMapIcon, styleMapToggle, styleMapSubmenu(level))}>
|
|
108
|
+
<MenuItem {...menuItem} isActive={menuItem.path === pathname} onClickToggle={() => toggleShowItems(index)} toggle={hasSubmenu} level={level} isOpen={showItems[index]} onFavoriteToggle={onFavoriteToggle} getFavoriteAriaLabel={getFavoriteAriaLabel} orientation={orientation} submenuId={submenuId} toggleId={toggleId}/>
|
|
109
|
+
{!!hasSubmenu && (<div id={submenuId} className={clsx('submenu dark:bg-black-1 bg-white text-black dark:text-white', level > 1 && 'top-0 left-full')}>
|
|
110
|
+
{effectiveToggle ? (<div className="min-h-0 overflow-hidden">
|
|
111
|
+
<MenuList orientation="vertical" menu={submenu} level={level + 1} isToggle={effectiveToggle} parentOpen={showItems[index]} onFavoriteToggle={onFavoriteToggle} getFavoriteAriaLabel={getFavoriteAriaLabel} onEscape={() => toggleShowItems(index)} parentToggleId={toggleId}/>
|
|
112
|
+
</div>) : (<MenuList orientation="vertical" menu={submenu} level={level + 1} isToggle={effectiveToggle} onFavoriteToggle={onFavoriteToggle} getFavoriteAriaLabel={getFavoriteAriaLabel} onEscape={() => toggleShowItems(index)} parentToggleId={toggleId}/>)}
|
|
69
113
|
</div>)}
|
|
70
114
|
</li>);
|
|
71
115
|
}}/>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuList.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Menu/MenuList.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"MenuList.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Menu/MenuList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ReactNode } from 'react';
|
|
1
|
+
import { type ReactNode, type RefObject } from 'react';
|
|
2
2
|
type ModalProps = {
|
|
3
3
|
header: string | ReactNode;
|
|
4
4
|
subHeader?: string | ReactNode;
|
|
@@ -7,6 +7,10 @@ type ModalProps = {
|
|
|
7
7
|
cancelButton?: TButton;
|
|
8
8
|
size?: 'base' | 'lg' | 'xl';
|
|
9
9
|
handleCloseIcon: TButton['callback'];
|
|
10
|
+
closeButtonAriaLabel?: string;
|
|
11
|
+
initialFocusRef?: RefObject<HTMLElement | null>;
|
|
12
|
+
'aria-labelledby'?: string;
|
|
13
|
+
'aria-describedby'?: string;
|
|
10
14
|
};
|
|
11
15
|
export type TButton = {
|
|
12
16
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Modal/Modal.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Modal/Modal.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAKf,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACd,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CACvD,CAAC;AAKF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,KAAK,iGAmJhB,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
|
-
import { forwardRef, useEffect, useImperativeHandle, useState, } from 'react';
|
|
3
|
+
import { forwardRef, useCallback, useEffect, useId, useImperativeHandle, useRef, useState, } from 'react';
|
|
4
4
|
import { IoCloseSharp } from 'react-icons/io5';
|
|
5
5
|
import { Button, Paragraph } from '../../01-atoms';
|
|
6
|
+
import { useDialogFocus } from './useDialogFocus';
|
|
6
7
|
const enteringClasses = 'ease-out duration-300 opacity-0';
|
|
7
8
|
const leavingClasses = 'ease-in duration-200 opacity-75';
|
|
8
9
|
/**
|
|
@@ -40,14 +41,18 @@ const leavingClasses = 'ease-in duration-200 opacity-75';
|
|
|
40
41
|
*
|
|
41
42
|
* @returns {ReactNode} The rendered Modal component.
|
|
42
43
|
*/
|
|
43
|
-
export const Modal = forwardRef(function ({ header, subHeader, children, confirmButton, cancelButton, size = 'base', handleCloseIcon, }, ref) {
|
|
44
|
+
export const Modal = forwardRef(function ({ header, subHeader, children, confirmButton, cancelButton, size = 'base', handleCloseIcon, closeButtonAriaLabel, initialFocusRef, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, }, ref) {
|
|
44
45
|
const [isOpen, setIsOpen] = useState(false);
|
|
45
|
-
const
|
|
46
|
+
const dialogRef = useRef(null);
|
|
47
|
+
const generatedId = useId();
|
|
48
|
+
const titleId = `${generatedId}-title`;
|
|
49
|
+
const descriptionId = `${generatedId}-description`;
|
|
50
|
+
const handlerClose = useCallback((callback) => {
|
|
46
51
|
callback((closeAction) => {
|
|
47
52
|
setIsOpen(false);
|
|
48
53
|
setTimeout(closeAction, 200);
|
|
49
54
|
});
|
|
50
|
-
};
|
|
55
|
+
}, []);
|
|
51
56
|
const handlerOverlayClick = (event) => {
|
|
52
57
|
if (event.target === event.currentTarget) {
|
|
53
58
|
handlerClose(handleCloseIcon);
|
|
@@ -59,27 +64,37 @@ export const Modal = forwardRef(function ({ header, subHeader, children, confirm
|
|
|
59
64
|
useEffect(() => {
|
|
60
65
|
setIsOpen(true);
|
|
61
66
|
}, []);
|
|
67
|
+
useDialogFocus({
|
|
68
|
+
containerRef: dialogRef,
|
|
69
|
+
initialFocusRef,
|
|
70
|
+
isOpen,
|
|
71
|
+
onEscape: () => handlerClose(handleCloseIcon),
|
|
72
|
+
});
|
|
62
73
|
return (<>
|
|
63
74
|
<div className="relative z-50">
|
|
64
|
-
<div className={clsx('bg-gray-1 bg-opacity-75 pointer-events-none fixed inset-0 transition-opacity', !isOpen ? enteringClasses : leavingClasses)}/>
|
|
75
|
+
<div className={clsx('bg-gray-1 bg-opacity-75 pointer-events-none fixed inset-0 transition-opacity dark:bg-black/75', !isOpen ? enteringClasses : leavingClasses)}/>
|
|
65
76
|
|
|
66
77
|
<div className="fixed inset-0 z-10 w-screen overflow-y-auto">
|
|
67
78
|
<div onClick={(e) => handlerOverlayClick(e)} className="flex min-h-full items-end justify-center px-8 py-4 sm:items-center">
|
|
68
|
-
<div className={clsx('relative transform rounded-lg bg-white text-center shadow-xl transition-all sm:my-8 sm:w-full sm:text-left', {
|
|
79
|
+
<div ref={dialogRef} role="dialog" aria-modal="true" aria-labelledby={ariaLabelledBy ?? titleId} aria-describedby={ariaDescribedBy ?? (subHeader ? descriptionId : undefined)} tabIndex={-1} className={clsx('relative transform rounded-lg bg-white text-center text-black shadow-xl transition-all outline-none sm:my-8 sm:w-full sm:text-left dark:bg-black dark:text-white', {
|
|
69
80
|
'sm:max-w-lg': size === 'base',
|
|
70
81
|
'sm:max-w-3xl': size === 'lg',
|
|
71
82
|
'sm:max-w-5xl': size === 'xl',
|
|
72
83
|
}, !isOpen
|
|
73
84
|
? `${enteringClasses} pointer-events-none translate-y-4 sm:translate-y-0 sm:scale-95`
|
|
74
85
|
: `translate-y-0 sm:scale-100`)}>
|
|
75
|
-
<div className="bg-gray-6 flex justify-between rounded-t-lg px-6 py-4">
|
|
86
|
+
<div className="bg-gray-6 dark:bg-black-1 flex justify-between rounded-t-lg px-6 py-4">
|
|
76
87
|
<div>
|
|
77
|
-
<Paragraph size="subtitle-1">
|
|
78
|
-
|
|
88
|
+
<Paragraph id={titleId} size="subtitle-1">
|
|
89
|
+
{header}
|
|
90
|
+
</Paragraph>
|
|
91
|
+
{!!subHeader && (<Paragraph id={descriptionId} className="text-gray-1 dark:text-gray-3 mt-1" size="body-2">
|
|
79
92
|
{subHeader}
|
|
80
93
|
</Paragraph>)}
|
|
81
94
|
</div>
|
|
82
|
-
<
|
|
95
|
+
<button type="button" aria-label={closeButtonAriaLabel} className="hover:text-gray-1 focus-visible:ring-lavender dark:hover:text-gray-3 rounded-sm p-1 transition-colors focus-visible:ring-2 focus-visible:outline-none" onClick={() => handlerClose(handleCloseIcon)}>
|
|
96
|
+
<IoCloseSharp aria-hidden size={20}/>
|
|
97
|
+
</button>
|
|
83
98
|
</div>
|
|
84
99
|
<div className={clsx('px-6', cancelButton || confirmButton ? 'pt-8 pb-4' : 'py-8')}>
|
|
85
100
|
{children}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Modal/Modal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,UAAU,
|
|
1
|
+
{"version":3,"file":"Modal.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Modal/Modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
type UseDialogFocusProps = {
|
|
3
|
+
containerRef: RefObject<HTMLElement | null>;
|
|
4
|
+
initialFocusRef?: RefObject<HTMLElement | null>;
|
|
5
|
+
isOpen: boolean;
|
|
6
|
+
onEscape: () => void;
|
|
7
|
+
};
|
|
8
|
+
export declare function useDialogFocus({ containerRef, initialFocusRef, isOpen, onEscape, }: UseDialogFocusProps): void;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=useDialogFocus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDialogFocus.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Modal/useDialogFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAW1D,KAAK,mBAAmB,GAAG;IACzB,YAAY,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC5C,eAAe,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAaF,wBAAgB,cAAc,CAAC,EAC7B,YAAY,EACZ,eAAe,EACf,MAAM,EACN,QAAQ,GACT,EAAE,mBAAmB,GAAG,IAAI,CAsE5B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
const focusableSelector = [
|
|
3
|
+
'a[href]',
|
|
4
|
+
'button:not([disabled])',
|
|
5
|
+
'input:not([disabled])',
|
|
6
|
+
'select:not([disabled])',
|
|
7
|
+
'textarea:not([disabled])',
|
|
8
|
+
'[tabindex]:not([tabindex="-1"])',
|
|
9
|
+
].join(',');
|
|
10
|
+
function getFocusableElements(container) {
|
|
11
|
+
return Array.from(container.querySelectorAll(focusableSelector)).filter((element) => element.tabIndex >= 0 &&
|
|
12
|
+
element.getAttribute('aria-hidden') !== 'true' &&
|
|
13
|
+
!element.hasAttribute('hidden'));
|
|
14
|
+
}
|
|
15
|
+
export function useDialogFocus({ containerRef, initialFocusRef, isOpen, onEscape, }) {
|
|
16
|
+
const previousFocusRef = useRef(null);
|
|
17
|
+
const onEscapeRef = useRef(onEscape);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
onEscapeRef.current = onEscape;
|
|
20
|
+
}, [onEscape]);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (!isOpen || !containerRef.current) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const container = containerRef.current;
|
|
26
|
+
previousFocusRef.current =
|
|
27
|
+
document.activeElement instanceof HTMLElement
|
|
28
|
+
? document.activeElement
|
|
29
|
+
: null;
|
|
30
|
+
const animationFrame = window.requestAnimationFrame(() => {
|
|
31
|
+
const target = initialFocusRef?.current ??
|
|
32
|
+
getFocusableElements(container)[0] ??
|
|
33
|
+
container;
|
|
34
|
+
target.focus();
|
|
35
|
+
});
|
|
36
|
+
const handleKeyDown = (event) => {
|
|
37
|
+
if (event.key === 'Escape') {
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
onEscapeRef.current();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (event.key !== 'Tab') {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const focusableElements = getFocusableElements(container);
|
|
46
|
+
if (focusableElements.length === 0) {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
container.focus();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const firstElement = focusableElements[0];
|
|
52
|
+
const lastElement = focusableElements[focusableElements.length - 1];
|
|
53
|
+
if (event.shiftKey &&
|
|
54
|
+
(document.activeElement === firstElement ||
|
|
55
|
+
document.activeElement === container)) {
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
lastElement.focus();
|
|
58
|
+
}
|
|
59
|
+
else if (!event.shiftKey && document.activeElement === lastElement) {
|
|
60
|
+
event.preventDefault();
|
|
61
|
+
firstElement.focus();
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
65
|
+
return () => {
|
|
66
|
+
window.cancelAnimationFrame(animationFrame);
|
|
67
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
68
|
+
previousFocusRef.current?.focus();
|
|
69
|
+
previousFocusRef.current = null;
|
|
70
|
+
};
|
|
71
|
+
}, [containerRef, initialFocusRef, isOpen]);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=useDialogFocus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDialogFocus.js","sourceRoot":"","sources":["../../../../src/components/02-molecules/Modal/useDialogFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1D,MAAM,iBAAiB,GAAG;IACxB,SAAS;IACT,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;IACxB,0BAA0B;IAC1B,iCAAiC;CAClC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AASZ,SAAS,oBAAoB,CAAC,SAAsB;IAClD,OAAO,KAAK,CAAC,IAAI,CACf,SAAS,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,CAC3D,CAAC,MAAM,CACN,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,QAAQ,IAAI,CAAC;QACrB,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM;QAC9C,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,YAAY,EACZ,eAAe,EACf,MAAM,EACN,QAAQ,GACY;IACpB,MAAM,gBAAgB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAErC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACvC,gBAAgB,CAAC,OAAO;YACtB,QAAQ,CAAC,aAAa,YAAY,WAAW;gBAC3C,CAAC,CAAC,QAAQ,CAAC,aAAa;gBACxB,CAAC,CAAC,IAAI,CAAC;QAEX,MAAM,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;YACvD,MAAM,MAAM,GACV,eAAe,EAAE,OAAO;gBACxB,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClC,SAAS,CAAC;YACZ,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,WAAW,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC1D,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEpE,IACE,KAAK,CAAC,QAAQ;gBACd,CAAC,QAAQ,CAAC,aAAa,KAAK,YAAY;oBACtC,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,EACvC,CAAC;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,WAAW,CAAC,KAAK,EAAE,CAAC;YACtB,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,WAAW,EAAE,CAAC;gBACrE,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,YAAY,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAEpD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;YAC5C,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YACvD,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAClC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -6,6 +6,10 @@ type PaginationProps = {
|
|
|
6
6
|
totalItems?: number;
|
|
7
7
|
disableNavigation?: boolean;
|
|
8
8
|
disabledNext?: boolean;
|
|
9
|
+
navigationLabel?: string;
|
|
10
|
+
previousPageLabel?: string;
|
|
11
|
+
nextPageLabel?: string;
|
|
12
|
+
itemsPerPageLabel?: string;
|
|
9
13
|
} & HTMLAttributes<HTMLDivElement>;
|
|
10
14
|
/**
|
|
11
15
|
* Pagination component for rendering pagination controls.
|
|
@@ -33,6 +37,6 @@ type PaginationProps = {
|
|
|
33
37
|
*
|
|
34
38
|
* @returns {ReactNode} The rendered Pagination component.
|
|
35
39
|
*/
|
|
36
|
-
export declare function Pagination({ currentPage, pageChange, itemsPerPage, totalItems, disableNavigation, disabledNext, ...restProps }: PaginationProps): ReactNode;
|
|
40
|
+
export declare function Pagination({ currentPage, pageChange, itemsPerPage, totalItems, disableNavigation, disabledNext, navigationLabel, previousPageLabel, nextPageLabel, itemsPerPageLabel, ...restProps }: PaginationProps): ReactNode;
|
|
37
41
|
export {};
|
|
38
42
|
//# sourceMappingURL=Pagination.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Pagination/Pagination.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Pagination/Pagination.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAmB,MAAM,OAAO,CAAC;AAI7E,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,UAAU,CAAC,EACzB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAc,EACd,iBAAyB,EACzB,YAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,iBAAsC,EACtC,GAAG,SAAS,EACb,EAAE,eAAe,GAAG,SAAS,CAgK7B"}
|