@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.
Files changed (35) hide show
  1. package/dist/src/DateTimeSelection/shared/CalendarGrid/CalendarGrid.js +3 -2
  2. package/dist/src/DateTimeSelection/shared/CalendarGrid/utilities/useDates.d.ts +2 -1
  3. package/dist/src/DateTimeSelection/shared/CalendarGrid/utilities/useDates.js +4 -3
  4. package/dist/src/Dialog/Dialog.js +1 -1
  5. package/dist/src/FileDropZone/FileDropZone.d.ts +1 -1
  6. package/dist/src/FileDropZone/FileDropZone.js +4 -2
  7. package/dist/src/FileDropZone/FileDropZone.types.d.ts +5 -3
  8. package/dist/src/FormFooter/FormFooter.js +1 -1
  9. package/dist/src/GlobalHeader/ApplicationsExperimentalIcon.d.ts +9 -0
  10. package/dist/src/GlobalHeader/ApplicationsExperimentalIcon.js +11 -0
  11. package/dist/src/GlobalHeader/GlobalHeader.d.ts +1 -1
  12. package/dist/src/GlobalHeader/GlobalHeader.js +6 -2
  13. package/dist/src/GlobalHeader/GlobalHeader.types.d.ts +39 -0
  14. package/dist/src/MainNavigation/MainNavigation.types.d.ts +1 -1
  15. package/dist/src/SectionMessage/SectionMessage.js +2 -1
  16. package/dist/src/SidePane/SidePane.js +1 -1
  17. package/dist/src/Tabs/TabList/TabList.d.ts +1 -1
  18. package/dist/src/Tabs/TabList/TabList.js +2 -2
  19. package/dist/src/Tabs/TabPanel/TabPanel.d.ts +1 -1
  20. package/dist/src/Tabs/TabPanel/TabPanel.js +2 -2
  21. package/dist/src/Tabs/Tabs.d.ts +1 -1
  22. package/dist/src/Tabs/Tabs.js +2 -2
  23. package/dist/styled-system/jsx/create-style-context.js +4 -0
  24. package/dist/styled-system/jsx/is-valid-prop.d.ts +1 -1
  25. package/dist/styled-system/recipes/calendar-grid-slot-recipe.d.ts +1 -1
  26. package/dist/styled-system/recipes/calendar-grid-slot-recipe.js +4 -0
  27. package/dist/styled-system/recipes/file-drop-zone-slot-recipe.d.ts +1 -1
  28. package/dist/styled-system/recipes/file-drop-zone-slot-recipe.js +4 -0
  29. package/dist/styled-system/recipes/global-header-slot-recipe.d.ts +1 -1
  30. package/dist/styled-system/recipes/global-header-slot-recipe.js +4 -0
  31. package/dist/styled-system/recipes/section-message-slot-recipe.d.ts +1 -1
  32. package/dist/styled-system/recipes/section-message-slot-recipe.js +1 -0
  33. package/dist/styles.css +34 -4
  34. package/dist/tsconfig.build.tsbuildinfo +1 -1
  35. 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("header", { 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("main", { id: contentId, className: cx(classes.content, 'mfui-Dialog__content'), children: children }), _jsx("footer", { className: cx(classes.footer, 'mfui-Dialog__footer'), children: actionSlot })] })] }) })) : null }));
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'), style: { maxWidth: fileBoxWidth }, children: [_jsx("div", { "data-mfui-content": "file-drop-zone-instruction", className: cx(classes.instruction, 'mfui-FileDropZone__instruction'), 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'), children: [_jsx(Button, { ref: buttonRef, className: cx(classes.button, 'mfui-FileDropZone__button'), disabled: disabled, "aria-describedby": errorMessage || helperMessage || (displayValues && displayValues.length > 0)
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: [errorMessage ? (_jsx(HelpMessage, { messageType: "error", messageAlign: "center", children: errorMessage })) : null, helperMessage ? _jsx(HelpMessage, { messageAlign: "center", children: helperMessage }) : null, displayValues && displayValues.length > 0 ? (_jsx("div", { className: "sr-only", children: displayValues.length === 1
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 filebox element.
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("footer", { 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 })] }) }));
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
- 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, 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
+ 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 or nested navigation.
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("header", { 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("main", { 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 }));
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 }));
@@ -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.
@@ -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 };
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable */
2
- import type { DistributiveOmit, HTMLPandaProps, JsxStyleProps, Pretty } from '../types';
2
+ import type { DistributiveOmit, JsxStyleProps, Pretty } from '../types';
3
3
 
4
4
  declare const isCssProperty: (value: string) => boolean;
5
5
 
@@ -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
@@ -64,6 +64,10 @@ const fileDropZoneSlotRecipeSlotNames = [
64
64
  "helpMessage",
65
65
  "file-drop-zone__helpMessage"
66
66
  ],
67
+ [
68
+ "errorMessages",
69
+ "file-drop-zone__errorMessages"
70
+ ],
67
71
  [
68
72
  "extra",
69
73
  "file-drop-zone__extra"
@@ -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
  }
@@ -59,6 +59,7 @@ export const sectionMessageSlotRecipe = /* @__PURE__ */ Object.assign(sectionMes
59
59
  variantMap: {
60
60
  "messageType": [
61
61
  "neutral",
62
+ "info",
62
63
  "success",
63
64
  "error",
64
65
  "caution",
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-iYzsiq,.mfui-fvFlLM {
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
  }