@moneyforward/mfui-components 3.32.0 → 3.34.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/DateTimeSelection/shared/CalendarGrid/CalendarGrid.js +3 -2
- package/dist/src/DateTimeSelection/shared/CalendarGrid/utilities/useDates.d.ts +2 -1
- package/dist/src/DateTimeSelection/shared/CalendarGrid/utilities/useDates.js +4 -3
- package/dist/src/Dialog/Dialog.js +1 -1
- package/dist/src/FileDropZone/FileDropZone.d.ts +1 -1
- package/dist/src/FileDropZone/FileDropZone.js +4 -2
- package/dist/src/FileDropZone/FileDropZone.types.d.ts +5 -3
- package/dist/src/FormFooter/FormFooter.js +1 -1
- package/dist/src/GlobalHeader/ApplicationsExperimentalIcon.d.ts +9 -0
- package/dist/src/GlobalHeader/ApplicationsExperimentalIcon.js +11 -0
- package/dist/src/GlobalHeader/GlobalHeader.d.ts +1 -1
- package/dist/src/GlobalHeader/GlobalHeader.js +6 -2
- package/dist/src/GlobalHeader/GlobalHeader.types.d.ts +39 -0
- package/dist/src/MainNavigation/MainNavigation.types.d.ts +1 -1
- package/dist/src/SectionMessage/SectionMessage.js +2 -1
- package/dist/src/SidePane/SidePane.js +1 -1
- package/dist/src/Tabs/TabList/TabList.d.ts +1 -1
- package/dist/src/Tabs/TabList/TabList.js +2 -2
- package/dist/src/Tabs/TabPanel/TabPanel.d.ts +1 -1
- package/dist/src/Tabs/TabPanel/TabPanel.js +2 -2
- package/dist/src/Tabs/Tabs.d.ts +1 -1
- package/dist/src/Tabs/Tabs.js +2 -2
- package/dist/styled-system/jsx/create-style-context.js +4 -0
- package/dist/styled-system/jsx/is-valid-prop.d.ts +1 -1
- package/dist/styled-system/recipes/calendar-grid-slot-recipe.d.ts +1 -1
- package/dist/styled-system/recipes/calendar-grid-slot-recipe.js +4 -0
- package/dist/styled-system/recipes/file-drop-zone-slot-recipe.d.ts +1 -1
- package/dist/styled-system/recipes/file-drop-zone-slot-recipe.js +4 -0
- package/dist/styled-system/recipes/global-header-slot-recipe.d.ts +1 -1
- package/dist/styled-system/recipes/global-header-slot-recipe.js +4 -0
- package/dist/styled-system/recipes/section-message-slot-recipe.d.ts +1 -1
- package/dist/styled-system/recipes/section-message-slot-recipe.js +1 -0
- package/dist/styles.css +34 -4
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +12 -12
|
@@ -99,8 +99,9 @@ export function CalendarGrid({ viewingValue, minDate, maxDate, checkDisabledDate
|
|
|
99
99
|
// All props are generated internally and guaranteed to have required fields
|
|
100
100
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
101
101
|
// @ts-ignore
|
|
102
|
-
if (!dateItem)
|
|
103
|
-
return _jsx("div", {}, `empty-date-${String(index)}`);
|
|
102
|
+
if (!dateItem) {
|
|
103
|
+
return (_jsx("div", { className: cx(classes.emptyDateCell, 'mfui-CalendarGrid__emptyDateCell') }, `empty-date-${String(index)}`));
|
|
104
|
+
}
|
|
104
105
|
return renderDateCell ? (renderDateCell(dateItem)) : (_jsx(DateCell, { ...dateItem }, `date-${dateItem.date.toISOString()}`));
|
|
105
106
|
})] }));
|
|
106
107
|
}
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* 7, 8, 9, 10, 11, 12, 13,
|
|
13
13
|
* 14, 15, 16, 17, 18, 19, 20,
|
|
14
14
|
* 21, 22, 23, 24, 25, 26, 27,
|
|
15
|
-
* 28, 29, 30, 31, null, null, null
|
|
15
|
+
* 28, 29, 30, 31, null, null, null,
|
|
16
|
+
* null, null, null, null, null, null, null
|
|
16
17
|
* ]
|
|
17
18
|
*/
|
|
18
19
|
export declare function useDates(viewingValue: Date): (number | null)[];
|
|
@@ -14,19 +14,20 @@ import { getTotalDaysInMonth } from './dateUtilities';
|
|
|
14
14
|
* 7, 8, 9, 10, 11, 12, 13,
|
|
15
15
|
* 14, 15, 16, 17, 18, 19, 20,
|
|
16
16
|
* 21, 22, 23, 24, 25, 26, 27,
|
|
17
|
-
* 28, 29, 30, 31, null, null, null
|
|
17
|
+
* 28, 29, 30, 31, null, null, null,
|
|
18
|
+
* null, null, null, null, null, null, null
|
|
18
19
|
* ]
|
|
19
20
|
*/
|
|
20
21
|
export function useDates(viewingValue) {
|
|
21
22
|
return useMemo(() => {
|
|
22
23
|
// Count empty dates at start
|
|
23
24
|
const emptyDatesStart = Array(viewingValue.getDay() === 0 ? 6 : viewingValue.getDay() - 1).fill(null);
|
|
24
|
-
// Count empty dates at the end
|
|
25
|
-
const emptyDatesEnd = Array(7 - ((viewingValue.getDay() + getTotalDaysInMonth(viewingValue.getMonth(), viewingValue.getFullYear())) % 7)).fill(null);
|
|
26
25
|
// List up dates of viewing value
|
|
27
26
|
const dates = Array(getTotalDaysInMonth(viewingValue.getMonth(), viewingValue.getFullYear()))
|
|
28
27
|
.fill(0)
|
|
29
28
|
.map((_, dateIndex) => dateIndex + 1);
|
|
29
|
+
// Keep the calendar at six weeks so its height does not change between months.
|
|
30
|
+
const emptyDatesEnd = Array(42 - emptyDatesStart.length - dates.length).fill(null);
|
|
30
31
|
return [...emptyDatesStart, ...dates, ...emptyDatesEnd];
|
|
31
32
|
}, [viewingValue]);
|
|
32
33
|
}
|
|
@@ -54,5 +54,5 @@ export const Dialog = compatibleForwardRef(({ open, title, onClose, className, a
|
|
|
54
54
|
return (_jsx(TargetDomNodeProvider, { targetDomNode: dialogElement, children: shouldRenderContent ? (_jsx(Portal, { targetDOMNode: targetElement, children: _jsxs("div", { ref: setDialogElement, ...dialogProps, className: cx(classes.root, 'mfui-Dialog__root', className), style: {
|
|
55
55
|
...dialogProps.style,
|
|
56
56
|
...(!enableAutoUnmount && !localOpen && { display: 'none' }),
|
|
57
|
-
}, onKeyDown: handleOnKeyDown, children: [_jsx("div", { "data-mfui-content": "backdrop", className: cx(classes.backdrop, 'mfui-Dialog__backdrop'), onClick: handleBackdropClick }), _jsxs("div", { ref: setInsideElement, role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": contentId, tabIndex: -1, "data-mfui-content": "inside", className: cx(classes.inside, 'mfui-Dialog__inside'), onClick: handleStopCloseDialog, children: [_jsx("
|
|
57
|
+
}, onKeyDown: handleOnKeyDown, children: [_jsx("div", { "data-mfui-content": "backdrop", className: cx(classes.backdrop, 'mfui-Dialog__backdrop'), onClick: handleBackdropClick }), _jsxs("div", { ref: setInsideElement, role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": contentId, tabIndex: -1, "data-mfui-content": "inside", className: cx(classes.inside, 'mfui-Dialog__inside'), onClick: handleStopCloseDialog, children: [_jsx("div", { className: cx(classes.header, 'mfui-Dialog__header'), children: _jsxs("div", { className: cx(classes.headerContent, 'mfui-Dialog__headerContent'), children: [_jsx(Heading, { id: titleId, variant: "pageHeading2", tag: "h2", className: cx(classes.title, 'mfui-Dialog__title'), children: title }), !hideCloseButton ? (_jsx("div", { className: cx(classes.closeButtonWrapper, 'mfui-Dialog__closeButtonWrapper'), children: _jsx(IconButton, { "aria-label": closeButtonProps?.['aria-label'] ?? '閉じる', onClick: closeDialog, children: _jsx(Close, {}) }) })) : null] }) }), _jsx("div", { id: contentId, className: cx(classes.content, 'mfui-Dialog__content'), children: children }), _jsx("div", { className: cx(classes.footer, 'mfui-Dialog__footer'), children: actionSlot })] })] }) })) : null }));
|
|
58
58
|
});
|
|
@@ -33,7 +33,7 @@ export declare const FileDropZone: import("react").ForwardRefExoticComponent<{
|
|
|
33
33
|
multiple?: import("react").ComponentPropsWithoutRef<'input'>['multiple'];
|
|
34
34
|
accept?: import("react").ComponentPropsWithoutRef<'input'>['accept'];
|
|
35
35
|
clearButtonProps?: Pick<import("..").IconButtonProps, 'aria-label'>;
|
|
36
|
-
errorMessage?: string;
|
|
36
|
+
errorMessage?: string | string[];
|
|
37
37
|
helperMessage?: string;
|
|
38
38
|
illustrationUrl?: string;
|
|
39
39
|
extraElement?: React.ReactNode;
|
|
@@ -70,6 +70,8 @@ fileSelectButtonLabel = 'ファイルを選択', instructionText, fileCountLabel
|
|
|
70
70
|
const previousValueRef = useRef(value);
|
|
71
71
|
const isUserInitiatedClearRef = useRef(false);
|
|
72
72
|
const displayValues = isControlled ? value : internalValues;
|
|
73
|
+
const errorMessages = (Array.isArray(errorMessage) ? errorMessage : [errorMessage]).filter((message) => Boolean(message));
|
|
74
|
+
const fileBoxMaxWidthStyle = { maxWidth: fileBoxWidth };
|
|
73
75
|
const isNarrowViewport = useIsNarrowViewport();
|
|
74
76
|
const clearButtonWidth = isNarrowViewport ? 32 : 24;
|
|
75
77
|
const truncatedSingleName = useMiddleTruncatedText(displayValues?.[0] ?? '', fileNameRef, clearButtonWidth);
|
|
@@ -206,9 +208,9 @@ fileSelectButtonLabel = 'ファイルを選択', instructionText, fileCountLabel
|
|
|
206
208
|
}
|
|
207
209
|
return '';
|
|
208
210
|
}, [displayValues, truncatedSingleName, classes.span, getFileCountText]);
|
|
209
|
-
return (_jsxs("div", { className: cx(classes.root, 'mfui-FileDropZone__root'), children: [_jsx("input", { ref: mergeRefs(ref, inputRef), id: id, type: "file", disabled: disabled, multiple: multiple, accept: accept, className: cx(classes.input, 'mfui-FileDropZone__input'), tabIndex: -1, "aria-hidden": "true", onChange: handleChange, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDrop: handleDrop, ...props }, key), _jsxs("div", { "data-mfui-content": "file-drop-zone-container", className: cx(classes.container, 'mfui-FileDropZone__container', className), style: style, onClick: handleContainerClick, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, children: [illustrationUrl ? (_jsx("div", { "data-mfui-content": "file-drop-zone-illustration", className: cx(classes.illustration, 'mfui-FileDropZone__illustration'), children: _jsx("img", { src: illustrationUrl, alt: "illustration" }) })) : null, _jsxs("div", { "data-mfui-content": "file-drop-zone-main-container", className: cx(classes.mainContainer, 'mfui-FileDropZone__mainContainer'),
|
|
211
|
+
return (_jsxs("div", { className: cx(classes.root, 'mfui-FileDropZone__root'), children: [_jsx("input", { ref: mergeRefs(ref, inputRef), id: id, type: "file", disabled: disabled, multiple: multiple, accept: accept, className: cx(classes.input, 'mfui-FileDropZone__input'), tabIndex: -1, "aria-hidden": "true", onChange: handleChange, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDrop: handleDrop, ...props }, key), _jsxs("div", { "data-mfui-content": "file-drop-zone-container", className: cx(classes.container, 'mfui-FileDropZone__container', className), style: style, onClick: handleContainerClick, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, children: [illustrationUrl ? (_jsx("div", { "data-mfui-content": "file-drop-zone-illustration", className: cx(classes.illustration, 'mfui-FileDropZone__illustration'), children: _jsx("img", { src: illustrationUrl, alt: "illustration" }) })) : null, _jsxs("div", { "data-mfui-content": "file-drop-zone-main-container", className: cx(classes.mainContainer, 'mfui-FileDropZone__mainContainer'), children: [_jsx("div", { "data-mfui-content": "file-drop-zone-instruction", className: cx(classes.instruction, 'mfui-FileDropZone__instruction'), style: fileBoxMaxWidthStyle, children: _jsx("p", { className: cx(classes.phrase, 'mfui-FileDropZone__phrase'), children: normalizedInstructionText }) }), _jsxs("div", { "data-mfui-content": "file-drop-zone-button-container", className: cx(classes.buttonContainer, 'mfui-FileDropZone__buttonContainer'), style: fileBoxMaxWidthStyle, children: [_jsx(Button, { ref: buttonRef, className: cx(classes.button, 'mfui-FileDropZone__button'), disabled: disabled, "aria-describedby": errorMessages.length > 0 || helperMessage || (displayValues && displayValues.length > 0)
|
|
210
212
|
? `${id ? `${id}-` : ''}file-drop-zone-messages`
|
|
211
|
-
: undefined, onClick: handleFileInputTrigger, children: fileSelectButtonLabel }), displayValues !== undefined && displayValues.length > 0 && (_jsxs("div", { "data-mfui-content": "file-drop-zone-file-info", className: cx(classes.fileInfo, 'mfui-FileDropZone__fileInfo'), style: { maxWidth: `${(fileInfoWidth || 147).toString()}px` }, children: [renderDisplayValues, _jsx(ClearButton, { ...clearButtonProps, "aria-label": clearButtonProps?.['aria-label'] ?? 'ファイルをクリアする', className: cx(classes.clearButton, 'mfui-FileDropZone__clearButton'), disabled: disabled, onClick: handleClear })] }))] }), _jsxs("div", { id: id ? `${id}-file-drop-zone-messages` : 'file-drop-zone-messages', "data-mfui-content": "file-drop-zone-help-message", className: cx(classes.helpMessage, 'mfui-FileDropZone__helpMessage'), children: [
|
|
213
|
+
: undefined, onClick: handleFileInputTrigger, children: fileSelectButtonLabel }), displayValues !== undefined && displayValues.length > 0 && (_jsxs("div", { "data-mfui-content": "file-drop-zone-file-info", className: cx(classes.fileInfo, 'mfui-FileDropZone__fileInfo'), style: { maxWidth: `${(fileInfoWidth || 147).toString()}px` }, children: [renderDisplayValues, _jsx(ClearButton, { ...clearButtonProps, "aria-label": clearButtonProps?.['aria-label'] ?? 'ファイルをクリアする', className: cx(classes.clearButton, 'mfui-FileDropZone__clearButton'), disabled: disabled, onClick: handleClear })] }))] }), _jsxs("div", { id: id ? `${id}-file-drop-zone-messages` : 'file-drop-zone-messages', "data-mfui-content": "file-drop-zone-help-message", className: cx(classes.helpMessage, 'mfui-FileDropZone__helpMessage'), children: [errorMessages.length > 0 ? (_jsx("div", { role: "alert", "data-mfui-content": "file-drop-zone-error-messages", className: cx(classes.errorMessages, 'mfui-FileDropZone__errorMessages'), children: errorMessages.map((message, index) => (_jsx(HelpMessage, { role: undefined, messageType: "error", messageAlign: "center", children: message }, index))) })) : null, helperMessage ? _jsx(HelpMessage, { messageAlign: "center", children: helperMessage }) : null, displayValues && displayValues.length > 0 ? (_jsx("div", { className: "sr-only", children: displayValues.length === 1
|
|
212
214
|
? getScreenReaderText('single', displayValues[0] || '')
|
|
213
215
|
: getScreenReaderText('multiple', displayValues.length) })) : null] })] }), extraElement ? (_jsx("div", { "data-mfui-content": "file-drop-zone-extra", className: cx(classes.extra, 'mfui-FileDropZone__extra'), children: extraElement })) : null] })] }));
|
|
214
216
|
});
|
|
@@ -41,11 +41,12 @@ export type FileDropZoneProps = {
|
|
|
41
41
|
*/
|
|
42
42
|
clearButtonProps?: Pick<IconButtonProps, 'aria-label'>;
|
|
43
43
|
/**
|
|
44
|
-
* The error message for the file drop zone.
|
|
44
|
+
* The error message or messages for the file drop zone.
|
|
45
|
+
* Empty strings are not rendered.
|
|
45
46
|
*
|
|
46
47
|
* @default undefined
|
|
47
48
|
*/
|
|
48
|
-
errorMessage?: string;
|
|
49
|
+
errorMessage?: string | string[];
|
|
49
50
|
/**
|
|
50
51
|
* The helper message for the file drop zone.
|
|
51
52
|
*
|
|
@@ -117,7 +118,8 @@ export type FileDropZoneProps = {
|
|
|
117
118
|
*/
|
|
118
119
|
onValueCleared?: () => void;
|
|
119
120
|
/**
|
|
120
|
-
* The width of the
|
|
121
|
+
* The maximum width of the instruction text and button row.
|
|
122
|
+
* Error and helper messages are intentionally not constrained by this value.
|
|
121
123
|
*
|
|
122
124
|
* @default 280
|
|
123
125
|
*/
|
|
@@ -8,5 +8,5 @@ import { formFooterSlotRecipe } from '../../styled-system/recipes';
|
|
|
8
8
|
*/
|
|
9
9
|
export function FormFooter({ className, position = 'stacking', sectionPosition = 'center', optionsSlot, actionsSlot, }) {
|
|
10
10
|
const classes = formFooterSlotRecipe({ position, sectionPosition });
|
|
11
|
-
return (_jsx("
|
|
11
|
+
return (_jsx("div", { className: cx(classes.root, 'mfui-FormFooter__root', className), children: _jsxs("div", { className: cx(classes.section, 'mfui-FormFooter__section'), children: [optionsSlot ? _jsx("div", { className: cx(classes.options, 'mfui-FormFooter__options'), children: optionsSlot }) : null, _jsx("div", { className: cx(classes.actions, 'mfui-FormFooter__actions'), children: actionsSlot })] }) }));
|
|
12
12
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type SVGProps } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Experimental applications icon used inside the built-in applications menu button.
|
|
4
|
+
*
|
|
5
|
+
* This component is private to `GlobalHeader` and not exported from the package.
|
|
6
|
+
*
|
|
7
|
+
* @param props - SVG props forwarded to the root `<svg>`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function ApplicationsExperimentalIcon(props: SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Experimental applications icon used inside the built-in applications menu button.
|
|
4
|
+
*
|
|
5
|
+
* This component is private to `GlobalHeader` and not exported from the package.
|
|
6
|
+
*
|
|
7
|
+
* @param props - SVG props forwarded to the root `<svg>`.
|
|
8
|
+
*/
|
|
9
|
+
export function ApplicationsExperimentalIcon(props) {
|
|
10
|
+
return (_jsxs("svg", { width: 18, height: 18, viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [_jsx("path", { d: "M4.5 2.75C4.5 3.7165 3.7165 4.5 2.75 4.5C1.7835 4.5 1 3.7165 1 2.75C1 1.7835 1.7835 1 2.75 1C3.7165 1 4.5 1.7835 4.5 2.75Z", fill: "currentColor" }), _jsx("path", { d: "M10.75 2.75C10.75 3.7165 9.9665 4.5 9 4.5C8.0335 4.5 7.25 3.7165 7.25 2.75C7.25 1.7835 8.0335 1 9 1C9.9665 1 10.75 1.7835 10.75 2.75Z", fill: "currentColor" }), _jsx("path", { d: "M17 2.75C17 3.7165 16.2165 4.5 15.25 4.5C14.2835 4.5 13.5 3.7165 13.5 2.75C13.5 1.7835 14.2835 1 15.25 1C16.2165 1 17 1.7835 17 2.75Z", fill: "currentColor" }), _jsx("path", { d: "M4.5 9C4.5 9.9665 3.7165 10.75 2.75 10.75C1.7835 10.75 1 9.9665 1 9C1 8.0335 1.7835 7.25 2.75 7.25C3.7165 7.25 4.5 8.0335 4.5 9Z", fill: "currentColor" }), _jsx("path", { d: "M10.75 9C10.75 9.9665 9.9665 10.75 9 10.75C8.0335 10.75 7.25 9.9665 7.25 9C7.25 8.0335 8.0335 7.25 9 7.25C9.9665 7.25 10.75 8.0335 10.75 9Z", fill: "currentColor" }), _jsx("path", { d: "M17 9C17 9.9665 16.2165 10.75 15.25 10.75C14.2835 10.75 13.5 9.9665 13.5 9C13.5 8.0335 14.2835 7.25 15.25 7.25C16.2165 7.25 17 8.0335 17 9Z", fill: "currentColor" }), _jsx("path", { d: "M4.5 15.25C4.5 16.2165 3.7165 17 2.75 17C1.7835 17 1 16.2165 1 15.25C1 14.2835 1.7835 13.5 2.75 13.5C3.7165 13.5 4.5 14.2835 4.5 15.25Z", fill: "currentColor" }), _jsx("path", { d: "M10.75 15.25C10.75 16.2165 9.9665 17 9 17C8.0335 17 7.25 16.2165 7.25 15.25C7.25 14.2835 8.0335 13.5 9 13.5C9.9665 13.5 10.75 14.2835 10.75 15.25Z", fill: "currentColor" }), _jsx("path", { d: "M17 15.25C17 16.2165 16.2165 17 15.25 17C14.2835 17 13.5 16.2165 13.5 15.25C13.5 14.2835 14.2835 13.5 15.25 13.5C16.2165 13.5 17 14.2835 17 15.25Z", fill: "currentColor" })] }));
|
|
11
|
+
}
|
|
@@ -3,4 +3,4 @@ import { type GlobalHeaderProps } from './GlobalHeader.types';
|
|
|
3
3
|
* The global header component.
|
|
4
4
|
* The global header component is a top-level navigation component that is used to display the application's logo and navigation elements.
|
|
5
5
|
*/
|
|
6
|
-
export declare function GlobalHeader({ className, mainNavigationButtonProps, applicationsMenuSlot, logoSlot, rightPaneSlot, disableResponsive, }: GlobalHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function GlobalHeader({ className, mainNavigationButtonProps, applicationsMenuSlot, experimentalApplicationsMenuButtonProps, logoSlot, rightPaneSlot, disableResponsive, }: GlobalHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -4,16 +4,20 @@ import { cx } from '../../styled-system/css';
|
|
|
4
4
|
import { globalHeaderSlotRecipe } from '../../styled-system/recipes';
|
|
5
5
|
import { IconButton } from '../IconButton';
|
|
6
6
|
import { Tooltip } from '../Tooltip';
|
|
7
|
+
import { ApplicationsExperimentalIcon } from './ApplicationsExperimentalIcon';
|
|
7
8
|
/**
|
|
8
9
|
* The global header component.
|
|
9
10
|
* The global header component is a top-level navigation component that is used to display the application's logo and navigation elements.
|
|
10
11
|
*/
|
|
11
|
-
export function GlobalHeader({ className, mainNavigationButtonProps, applicationsMenuSlot, logoSlot, rightPaneSlot, disableResponsive = false, }) {
|
|
12
|
+
export function GlobalHeader({ className, mainNavigationButtonProps, applicationsMenuSlot, experimentalApplicationsMenuButtonProps, logoSlot, rightPaneSlot, disableResponsive = false, }) {
|
|
12
13
|
const responsive = !disableResponsive;
|
|
13
14
|
// If `disableResponsive` is true, the layout will not switch depending on the viewport width.
|
|
14
15
|
const classes = globalHeaderSlotRecipe({ switchLayout: responsive });
|
|
15
16
|
const handleClickMainNavigationButton = (event) => {
|
|
16
17
|
mainNavigationButtonProps?.onClick?.(event);
|
|
17
18
|
};
|
|
18
|
-
|
|
19
|
+
const handleClickExperimentalApplicationsMenuButton = (event) => {
|
|
20
|
+
experimentalApplicationsMenuButtonProps?.onClick?.(event);
|
|
21
|
+
};
|
|
22
|
+
return (_jsxs("header", { className: cx(classes.root, 'mfui-GlobalHeader__root', className), children: [_jsxs("div", { className: cx(classes.leftPane, 'mfui-GlobalHeader__leftPane'), children: [responsive && mainNavigationButtonProps ? (_jsx(Tooltip, { className: cx(classes.mainNavigationButton, 'mfui-GlobalHeader__mainNavigationButton'), content: mainNavigationButtonProps['aria-label'], placement: "bottomStart", children: _jsx(IconButton, { "aria-label": mainNavigationButtonProps['aria-label'], onClick: handleClickMainNavigationButton, children: _jsx(Menu, { "aria-hidden": true }) }) })) : null, experimentalApplicationsMenuButtonProps ? (_jsx("div", { className: cx(classes.applicationsMenuSlot, 'mfui-GlobalHeader__applicationsMenuSlot'), children: _jsx(Tooltip, { content: experimentalApplicationsMenuButtonProps['aria-label'], placement: "bottomStart", children: _jsx(IconButton, { className: cx(classes.experimentalApplicationsMenuButton, 'mfui-GlobalHeader__experimentalApplicationsMenuButton'), "aria-label": experimentalApplicationsMenuButtonProps['aria-label'], onClick: handleClickExperimentalApplicationsMenuButton, children: _jsx(ApplicationsExperimentalIcon, { "aria-hidden": true }) }) }) })) : applicationsMenuSlot ? (_jsx("div", { className: cx(classes.applicationsMenuSlot, 'mfui-GlobalHeader__applicationsMenuSlot'), children: applicationsMenuSlot })) : null, _jsx("div", { className: cx(classes.logo, 'mfui-GlobalHeader__logo'), children: logoSlot.base }), _jsx("div", { className: cx(classes.logoNarrowViewport, 'mfui-GlobalHeader__logoNarrowViewport'), children: logoSlot.narrowViewport ?? logoSlot.base })] }), _jsxs("div", { className: cx(classes.rightPane, 'mfui-GlobalHeader__rightPane'), children: [_jsx("div", { className: cx(classes.rightPaneSlot, 'mfui-GlobalHeader__rightPaneSlot'), children: rightPaneSlot.base }), responsive && rightPaneSlot.narrowViewport ? (_jsx("div", { className: cx(classes.rightPaneSlotNarrowViewport, 'mfui-GlobalHeader__rightPaneSlotNarrowViewport'), children: rightPaneSlot.narrowViewport })) : null] })] }));
|
|
19
23
|
}
|
|
@@ -21,6 +21,36 @@ type MainNavigationButtonProps = {
|
|
|
21
21
|
*/
|
|
22
22
|
'aria-label': IconButtonProps['aria-label'];
|
|
23
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* The properties of the built-in applications menu button.
|
|
26
|
+
*
|
|
27
|
+
* **EXPERIMENTAL**: This feature is experimental and may be changed or removed in the future.
|
|
28
|
+
*/
|
|
29
|
+
type ExperimentalApplicationsMenuButtonProps = {
|
|
30
|
+
/**
|
|
31
|
+
* The handler to be called when the applications menu button is clicked.
|
|
32
|
+
*/
|
|
33
|
+
onClick: IconButtonProps['onClick'];
|
|
34
|
+
/**
|
|
35
|
+
* The accessible label to specify how you want the applications menu button to be recognized and read by screen readers.
|
|
36
|
+
* This prop is required.
|
|
37
|
+
*
|
|
38
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```jsx
|
|
42
|
+
* <GlobalHeader
|
|
43
|
+
* experimentalApplicationsMenuButtonProps={{
|
|
44
|
+
* onClick,
|
|
45
|
+
* 'aria-label': 'アプリケーションメニュー',
|
|
46
|
+
* }}
|
|
47
|
+
* />
|
|
48
|
+
*
|
|
49
|
+
* // The button will be described as "アプリケーションメニュー" by screen readers.
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
'aria-label': IconButtonProps['aria-label'];
|
|
53
|
+
};
|
|
24
54
|
export type GlobalHeaderProps = {
|
|
25
55
|
/**
|
|
26
56
|
* The class name of the global header.
|
|
@@ -39,6 +69,15 @@ export type GlobalHeaderProps = {
|
|
|
39
69
|
* This element must be an applications dropdown menu as defined in Figma.
|
|
40
70
|
*/
|
|
41
71
|
applicationsMenuSlot?: ReactNode;
|
|
72
|
+
/**
|
|
73
|
+
* The properties of the built-in applications menu button with the new experimental design and border.
|
|
74
|
+
*
|
|
75
|
+
* When provided, the button is rendered in the applications menu area and takes precedence over `applicationsMenuSlot`.
|
|
76
|
+
* When omitted, `applicationsMenuSlot` is rendered as before.
|
|
77
|
+
*
|
|
78
|
+
* **EXPERIMENTAL**: This property is experimental and may be changed or removed in the future.
|
|
79
|
+
*/
|
|
80
|
+
experimentalApplicationsMenuButtonProps?: ExperimentalApplicationsMenuButtonProps;
|
|
42
81
|
/**
|
|
43
82
|
* Elements to be displayed on the logo area where the left side of the global header.
|
|
44
83
|
*
|
|
@@ -188,7 +188,7 @@ export type MainNavigationProps = {
|
|
|
188
188
|
* Whether the navigation is collapsible.
|
|
189
189
|
*
|
|
190
190
|
* If this property is set to `true`, the toggle button is displayed at the bottom of the navigation.
|
|
191
|
-
* Cannot be used with feature shortcut
|
|
191
|
+
* Cannot be used with feature shortcut.
|
|
192
192
|
*
|
|
193
193
|
* @default false
|
|
194
194
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
|
-
import { Error, Approval, Caution, Close, Pending } from '@moneyforward/mfui-icons-react';
|
|
3
|
+
import { Error, Approval, Caution, Close, Info, Pending } from '@moneyforward/mfui-icons-react';
|
|
4
4
|
import { cx } from '../../styled-system/css';
|
|
5
5
|
import { sectionMessageSlotRecipe } from '../../styled-system/recipes';
|
|
6
6
|
import { IconButton } from '../IconButton';
|
|
@@ -28,6 +28,7 @@ export const SectionMessage = forwardRef(({ messageType = 'neutral', region = 'i
|
|
|
28
28
|
const statusIconA11yProps = statusIconLabel === undefined ? { 'aria-hidden': true } : { 'aria-label': statusIconLabel };
|
|
29
29
|
const StatusIcon = {
|
|
30
30
|
neutral: null,
|
|
31
|
+
info: _jsx(Info, { ...statusIconA11yProps, className: cx(classes.statusIcon, 'mfui-SectionMessage__statusIcon') }),
|
|
31
32
|
success: (_jsx(Approval, { ...statusIconA11yProps, className: cx(classes.statusIcon, 'mfui-SectionMessage__statusIcon') })),
|
|
32
33
|
error: _jsx(Error, { ...statusIconA11yProps, className: cx(classes.statusIcon, 'mfui-SectionMessage__statusIcon') }),
|
|
33
34
|
caution: (_jsx(Caution, { ...statusIconA11yProps, className: cx(classes.statusIcon, 'mfui-SectionMessage__statusIcon') })),
|
|
@@ -63,5 +63,5 @@ export const SidePane = compatibleForwardRef(({ open, title, renderHeading, onCl
|
|
|
63
63
|
return (_jsx(TargetDomNodeProvider, { targetDomNode: sidePaneElement, children: shouldRenderContent ? (_jsx(Portal, { targetDOMNode: targetElement, children: _jsxs("div", { ref: setSidePaneElement, ...props, className: cx(classes.root, 'mfui-SidePane__root', className), style: {
|
|
64
64
|
...props.style,
|
|
65
65
|
...(!enableAutoUnmount && !localOpen && { display: 'none' }),
|
|
66
|
-
}, onKeyDown: handleOnKeyDown, children: [enableModal ? (_jsx("div", { "data-mfui-content": "backdrop", className: cx(classes.backdrop, 'mfui-SidePane__backdrop'), onClick: handleBackdropClick })) : null, _jsxs("div", { ref: setInsideElement, role: "dialog", "aria-modal": enableModal ? 'true' : undefined, tabIndex: -1, "data-mfui-content": "inside", className: cx(classes.inside, 'mfui-SidePane__inside', insideProps?.className), onClick: handleStopCloseSidePane, children: [_jsxs("
|
|
66
|
+
}, onKeyDown: handleOnKeyDown, children: [enableModal ? (_jsx("div", { "data-mfui-content": "backdrop", className: cx(classes.backdrop, 'mfui-SidePane__backdrop'), onClick: handleBackdropClick })) : null, _jsxs("div", { ref: setInsideElement, role: "dialog", "aria-modal": enableModal ? 'true' : undefined, tabIndex: -1, "data-mfui-content": "inside", className: cx(classes.inside, 'mfui-SidePane__inside', insideProps?.className), onClick: handleStopCloseSidePane, children: [_jsxs("div", { className: cx(classes.header, 'mfui-SidePane__header'), children: [renderHeading ? (renderHeading({ headingNode })) : (_jsx("div", { className: cx(classes.title, 'mfui-SidePane__title'), children: headingNode })), _jsxs("div", { className: cx(classes.actionSlotWrapper, 'mfui-SidePane__actionSlotWrapper'), children: [!!actionSlot && (_jsx("div", { className: cx(classes.actionSlot, 'mfui-SidePane__actionSlot'), children: actionSlot })), _jsx("div", { className: cx(classes.closeButtonWrapper, 'mfui-SidePane__closeButtonWrapper'), children: _jsx(IconButton, { "aria-label": closeButtonProps?.['aria-label'] ?? '閉じる', onClick: handleCloseSidePane, children: closeButtonIcon }) })] })] }), _jsxs("div", { className: cx(classes.content, 'mfui-SidePane__content'), children: [_jsx("div", { className: cx(classes.contentBody, 'mfui-SidePane__contentBody'), children: children }), resolvedFormFooterPosition === 'stacking' ? (_jsx("div", { className: cx(classes.footer, 'mfui-SidePane__footer'), children: _jsx(FormFooter, { sectionPosition: "fill", ...formFooterProps, position: resolvedFormFooterPosition }) })) : null] }), formFooterProps && resolvedFormFooterPosition !== 'stacking' ? (_jsx("div", { className: cx(classes.footer, 'mfui-SidePane__footer'), children: _jsx(FormFooter, { sectionPosition: "fill", ...formFooterProps, position: resolvedFormFooterPosition }) })) : null] })] }) })) : null }));
|
|
67
67
|
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { type TabListProps } from './TabList.types';
|
|
2
|
-
export declare function TabList({ children, scrollLeftButtonProps, scrollRightButtonProps, allTabsDropdownMenuProps, }: TabListProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function TabList({ children, scrollLeftButtonProps, scrollRightButtonProps, allTabsDropdownMenuProps, className, style, }: TabListProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -5,10 +5,10 @@ import { tabListSlotRecipe } from '../../../styled-system/recipes';
|
|
|
5
5
|
import { TabMenu } from './TabMenu';
|
|
6
6
|
import { useShouldShowMenuController } from './hooks/useShouldShowMenuController';
|
|
7
7
|
import { cx } from '../../../styled-system/css';
|
|
8
|
-
export function TabList({ children, scrollLeftButtonProps, scrollRightButtonProps, allTabsDropdownMenuProps, }) {
|
|
8
|
+
export function TabList({ children, scrollLeftButtonProps, scrollRightButtonProps, allTabsDropdownMenuProps, className, style, }) {
|
|
9
9
|
const classNames = tabListSlotRecipe({});
|
|
10
10
|
const containerRef = useRef(null);
|
|
11
11
|
const tabListRef = useRef(null);
|
|
12
12
|
const isOverflowed = useShouldShowMenuController(tabListRef, containerRef);
|
|
13
|
-
return (_jsxs("div", { ref: containerRef, className: cx(classNames.root, 'mfui-TabList__root'), children: [_jsx("div", { ref: tabListRef, role: "tablist", className: cx(classNames.tabList, isOverflowed && classNames.isOverflowed, 'mfui-TabList__tabList'), children: children }), _jsx("div", { className: cx(classNames.blankSpace, 'mfui-TabList__blankSpace') }), isOverflowed ? (_jsx(TabMenu, { tabListRef: tabListRef, scrollLeftButtonProps: scrollLeftButtonProps, scrollRightButtonProps: scrollRightButtonProps, allTabsDropdownMenuProps: allTabsDropdownMenuProps })) : null] }));
|
|
13
|
+
return (_jsxs("div", { ref: containerRef, className: cx(classNames.root, 'mfui-TabList__root', className), style: style, children: [_jsx("div", { ref: tabListRef, role: "tablist", className: cx(classNames.tabList, isOverflowed && classNames.isOverflowed, 'mfui-TabList__tabList'), children: children }), _jsx("div", { className: cx(classNames.blankSpace, 'mfui-TabList__blankSpace') }), isOverflowed ? (_jsx(TabMenu, { tabListRef: tabListRef, scrollLeftButtonProps: scrollLeftButtonProps, scrollRightButtonProps: scrollRightButtonProps, allTabsDropdownMenuProps: allTabsDropdownMenuProps })) : null] }));
|
|
14
14
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { type TabPanelProps } from './TabPanel.types';
|
|
2
|
-
export declare function TabPanel({ forTabId, enableAutoUnmount, children, style, ...props }: TabPanelProps): import("react/jsx-runtime").JSX.Element | null;
|
|
2
|
+
export declare function TabPanel({ forTabId, enableAutoUnmount, children, className, style, ...props }: TabPanelProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -4,7 +4,7 @@ import { useContext } from 'react';
|
|
|
4
4
|
import { tabPanelSlotRecipe } from '../../../styled-system/recipes';
|
|
5
5
|
import { TabContext } from '../TabContext';
|
|
6
6
|
import { cx } from '../../../styled-system/css';
|
|
7
|
-
export function TabPanel({ forTabId, enableAutoUnmount, children, style, ...props }) {
|
|
7
|
+
export function TabPanel({ forTabId, enableAutoUnmount, children, className, style, ...props }) {
|
|
8
8
|
const { selectedTabId, enableAutoUnmount: contextEnableAutoUnmount } = useContext(TabContext);
|
|
9
9
|
// Use prop value if provided, otherwise fall back to context value
|
|
10
10
|
const shouldAutoUnmount = enableAutoUnmount ?? contextEnableAutoUnmount;
|
|
@@ -12,7 +12,7 @@ export function TabPanel({ forTabId, enableAutoUnmount, children, style, ...prop
|
|
|
12
12
|
if (shouldAutoUnmount && !isSelected)
|
|
13
13
|
return null;
|
|
14
14
|
const classNames = tabPanelSlotRecipe();
|
|
15
|
-
return (_jsx("div", { role: "tabpanel", id: `tabpanel-${forTabId}`, className: cx(classNames.root, 'mfui-TabPanel__root'), "aria-labelledby": forTabId, style: {
|
|
15
|
+
return (_jsx("div", { role: "tabpanel", id: `tabpanel-${forTabId}`, className: cx(classNames.root, 'mfui-TabPanel__root', className), "aria-labelledby": forTabId, style: {
|
|
16
16
|
...style,
|
|
17
17
|
display: !shouldAutoUnmount && !isSelected ? 'none' : undefined,
|
|
18
18
|
}, ...props, children: children }));
|
package/dist/src/Tabs/Tabs.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type TabsProps } from './Tabs.types';
|
|
|
2
2
|
import { TabItem } from './TabItem';
|
|
3
3
|
import { TabList } from './TabList';
|
|
4
4
|
import { TabPanel } from './TabPanel';
|
|
5
|
-
declare function Base({ selectedTabId, onSelectedTabChange, targetDOMNode, enableAutoUnmount, children }: TabsProps): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function Base({ selectedTabId, onSelectedTabChange, targetDOMNode, enableAutoUnmount, children, className, style, }: TabsProps): import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
/**
|
|
7
7
|
* The Tabs component manages the tabs, tab lists, and tab panels within a tab section.
|
|
8
8
|
* It provides the necessary context for handling tab selection and rendering the appropriate content.
|
package/dist/src/Tabs/Tabs.js
CHANGED
|
@@ -9,7 +9,7 @@ import { TabPanel } from './TabPanel';
|
|
|
9
9
|
import { TabContext } from './TabContext';
|
|
10
10
|
import { getTargetDomNode } from '../utilities/dom/getTargetDomNode';
|
|
11
11
|
import { cx } from '../../styled-system/css';
|
|
12
|
-
function Base({ selectedTabId, onSelectedTabChange, targetDOMNode, enableAutoUnmount = true, children }) {
|
|
12
|
+
function Base({ selectedTabId, onSelectedTabChange, targetDOMNode, enableAutoUnmount = true, children, className, style, }) {
|
|
13
13
|
const classNames = tabsSlotRecipe();
|
|
14
14
|
const [shouldShowMenu, setShouldShowMenu] = useState(false);
|
|
15
15
|
const wrapperRef = useRef(null);
|
|
@@ -59,7 +59,7 @@ function Base({ selectedTabId, onSelectedTabChange, targetDOMNode, enableAutoUnm
|
|
|
59
59
|
unregisterTab,
|
|
60
60
|
enableAutoUnmount,
|
|
61
61
|
]);
|
|
62
|
-
return (_jsx(TabContext.Provider, { value: contextValue, children: _jsx("div", { ref: wrapperRef, className: cx(classNames.root, 'mfui-Tabs__root'), children: children }) }));
|
|
62
|
+
return (_jsx(TabContext.Provider, { value: contextValue, children: _jsx("div", { ref: wrapperRef, className: cx(classNames.root, 'mfui-Tabs__root', className), style: style, children: children }) }));
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
65
|
* The Tabs component manages the tabs, tab lists, and tab panels within a tab section.
|
|
@@ -52,6 +52,10 @@ export function createStyleContext(recipe) {
|
|
|
52
52
|
const StyledComponent = styled(Component, {}, options);
|
|
53
53
|
const WithProvider = forwardRef((props, ref) => {
|
|
54
54
|
const [variantProps, restProps] = svaFn.splitVariantProps(props);
|
|
55
|
+
options?.forwardProps?.forEach((key) => {
|
|
56
|
+
if (key in variantProps)
|
|
57
|
+
restProps[key] = variantProps[key];
|
|
58
|
+
});
|
|
55
59
|
const slotStyles = isConfigRecipe ? svaFn(variantProps) : svaFn.raw(variantProps);
|
|
56
60
|
slotStyles._classNameMap = svaFn.classNameMap;
|
|
57
61
|
const propsWithClass = { ...restProps, className: restProps.className ?? options?.defaultProps?.className };
|
|
@@ -10,7 +10,7 @@ type CalendarGridSlotRecipeVariantMap = {
|
|
|
10
10
|
[key in keyof CalendarGridSlotRecipeVariant]: Array<CalendarGridSlotRecipeVariant[key]>
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
type CalendarGridSlotRecipeSlot = "calendarGrid"
|
|
13
|
+
type CalendarGridSlotRecipeSlot = "calendarGrid" | "emptyDateCell"
|
|
14
14
|
|
|
15
15
|
export type CalendarGridSlotRecipeVariantProps = {
|
|
16
16
|
[key in keyof CalendarGridSlotRecipeVariant]?: ConditionalValue<CalendarGridSlotRecipeVariant[key]> | undefined
|
|
@@ -6,6 +6,10 @@ const calendarGridSlotRecipeSlotNames = [
|
|
|
6
6
|
[
|
|
7
7
|
"calendarGrid",
|
|
8
8
|
"CalendarGrid__calendarGrid"
|
|
9
|
+
],
|
|
10
|
+
[
|
|
11
|
+
"emptyDateCell",
|
|
12
|
+
"CalendarGrid__emptyDateCell"
|
|
9
13
|
]
|
|
10
14
|
];
|
|
11
15
|
const calendarGridSlotRecipeSlotFns = /* @__PURE__ */ calendarGridSlotRecipeSlotNames.map(([slotName, slotKey]) => [slotName, createRecipe(slotKey, calendarGridSlotRecipeDefaultVariants, getSlotCompoundVariant(calendarGridSlotRecipeCompoundVariants, slotName))]);
|
|
@@ -17,7 +17,7 @@ type FileDropZoneSlotRecipeVariantMap = {
|
|
|
17
17
|
[key in keyof FileDropZoneSlotRecipeVariant]: Array<FileDropZoneSlotRecipeVariant[key]>
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
type FileDropZoneSlotRecipeSlot = "root" | "input" | "container" | "illustration" | "mainContainer" | "instruction" | "buttonContainer" | "button" | "fileInfo" | "span" | "clearButton" | "helpMessage" | "extra" | "phrase"
|
|
20
|
+
type FileDropZoneSlotRecipeSlot = "root" | "input" | "container" | "illustration" | "mainContainer" | "instruction" | "buttonContainer" | "button" | "fileInfo" | "span" | "clearButton" | "helpMessage" | "errorMessages" | "extra" | "phrase"
|
|
21
21
|
|
|
22
22
|
export type FileDropZoneSlotRecipeVariantProps = {
|
|
23
23
|
[key in keyof FileDropZoneSlotRecipeVariant]?: FileDropZoneSlotRecipeVariant[key] | undefined
|
|
@@ -10,7 +10,7 @@ type GlobalHeaderSlotRecipeVariantMap = {
|
|
|
10
10
|
[key in keyof GlobalHeaderSlotRecipeVariant]: Array<GlobalHeaderSlotRecipeVariant[key]>
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
type GlobalHeaderSlotRecipeSlot = "root" | "leftPane" | "mainNavigationButton" | "applicationsMenuSlot" | "logo" | "logoNarrowViewport" | "rightPane" | "rightPaneSlot" | "rightPaneSlotNarrowViewport"
|
|
13
|
+
type GlobalHeaderSlotRecipeSlot = "root" | "leftPane" | "mainNavigationButton" | "applicationsMenuSlot" | "experimentalApplicationsMenuButton" | "logo" | "logoNarrowViewport" | "rightPane" | "rightPaneSlot" | "rightPaneSlotNarrowViewport"
|
|
14
14
|
|
|
15
15
|
export type GlobalHeaderSlotRecipeVariantProps = {
|
|
16
16
|
[key in keyof GlobalHeaderSlotRecipeVariant]?: ConditionalValue<GlobalHeaderSlotRecipeVariant[key]> | undefined
|
|
@@ -19,6 +19,10 @@ const globalHeaderSlotRecipeSlotNames = [
|
|
|
19
19
|
"applicationsMenuSlot",
|
|
20
20
|
"GlobalHeader__applicationsMenuSlot"
|
|
21
21
|
],
|
|
22
|
+
[
|
|
23
|
+
"experimentalApplicationsMenuButton",
|
|
24
|
+
"GlobalHeader__experimentalApplicationsMenuButton"
|
|
25
|
+
],
|
|
22
26
|
[
|
|
23
27
|
"logo",
|
|
24
28
|
"GlobalHeader__logo"
|
|
@@ -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" | "busy" | "progress"
|
|
6
|
+
messageType: "neutral" | "info" | "success" | "error" | "caution" | "busy" | "progress"
|
|
7
7
|
region: "inline" | "page"
|
|
8
8
|
disableResponsive: boolean
|
|
9
9
|
}
|
package/dist/styles.css
CHANGED
|
@@ -1223,9 +1223,25 @@
|
|
|
1223
1223
|
|
|
1224
1224
|
.mfui-iYzsiq {
|
|
1225
1225
|
gap: var(--mfui-spacing-mfui\.size\.spacing\.paragraph\.horizontal\.comfort);
|
|
1226
|
+
display: inline-flex;
|
|
1227
|
+
align-items: center;
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
.mfui-foTsqX.mfui-IconButton__root {
|
|
1231
|
+
border: 1px solid;
|
|
1232
|
+
border-color: var(--mfui-colors-mfui\.color\.neutral\.sub-border\.none);
|
|
1233
|
+
border-radius: var(--mfui-radii-mfui\.size\.radius\.control-component\.comfort);
|
|
1226
1234
|
}
|
|
1227
1235
|
|
|
1228
|
-
.mfui-
|
|
1236
|
+
.mfui-foTsqX.mfui-IconButton__root:is(:focus-visible, [data-focus-visible]),.mfui-foTsqX.mfui-IconButton__root:is(:hover, [data-hover]):not(:disabled, [disabled], [data-disabled]) {
|
|
1237
|
+
border-color: var(--mfui-colors-mfui\.color\.neutral\.sub-border\.hovered);
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
.mfui-foTsqX.mfui-IconButton__root:is(:active, [data-active]):not(:disabled, [disabled], [data-disabled]) {
|
|
1241
|
+
border-color: var(--mfui-colors-mfui\.color\.neutral\.sub-border\.pressed);
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
.mfui-fvFlLM {
|
|
1229
1245
|
display: inline-flex;
|
|
1230
1246
|
align-items: center;
|
|
1231
1247
|
}
|
|
@@ -2526,6 +2542,11 @@
|
|
|
2526
2542
|
grid-template-columns: repeat(7, 1fr);
|
|
2527
2543
|
}
|
|
2528
2544
|
|
|
2545
|
+
.mfui-kmzIbu {
|
|
2546
|
+
width: var(--mfui-sizes-mfui\.size\.dimension\.calendar-cell\.width\.comfort);
|
|
2547
|
+
height: var(--mfui-sizes-mfui\.size\.dimension\.calendar-cell\.height\.comfort);
|
|
2548
|
+
}
|
|
2549
|
+
|
|
2529
2550
|
.mfui-gPptzF {
|
|
2530
2551
|
width: min-content;
|
|
2531
2552
|
}
|
|
@@ -4664,8 +4685,6 @@
|
|
|
4664
4685
|
background-color: var(--mfui-colors-mfui\.color\.neutral\.thin-background\.none);
|
|
4665
4686
|
font-family: var(--mfui-fonts-mfui\.typography\.font-family\.label);
|
|
4666
4687
|
font-size: var(--mfui-font-sizes-mfui\.typography\.font-size\.control-label);
|
|
4667
|
-
width: 100%;
|
|
4668
|
-
min-width: max-content;
|
|
4669
4688
|
height: 100%;
|
|
4670
4689
|
}
|
|
4671
4690
|
|
|
@@ -4674,6 +4693,7 @@
|
|
|
4674
4693
|
flex-direction: column;
|
|
4675
4694
|
align-items: center;
|
|
4676
4695
|
justify-content: center;
|
|
4696
|
+
width: 100%;
|
|
4677
4697
|
}
|
|
4678
4698
|
|
|
4679
4699
|
.mfui-fqNMeO {
|
|
@@ -4694,6 +4714,7 @@
|
|
|
4694
4714
|
align-items: center;
|
|
4695
4715
|
justify-content: center;
|
|
4696
4716
|
width: 100%;
|
|
4717
|
+
min-width: max-content;
|
|
4697
4718
|
}
|
|
4698
4719
|
|
|
4699
4720
|
.mfui-juYDJw {
|
|
@@ -4746,6 +4767,12 @@
|
|
|
4746
4767
|
height: 1px;
|
|
4747
4768
|
}
|
|
4748
4769
|
|
|
4770
|
+
.mfui-VkDTa {
|
|
4771
|
+
display: flex;
|
|
4772
|
+
flex-direction: column;
|
|
4773
|
+
align-items: center;
|
|
4774
|
+
}
|
|
4775
|
+
|
|
4749
4776
|
.mfui-kakNKU {
|
|
4750
4777
|
padding-inline: var(--mfui-spacing-mfui\.size\.padding\.main-content\.horizontal\.comfort);
|
|
4751
4778
|
padding-block: var(--mfui-spacing-mfui\.size\.padding\.content\.vertical\.comfort);
|
|
@@ -6000,7 +6027,6 @@ li:last-child > .mfui-cXGJls {
|
|
|
6000
6027
|
}
|
|
6001
6028
|
|
|
6002
6029
|
.mfui-iaZfLW {
|
|
6003
|
-
overflow: hidden;
|
|
6004
6030
|
flex-shrink: 0;
|
|
6005
6031
|
}
|
|
6006
6032
|
|
|
@@ -6838,6 +6864,10 @@ li:last-child > .mfui-cXGJls {
|
|
|
6838
6864
|
resize: horizontal;
|
|
6839
6865
|
}
|
|
6840
6866
|
|
|
6867
|
+
.mfui-dpIccs {
|
|
6868
|
+
color: var(--mfui-colors-mfui\.color\.neutral\.content\.none);
|
|
6869
|
+
}
|
|
6870
|
+
|
|
6841
6871
|
.mfui-cFyzwg {
|
|
6842
6872
|
background-color: var(--mfui-colors-mfui\.color\.signal-green\.sub-background\.none);
|
|
6843
6873
|
}
|