@moneyforward/mfui-components 4.5.0 → 4.6.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 (71) hide show
  1. package/dist/src/Badge/Badge.d.ts +1 -1
  2. package/dist/src/Badge/Badge.js +4 -4
  3. package/dist/src/Badge/Badge.types.d.ts +3 -1
  4. package/dist/src/Checkbox/Checkbox.js +7 -3
  5. package/dist/src/DataTable/DataTable.types.d.ts +2 -2
  6. package/dist/src/DataTable/DataTableCell/DataTableCell.js +21 -4
  7. package/dist/src/DataTable/DataTableCell/DataTableCell.types.d.ts +1 -1
  8. package/dist/src/DataTable/DataTableHeaderRow/DataTableHeaderRow.js +7 -5
  9. package/dist/src/DataTable/DataTableRow/DataTableRow.js +104 -32
  10. package/dist/src/DataTable/DataTableRow/DataTableRow.types.d.ts +44 -15
  11. package/dist/src/DataTable/DataTableRowActionContext.d.ts +34 -0
  12. package/dist/src/DataTable/DataTableRowActionContext.js +8 -0
  13. package/dist/src/DateTimeSelection/DatePicker/DatePickerCalendar/DatePickerCalendar.js +7 -3
  14. package/dist/src/DateTimeSelection/DateRangePicker/DateRangePickerPopover/DateRangePickerCalendar/DateRangePickerCalendar.js +1 -1
  15. package/dist/src/DateTimeSelection/DateRangePicker/DateRangePickerPopover/utilities/createDateRangePickerPopoverTestUtility.js +2 -2
  16. package/dist/src/DateTimeSelection/DateRangePicker/DateRangePickerProvider/DateRangePickerProvider.js +13 -7
  17. package/dist/src/DateTimeSelection/DateRangePicker/DateRangePickerTrigger/DateRangePickerTrigger.js +1 -1
  18. package/dist/src/DateTimeSelection/FilterDatePicker/FilterDatePicker.js +1 -1
  19. package/dist/src/DateTimeSelection/FilterMonthPicker/FilterMonthPicker.js +1 -1
  20. package/dist/src/DateTimeSelection/FilterMonthRangePicker/FilterMonthRangePicker.js +1 -1
  21. package/dist/src/DateTimeSelection/MonthPicker/MonthPickerPanel/MonthPickerPanel.js +1 -1
  22. package/dist/src/DateTimeSelection/MonthPicker/constants.d.ts +2 -2
  23. package/dist/src/DateTimeSelection/MonthPicker/constants.js +6 -6
  24. package/dist/src/DateTimeSelection/MonthRangePicker/MonthRangePickerMonthCell/MonthRangePickerMonthCell.js +1 -1
  25. package/dist/src/DateTimeSelection/MonthRangePicker/MonthRangePickerNavigation/MonthRangePickerNavigation.js +2 -2
  26. package/dist/src/DateTimeSelection/TimePicker/TimePicker.js +1 -1
  27. package/dist/src/DateTimeSelection/shared/BasePicker/constants.d.ts +2 -2
  28. package/dist/src/DateTimeSelection/shared/BasePicker/constants.js +10 -10
  29. package/dist/src/DateTimeSelection/shared/BaseRangePicker/BaseRangePickerPopover/BaseRangePickerCalendar/BaseRangePickerCalendar.js +1 -1
  30. package/dist/src/DateTimeSelection/shared/BaseRangePicker/BaseRangePickerPopover/constants.js +4 -4
  31. package/dist/src/DateTimeSelection/shared/BaseRangePicker/BaseRangePickerProvider/BaseRangePickerProvider.js +13 -7
  32. package/dist/src/DateTimeSelection/shared/BaseRangePicker/BaseRangePickerTrigger/BaseRangePickerTrigger.js +2 -2
  33. package/dist/src/DateTimeSelection/shared/CalendarGrid/CalendarGrid.js +1 -1
  34. package/dist/src/DateTimeSelection/shared/utilities/japaneseCalendar.js +2 -2
  35. package/dist/src/FileDropZone/FileDropZone.js +1 -1
  36. package/dist/src/FileDropZone/utils/fileHelpers.js +1 -1
  37. package/dist/src/MainNavigation/BaseMainNavigation.js +1 -1
  38. package/dist/src/MainNavigation/NarrowViewportMainNavigation.js +1 -1
  39. package/dist/src/MultipleSelectBox/MultipleSelectBoxTrigger/MultipleSelectBoxTrigger.js +1 -1
  40. package/dist/src/MultipleSelectBox/hooks/useCreateOption.js +8 -4
  41. package/dist/src/MultipleSelectBox/hooks/useOptionKeyboardNavigation.js +9 -4
  42. package/dist/src/MultipleSelectBox/hooks/useSelectedValues.js +16 -50
  43. package/dist/src/NumberBox/NumberBox.js +8 -4
  44. package/dist/src/PageHeader/PageHeader.types.d.ts +2 -0
  45. package/dist/src/Popover/Popover.js +11 -2
  46. package/dist/src/SelectBox/SelectBox.js +9 -10
  47. package/dist/src/SelectBox/hooks/useKeyboardNavigation.js +8 -2
  48. package/dist/src/SplitView/hooks/useSplitViewPanelVisibility.js +5 -2
  49. package/dist/src/SubNavigation/SubNavigation.js +80 -19
  50. package/dist/src/SubNavigation/SubNavigation.types.d.ts +18 -6
  51. package/dist/src/Tabs/Tabs.js +8 -4
  52. package/dist/src/Tabs/hooks/useCalculatedSelectedTabId.js +7 -5
  53. package/dist/src/Toast/ToastContainer/ToastContainer.js +11 -2
  54. package/dist/src/Tooltip/Tooltip.js +8 -3
  55. package/dist/src/Tooltip/hooks/useTooltipDisplayController.js +77 -88
  56. package/dist/src/utilities/dom/getFocusableNodes.js +1 -3
  57. package/dist/src/utilities/dom/useFixedColumns.js +6 -8
  58. package/dist/src/utilities/react/flattenChildren.d.ts +15 -0
  59. package/dist/src/utilities/react/flattenChildren.js +28 -0
  60. package/dist/src/utilities/state/useLatest.d.ts +1 -1
  61. package/dist/src/utilities/state/useLatest.js +8 -2
  62. package/dist/styled-system/recipes/badge-slot-recipe.d.ts +1 -1
  63. package/dist/styled-system/recipes/badge-slot-recipe.js +4 -0
  64. package/dist/styled-system/recipes/data-table-cell-slot-recipe.d.ts +1 -1
  65. package/dist/styled-system/recipes/data-table-cell-slot-recipe.js +4 -0
  66. package/dist/styled-system/recipes/data-table-row-slot-recipe.js +13 -6
  67. package/dist/styled-system/recipes/sub-navigation-slot-recipe.d.ts +1 -1
  68. package/dist/styled-system/recipes/sub-navigation-slot-recipe.js +12 -0
  69. package/dist/styles.css +155 -35
  70. package/dist/tsconfig.build.tsbuildinfo +1 -1
  71. package/package.json +12 -12
@@ -79,98 +79,87 @@ export function useTooltipDisplayController({ trigger, wrapperProps, tooltipOpen
79
79
  return updatedWrapperProps;
80
80
  if (tooltipOpen)
81
81
  return updatedWrapperProps;
82
- Object.assign(updatedWrapperProps, {
83
- onMouseDown: (event) => {
84
- isMouseTriggered.current = true;
85
- wrapperProps.onMouseDown?.(event);
86
- },
87
- onMouseUp: (event) => {
88
- isMouseTriggered.current = false;
89
- wrapperProps.onMouseUp?.(event);
90
- },
91
- onKeyDown: (event) => {
92
- if (event.key === 'Enter' && open) {
93
- closeWithManager();
94
- }
95
- wrapperProps.onKeyDown?.(event);
96
- },
97
- });
82
+ // Assigned directly (not via `Object.assign`) so the compiler can see these
83
+ // ref-closing handlers are only ever stored as props, never invoked here.
84
+ updatedWrapperProps.onMouseDown = (event) => {
85
+ isMouseTriggered.current = true;
86
+ wrapperProps.onMouseDown?.(event);
87
+ };
88
+ updatedWrapperProps.onMouseUp = (event) => {
89
+ isMouseTriggered.current = false;
90
+ wrapperProps.onMouseUp?.(event);
91
+ };
92
+ updatedWrapperProps.onKeyDown = (event) => {
93
+ if (event.key === 'Enter' && open) {
94
+ closeWithManager();
95
+ }
96
+ wrapperProps.onKeyDown?.(event);
97
+ };
98
98
  if (triggers.includes('hover')) {
99
- Object.assign(updatedWrapperProps, {
100
- onMouseEnter: (event) => {
101
- if (!isEventFromTrigger(event))
102
- return;
103
- triggerSource.current = 'hover';
104
- isHoveringTrigger.current = true;
105
- cancelClose(); // Cancel any pending close
106
- openWithManager('delayed');
107
- wrapperProps.onMouseEnter?.(event);
108
- },
109
- onMouseLeave: (event) => {
110
- if (triggerSource.current !== 'hover')
111
- return;
112
- if (!isEventFromTrigger(event))
113
- return;
114
- isHoveringTrigger.current = false;
115
- // Only start close timer if also not hovering tooltip
116
- // Use queueMicrotask to avoid race conditions with rapid mouse events
117
- queueMicrotask(() => {
118
- closeWithDelayIfNotHovering();
119
- });
120
- wrapperProps.onMouseLeave?.(event);
121
- },
122
- });
123
- }
124
- if (triggers.includes('click')) {
125
- Object.assign(updatedWrapperProps, {
126
- onClick: (event) => {
127
- if (!isEventFromTrigger(event))
128
- return;
129
- if (!open) {
130
- triggerSource.current = 'click';
131
- openWithManager('immediate');
132
- }
133
- else {
134
- closeWithManager();
135
- }
136
- wrapperProps.onClick?.(event);
137
- },
138
- });
139
- }
140
- else {
141
- // When click is not a trigger, clicking should close the tooltip if it's open
142
- Object.assign(updatedWrapperProps, {
143
- onClick: (event) => {
144
- if (!isEventFromTrigger(event))
145
- return;
146
- if (open) {
147
- closeWithManager();
148
- }
149
- wrapperProps.onClick?.(event);
150
- },
151
- });
99
+ updatedWrapperProps.onMouseEnter = (event) => {
100
+ if (!isEventFromTrigger(event))
101
+ return;
102
+ triggerSource.current = 'hover';
103
+ isHoveringTrigger.current = true;
104
+ cancelClose(); // Cancel any pending close
105
+ openWithManager('delayed');
106
+ wrapperProps.onMouseEnter?.(event);
107
+ };
108
+ updatedWrapperProps.onMouseLeave = (event) => {
109
+ if (triggerSource.current !== 'hover')
110
+ return;
111
+ if (!isEventFromTrigger(event))
112
+ return;
113
+ isHoveringTrigger.current = false;
114
+ // Only start close timer if also not hovering tooltip
115
+ // Use queueMicrotask to avoid race conditions with rapid mouse events
116
+ queueMicrotask(() => {
117
+ closeWithDelayIfNotHovering();
118
+ });
119
+ wrapperProps.onMouseLeave?.(event);
120
+ };
152
121
  }
153
- if (triggers.includes('focus')) {
154
- Object.assign(updatedWrapperProps, {
155
- onFocus: (event) => {
156
- if (!isEventFromTrigger(event))
157
- return;
158
- // onFocus event is triggered before onClick event when the mouse is clicked, so we need to skip it
159
- if (isMouseTriggered.current)
160
- return;
161
- triggerSource.current = 'focus';
122
+ // When click is not a trigger, clicking should still close the tooltip if it's open.
123
+ updatedWrapperProps.onClick = triggers.includes('click')
124
+ ? (event) => {
125
+ if (!isEventFromTrigger(event))
126
+ return;
127
+ if (!open) {
128
+ triggerSource.current = 'click';
162
129
  openWithManager('immediate');
163
- wrapperProps.onFocus?.(event);
164
- },
165
- onBlur: (event) => {
166
- if (triggerSource.current !== 'focus')
167
- return;
168
- if (!isEventFromTrigger(event))
169
- return;
130
+ }
131
+ else {
170
132
  closeWithManager();
171
- wrapperProps.onBlur?.(event);
172
- },
173
- });
133
+ }
134
+ wrapperProps.onClick?.(event);
135
+ }
136
+ : (event) => {
137
+ if (!isEventFromTrigger(event))
138
+ return;
139
+ if (open) {
140
+ closeWithManager();
141
+ }
142
+ wrapperProps.onClick?.(event);
143
+ };
144
+ if (triggers.includes('focus')) {
145
+ updatedWrapperProps.onFocus = (event) => {
146
+ if (!isEventFromTrigger(event))
147
+ return;
148
+ // onFocus event is triggered before onClick event when the mouse is clicked, so we need to skip it
149
+ if (isMouseTriggered.current)
150
+ return;
151
+ triggerSource.current = 'focus';
152
+ openWithManager('immediate');
153
+ wrapperProps.onFocus?.(event);
154
+ };
155
+ updatedWrapperProps.onBlur = (event) => {
156
+ if (triggerSource.current !== 'focus')
157
+ return;
158
+ if (!isEventFromTrigger(event))
159
+ return;
160
+ closeWithManager();
161
+ wrapperProps.onBlur?.(event);
162
+ };
174
163
  }
175
164
  return updatedWrapperProps;
176
165
  }, [
@@ -26,9 +26,7 @@ const isNonTabbableRadio = (node) => {
26
26
  }
27
27
  const getRadio = (selector) => node.ownerDocument.querySelector(`input[type="radio"]${selector}`);
28
28
  let roving = getRadio(`[name="${node.name}"]:checked`);
29
- if (!roving) {
30
- roving = getRadio(`[name="${node.name}"]`);
31
- }
29
+ roving ??= getRadio(`[name="${node.name}"]`);
32
30
  return roving !== node;
33
31
  };
34
32
  // This function ensures that the node is focusable by checking if it is disabled, hidden, or a non-tabbable radio button.
@@ -4,7 +4,6 @@ import { useLayoutEffect, useMemo, useRef, useState } from 'react';
4
4
  */
5
5
  export const useFixedColumns = ({ enableRowSelection = false, columnIndex, leftFixedColumnIndex, rightFixedColumnIndex, }) => {
6
6
  const cellRef = useRef(null);
7
- const [fixedPositionStyles, setFixedPositionStyles] = useState();
8
7
  const isCheckboxColumn = enableRowSelection && columnIndex === 0;
9
8
  // Adjust column index when row selection is enabled to account for the checkbox column
10
9
  const actualColumnIndex = useMemo(() => {
@@ -79,19 +78,18 @@ export const useFixedColumns = ({ enableRowSelection = false, columnIndex, leftF
79
78
  resizeObserver.disconnect();
80
79
  };
81
80
  }, []);
82
- useLayoutEffect(() => {
81
+ // Fully derivable from render-time values (no external system involved), so this is a
82
+ // plain memo rather than an effect writing to its own state.
83
+ const fixedPositionStyles = useMemo(() => {
83
84
  if (isCheckboxColumn && leftFixedColumnIndex !== undefined) {
84
- setFixedPositionStyles({
85
- left: 0,
86
- });
87
- return;
85
+ return { left: 0 };
88
86
  }
89
87
  if (!cellRect)
90
88
  return;
91
- setFixedPositionStyles({
89
+ return {
92
90
  left: fixedDirection === 'left' ? cellRect.left : undefined,
93
91
  right: fixedDirection === 'right' ? cellRect.right : undefined,
94
- });
92
+ };
95
93
  }, [cellRect, fixedDirection, isCheckboxColumn, leftFixedColumnIndex]);
96
94
  const isFixedColumn = useMemo(() => fixedDirection !== undefined, [fixedDirection]);
97
95
  const isEdgeFixedColumn = useMemo(() => {
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Flattens React children by expanding Fragments so that elements wrapped in a
3
+ * Fragment (e.g. `<>{items.map(...)}</>`) become directly visible to
4
+ * `Children`-based inspection such as `isComponentOrWrapped`.
5
+ *
6
+ * The keys assigned by `Children.toArray` are combined with the keys of the
7
+ * enclosing Fragments so that they stay unique after flattening.
8
+ *
9
+ * @param children - The React children to flatten
10
+ *
11
+ * @param parentKeys - The accumulated keys of the enclosing Fragments (internal use for recursion)
12
+ *
13
+ * @returns The flattened children with Fragments expanded
14
+ */
15
+ export declare function flattenChildren(children: React.ReactNode, parentKeys?: readonly (string | number)[]): React.ReactNode[];
@@ -0,0 +1,28 @@
1
+ import { Children, Fragment, cloneElement, isValidElement } from 'react';
2
+ /**
3
+ * Flattens React children by expanding Fragments so that elements wrapped in a
4
+ * Fragment (e.g. `<>{items.map(...)}</>`) become directly visible to
5
+ * `Children`-based inspection such as `isComponentOrWrapped`.
6
+ *
7
+ * The keys assigned by `Children.toArray` are combined with the keys of the
8
+ * enclosing Fragments so that they stay unique after flattening.
9
+ *
10
+ * @param children - The React children to flatten
11
+ *
12
+ * @param parentKeys - The accumulated keys of the enclosing Fragments (internal use for recursion)
13
+ *
14
+ * @returns The flattened children with Fragments expanded
15
+ */
16
+ export function flattenChildren(children, parentKeys = []) {
17
+ return Children.toArray(children).flatMap((child, index) => {
18
+ if (isValidElement(child) && child.type === Fragment) {
19
+ return flattenChildren(child.props.children, [...parentKeys, child.key ?? index]);
20
+ }
21
+ if (isValidElement(child) && parentKeys.length > 0) {
22
+ // ':' cannot appear in the combined segments (React escapes it in user keys), so it
23
+ // keeps structurally different key paths from composing into the same string.
24
+ return cloneElement(child, { key: [...parentKeys, child.key].join(':') });
25
+ }
26
+ return child;
27
+ });
28
+ }
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @param value - Any value that you want to track
7
7
  *
8
- * @returns The React's RefObject of that value, which always the latest value.
8
+ * @returns The React's RefObject of that value, which holds the latest committed value.
9
9
  *
10
10
  * @see [React Hooks FAQ](https://legacy.reactjs.org/docs/hooks-faq.html#why-am-i-seeing-stale-props-or-state-inside-my-function)
11
11
  *
@@ -1,4 +1,5 @@
1
1
  import { useRef } from 'react';
2
+ import { useIsomorphicLayoutEffect } from '../react/useIsomorphicLayoutEffect';
2
3
  /**
3
4
  * React state hook that returns the latest state as described in the React hooks FAQ.
4
5
  *
@@ -6,7 +7,7 @@ import { useRef } from 'react';
6
7
  *
7
8
  * @param value - Any value that you want to track
8
9
  *
9
- * @returns The React's RefObject of that value, which always the latest value.
10
+ * @returns The React's RefObject of that value, which holds the latest committed value.
10
11
  *
11
12
  * @see [React Hooks FAQ](https://legacy.reactjs.org/docs/hooks-faq.html#why-am-i-seeing-stale-props-or-state-inside-my-function)
12
13
  *
@@ -14,6 +15,11 @@ import { useRef } from 'react';
14
15
  */
15
16
  export const useLatest = (value) => {
16
17
  const ref = useRef(value);
17
- ref.current = value;
18
+ // Committed in a layout effect rather than assigned during render (React's rules
19
+ // disallow render-time mutation). Callers only read `.current` from callbacks and
20
+ // effects, which all run after this commits.
21
+ useIsomorphicLayoutEffect(() => {
22
+ ref.current = value;
23
+ });
18
24
  return ref;
19
25
  };
@@ -10,7 +10,7 @@ type BadgeSlotRecipeVariantMap = {
10
10
  [key in keyof BadgeSlotRecipeVariant]: Array<BadgeSlotRecipeVariant[key]>
11
11
  }
12
12
 
13
- type BadgeSlotRecipeSlot = "root" | "indicator"
13
+ type BadgeSlotRecipeSlot = "root" | "indicator" | "srOnlyLabel"
14
14
 
15
15
  export type BadgeSlotRecipeVariantProps = {
16
16
  [key in keyof BadgeSlotRecipeVariant]?: ConditionalValue<BadgeSlotRecipeVariant[key]> | undefined
@@ -10,6 +10,10 @@ const badgeSlotRecipeSlotNames = [
10
10
  [
11
11
  "indicator",
12
12
  "Badge__indicator"
13
+ ],
14
+ [
15
+ "srOnlyLabel",
16
+ "Badge__srOnlyLabel"
13
17
  ]
14
18
  ];
15
19
  const badgeSlotRecipeSlotFns = /* @__PURE__ */ badgeSlotRecipeSlotNames.map(([slotName, slotKey]) => [slotName, createRecipe(slotKey, badgeSlotRecipeDefaultVariants, getSlotCompoundVariant(badgeSlotRecipeCompoundVariants, slotName))]);
@@ -19,7 +19,7 @@ type DataTableCellSlotRecipeVariantMap = {
19
19
  [key in keyof DataTableCellSlotRecipeVariant]: Array<DataTableCellSlotRecipeVariant[key]>
20
20
  }
21
21
 
22
- type DataTableCellSlotRecipeSlot = "root" | "defaultCell" | "interactiveCell" | "disclosureIconWrapper" | "disclosureSpacing" | "skeletonCell"
22
+ type DataTableCellSlotRecipeSlot = "root" | "defaultCell" | "interactiveCell" | "disclosureIconWrapper" | "disclosureSpacing" | "skeletonCell" | "rowActionButton"
23
23
 
24
24
  export type DataTableCellSlotRecipeVariantProps = {
25
25
  [key in keyof DataTableCellSlotRecipeVariant]?: DataTableCellSlotRecipeVariant[key] | undefined
@@ -68,6 +68,10 @@ const dataTableCellSlotRecipeSlotNames = [
68
68
  [
69
69
  "skeletonCell",
70
70
  "DataTableCell__skeletonCell"
71
+ ],
72
+ [
73
+ "rowActionButton",
74
+ "DataTableCell__rowActionButton"
71
75
  ]
72
76
  ];
73
77
  const dataTableCellSlotRecipeSlotFns = /* @__PURE__ */ dataTableCellSlotRecipeSlotNames.map(([slotName, slotKey]) => [slotName, createRecipe(slotKey, dataTableCellSlotRecipeDefaultVariants, getSlotCompoundVariant(dataTableCellSlotRecipeCompoundVariants, slotName))]);
@@ -13,12 +13,8 @@ const dataTableRowSlotRecipeCompoundVariants = [
13
13
  "backgroundColor": "mfui.color.selected.background.hovered"
14
14
  }
15
15
  },
16
- "_focusVisible": {
17
- "backgroundColor": "mfui.color.selected.background.hovered",
18
- "boxShadow": "[0px 0px 0px 2px {colors.mfui.color.primary.border.none} inset, 0px 0px 0px 3px {colors.mfui.color.base.background.none} inset]"
19
- },
20
- "_focusInputInside": {
21
- "boxShadow": "[none]"
16
+ "&:has([data-mfui-content=\"data-table-row-action-button\"]:focus-visible)": {
17
+ "backgroundColor": "mfui.color.selected.background.hovered"
22
18
  },
23
19
  "_active": {
24
20
  "&:not(:has(button:hover, input:hover, select:hover, textarea:hover, [tabindex]:hover, [data-mfui-content=\"data-table-checkbox-cell\"]:hover))": {
@@ -27,6 +23,17 @@ const dataTableRowSlotRecipeCompoundVariants = [
27
23
  }
28
24
  }
29
25
  }
26
+ },
27
+ {
28
+ "highlighted": true,
29
+ "rowClickSelectable": true,
30
+ "css": {
31
+ "root": {
32
+ "&:has(.mfui-DataTableRow__selectionCheckbox input[type=\"checkbox\"]:focus-visible)": {
33
+ "backgroundColor": "mfui.color.selected.background.hovered"
34
+ }
35
+ }
36
+ }
30
37
  }
31
38
  ];
32
39
  const dataTableRowSlotRecipeSlotNames = [
@@ -11,7 +11,7 @@ type SubNavigationSlotRecipeVariantMap = {
11
11
  [key in keyof SubNavigationSlotRecipeVariant]: Array<SubNavigationSlotRecipeVariant[key]>
12
12
  }
13
13
 
14
- type SubNavigationSlotRecipeSlot = "root" | "subNavigationHeader" | "list" | "listItem" | "link" | "labelIcon" | "label" | "statusSlot" | "details" | "summary" | "disclosureIcon" | "nestedListItem"
14
+ type SubNavigationSlotRecipeSlot = "root" | "subNavigationHeader" | "list" | "listItem" | "link" | "labelContainer" | "labelIcon" | "labelContent" | "label" | "description" | "statusSlot" | "details" | "summary" | "disclosureIcon" | "nestedListItem"
15
15
 
16
16
  export type SubNavigationSlotRecipeVariantProps = {
17
17
  [key in keyof SubNavigationSlotRecipeVariant]?: ConditionalValue<SubNavigationSlotRecipeVariant[key]> | undefined
@@ -23,14 +23,26 @@ const subNavigationSlotRecipeSlotNames = [
23
23
  "link",
24
24
  "SubNavigation__link"
25
25
  ],
26
+ [
27
+ "labelContainer",
28
+ "SubNavigation__labelContainer"
29
+ ],
26
30
  [
27
31
  "labelIcon",
28
32
  "SubNavigation__labelIcon"
29
33
  ],
34
+ [
35
+ "labelContent",
36
+ "SubNavigation__labelContent"
37
+ ],
30
38
  [
31
39
  "label",
32
40
  "SubNavigation__label"
33
41
  ],
42
+ [
43
+ "description",
44
+ "SubNavigation__description"
45
+ ],
34
46
  [
35
47
  "statusSlot",
36
48
  "SubNavigation__statusSlot"