@moneyforward/mfui-components 3.29.1 → 3.30.0
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/dist/src/Button/Button.d.ts +4 -4
- package/dist/src/CheckboxCard/CheckboxCard.d.ts +2 -2
- package/dist/src/CheckboxCard/CheckboxCard.js +1 -1
- package/dist/src/DataTable/DataTableCell/DataTableCell.js +1 -1
- package/dist/src/DateTimeSelection/DateRangePicker/DateRangePickerProvider/DateRangePickerProvider.d.ts +2 -2
- package/dist/src/DateTimeSelection/DateRangePicker/DateRangePickerTrigger/constants.d.ts +4 -4
- package/dist/src/DateTimeSelection/DateRangePicker/DateRangePickerTrigger/hooks/useDateRangeTriggerInputClick.d.ts +1 -1
- package/dist/src/DateTimeSelection/DateRangePicker/utilities/createDateRangePickerTestUtility.d.ts +1 -1
- package/dist/src/DateTimeSelection/MonthRangePicker/MonthRangePickerMonthCell/constants.d.ts +5 -5
- package/dist/src/DateTimeSelection/TimePicker/TimePicker.d.ts +9 -9
- package/dist/src/DateTimeSelection/shared/BasePicker/basePickerUtilities/useBasePickerValueController.d.ts +1 -1
- package/dist/src/DateTimeSelection/shared/BaseRangePicker/BaseRangePickerPopover/BaseRangePickerCalendar/constants.d.ts +6 -6
- package/dist/src/DateTimeSelection/shared/BaseRangePicker/BaseRangePickerProvider/BaseRangePickerProvider.d.ts +2 -2
- package/dist/src/DateTimeSelection/shared/BaseRangePicker/BaseRangePickerTrigger/BaseRangePickerTrigger.js +1 -1
- package/dist/src/DateTimeSelection/shared/BaseRangePicker/BaseRangePickerTrigger/hooks/useDateRangeTriggerInputClick.d.ts +1 -1
- package/dist/src/DateTimeSelection/shared/BaseRangePicker/utilities/createBaseRangePickerTestUtility.d.ts +1 -1
- package/dist/src/DateTimeSelection/shared/accessibility/constants.d.ts +6 -6
- package/dist/src/Dialog/Dialog.d.ts +4 -4
- package/dist/src/Disclosure/Disclosure.d.ts +21 -10
- package/dist/src/DropdownMenu/DropdownMenu.d.ts +3 -3
- package/dist/src/DropdownMenu/DropdownMenuItem/DropdownMenuItem.js +11 -3
- package/dist/src/EmbeddedSidePane/EmbeddedSidePane.d.ts +1 -1
- package/dist/src/FileBox/FileBox.d.ts +4 -4
- package/dist/src/FileBox/FileBox.js +1 -1
- package/dist/src/FileDropZone/FileDropZone.d.ts +4 -4
- package/dist/src/FileDropZone/utils/fileHelpers.d.ts +3 -3
- package/dist/src/FilterTrigger/FilterTrigger.d.ts +2 -2
- package/dist/src/Heading/Heading.d.ts +2 -2
- package/dist/src/HelpMessage/HelpMessage.d.ts +3 -3
- package/dist/src/IconButton/IconButton.d.ts +6 -6
- package/dist/src/KeyValue/KeyValue.d.ts +2 -2
- package/dist/src/MainNavigation/MainNavigation.js +1 -1
- package/dist/src/MultipleSelectBox/MultipleSelectBox.js +1 -1
- package/dist/src/MultipleSelectBox/hooks/useApplyControls.d.ts +1 -1
- package/dist/src/MultipleSelectBox/hooks/useSelectedValues.d.ts +1 -1
- package/dist/src/NumberBox/NumberBox.d.ts +1 -1
- package/dist/src/Pagination/ItemsCount/ItemsCount.js +1 -1
- package/dist/src/Popover/Popover.js +1 -1
- package/dist/src/RadioButton/RadioButton.d.ts +1 -1
- package/dist/src/RadioButtonCard/RadioButtonCard.d.ts +2 -2
- package/dist/src/RadioButtonCard/RadioButtonCard.js +1 -1
- package/dist/src/RadioGroup/RadioGroup.d.ts +1 -1
- package/dist/src/SectionMessage/SectionMessage.d.ts +5 -5
- package/dist/src/SectionMessage/SectionMessage.js +11 -4
- package/dist/src/SectionMessage/SectionMessage.types.d.ts +4 -4
- package/dist/src/SelectBox/SelectBox.js +1 -1
- package/dist/src/SelectBox/SelectBoxOption.js +1 -1
- package/dist/src/SelectBox/SelectBoxOptionGroup.js +1 -1
- package/dist/src/SidePane/SidePane.d.ts +6 -6
- package/dist/src/Sidebar/Sidebar.d.ts +10 -1
- package/dist/src/Sidebar/Sidebar.js +40 -10
- package/dist/src/Sidebar/Sidebar.types.d.ts +39 -2
- package/dist/src/Sidebar/SidebarContext.d.ts +3 -0
- package/dist/src/Sidebar/SidebarContext.js +2 -0
- package/dist/src/Sidebar/SidebarMenuHeading/SidebarMenuHeading.d.ts +49 -0
- package/dist/src/Sidebar/SidebarMenuHeading/SidebarMenuHeading.js +113 -0
- package/dist/src/Sidebar/SidebarMenuHeading/SidebarMenuHeading.types.d.ts +36 -0
- package/dist/src/Sidebar/SidebarMenuHeading/SidebarMenuHeading.types.js +1 -0
- package/dist/src/Sidebar/SidebarMenuHeading/index.d.ts +2 -0
- package/dist/src/Sidebar/SidebarMenuHeading/index.js +1 -0
- package/dist/src/Sidebar/SidebarNavigationItem.js +6 -3
- package/dist/src/Sidebar/hooks/useSidebarResize.d.ts +2 -1
- package/dist/src/Sidebar/hooks/useSidebarResize.js +31 -3
- package/dist/src/Sidebar/index.d.ts +2 -1
- package/dist/src/Stack/Stack.d.ts +5 -5
- package/dist/src/StatusLabel/StatusLabel.d.ts +2 -2
- package/dist/src/Stepper/Step/Step.js +1 -1
- package/dist/src/SubNavigation/SubNavigation.js +1 -1
- package/dist/src/TextBox/TextBox.d.ts +6 -6
- package/dist/src/TextLink/TextLink.d.ts +2 -2
- package/dist/src/Textarea/Textarea.d.ts +4 -4
- package/dist/src/Toast/Toast.d.ts +3 -3
- package/dist/src/Toast/Toast.js +9 -5
- package/dist/src/Toast/Toast.types.d.ts +3 -5
- package/dist/src/Toast/api/toast.d.ts +18 -2
- package/dist/src/Tooltip/Tooltip.d.ts +3 -3
- package/dist/src/Tooltip/Tooltip.js +1 -1
- package/dist/src/Tooltip/Tooltip.types.d.ts +2 -0
- package/dist/src/Tooltip/hooks/useTooltipDisplayController.js +14 -2
- package/dist/src/utilities/dom/dispatchNativeInputValueWithEvent.d.ts +1 -1
- package/dist/src/utilities/dom/useFocusTrap.d.ts +1 -1
- package/dist/src/utilities/react/useIsomorphicLayoutEffect.d.ts +2 -2
- package/dist/styled-system/css/conditions.d.ts +3 -3
- package/dist/styled-system/helpers.d.ts +36 -35
- package/dist/styled-system/jsx/factory-helper.d.ts +4 -4
- package/dist/styled-system/recipes/create-recipe.d.ts +2 -2
- package/dist/styled-system/recipes/index.d.ts +2 -1
- package/dist/styled-system/recipes/index.js +1 -0
- package/dist/styled-system/recipes/section-message-slot-recipe.d.ts +1 -1
- package/dist/styled-system/recipes/section-message-slot-recipe.js +3 -1
- package/dist/styled-system/recipes/sidebar-menu-heading-slot-recipe.d.ts +33 -0
- package/dist/styled-system/recipes/sidebar-menu-heading-slot-recipe.js +44 -0
- package/dist/styled-system/recipes/sidebar-slot-recipe.d.ts +1 -1
- package/dist/styled-system/recipes/sidebar-slot-recipe.js +4 -0
- package/dist/styles.css +82 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -11
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { useCallback, useEffect, useRef, useState, } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
|
|
2
2
|
const DEFAULT_WIDTH = 200;
|
|
3
3
|
const DEFAULT_MIN_WIDTH = 180;
|
|
4
4
|
const DEFAULT_MAX_WIDTH = 280;
|
|
5
|
+
const COLLAPSED_WIDTH = 48;
|
|
5
6
|
const KEYBOARD_STEP_PX = 14;
|
|
6
7
|
/**
|
|
7
8
|
* Hook to manage the resizable width of the Sidebar via pointer dragging and keyboard control.
|
|
@@ -16,10 +17,11 @@ const KEYBOARD_STEP_PX = 14;
|
|
|
16
17
|
*
|
|
17
18
|
* @returns Object containing the current width, resolved bounds, refs, and resize handlers
|
|
18
19
|
*/
|
|
19
|
-
export function useSidebarResize({ minWidth = DEFAULT_MIN_WIDTH, maxWidth = DEFAULT_MAX_WIDTH, defaultWidth, onWidthChange, } = {}) {
|
|
20
|
+
export function useSidebarResize({ minWidth = DEFAULT_MIN_WIDTH, maxWidth = DEFAULT_MAX_WIDTH, defaultWidth, onWidthChange, isCollapsed = false, } = {}) {
|
|
20
21
|
const rootRef = useRef(null);
|
|
21
22
|
const [isDragging, setIsDragging] = useState(false);
|
|
22
23
|
const pointerIdRef = useRef(null);
|
|
24
|
+
const isCollapsedRef = useRef(isCollapsed);
|
|
23
25
|
const onWidthChangeRef = useRef(onWidthChange);
|
|
24
26
|
useEffect(() => {
|
|
25
27
|
onWidthChangeRef.current = onWidthChange;
|
|
@@ -37,6 +39,7 @@ export function useSidebarResize({ minWidth = DEFAULT_MIN_WIDTH, maxWidth = DEFA
|
|
|
37
39
|
// not re-synced on later changes, so the user's drag/keyboard adjustments are never overridden.
|
|
38
40
|
const initialWidth = clamp(defaultWidth ?? DEFAULT_WIDTH);
|
|
39
41
|
const widthRef = useRef(initialWidth);
|
|
42
|
+
const lastExpandedWidthRef = useRef(initialWidth);
|
|
40
43
|
const [width, setWidth] = useState(initialWidth);
|
|
41
44
|
const notify = useCallback((value) => {
|
|
42
45
|
onWidthChangeRef.current?.(value);
|
|
@@ -47,6 +50,9 @@ export function useSidebarResize({ minWidth = DEFAULT_MIN_WIDTH, maxWidth = DEFA
|
|
|
47
50
|
}, []);
|
|
48
51
|
// --- Drag ---
|
|
49
52
|
const handlePointerDown = useCallback((event) => {
|
|
53
|
+
if (isCollapsedRef.current) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
50
56
|
event.preventDefault();
|
|
51
57
|
event.currentTarget.setPointerCapture(event.pointerId);
|
|
52
58
|
pointerIdRef.current = event.pointerId;
|
|
@@ -82,6 +88,9 @@ export function useSidebarResize({ minWidth = DEFAULT_MIN_WIDTH, maxWidth = DEFA
|
|
|
82
88
|
}, [isDragging, handlePointerMove, handlePointerUp]);
|
|
83
89
|
// --- Keyboard ---
|
|
84
90
|
const handleKeyDown = useCallback((event) => {
|
|
91
|
+
if (isCollapsedRef.current) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
85
94
|
let newWidth;
|
|
86
95
|
switch (event.key) {
|
|
87
96
|
case 'ArrowRight':
|
|
@@ -107,5 +116,24 @@ export function useSidebarResize({ minWidth = DEFAULT_MIN_WIDTH, maxWidth = DEFA
|
|
|
107
116
|
notify(newWidth);
|
|
108
117
|
}
|
|
109
118
|
}, [minWidth, maxWidth, applyWidth, notify]);
|
|
110
|
-
|
|
119
|
+
useEffect(() => {
|
|
120
|
+
if (isCollapsedRef.current === isCollapsed) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (isCollapsed) {
|
|
124
|
+
lastExpandedWidthRef.current = widthRef.current;
|
|
125
|
+
setIsDragging(false);
|
|
126
|
+
pointerIdRef.current = null;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// width/widthRef never change while collapsed (handlePointerDown/handleKeyDown
|
|
130
|
+
// early-return above), so this is a no-op today. Kept as a defensive restore in
|
|
131
|
+
// case a future change allows width-affecting state (e.g. minWidth/maxWidth) to
|
|
132
|
+
// change while collapsed.
|
|
133
|
+
applyWidth(lastExpandedWidthRef.current);
|
|
134
|
+
}
|
|
135
|
+
isCollapsedRef.current = isCollapsed;
|
|
136
|
+
}, [applyWidth, isCollapsed]);
|
|
137
|
+
const effectiveWidth = useMemo(() => (isCollapsed ? COLLAPSED_WIDTH : width), [isCollapsed, width]);
|
|
138
|
+
return { width: effectiveWidth, minWidth, maxWidth, rootRef, isDragging, handlePointerDown, handleKeyDown };
|
|
111
139
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { Sidebar } from './Sidebar';
|
|
2
|
-
export type { SidebarProps, SidebarNavigationItem, SidebarNavigationDivider, SidebarNavigationEntry, } from './Sidebar.types';
|
|
2
|
+
export type { SidebarProps, SidebarFooterIconMenuSlotState, SidebarNavigationItem, SidebarNavigationDivider, SidebarNavigationEntry, } from './Sidebar.types';
|
|
3
3
|
export type { SidebarNavigationItemProps } from './SidebarNavigationItem';
|
|
4
4
|
export type { SidebarServiceMenuProps } from './SidebarServiceMenu';
|
|
5
5
|
export type { SidebarTenantMenuProps } from './SidebarTenantMenu';
|
|
6
6
|
export type { SidebarUserMenuProps } from './SidebarUserMenu';
|
|
7
|
+
export type { SidebarTenantMenuHeadingProps, SidebarUserMenuHeadingProps, SidebarMenuHeadingCopy, } from './SidebarMenuHeading';
|
|
@@ -13,11 +13,11 @@ import { type StackProps } from './Stack.types';
|
|
|
13
13
|
*/
|
|
14
14
|
export declare const Stack: import("react").ForwardRefExoticComponent<{
|
|
15
15
|
children?: import("react").ReactNode;
|
|
16
|
-
direction?: import("react").CSSProperties[
|
|
17
|
-
gap?: ("horizontal.
|
|
18
|
-
wrap?: import("react").CSSProperties[
|
|
19
|
-
alignItems?: import("react").CSSProperties[
|
|
20
|
-
justifyContent?: import("react").CSSProperties[
|
|
16
|
+
direction?: import("react").CSSProperties['flexDirection'];
|
|
17
|
+
gap?: ("horizontal.0-1of2" | "horizontal.0-1of4" | "horizontal.0-1of8" | "horizontal.1" | "horizontal.1-1of2" | "horizontal.2" | "horizontal.2-1of2" | "horizontal.20" | "horizontal.3" | "horizontal.3-1of2" | "horizontal.3-1of7" | "horizontal.4" | "horizontal.4-1of2" | "horizontal.5" | "horizontal.5-1of2" | "horizontal.6" | "horizontal.6-1of2" | "horizontal.7" | "horizontal.7-1of2" | "horizontal.8" | "vertical.0-1of2" | "vertical.0-1of3" | "vertical.0-1of4" | "vertical.0-1of6" | "vertical.0-1of8" | "vertical.0-2of3" | "vertical.0-3of4" | "vertical.0-5of6" | "vertical.0-7of8" | "vertical.1" | "vertical.1-1of2" | "vertical.1-1of3" | "vertical.1-1of4" | "vertical.1-1of8" | "vertical.1-2of3" | "vertical.2" | "vertical.2-1of2" | "vertical.3") | `${number}px` | number;
|
|
18
|
+
wrap?: import("react").CSSProperties['flexWrap'];
|
|
19
|
+
alignItems?: import("react").CSSProperties['alignItems'];
|
|
20
|
+
justifyContent?: import("react").CSSProperties['justifyContent'];
|
|
21
21
|
} & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
22
22
|
/**
|
|
23
23
|
* This component is inherited from the Stack component and helps you create a horizontal stack layout.
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
export declare const StatusLabel: import("react").ForwardRefExoticComponent<{
|
|
12
12
|
label: string;
|
|
13
13
|
icon?: import("react").ReactNode;
|
|
14
|
-
status?: import("../../styled-system/recipes").StatusLabelSlotRecipeVariant[
|
|
15
|
-
size?: import("../../styled-system/recipes").StatusLabelSlotRecipeVariant[
|
|
14
|
+
status?: import("../../styled-system/recipes").StatusLabelSlotRecipeVariant['status'];
|
|
15
|
+
size?: import("../../styled-system/recipes").StatusLabelSlotRecipeVariant['size'];
|
|
16
16
|
className?: string;
|
|
17
17
|
} & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { createElement, useContext } from 'react';
|
|
4
4
|
import { cx } from '../../../styled-system/css';
|
|
5
5
|
import { stepperSlotRecipe } from '../../../styled-system/recipes';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { DisclosureBasicCollapsed, Lock } from '@moneyforward/mfui-icons-react';
|
|
3
3
|
import { cx } from '../../styled-system/css';
|
|
4
4
|
import { subNavigationSlotRecipe } from '../../styled-system/recipes';
|
|
@@ -9,13 +9,13 @@ import React from 'react';
|
|
|
9
9
|
*/
|
|
10
10
|
export declare const TextBox: React.ForwardRefExoticComponent<{
|
|
11
11
|
enableClearButton?: boolean;
|
|
12
|
-
onClear?: import("..").IconButtonProps[
|
|
13
|
-
invalid?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant[
|
|
14
|
-
textBoxSize?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant[
|
|
15
|
-
disabled?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant[
|
|
16
|
-
wrapperProps?: React.ComponentPropsWithRef<
|
|
12
|
+
onClear?: import("..").IconButtonProps['onClick'];
|
|
13
|
+
invalid?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant['invalid'];
|
|
14
|
+
textBoxSize?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant['size'];
|
|
15
|
+
disabled?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant['disabled'];
|
|
16
|
+
wrapperProps?: React.ComponentPropsWithRef<'div'>;
|
|
17
17
|
prefixSlot?: React.ReactNode;
|
|
18
18
|
suffixSlot?: React.ReactNode;
|
|
19
|
-
clearButtonProps?: Pick<React.ComponentPropsWithoutRef<
|
|
19
|
+
clearButtonProps?: Pick<React.ComponentPropsWithoutRef<'input'>, 'aria-label'>;
|
|
20
20
|
touchDeviceReadOnly?: boolean;
|
|
21
21
|
} & Omit<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "prefix"> & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export declare const TextLink: import("react").ForwardRefExoticComponent<{
|
|
9
9
|
children?: React.ReactNode;
|
|
10
|
-
variant?: import("../../styled-system/recipes").TextLinkSlotRecipeVariant[
|
|
10
|
+
variant?: import("../../styled-system/recipes").TextLinkSlotRecipeVariant['variant'];
|
|
11
11
|
className?: string;
|
|
12
12
|
customLinkComponent?: import("react").ElementType;
|
|
13
13
|
showExternalIcon?: boolean;
|
|
14
|
-
externalIconProps?: import("react").ComponentPropsWithoutRef<
|
|
14
|
+
externalIconProps?: import("react").ComponentPropsWithoutRef<'svg'>['aria-label'];
|
|
15
15
|
} & Omit<import("react").DetailedHTMLProps<import("react").AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & import("react").RefAttributes<HTMLAnchorElement>>;
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea
|
|
11
11
|
*/
|
|
12
12
|
export declare const Textarea: import("react").ForwardRefExoticComponent<{
|
|
13
|
-
invalid?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant[
|
|
14
|
-
size?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant[
|
|
15
|
-
disabled?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant[
|
|
13
|
+
invalid?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant['invalid'];
|
|
14
|
+
size?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant['size'];
|
|
15
|
+
disabled?: import("../../styled-system/recipes").TextBoxSlotRecipeVariant['disabled'];
|
|
16
16
|
enableAutoResize?: boolean;
|
|
17
|
-
resize?:
|
|
17
|
+
resize?: 'none' | 'vertical' | 'horizontal' | 'both';
|
|
18
18
|
} & Omit<import("react").DetailedHTMLProps<import("react").TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref"> & import("react").RefAttributes<HTMLTextAreaElement>>;
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* This component switches the variants of looks depends on the props: type and actionText.
|
|
4
4
|
*/
|
|
5
5
|
export declare const Toast: import("react").ForwardRefExoticComponent<{
|
|
6
|
-
type?: import("../../styled-system/recipes").ToastSlotRecipeVariant[
|
|
6
|
+
type?: import("../../styled-system/recipes").ToastSlotRecipeVariant['type'];
|
|
7
7
|
message: import("react").ReactNode;
|
|
8
8
|
onClose?: () => void;
|
|
9
9
|
actionSlot?: import("react").ReactNode;
|
|
10
|
-
statusIconProps?: Pick<import("react").ComponentPropsWithoutRef<
|
|
11
|
-
closeButtonProps?: Pick<import("react").ComponentPropsWithoutRef<
|
|
10
|
+
statusIconProps?: Pick<import("react").ComponentPropsWithoutRef<'svg'>, 'aria-label'>;
|
|
11
|
+
closeButtonProps?: Pick<import("react").ComponentPropsWithoutRef<'button'>, 'aria-label'>;
|
|
12
12
|
duration?: number;
|
|
13
13
|
activeElement?: Element | null;
|
|
14
14
|
customIcon?: import("react").ReactElement;
|
package/dist/src/Toast/Toast.js
CHANGED
|
@@ -18,20 +18,24 @@ export const Toast = forwardRef(({ className, type = 'success', actionSlot, mess
|
|
|
18
18
|
const timerRef = useRef(null);
|
|
19
19
|
const startTimeRef = useRef(null);
|
|
20
20
|
const localDurationRef = useRef(null);
|
|
21
|
+
// The status is conveyed by the message content itself, so the status icon is decorative
|
|
22
|
+
// and hidden from assistive technology unless a label is explicitly provided.
|
|
23
|
+
const statusIconLabel = statusIconProps?.['aria-label'];
|
|
24
|
+
const statusIconA11yProps = statusIconLabel === undefined ? { 'aria-hidden': true } : { 'aria-label': statusIconLabel };
|
|
21
25
|
const icon = (() => {
|
|
22
26
|
if (type === 'success') {
|
|
23
|
-
return _jsx(Approval, {
|
|
27
|
+
return _jsx(Approval, { ...statusIconA11yProps });
|
|
24
28
|
}
|
|
25
29
|
if (type === 'failure') {
|
|
26
|
-
return _jsx(Error, {
|
|
30
|
+
return _jsx(Error, { ...statusIconA11yProps });
|
|
27
31
|
}
|
|
28
32
|
if (type === 'caution') {
|
|
29
|
-
return _jsx(Caution, {
|
|
33
|
+
return _jsx(Caution, { ...statusIconA11yProps });
|
|
30
34
|
}
|
|
31
35
|
if (type === 'progress') {
|
|
32
|
-
return _jsx(ProgressIndicator, {});
|
|
36
|
+
return _jsx(ProgressIndicator, { "aria-hidden": true });
|
|
33
37
|
}
|
|
34
|
-
return _jsx(Pending, {
|
|
38
|
+
return _jsx(Pending, { ...statusIconA11yProps });
|
|
35
39
|
})();
|
|
36
40
|
// Handle the duration of the toast
|
|
37
41
|
useEffect(() => {
|
|
@@ -26,13 +26,11 @@ export type ToastProps = {
|
|
|
26
26
|
actionSlot?: ReactNode;
|
|
27
27
|
/**
|
|
28
28
|
* The properties for the status icon.
|
|
29
|
-
* If this prop is not passed, the default values for each property will be applied.
|
|
30
29
|
*
|
|
31
30
|
* @property aria-label - The alternative text for the status icon.
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* -
|
|
35
|
-
* - 'busy' type: '進行中'
|
|
31
|
+
* By default, the status icon is decorative and hidden from assistive technology (`aria-hidden`),
|
|
32
|
+
* because the message content itself conveys the status.
|
|
33
|
+
* Pass an `aria-label` only when the icon needs to be announced.
|
|
36
34
|
*/
|
|
37
35
|
statusIconProps?: Pick<ComponentPropsWithoutRef<'svg'>, 'aria-label'>;
|
|
38
36
|
/**
|
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
import { type ToastSlotRecipeVariant } from '../../../styled-system/recipes';
|
|
2
2
|
import { type ToastApiProps } from './toast.types';
|
|
3
|
+
/**
|
|
4
|
+
* Show a toast message
|
|
5
|
+
*
|
|
6
|
+
* @param props - The toast message properties.
|
|
7
|
+
*
|
|
8
|
+
* @param type - The type of the toast message.
|
|
9
|
+
*/
|
|
10
|
+
declare const showToast: (props: ToastApiProps | string, type?: ToastSlotRecipeVariant['type']) => void;
|
|
11
|
+
/**
|
|
12
|
+
* Destroy a toast message.
|
|
13
|
+
* If the key is not provided, all toasts will be destroyed.
|
|
14
|
+
*
|
|
15
|
+
* @param key - The key of the toast message to destroy.
|
|
16
|
+
*/
|
|
17
|
+
declare const destroyToast: (key?: string) => void;
|
|
3
18
|
export declare const toast: {
|
|
4
|
-
show:
|
|
19
|
+
show: typeof showToast;
|
|
5
20
|
success: (props: ToastApiProps | string) => void;
|
|
6
21
|
failure: (props: ToastApiProps | string) => void;
|
|
7
22
|
busy: (props: ToastApiProps | string) => void;
|
|
8
23
|
progress: (props: ToastApiProps | string) => void;
|
|
9
24
|
caution: (props: ToastApiProps | string) => void;
|
|
10
|
-
destroy:
|
|
25
|
+
destroy: typeof destroyToast;
|
|
11
26
|
};
|
|
27
|
+
export {};
|
|
@@ -41,6 +41,6 @@ export declare const Tooltip: import("react").ForwardRefExoticComponent<{
|
|
|
41
41
|
targetDOMNode?: HTMLElement | null;
|
|
42
42
|
disabled?: boolean;
|
|
43
43
|
hideFromScreenReader?: boolean;
|
|
44
|
-
maxWidth?: import("react").CSSProperties[
|
|
45
|
-
contentProps?: Pick<import("react").ComponentPropsWithoutRef<
|
|
46
|
-
} & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref">, "
|
|
44
|
+
maxWidth?: import("react").CSSProperties['maxWidth'];
|
|
45
|
+
contentProps?: Pick<import("react").ComponentPropsWithoutRef<'div'>, 'className' | 'id'>;
|
|
46
|
+
} & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref">, "content" | "disabled"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { forwardRef, useId, useRef, isValidElement, cloneElement, useEffect, useMemo } from 'react';
|
|
4
4
|
import { getOverflowAncestors } from '@floating-ui/react-dom';
|
|
5
5
|
import { cx } from '../../styled-system/css';
|
|
@@ -16,6 +16,8 @@ export type TooltipProps = {
|
|
|
16
16
|
/**
|
|
17
17
|
* Controls the visibility of the tooltip.
|
|
18
18
|
* If not specified, the tooltip will automatically show or hidden by using trigger.
|
|
19
|
+
* When this prop changes back from a boolean to `undefined`, the tooltip closes and
|
|
20
|
+
* returns to trigger-based control (a fresh hover/focus is required to reopen it).
|
|
19
21
|
*
|
|
20
22
|
* @default undefined
|
|
21
23
|
*/
|
|
@@ -42,6 +42,7 @@ export function useTooltipDisplayController({ trigger, wrapperProps, tooltipOpen
|
|
|
42
42
|
const isHoveringTooltip = useRef(false);
|
|
43
43
|
const isHoveringTrigger = useRef(false);
|
|
44
44
|
const previousDisabled = useRef(disabled);
|
|
45
|
+
const previousTooltipOpen = useRef(tooltipOpen);
|
|
45
46
|
const triggers = useMemo(() => (typeof trigger === 'string' ? [trigger] : trigger), [trigger]);
|
|
46
47
|
const onActualClose = useCallback(() => {
|
|
47
48
|
const id = tooltipId.current;
|
|
@@ -218,8 +219,8 @@ export function useTooltipDisplayController({ trigger, wrapperProps, tooltipOpen
|
|
|
218
219
|
}, [closeImmediate]);
|
|
219
220
|
// Handle programmatic control with TooltipManager integration
|
|
220
221
|
useEffect(() => {
|
|
222
|
+
const id = tooltipId.current;
|
|
221
223
|
if (tooltipOpen !== undefined) {
|
|
222
|
-
const id = tooltipId.current;
|
|
223
224
|
if (tooltipOpen) {
|
|
224
225
|
tooltipManager.requestOpen(id);
|
|
225
226
|
}
|
|
@@ -227,7 +228,18 @@ export function useTooltipDisplayController({ trigger, wrapperProps, tooltipOpen
|
|
|
227
228
|
tooltipManager.onClose(id);
|
|
228
229
|
}
|
|
229
230
|
}
|
|
230
|
-
|
|
231
|
+
else if (previousTooltipOpen.current !== undefined) {
|
|
232
|
+
// Leaving controlled mode (`open` became undefined): reset to closed instead of leaking
|
|
233
|
+
// the last state into uncontrolled mode. Trigger handlers are detached while controlled,
|
|
234
|
+
// so the hover/focus tracking refs may be stale — clear them and require a fresh trigger.
|
|
235
|
+
tooltipManager.onClose(id);
|
|
236
|
+
triggerSource.current = undefined;
|
|
237
|
+
isHoveringTrigger.current = false;
|
|
238
|
+
isHoveringTooltip.current = false;
|
|
239
|
+
closeImmediate();
|
|
240
|
+
}
|
|
241
|
+
previousTooltipOpen.current = tooltipOpen;
|
|
242
|
+
}, [tooltipOpen, closeImmediate]);
|
|
231
243
|
useEffect(() => {
|
|
232
244
|
if (disabled && !previousDisabled.current) {
|
|
233
245
|
const id = tooltipId.current;
|
|
@@ -11,4 +11,4 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @param value - The value to set, is string
|
|
13
13
|
*/
|
|
14
|
-
export declare const dispatchNativeInputValueWithEvent: <Element extends HTMLInputElement | HTMLTextAreaElement = HTMLInputElement>(input: Element, value: Element[
|
|
14
|
+
export declare const dispatchNativeInputValueWithEvent: <Element extends HTMLInputElement | HTMLTextAreaElement = HTMLInputElement>(input: Element, value: Element['value']) => void;
|
|
@@ -22,6 +22,6 @@ type Options = {
|
|
|
22
22
|
* @returns The props for the focus trap.
|
|
23
23
|
*/
|
|
24
24
|
export declare function useFocusTrap({ onKeyDown, onPressingTabOnNotFocusableElement }?: Options): {
|
|
25
|
-
handleOnKeyDown:
|
|
25
|
+
handleOnKeyDown: KeyboardEventHandler<HTMLElement>;
|
|
26
26
|
};
|
|
27
27
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useLayoutEffect } from 'react';
|
|
2
2
|
/**
|
|
3
3
|
* `useLayoutEffect` that falls back to `useEffect` on the server.
|
|
4
4
|
*
|
|
@@ -8,4 +8,4 @@ import { useEffect } from 'react';
|
|
|
8
8
|
*
|
|
9
9
|
* @see https://react.dev/reference/react/useLayoutEffect#caveats
|
|
10
10
|
*/
|
|
11
|
-
export declare const useIsomorphicLayoutEffect: typeof
|
|
11
|
+
export declare const useIsomorphicLayoutEffect: typeof useLayoutEffect;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export function isCondition(value: any): boolean;
|
|
2
|
-
export function finalizeConditions(paths: any): any;
|
|
3
|
-
export function sortConditions(paths: any): any;
|
|
1
|
+
export declare function isCondition(value: any): boolean;
|
|
2
|
+
export declare function finalizeConditions(paths: any): any;
|
|
3
|
+
export declare function sortConditions(paths: any): any;
|
|
@@ -1,44 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
declare function isObject(value: any): boolean;
|
|
2
|
+
declare function compact(value: any): {
|
|
3
3
|
[k: string]: any;
|
|
4
4
|
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
declare var isBaseCondition: (v: any) => boolean;
|
|
6
|
+
declare function filterBaseConditions(c: any): any;
|
|
7
|
+
declare function toHash(value: any): string;
|
|
8
|
+
declare function withoutSpace(str: any): any;
|
|
9
|
+
declare var memo: (fn: any) => (...args: any[]) => any;
|
|
10
|
+
declare function mergeProps(...sources: any[]): any;
|
|
11
|
+
declare function walkObject(target: any, predicate: any, options?: {}): any;
|
|
12
|
+
declare function mapObject(obj: any, fn: any): any;
|
|
13
|
+
declare function createCss(context: any): (...args: any[]) => any;
|
|
14
|
+
declare function createMergeCss(context: any): {
|
|
10
15
|
mergeCss: (...args: any[]) => any;
|
|
11
16
|
assignCss: (...styles: any[]) => any;
|
|
12
17
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
declare var hypenateProperty: (...args: any[]) => any;
|
|
19
|
+
declare var isCssFunction: (v: any) => boolean;
|
|
20
|
+
declare var isCssUnit: (v: any) => boolean;
|
|
21
|
+
declare var isCssVar: (v: any) => boolean;
|
|
22
|
+
declare var patternFns: {
|
|
23
|
+
map: typeof mapObject;
|
|
24
|
+
isCssFunction: typeof isCssFunction;
|
|
25
|
+
isCssVar: typeof isCssVar;
|
|
26
|
+
isCssUnit: typeof isCssUnit;
|
|
27
|
+
};
|
|
28
|
+
declare var getPatternStyles: (pattern: any, styles: any) => any;
|
|
29
|
+
declare var getSlotRecipes: (recipe?: {}) => {
|
|
17
30
|
[k: string]: any;
|
|
18
31
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
export
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
export { mapObject as map };
|
|
27
|
-
export { isCssFunction };
|
|
28
|
-
export { isCssVar };
|
|
29
|
-
export { isCssUnit };
|
|
30
|
-
}
|
|
31
|
-
export function splitProps(props: any, ...keys: any[]): {}[];
|
|
32
|
-
export function toHash(value: any): string;
|
|
33
|
-
export function uniq(...items: any[]): any[];
|
|
34
|
-
export function walkObject(target: any, predicate: any, options?: {}): any;
|
|
35
|
-
export function withoutSpace(str: any): any;
|
|
36
|
-
export function normalizeHTMLProps(props: any): any;
|
|
37
|
-
export namespace normalizeHTMLProps {
|
|
32
|
+
declare var getSlotCompoundVariant: (compoundVariants: any, slotName: any) => any;
|
|
33
|
+
declare function splitProps(props: any, ...keys: any[]): {}[];
|
|
34
|
+
declare var uniq: (...items: any[]) => any[];
|
|
35
|
+
export { compact, createCss, createMergeCss, filterBaseConditions, getPatternStyles, getSlotCompoundVariant, getSlotRecipes, hypenateProperty, isBaseCondition, isObject, mapObject, memo, mergeProps, patternFns, splitProps, toHash, uniq, walkObject, withoutSpace };
|
|
36
|
+
declare var htmlProps: string[];
|
|
37
|
+
declare function normalizeHTMLProps(props: any): any;
|
|
38
|
+
declare namespace normalizeHTMLProps {
|
|
38
39
|
export { htmlProps as keys };
|
|
39
40
|
}
|
|
40
|
-
|
|
41
|
-
declare function
|
|
42
|
-
declare function
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
export { normalizeHTMLProps };
|
|
42
|
+
export declare function __spreadValues(a: any, b: any): any;
|
|
43
|
+
export declare function __objRest(source: any, exclude: any): {
|
|
44
|
+
[k: string]: any;
|
|
45
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
1
|
+
export declare const defaultShouldForwardProp: (prop: any, variantKeys: any) => boolean;
|
|
2
|
+
export declare const composeShouldForwardProps: (tag: any, shouldForwardProp: any) => any;
|
|
3
|
+
export declare const composeCvaFn: (cvaA: any, cvaB: any) => any;
|
|
4
|
+
export declare const getDisplayName: (Component: any) => any;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export
|
|
1
|
+
export declare const createRecipe: (name: any, defaultVariants: any, compoundVariants: any) => {
|
|
2
2
|
recipeFn: (variants: any, withCompoundVariants?: boolean) => any;
|
|
3
3
|
getVariantProps: (variants: any) => any;
|
|
4
4
|
__getCompoundVariantCss__: (variants: any) => any;
|
|
5
5
|
};
|
|
6
|
-
export
|
|
6
|
+
export declare const mergeRecipes: (recipeA: any, recipeB: any) => any;
|
|
@@ -99,4 +99,5 @@ export * from './toggle-switch-slot-recipe';
|
|
|
99
99
|
export * from './navigation-list-slot-recipe';
|
|
100
100
|
export * from './navigation-list-item-slot-recipe';
|
|
101
101
|
export * from './form-footer-slot-recipe';
|
|
102
|
-
export * from './sidebar-slot-recipe';
|
|
102
|
+
export * from './sidebar-slot-recipe';
|
|
103
|
+
export * from './sidebar-menu-heading-slot-recipe';
|
|
@@ -3,7 +3,7 @@ import type { ConditionalValue } from '../types/index';
|
|
|
3
3
|
import type { DistributiveOmit, Pretty } from '../types/system-types';
|
|
4
4
|
|
|
5
5
|
interface SectionMessageSlotRecipeVariant {
|
|
6
|
-
messageType: "neutral" | "success" | "error" | "caution"
|
|
6
|
+
messageType: "neutral" | "success" | "error" | "caution" | "busy" | "progress"
|
|
7
7
|
region: "inline" | "page"
|
|
8
8
|
disableResponsive: boolean
|
|
9
9
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
import type { ConditionalValue } from '../types/index';
|
|
3
|
+
import type { DistributiveOmit, Pretty } from '../types/system-types';
|
|
4
|
+
|
|
5
|
+
interface SidebarMenuHeadingSlotRecipeVariant {
|
|
6
|
+
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
type SidebarMenuHeadingSlotRecipeVariantMap = {
|
|
10
|
+
[key in keyof SidebarMenuHeadingSlotRecipeVariant]: Array<SidebarMenuHeadingSlotRecipeVariant[key]>
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
type SidebarMenuHeadingSlotRecipeSlot = "tooltip" | "numberRow" | "numberText" | "numberIcon" | "status"
|
|
14
|
+
|
|
15
|
+
export type SidebarMenuHeadingSlotRecipeVariantProps = {
|
|
16
|
+
[key in keyof SidebarMenuHeadingSlotRecipeVariant]?: ConditionalValue<SidebarMenuHeadingSlotRecipeVariant[key]> | undefined
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface SidebarMenuHeadingSlotRecipeRecipe {
|
|
20
|
+
__slot: SidebarMenuHeadingSlotRecipeSlot
|
|
21
|
+
__type: SidebarMenuHeadingSlotRecipeVariantProps
|
|
22
|
+
(props?: SidebarMenuHeadingSlotRecipeVariantProps): Pretty<Record<SidebarMenuHeadingSlotRecipeSlot, string>>
|
|
23
|
+
raw: (props?: SidebarMenuHeadingSlotRecipeVariantProps) => SidebarMenuHeadingSlotRecipeVariantProps
|
|
24
|
+
variantMap: SidebarMenuHeadingSlotRecipeVariantMap
|
|
25
|
+
variantKeys: Array<keyof SidebarMenuHeadingSlotRecipeVariant>
|
|
26
|
+
splitVariantProps<Props extends SidebarMenuHeadingSlotRecipeVariantProps>(props: Props): [SidebarMenuHeadingSlotRecipeVariantProps, Pretty<DistributiveOmit<Props, keyof SidebarMenuHeadingSlotRecipeVariantProps>>]
|
|
27
|
+
getVariantProps: (props?: SidebarMenuHeadingSlotRecipeVariantProps) => SidebarMenuHeadingSlotRecipeVariantProps
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Slot class created for the MFUI Sidebar tenant/user menu heading sub-component.
|
|
32
|
+
*/
|
|
33
|
+
export declare const sidebarMenuHeadingSlotRecipe: SidebarMenuHeadingSlotRecipeRecipe
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { compact, getSlotCompoundVariant, memo, splitProps } from '../helpers.js';
|
|
2
|
+
import { createRecipe } from './create-recipe.js';
|
|
3
|
+
const sidebarMenuHeadingSlotRecipeDefaultVariants = {};
|
|
4
|
+
const sidebarMenuHeadingSlotRecipeCompoundVariants = [];
|
|
5
|
+
const sidebarMenuHeadingSlotRecipeSlotNames = [
|
|
6
|
+
[
|
|
7
|
+
"tooltip",
|
|
8
|
+
"SidebarMenuHeading__tooltip"
|
|
9
|
+
],
|
|
10
|
+
[
|
|
11
|
+
"numberRow",
|
|
12
|
+
"SidebarMenuHeading__numberRow"
|
|
13
|
+
],
|
|
14
|
+
[
|
|
15
|
+
"numberText",
|
|
16
|
+
"SidebarMenuHeading__numberText"
|
|
17
|
+
],
|
|
18
|
+
[
|
|
19
|
+
"numberIcon",
|
|
20
|
+
"SidebarMenuHeading__numberIcon"
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
"status",
|
|
24
|
+
"SidebarMenuHeading__status"
|
|
25
|
+
]
|
|
26
|
+
];
|
|
27
|
+
const sidebarMenuHeadingSlotRecipeSlotFns = /* @__PURE__ */ sidebarMenuHeadingSlotRecipeSlotNames.map(([slotName, slotKey]) => [slotName, createRecipe(slotKey, sidebarMenuHeadingSlotRecipeDefaultVariants, getSlotCompoundVariant(sidebarMenuHeadingSlotRecipeCompoundVariants, slotName))]);
|
|
28
|
+
const sidebarMenuHeadingSlotRecipeFn = memo((props = {}) => {
|
|
29
|
+
return Object.fromEntries(sidebarMenuHeadingSlotRecipeSlotFns.map(([slotName, slotFn]) => [slotName, slotFn.recipeFn(props)]));
|
|
30
|
+
});
|
|
31
|
+
const sidebarMenuHeadingSlotRecipeVariantKeys = [];
|
|
32
|
+
const getVariantProps = (variants) => ({ ...sidebarMenuHeadingSlotRecipeDefaultVariants, ...compact(variants) });
|
|
33
|
+
export const sidebarMenuHeadingSlotRecipe = /* @__PURE__ */ Object.assign(sidebarMenuHeadingSlotRecipeFn, {
|
|
34
|
+
__recipe__: false,
|
|
35
|
+
__name__: 'sidebarMenuHeadingSlotRecipe',
|
|
36
|
+
raw: (props) => props,
|
|
37
|
+
classNameMap: {},
|
|
38
|
+
variantKeys: sidebarMenuHeadingSlotRecipeVariantKeys,
|
|
39
|
+
variantMap: {},
|
|
40
|
+
splitVariantProps(props) {
|
|
41
|
+
return splitProps(props, sidebarMenuHeadingSlotRecipeVariantKeys);
|
|
42
|
+
},
|
|
43
|
+
getVariantProps
|
|
44
|
+
});
|
|
@@ -10,7 +10,7 @@ type SidebarSlotRecipeVariantMap = {
|
|
|
10
10
|
[key in keyof SidebarSlotRecipeVariant]: Array<SidebarSlotRecipeVariant[key]>
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
type SidebarSlotRecipeSlot = "root" | "header" | "leftPane" | "logo" | "navigationWrapper" | "mainNavigation" | "extraNavigation" | "navigationList" | "navigationListItem" | "navigationDivider" | "navigationLink" | "navigationLinkInner" | "navigationLinkIcon" | "navigationLinkLabel" | "navigationLinkLabelInner" | "footer" | "footerSlot" | "serviceMenu" | "footerIconMenu" | "footerUserIdMenu" | "footerUserIdMenuItem" | "handle"
|
|
13
|
+
type SidebarSlotRecipeSlot = "root" | "header" | "leftPane" | "logo" | "rightPane" | "navigationWrapper" | "mainNavigation" | "extraNavigation" | "navigationList" | "navigationListItem" | "navigationDivider" | "navigationLink" | "navigationLinkInner" | "navigationLinkIcon" | "navigationLinkLabel" | "navigationLinkLabelInner" | "footer" | "footerSlot" | "serviceMenu" | "footerIconMenu" | "footerUserIdMenu" | "footerUserIdMenuItem" | "handle"
|
|
14
14
|
|
|
15
15
|
export type SidebarSlotRecipeVariantProps = {
|
|
16
16
|
[key in keyof SidebarSlotRecipeVariant]?: ConditionalValue<SidebarSlotRecipeVariant[key]> | undefined
|