@primer/react 38.41.0 → 38.42.0-rc.23d625bd0
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/CHANGELOG.md +8 -0
- package/dist/DataTable/DataTable.d.ts +27 -2
- package/dist/DataTable/DataTable.js +119 -72
- package/dist/DataTable/{Table-50e68700.css → Table-6ee6a868.css} +2 -2
- package/dist/DataTable/Table-6ee6a868.css.map +1 -0
- package/dist/DataTable/Table.d.ts +76 -1
- package/dist/DataTable/Table.js +214 -15
- package/dist/DataTable/Table.module.css.js +3 -1
- package/dist/DataTable/index.d.ts +5 -3
- package/dist/DataTable/index.js +3 -1
- package/dist/DataTable/row.d.ts +3 -2
- package/dist/DataTable/useTable.js +185 -61
- package/dist/Overlay/Overlay.d.ts +2 -0
- package/dist/Overlay/Overlay.js +4 -2
- package/dist/experimental/index.d.ts +3 -3
- package/dist/hooks/useOpenAndCloseFocus.d.ts +3 -1
- package/dist/hooks/useOpenAndCloseFocus.js +28 -16
- package/dist/hooks/useOverlay.d.ts +3 -1
- package/dist/hooks/useOverlay.js +24 -22
- package/generated/components.json +138 -2
- package/generated/hooks.json +12 -0
- package/package.json +2 -2
- package/dist/DataTable/Table-50e68700.css.map +0 -1
|
@@ -54,6 +54,7 @@ type ContainerProps = {
|
|
|
54
54
|
portalContainerName?: string;
|
|
55
55
|
preventOverflow?: boolean;
|
|
56
56
|
preventFocusOnOpen?: boolean;
|
|
57
|
+
preventFocusOnClose?: boolean;
|
|
57
58
|
returnFocusRef: React.RefObject<HTMLElement | null>;
|
|
58
59
|
};
|
|
59
60
|
type internalOverlayProps = Merge<OwnOverlayProps, ContainerProps>;
|
|
@@ -68,6 +69,7 @@ type internalOverlayProps = Merge<OwnOverlayProps, ContainerProps>;
|
|
|
68
69
|
* @param portalContainerName Optional. The name of the portal container to render the Overlay into.
|
|
69
70
|
* @param preventOverflow Optional. The Overlay width will be adjusted responsively if there is not enough space to display the Overlay. If `preventOverflow` is `true`, the width of the `Overlay` will not be adjusted.
|
|
70
71
|
* @param preventFocusOnOpen Optional. If 'true', focus will not be applied when the component is first mounted, even if initialFocusRef prop is given.
|
|
72
|
+
* @param preventFocusOnClose Optional. If true, focus will not be returned when the component is unmounted. Consumers must manage focus themselves.
|
|
71
73
|
* @param returnFocusRef Required. Ref for the element to focus when the `Overlay` is closed.
|
|
72
74
|
* @param right Optional. Horizontal right position of the overlay, relative to its closest positioned ancestor (often its `Portal`).
|
|
73
75
|
* @param width Sets the width of the `Overlay`, pick from our set list of widths, or pass `auto` to automatically set the width based on the content of the `Overlay`. `small` corresponds to `256px`, `medium` corresponds to `320px`, `large` corresponds to `480px`, `xlarge` corresponds to `640px`, `xxlarge` corresponds to `960px`.
|
package/dist/Overlay/Overlay.js
CHANGED
|
@@ -76,12 +76,13 @@ const BaseOverlay = /*#__PURE__*/ React.forwardRef(({ visibility, height, width,
|
|
|
76
76
|
* @param portalContainerName Optional. The name of the portal container to render the Overlay into.
|
|
77
77
|
* @param preventOverflow Optional. The Overlay width will be adjusted responsively if there is not enough space to display the Overlay. If `preventOverflow` is `true`, the width of the `Overlay` will not be adjusted.
|
|
78
78
|
* @param preventFocusOnOpen Optional. If 'true', focus will not be applied when the component is first mounted, even if initialFocusRef prop is given.
|
|
79
|
+
* @param preventFocusOnClose Optional. If true, focus will not be returned when the component is unmounted. Consumers must manage focus themselves.
|
|
79
80
|
* @param returnFocusRef Required. Ref for the element to focus when the `Overlay` is closed.
|
|
80
81
|
* @param right Optional. Horizontal right position of the overlay, relative to its closest positioned ancestor (often its `Portal`).
|
|
81
82
|
* @param width Sets the width of the `Overlay`, pick from our set list of widths, or pass `auto` to automatically set the width based on the content of the `Overlay`. `small` corresponds to `256px`, `medium` corresponds to `320px`, `large` corresponds to `480px`, `xlarge` corresponds to `640px`, `xxlarge` corresponds to `960px`.
|
|
82
83
|
|
|
83
84
|
*/
|
|
84
|
-
const Overlay = /*#__PURE__*/ React.forwardRef(({ anchorSide, _PrivateDisablePortal, height = "auto", ignoreClickRefs, initialFocusRef, left, onClickOutside, onEscape, portalContainerName, preventOverflow = true, preventFocusOnOpen, returnFocusRef, right, role = "none", visibility = "visible", width = "auto", responsiveVariant, ...props }, forwardedRef) => {
|
|
85
|
+
const Overlay = /*#__PURE__*/ React.forwardRef(({ anchorSide, _PrivateDisablePortal, height = "auto", ignoreClickRefs, initialFocusRef, left, onClickOutside, onEscape, portalContainerName, preventOverflow = true, preventFocusOnOpen, preventFocusOnClose, returnFocusRef, right, role = "none", visibility = "visible", width = "auto", responsiveVariant, ...props }, forwardedRef) => {
|
|
85
86
|
const overlayRef = useRef(null);
|
|
86
87
|
const mergedOverlayRef = useMergedRefs(forwardedRef, overlayRef);
|
|
87
88
|
const slideAnimationDistance = 8;
|
|
@@ -94,7 +95,8 @@ const Overlay = /*#__PURE__*/ React.forwardRef(({ anchorSide, _PrivateDisablePor
|
|
|
94
95
|
ignoreClickRefs,
|
|
95
96
|
onClickOutside,
|
|
96
97
|
initialFocusRef,
|
|
97
|
-
preventFocusOnOpen
|
|
98
|
+
preventFocusOnOpen,
|
|
99
|
+
preventFocusOnClose
|
|
98
100
|
});
|
|
99
101
|
useEffect(() => {
|
|
100
102
|
var _overlayRef$current;
|
|
@@ -15,7 +15,7 @@ import { FilteredActionListProps } from "../FilteredActionList/FilteredActionLis
|
|
|
15
15
|
import { FilteredActionListInputProps } from "../FilteredActionList/FilteredActionListInput.js";
|
|
16
16
|
import { FilteredActionList } from "../FilteredActionList/index.js";
|
|
17
17
|
import { ObjectPaths } from "../DataTable/utils.js";
|
|
18
|
-
import { DataTableData, DataTableRowGroup, UniqueRow } from "../DataTable/row.js";
|
|
18
|
+
import { DataTableData, DataTableRowGroup, DataTableRowId, UniqueRow } from "../DataTable/row.js";
|
|
19
19
|
import { CellAlignment, Column, ColumnWidth, createColumnHelper } from "../DataTable/column.js";
|
|
20
20
|
import { ActionBarButtonProps, ActionBarMenuItemProps, ActionBarMenuProps, ActionBarProps } from "../ActionBar/ActionBar.js";
|
|
21
21
|
import { ActionBar } from "../ActionBar/index.js";
|
|
@@ -28,7 +28,7 @@ import { Blankslate as BlankslateContainer } from "../Blankslate/index.js";
|
|
|
28
28
|
import { CardActionProps as ActionProps, CardDescriptionProps as DescriptionProps, CardHeadingProps as HeadingProps, CardIconProps as IconProps, CardImageProps as ImageProps, CardMetadataProps as MetadataProps, CardProps } from "../Card/Card.js";
|
|
29
29
|
import { Card } from "../Card/index.js";
|
|
30
30
|
import { DataTable, DataTableProps } from "../DataTable/DataTable.js";
|
|
31
|
-
import { TableActionsProps, TableBodyProps, TableCellProps, TableContainerProps, TableHeadProps, TableHeaderProps, TableProps, TableRowProps, TableSubtitleProps, TableTitleProps } from "../DataTable/Table.js";
|
|
31
|
+
import { TableActionsProps, TableBodyProps, TableCellProps, TableContainerProps, TableHeadProps, TableHeaderProps, TableProps, TableRowProps, TableRowSelectionProps, TableSelectionHeaderProps, TableSubtitleProps, TableTitleProps } from "../DataTable/Table.js";
|
|
32
32
|
import { TableGroupProps } from "../DataTable/TableGroup.js";
|
|
33
33
|
import { Table } from "../DataTable/index.js";
|
|
34
34
|
import { InlineMessage, InlineMessageProps } from "../InlineMessage/InlineMessage.js";
|
|
@@ -51,4 +51,4 @@ import { useTabPanel } from "./Tabs/useTabPanel.js";
|
|
|
51
51
|
import { TopicTagProps } from "../TopicTag/TopicTag.js";
|
|
52
52
|
import { TopicTagGroupProps } from "../TopicTag/TopicTagGroup.js";
|
|
53
53
|
import { TopicTag } from "../TopicTag/index.js";
|
|
54
|
-
export { ActionBar, type ActionBarButtonProps, type ActionBarMenuItemProps, type ActionBarMenuProps, type ActionBarProps, Announce, type AnnounceProps, AriaAlert, type AriaAlertProps, AriaStatus, type AriaStatusProps, BlankslateContainer as Blankslate, type BlankslateProps, ButtonBase, type ButtonBaseProps, Card, type ActionProps as CardActionProps, type DescriptionProps as CardDescriptionProps, type HeadingProps as CardHeadingProps, type IconProps as CardIconProps, type ImageProps as CardImageProps, type MetadataProps as CardMetadataProps, type CardProps, type CellAlignment, type Column, type ColumnWidth, DataTable, type DataTableData, type DataTableProps, type DataTableRowGroup, DefaultFeatureFlags, Dialog, type DialogButtonProps, type DialogHeaderProps, type DialogHeight, type DialogProps, type DialogWidth, FeatureFlags, type FeatureFlagsProps, FilteredActionList, type FilteredActionListInputProps, FilteredActionListLoadingTypes, type FilteredActionListProps, Hidden, type HiddenProps, InlineMessage, type InlineMessageProps, IssueLabel, type IssueLabelProps, KeybindingHint, type KeybindingHintProps, NavList, type NavListDividerProps, type NavListGroupProps, type NavListItemProps, type NavListLeadingVisualProps, type NavListProps, type NavListSubNavProps, type NavListTrailingVisualProps, type ObjectPaths, PageHeader, type ActionsProps as PageHeaderActionsProps, type PageHeaderProps, type TitleProps as PageHeaderTitleProps, ScrollableRegion, type ScrollableRegionProps, SelectPanel, type SelectPanelMessageProps, type SelectPanelProps, type SelectPanelSecondaryActionProps, SkeletonAvatar, type SkeletonAvatarProps, SkeletonBox, type SkeletonBoxProps, SkeletonText, type SkeletonTextProps, SlotConfig, Stack, type StackItemProps, type StackProps, type TabListProps, type TabPanelProps, type TabProps, Table, type TableActionsProps, type TableBodyProps, type TableCellProps, type TableContainerProps, type TableGroupProps, type TableHeadProps, type TableHeaderProps, type TableProps, type TableRowProps, type TableSubtitleProps, type TableTitleProps, Tabs, type TabsProps, type TitleProps, Tooltip, type TooltipProps, TopicTag, type TopicTagGroupProps, type TopicTagProps, _default as UnderlinePanels, type PanelProps as UnderlinePanelsPanelProps, type UnderlinePanelsProps, type TabProps$1 as UnderlinePanelsTabProps, type UniqueRow, createColumnHelper, getAccessibleKeybindingHintString, useFeatureFlag, useOverflow, useSlots, useTab, useTabList, useTabPanel };
|
|
54
|
+
export { ActionBar, type ActionBarButtonProps, type ActionBarMenuItemProps, type ActionBarMenuProps, type ActionBarProps, Announce, type AnnounceProps, AriaAlert, type AriaAlertProps, AriaStatus, type AriaStatusProps, BlankslateContainer as Blankslate, type BlankslateProps, ButtonBase, type ButtonBaseProps, Card, type ActionProps as CardActionProps, type DescriptionProps as CardDescriptionProps, type HeadingProps as CardHeadingProps, type IconProps as CardIconProps, type ImageProps as CardImageProps, type MetadataProps as CardMetadataProps, type CardProps, type CellAlignment, type Column, type ColumnWidth, DataTable, type DataTableData, type DataTableProps, type DataTableRowGroup, type DataTableRowId, DefaultFeatureFlags, Dialog, type DialogButtonProps, type DialogHeaderProps, type DialogHeight, type DialogProps, type DialogWidth, FeatureFlags, type FeatureFlagsProps, FilteredActionList, type FilteredActionListInputProps, FilteredActionListLoadingTypes, type FilteredActionListProps, Hidden, type HiddenProps, InlineMessage, type InlineMessageProps, IssueLabel, type IssueLabelProps, KeybindingHint, type KeybindingHintProps, NavList, type NavListDividerProps, type NavListGroupProps, type NavListItemProps, type NavListLeadingVisualProps, type NavListProps, type NavListSubNavProps, type NavListTrailingVisualProps, type ObjectPaths, PageHeader, type ActionsProps as PageHeaderActionsProps, type PageHeaderProps, type TitleProps as PageHeaderTitleProps, ScrollableRegion, type ScrollableRegionProps, SelectPanel, type SelectPanelMessageProps, type SelectPanelProps, type SelectPanelSecondaryActionProps, SkeletonAvatar, type SkeletonAvatarProps, SkeletonBox, type SkeletonBoxProps, SkeletonText, type SkeletonTextProps, SlotConfig, Stack, type StackItemProps, type StackProps, type TabListProps, type TabPanelProps, type TabProps, Table, type TableActionsProps, type TableBodyProps, type TableCellProps, type TableContainerProps, type TableGroupProps, type TableHeadProps, type TableHeaderProps, type TableProps, type TableRowProps, type TableRowSelectionProps, type TableSelectionHeaderProps, type TableSubtitleProps, type TableTitleProps, Tabs, type TabsProps, type TitleProps, Tooltip, type TooltipProps, TopicTag, type TopicTagGroupProps, type TopicTagProps, _default as UnderlinePanels, type PanelProps as UnderlinePanelsPanelProps, type UnderlinePanelsProps, type TabProps$1 as UnderlinePanelsTabProps, type UniqueRow, createColumnHelper, getAccessibleKeybindingHintString, useFeatureFlag, useOverflow, useSlots, useTab, useTabList, useTabPanel };
|
|
@@ -6,12 +6,14 @@ type UseOpenAndCloseFocusSettings = {
|
|
|
6
6
|
containerRef: React.RefObject<HTMLElement | null>;
|
|
7
7
|
returnFocusRef: React.RefObject<HTMLElement | null>;
|
|
8
8
|
preventFocusOnOpen?: boolean;
|
|
9
|
+
preventFocusOnClose?: boolean;
|
|
9
10
|
};
|
|
10
11
|
declare function useOpenAndCloseFocus({
|
|
11
12
|
initialFocusRef,
|
|
12
13
|
returnFocusRef,
|
|
13
14
|
containerRef,
|
|
14
|
-
preventFocusOnOpen
|
|
15
|
+
preventFocusOnOpen,
|
|
16
|
+
preventFocusOnClose
|
|
15
17
|
}: UseOpenAndCloseFocusSettings): void;
|
|
16
18
|
//#endregion
|
|
17
19
|
export { UseOpenAndCloseFocusSettings, useOpenAndCloseFocus };
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import { c } from "../utils/react-compiler-runtime.js";
|
|
2
|
+
import { useEffectCallback } from "../internal/hooks/useEffectCallback.js";
|
|
2
3
|
import { useEffect } from "react";
|
|
3
4
|
import { iterateFocusableElements } from "@primer/behaviors/utils";
|
|
4
5
|
//#region src/hooks/useOpenAndCloseFocus.ts
|
|
5
6
|
function useOpenAndCloseFocus(t0) {
|
|
6
|
-
const $ = c(
|
|
7
|
-
const { initialFocusRef, returnFocusRef, containerRef, preventFocusOnOpen } = t0;
|
|
7
|
+
const $ = c(9);
|
|
8
|
+
const { initialFocusRef, returnFocusRef, containerRef, preventFocusOnOpen, preventFocusOnClose } = t0;
|
|
8
9
|
let t1;
|
|
10
|
+
if ($[0] !== preventFocusOnClose) {
|
|
11
|
+
t1 = (element) => {
|
|
12
|
+
if (!preventFocusOnClose) element === null || element === void 0 || element.focus();
|
|
13
|
+
};
|
|
14
|
+
$[0] = preventFocusOnClose;
|
|
15
|
+
$[1] = t1;
|
|
16
|
+
} else t1 = $[1];
|
|
17
|
+
const restoreFocus = useEffectCallback(t1);
|
|
9
18
|
let t2;
|
|
10
|
-
|
|
11
|
-
|
|
19
|
+
let t3;
|
|
20
|
+
if ($[2] !== containerRef || $[3] !== initialFocusRef || $[4] !== preventFocusOnOpen || $[5] !== restoreFocus || $[6] !== returnFocusRef) {
|
|
21
|
+
t2 = () => {
|
|
12
22
|
if (!preventFocusOnOpen) {
|
|
13
23
|
if (initialFocusRef && initialFocusRef.current) initialFocusRef.current.focus();
|
|
14
24
|
else if (containerRef.current) {
|
|
@@ -18,26 +28,28 @@ function useOpenAndCloseFocus(t0) {
|
|
|
18
28
|
}
|
|
19
29
|
const returnFocusRefCurrent = returnFocusRef.current;
|
|
20
30
|
return function() {
|
|
21
|
-
returnFocusRefCurrent
|
|
31
|
+
restoreFocus(returnFocusRefCurrent);
|
|
22
32
|
};
|
|
23
33
|
};
|
|
24
|
-
|
|
34
|
+
t3 = [
|
|
25
35
|
initialFocusRef,
|
|
26
36
|
returnFocusRef,
|
|
27
37
|
containerRef,
|
|
28
|
-
preventFocusOnOpen
|
|
38
|
+
preventFocusOnOpen,
|
|
39
|
+
restoreFocus
|
|
29
40
|
];
|
|
30
|
-
$[
|
|
31
|
-
$[
|
|
32
|
-
$[
|
|
33
|
-
$[
|
|
34
|
-
$[
|
|
35
|
-
$[
|
|
41
|
+
$[2] = containerRef;
|
|
42
|
+
$[3] = initialFocusRef;
|
|
43
|
+
$[4] = preventFocusOnOpen;
|
|
44
|
+
$[5] = restoreFocus;
|
|
45
|
+
$[6] = returnFocusRef;
|
|
46
|
+
$[7] = t2;
|
|
47
|
+
$[8] = t3;
|
|
36
48
|
} else {
|
|
37
|
-
|
|
38
|
-
|
|
49
|
+
t2 = $[7];
|
|
50
|
+
t3 = $[8];
|
|
39
51
|
}
|
|
40
|
-
useEffect(
|
|
52
|
+
useEffect(t2, t3);
|
|
41
53
|
}
|
|
42
54
|
//#endregion
|
|
43
55
|
export { useOpenAndCloseFocus };
|
|
@@ -9,6 +9,7 @@ type UseOverlaySettings = {
|
|
|
9
9
|
onClickOutside: (e: TouchOrMouseEvent) => void;
|
|
10
10
|
overlayRef?: React.RefObject<HTMLDivElement | null>;
|
|
11
11
|
preventFocusOnOpen?: boolean;
|
|
12
|
+
preventFocusOnClose?: boolean;
|
|
12
13
|
};
|
|
13
14
|
type OverlayReturnProps = {
|
|
14
15
|
ref: React.RefObject<HTMLDivElement | null>;
|
|
@@ -20,7 +21,8 @@ declare const useOverlay: ({
|
|
|
20
21
|
onEscape,
|
|
21
22
|
ignoreClickRefs,
|
|
22
23
|
onClickOutside,
|
|
23
|
-
preventFocusOnOpen
|
|
24
|
+
preventFocusOnOpen,
|
|
25
|
+
preventFocusOnClose
|
|
24
26
|
}: UseOverlaySettings) => OverlayReturnProps;
|
|
25
27
|
//#endregion
|
|
26
28
|
export { OverlayReturnProps, UseOverlaySettings, useOverlay };
|
package/dist/hooks/useOverlay.js
CHANGED
|
@@ -5,53 +5,55 @@ import { useOnEscapePress } from "./useOnEscapePress.js";
|
|
|
5
5
|
import { useOpenAndCloseFocus } from "./useOpenAndCloseFocus.js";
|
|
6
6
|
//#region src/hooks/useOverlay.tsx
|
|
7
7
|
const useOverlay = (t0) => {
|
|
8
|
-
const $ = c(
|
|
9
|
-
const { overlayRef: _overlayRef, returnFocusRef, initialFocusRef, onEscape, ignoreClickRefs, onClickOutside, preventFocusOnOpen } = t0;
|
|
8
|
+
const $ = c(14);
|
|
9
|
+
const { overlayRef: _overlayRef, returnFocusRef, initialFocusRef, onEscape, ignoreClickRefs, onClickOutside, preventFocusOnOpen, preventFocusOnClose } = t0;
|
|
10
10
|
const overlayRef = useProvidedRefOrCreate(_overlayRef);
|
|
11
11
|
let t1;
|
|
12
|
-
if ($[0] !== initialFocusRef || $[1] !== overlayRef || $[2] !==
|
|
12
|
+
if ($[0] !== initialFocusRef || $[1] !== overlayRef || $[2] !== preventFocusOnClose || $[3] !== preventFocusOnOpen || $[4] !== returnFocusRef) {
|
|
13
13
|
t1 = {
|
|
14
14
|
containerRef: overlayRef,
|
|
15
15
|
returnFocusRef,
|
|
16
16
|
initialFocusRef,
|
|
17
|
-
preventFocusOnOpen
|
|
17
|
+
preventFocusOnOpen,
|
|
18
|
+
preventFocusOnClose
|
|
18
19
|
};
|
|
19
20
|
$[0] = initialFocusRef;
|
|
20
21
|
$[1] = overlayRef;
|
|
21
|
-
$[2] =
|
|
22
|
-
$[3] =
|
|
23
|
-
$[4] =
|
|
24
|
-
|
|
22
|
+
$[2] = preventFocusOnClose;
|
|
23
|
+
$[3] = preventFocusOnOpen;
|
|
24
|
+
$[4] = returnFocusRef;
|
|
25
|
+
$[5] = t1;
|
|
26
|
+
} else t1 = $[5];
|
|
25
27
|
useOpenAndCloseFocus(t1);
|
|
26
28
|
let t2;
|
|
27
|
-
if ($[
|
|
29
|
+
if ($[6] !== ignoreClickRefs || $[7] !== onClickOutside || $[8] !== overlayRef) {
|
|
28
30
|
t2 = {
|
|
29
31
|
containerRef: overlayRef,
|
|
30
32
|
ignoreClickRefs,
|
|
31
33
|
onClickOutside
|
|
32
34
|
};
|
|
33
|
-
$[
|
|
34
|
-
$[
|
|
35
|
-
$[
|
|
36
|
-
$[
|
|
37
|
-
} else t2 = $[
|
|
35
|
+
$[6] = ignoreClickRefs;
|
|
36
|
+
$[7] = onClickOutside;
|
|
37
|
+
$[8] = overlayRef;
|
|
38
|
+
$[9] = t2;
|
|
39
|
+
} else t2 = $[9];
|
|
38
40
|
useOnOutsideClick(t2);
|
|
39
41
|
let t3;
|
|
40
|
-
if ($[
|
|
42
|
+
if ($[10] !== onEscape) {
|
|
41
43
|
t3 = (event) => {
|
|
42
44
|
onEscape(event);
|
|
43
45
|
event.preventDefault();
|
|
44
46
|
};
|
|
45
|
-
$[
|
|
46
|
-
$[
|
|
47
|
-
} else t3 = $[
|
|
47
|
+
$[10] = onEscape;
|
|
48
|
+
$[11] = t3;
|
|
49
|
+
} else t3 = $[11];
|
|
48
50
|
useOnEscapePress(t3);
|
|
49
51
|
let t4;
|
|
50
|
-
if ($[
|
|
52
|
+
if ($[12] !== overlayRef) {
|
|
51
53
|
t4 = { ref: overlayRef };
|
|
52
|
-
$[
|
|
53
|
-
$[
|
|
54
|
-
} else t4 = $[
|
|
54
|
+
$[12] = overlayRef;
|
|
55
|
+
$[13] = t4;
|
|
56
|
+
} else t4 = $[13];
|
|
55
57
|
return t4;
|
|
56
58
|
};
|
|
57
59
|
//#endregion
|
|
@@ -832,6 +832,12 @@
|
|
|
832
832
|
"defaultValue": "",
|
|
833
833
|
"description": "Callback that is called when the position of the overlay changes"
|
|
834
834
|
},
|
|
835
|
+
{
|
|
836
|
+
"name": "preventFocusOnClose",
|
|
837
|
+
"type": "boolean",
|
|
838
|
+
"defaultValue": "false",
|
|
839
|
+
"description": "If true, focus will not be returned to the anchor or returnFocusRef when the menu closes. Consumers must manage focus themselves."
|
|
840
|
+
},
|
|
835
841
|
{
|
|
836
842
|
"name": "data-test-id",
|
|
837
843
|
"type": "unknown",
|
|
@@ -2759,7 +2765,23 @@
|
|
|
2759
2765
|
},
|
|
2760
2766
|
{
|
|
2761
2767
|
"id": "experimental-components-datatable-features--with-groups",
|
|
2762
|
-
"code": "() => {\n const titleId = React.useId()\n const [pageIndex, setPageIndex] = React.useState(0)\n const pageSize = 10\n const allRows = paginationData.flatMap((item) =>\n 'rows' in item ? item.rows : [item],\n )\n const pageRows = new Set(\n allRows\n .slice(pageIndex * pageSize, (pageIndex + 1) * pageSize)\n .map((row) => row.id),\n )\n
|
|
2768
|
+
"code": "() => {\n const titleId = React.useId()\n const [pageIndex, setPageIndex] = React.useState(0)\n const pageSize = 10\n const allRows = paginationData.flatMap((item) =>\n 'rows' in item ? item.rows : [item],\n )\n const pageRows = new Set(\n allRows\n .slice(pageIndex * pageSize, (pageIndex + 1) * pageSize)\n .map((row) => row.id),\n )\n const data = getPageData(paginationData, pageRows)\n return (\n <Table.Container>\n <Table.Title as=\"h2\" id={titleId}>\n Paginated repositories by visibility\n </Table.Title>\n <DataTable\n aria-labelledby={titleId}\n data={data}\n columns={[\n {\n header: 'Name',\n field: 'name',\n rowHeader: true,\n sortBy: true,\n },\n {\n header: 'Visibility',\n field: 'visibility',\n },\n ]}\n />\n <Table.Pagination\n aria-label=\"Pagination for grouped repositories\"\n pageSize={pageSize}\n totalCount={allRows.length}\n onChange={({ pageIndex }) => setPageIndex(pageIndex)}\n />\n </Table.Container>\n )\n}"
|
|
2769
|
+
},
|
|
2770
|
+
{
|
|
2771
|
+
"id": "experimental-components-datatable-features--with-row-selection",
|
|
2772
|
+
"code": "() => {\n const [selectedRows, setSelectedRows] = React.useState<\n ReadonlySet<DataTableRowId>\n >(() => new Set([2]))\n return (\n <Table.Container>\n <Table.Title as=\"h2\" id=\"selectable-repositories\">\n Selectable repositories\n </Table.Title>\n <DataTable\n aria-labelledby=\"selectable-repositories\"\n data={data}\n columns={groupedColumns}\n rowSelection\n selectedRows={selectedRows}\n onSelectionChange={({ selectedRows: nextSelectedRows }) => {\n setSelectedRows(nextSelectedRows)\n }}\n />\n </Table.Container>\n )\n}"
|
|
2773
|
+
},
|
|
2774
|
+
{
|
|
2775
|
+
"id": "experimental-components-datatable-features--with-grouped-row-selection",
|
|
2776
|
+
"code": "() => {\n const [selectedRows, setSelectedRows] = React.useState<\n ReadonlySet<DataTableRowId>\n >(() => new Set())\n return (\n <Table.Container>\n <Table.Title as=\"h2\" id=\"selectable-repositories-by-visibility\">\n Selectable repositories by visibility\n </Table.Title>\n <DataTable\n aria-labelledby=\"selectable-repositories-by-visibility\"\n data={repoGroupsWithDisabledRow}\n columns={groupedColumns}\n rowSelection\n selectedRows={selectedRows}\n isRowSelectable={(repo) => repo.id !== 1}\n onSelectionChange={({ selectedRows: nextSelectedRows }) => {\n setSelectedRows(nextSelectedRows)\n }}\n />\n </Table.Container>\n )\n}"
|
|
2777
|
+
},
|
|
2778
|
+
{
|
|
2779
|
+
"id": "experimental-components-datatable-features--with-standalone-and-grouped-row-selection",
|
|
2780
|
+
"code": "() => {\n const [selectedRows, setSelectedRows] = React.useState<\n ReadonlySet<DataTableRowId>\n >(() => new Set())\n return (\n <Table.Container>\n <Table.Title as=\"h2\" id=\"selectable-mixed-repositories\">\n Selectable standalone and grouped repositories\n </Table.Title>\n <DataTable\n aria-labelledby=\"selectable-mixed-repositories\"\n data={[\n ...data.filter((repo) => repo.type === 'internal'),\n repoGroups[1],\n ]}\n columns={sortableGroupedColumns}\n rowSelection\n selectedRows={selectedRows}\n onSelectionChange={({ selectedRows: nextSelectedRows }) => {\n setSelectedRows(nextSelectedRows)\n }}\n />\n </Table.Container>\n )\n}"
|
|
2781
|
+
},
|
|
2782
|
+
{
|
|
2783
|
+
"id": "experimental-components-datatable-features--with-paginated-row-selection",
|
|
2784
|
+
"code": "() => {\n const titleId = React.useId()\n const [pageIndex, setPageIndex] = React.useState(0)\n const [selectedRows, setSelectedRows] = React.useState<\n ReadonlySet<DataTableRowId>\n >(() => new Set())\n const pageSize = 10\n const allRows = paginationData.flatMap((item) =>\n 'rows' in item ? item.rows : [item],\n )\n const pageRows = new Set(\n allRows\n .slice(pageIndex * pageSize, (pageIndex + 1) * pageSize)\n .map((row) => row.id),\n )\n const data = getPageData(paginationData, pageRows)\n return (\n <Table.Container>\n <Table.Title as=\"h2\" id={titleId}>\n Selectable paginated repositories\n </Table.Title>\n <DataTable\n aria-labelledby={titleId}\n data={data}\n columns={[\n {\n header: 'Name',\n field: 'name',\n rowHeader: true,\n },\n {\n header: 'Visibility',\n field: 'visibility',\n },\n ]}\n rowSelection\n selectedRows={selectedRows}\n onSelectionChange={({ selectedRows }) => setSelectedRows(selectedRows)}\n />\n <Table.Pagination\n aria-label=\"Pagination for selectable repositories\"\n pageSize={pageSize}\n totalCount={allRows.length}\n onChange={({ pageIndex }) => {\n setPageIndex(pageIndex)\n // Selection applies only to the current page.\n setSelectedRows(new Set())\n }}\n />\n </Table.Container>\n )\n}"
|
|
2763
2785
|
},
|
|
2764
2786
|
{
|
|
2765
2787
|
"id": "experimental-components-datatable-features--with-sortable-groups",
|
|
@@ -2767,7 +2789,11 @@
|
|
|
2767
2789
|
},
|
|
2768
2790
|
{
|
|
2769
2791
|
"id": "experimental-components-table-features--with-groups",
|
|
2770
|
-
"code": "() => {\n const titleId = React.useId()\n const [pageIndex, setPageIndex] = React.useState(0)\n const pageSize = 10\n const allRows = paginationData.flatMap((item) =>\n 'rows' in item ? item.rows : [item],\n )\n const pageRows = new Set(\n allRows\n .slice(pageIndex * pageSize, (pageIndex + 1) * pageSize)\n .map((row) => row.id),\n )\n
|
|
2792
|
+
"code": "() => {\n const titleId = React.useId()\n const [pageIndex, setPageIndex] = React.useState(0)\n const pageSize = 10\n const allRows = paginationData.flatMap((item) =>\n 'rows' in item ? item.rows : [item],\n )\n const pageRows = new Set(\n allRows\n .slice(pageIndex * pageSize, (pageIndex + 1) * pageSize)\n .map((row) => row.id),\n )\n const data = getPageData(paginationData, pageRows)\n return (\n <Table.Container>\n <Table.Title as=\"h2\" id={titleId}>\n Paginated repositories by visibility\n </Table.Title>\n <DataTable\n aria-labelledby={titleId}\n data={data}\n columns={[\n {\n header: 'Name',\n field: 'name',\n rowHeader: true,\n sortBy: true,\n },\n {\n header: 'Visibility',\n field: 'visibility',\n },\n ]}\n />\n <Table.Pagination\n aria-label=\"Pagination for grouped repositories\"\n pageSize={pageSize}\n totalCount={allRows.length}\n onChange={({ pageIndex }) => setPageIndex(pageIndex)}\n />\n </Table.Container>\n )\n}"
|
|
2793
|
+
},
|
|
2794
|
+
{
|
|
2795
|
+
"id": "experimental-components-table-features--with-row-selection",
|
|
2796
|
+
"code": "() => {\n const [selectedRows, setSelectedRows] = React.useState<\n ReadonlySet<DataTableRowId>\n >(() => new Set([2]))\n return (\n <Table.Container>\n <Table.Title as=\"h2\" id=\"selectable-repositories\">\n Selectable repositories\n </Table.Title>\n <DataTable\n aria-labelledby=\"selectable-repositories\"\n data={data}\n columns={groupedColumns}\n rowSelection\n selectedRows={selectedRows}\n onSelectionChange={({ selectedRows: nextSelectedRows }) => {\n setSelectedRows(nextSelectedRows)\n }}\n />\n </Table.Container>\n )\n}"
|
|
2771
2797
|
}
|
|
2772
2798
|
],
|
|
2773
2799
|
"importPath": "@primer/react/experimental",
|
|
@@ -2792,6 +2818,36 @@
|
|
|
2792
2818
|
"type": "Array<Column<Data>>",
|
|
2793
2819
|
"description": "Provide the columns for the table and the fields in `data` to which they correspond"
|
|
2794
2820
|
},
|
|
2821
|
+
{
|
|
2822
|
+
"name": "getRowId",
|
|
2823
|
+
"type": "(row: Data) => DataTableRowId",
|
|
2824
|
+
"description": "Provide a stable row ID. Defaults to row.id. DataTableRowId is an exported string | number type."
|
|
2825
|
+
},
|
|
2826
|
+
{
|
|
2827
|
+
"name": "rowSelection",
|
|
2828
|
+
"type": "boolean",
|
|
2829
|
+
"description": "Render row checkboxes and a select-all checkbox for the current page."
|
|
2830
|
+
},
|
|
2831
|
+
{
|
|
2832
|
+
"name": "selectedRows",
|
|
2833
|
+
"type": "ReadonlySet<DataTableRowId>",
|
|
2834
|
+
"description": "Control selection using stable IDs from `getRowId`. Missing or non-selectable IDs stay stored but do not count as selected."
|
|
2835
|
+
},
|
|
2836
|
+
{
|
|
2837
|
+
"name": "defaultSelectedRows",
|
|
2838
|
+
"type": "ReadonlySet<DataTableRowId>",
|
|
2839
|
+
"description": "Set the initial selection for an uncontrolled, static, single-page table."
|
|
2840
|
+
},
|
|
2841
|
+
{
|
|
2842
|
+
"name": "onSelectionChange",
|
|
2843
|
+
"type": "({ selectedRows }: { selectedRows: Set<DataTableRowId> }) => void",
|
|
2844
|
+
"description": "Receive a new selection set when a checkbox is toggled. Data changes alone do not trigger this callback."
|
|
2845
|
+
},
|
|
2846
|
+
{
|
|
2847
|
+
"name": "isRowSelectable",
|
|
2848
|
+
"type": "(row: Data) => boolean",
|
|
2849
|
+
"description": "Determine which rows can be selected and counted by select-all."
|
|
2850
|
+
},
|
|
2795
2851
|
{
|
|
2796
2852
|
"name": "cellPadding",
|
|
2797
2853
|
"type": "'condensed' | 'normal' | 'spacious'",
|
|
@@ -2952,6 +3008,80 @@
|
|
|
2952
3008
|
}
|
|
2953
3009
|
]
|
|
2954
3010
|
},
|
|
3011
|
+
{
|
|
3012
|
+
"name": "Table.SelectionHeader",
|
|
3013
|
+
"props": [
|
|
3014
|
+
{
|
|
3015
|
+
"name": "selection",
|
|
3016
|
+
"type": "'all' | 'some' | 'none'",
|
|
3017
|
+
"required": true,
|
|
3018
|
+
"description": "Whether all, some, or none of the selectable rows are selected."
|
|
3019
|
+
},
|
|
3020
|
+
{
|
|
3021
|
+
"name": "disabled",
|
|
3022
|
+
"type": "boolean",
|
|
3023
|
+
"description": "Whether row selection is unavailable."
|
|
3024
|
+
},
|
|
3025
|
+
{
|
|
3026
|
+
"name": "onToggleSelect",
|
|
3027
|
+
"type": "() => void",
|
|
3028
|
+
"description": "Request toggling selection for all selectable rows."
|
|
3029
|
+
},
|
|
3030
|
+
{
|
|
3031
|
+
"name": "checkboxRef",
|
|
3032
|
+
"type": "React.Ref<HTMLInputElement>",
|
|
3033
|
+
"description": "Forward a ref to the native selection checkbox."
|
|
3034
|
+
},
|
|
3035
|
+
{
|
|
3036
|
+
"name": "aria-label",
|
|
3037
|
+
"type": "string",
|
|
3038
|
+
"defaultValue": "'Select rows'",
|
|
3039
|
+
"description": "Provide the selection checkbox's accessible name."
|
|
3040
|
+
},
|
|
3041
|
+
{
|
|
3042
|
+
"name": "aria-description",
|
|
3043
|
+
"type": "string",
|
|
3044
|
+
"description": "Describe the select-all scope, for example \"Select all 10 rows\"."
|
|
3045
|
+
}
|
|
3046
|
+
]
|
|
3047
|
+
},
|
|
3048
|
+
{
|
|
3049
|
+
"name": "Table.RowSelection",
|
|
3050
|
+
"props": [
|
|
3051
|
+
{
|
|
3052
|
+
"name": "selected",
|
|
3053
|
+
"type": "boolean",
|
|
3054
|
+
"required": true,
|
|
3055
|
+
"description": "Whether the row is selected."
|
|
3056
|
+
},
|
|
3057
|
+
{
|
|
3058
|
+
"name": "disabled",
|
|
3059
|
+
"type": "boolean",
|
|
3060
|
+
"description": "Whether the row cannot be selected."
|
|
3061
|
+
},
|
|
3062
|
+
{
|
|
3063
|
+
"name": "onToggleSelect",
|
|
3064
|
+
"type": "() => void",
|
|
3065
|
+
"description": "Request toggling selection for the row."
|
|
3066
|
+
},
|
|
3067
|
+
{
|
|
3068
|
+
"name": "checkboxRef",
|
|
3069
|
+
"type": "React.Ref<HTMLInputElement>",
|
|
3070
|
+
"description": "Forward a ref to the native row checkbox."
|
|
3071
|
+
},
|
|
3072
|
+
{
|
|
3073
|
+
"name": "aria-label",
|
|
3074
|
+
"type": "string",
|
|
3075
|
+
"defaultValue": "'Select row'",
|
|
3076
|
+
"description": "Name the row checkbox when `aria-labelledby` is not provided."
|
|
3077
|
+
},
|
|
3078
|
+
{
|
|
3079
|
+
"name": "aria-labelledby",
|
|
3080
|
+
"type": "string",
|
|
3081
|
+
"description": "Reference the row header IDs. The checkbox name adds \"Select\" before their text."
|
|
3082
|
+
}
|
|
3083
|
+
]
|
|
3084
|
+
},
|
|
2955
3085
|
{
|
|
2956
3086
|
"name": "Table.Cell",
|
|
2957
3087
|
"props": [
|
|
@@ -4615,6 +4745,12 @@
|
|
|
4615
4745
|
],
|
|
4616
4746
|
"importPath": "@primer/react",
|
|
4617
4747
|
"props": [
|
|
4748
|
+
{
|
|
4749
|
+
"name": "preventFocusOnClose",
|
|
4750
|
+
"type": "boolean",
|
|
4751
|
+
"defaultValue": "false",
|
|
4752
|
+
"description": "If true, focus will not be returned to returnFocusRef when the Overlay is unmounted. Consumers must manage focus themselves."
|
|
4753
|
+
},
|
|
4618
4754
|
{
|
|
4619
4755
|
"name": "returnFocusRef",
|
|
4620
4756
|
"type": "React.RefObject<HTMLElement>",
|
package/generated/hooks.json
CHANGED
|
@@ -696,6 +696,12 @@
|
|
|
696
696
|
"type": "boolean",
|
|
697
697
|
"defaultValue": "false",
|
|
698
698
|
"description": "If true, focus will not be set when the container is opened."
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
"name": "preventFocusOnClose",
|
|
702
|
+
"type": "boolean",
|
|
703
|
+
"defaultValue": "false",
|
|
704
|
+
"description": "If true, focus will not be returned to returnFocusRef when the hook is cleaned up. Consumers must manage focus themselves."
|
|
699
705
|
}
|
|
700
706
|
]
|
|
701
707
|
}
|
|
@@ -769,6 +775,12 @@
|
|
|
769
775
|
"name": "preventFocusOnOpen",
|
|
770
776
|
"type": "boolean",
|
|
771
777
|
"description": "Flag to prevent focus on the overlay when it is opened."
|
|
778
|
+
},
|
|
779
|
+
{
|
|
780
|
+
"name": "preventFocusOnClose",
|
|
781
|
+
"type": "boolean",
|
|
782
|
+
"defaultValue": "false",
|
|
783
|
+
"description": "If true, focus will not be returned to returnFocusRef when the overlay is unmounted. Consumers must manage focus themselves."
|
|
772
784
|
}
|
|
773
785
|
]
|
|
774
786
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@primer/react",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "38.
|
|
4
|
+
"version": "38.42.0-rc.23d625bd0",
|
|
5
5
|
"description": "An implementation of GitHub's Primer Design System using React",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.js",
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
"mdast-util-to-string": "4.0.0",
|
|
158
158
|
"micromark-extension-frontmatter": "2.0.0",
|
|
159
159
|
"micromark-extension-mdxjs": "3.0.0",
|
|
160
|
-
"oxc-transform-react": "^0.
|
|
160
|
+
"oxc-transform-react": "^0.153.0",
|
|
161
161
|
"postcss-preset-primer": "^0.0.0",
|
|
162
162
|
"publint": "^0.3.15",
|
|
163
163
|
"react": "18.3.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DataTable/Table.module.css.js"],"names":[],"mappings":"AACA,oCAUE,mCAA8B,CAT9B,YAAa,CAEb,uHAMiB,CAPjB,6BASF,CAGA,gCAQE,iBAAkB,CANlB,8CAAuC,CACvC,gDAA6C,CAI7C,eAAgB,CAFhB,gBAIF,CAGA,mEANE,oCAA6B,CAL7B,QAkBF,CAPA,mCAEE,4CAAsC,CACtC,8CAA2C,CAG3C,kBAAmB,CAFnB,kDAGF,CAGA,kCAGE,kBAAmB,CADnB,mCAA8B,CAD9B,YAAa,CAGb,iBAAkB,CAClB,gBACF,CAGA,kCAIE,mDAA4C,CAC5C,iBAAkB,CAHlB,UAAW,CAKX,yCAAoC,CADpC,2CAAuC,CALvC,UAOF,CAGA,mOAGE,2CACF,CAOA,qEAJE,eAsCF,CAlCA,2BAEE,8BAA+B,CAC/B,wFAA2F,CAC3F,yBAA0B,CAW1B,4CAAwC,CADxC,wBAAyB,CAFzB,gBAAiB,CANjB,YAAa,CAGb,gCAAiC,CAQjC,kDAAmD,CANnD,mBAA0B,CAJ1B,UA2BF,CAdE,gEACE,4BAA6B,CAC7B,4BACF,CAEA,6DACE,2BAA4B,CAC5B,6BACF,CAEA,+DACE,4BAA6B,CAC7B,0BACF,CAIF,wFAEE,6FACF,CAEA,sFAEE,2FACF,CAEA,gEAME,kBAAmB,CACnB,0FAA0E,CAL1E,YAAa,CAEb,iCAAkC,CAClC,gBAGF,CAEA,0HAEE,YAAa,CAEb,wBAAyB,CADzB,cAEF,CAEA,2FACE,YAAa,CACb,0BACF,CAEA,4GACE,4FACF,CAIA,wHAEE,iDACF,CAGA,uHAEE,kDACF,CAGA,kNAEE,oDACF,CAGA,iNAEE,qDACF,CAMA,6KAEE,6CACF,CAEA,2KAEE,2CACF,CAGA,iCAGE,6CAAsC,CACtC,4FAA4E,CAF5E,kCAA2B,CAD3B,gDAIF,CAEA,6HAEE,oCACF,CAGA,mCACE,iBACF,CASA,yZAEE,kBACF,CAGA,+GACE,mEACF,CAGA,kDAIE,kBAAmB,CADnB,oCAA6B,CAF7B,YAAa,CACb,gDAGF,CAGA,uCACE,SACF,CAEA,4CACE,YAAa,CAEb,qBAAsB,CADtB,UAEF,CAEA,2CAEE,iCAqBF,CAnBE,6DACE,yBACF,CAEA,6DACE,2BACF,CAEA,6DACE,yBACF,CAEA,6DACE,yBACF,CAEA,6DACE,yBACF,CAGF,yEACE,gCACF,CAEA,8DACE,0FACF,CAEA,qCACE,gBACF,CAGA,sIAIE,gBACF,CAEA,0CACE,sIAIE,YAAa,CAEb,gBAAkB,CADlB,6BAEF,CACF,CAEA,0CASE,6CAAsC,CAGtC,0FAA0E,CAD1E,2FAA2E,CAD3E,6FAA6E,CAF7E,kCAA2B,CAN3B,gBAAmB,CAInB,iCAAkC,CAClC,gBAMF,CAEA,uFAZE,oBAAqB,CACrB,mCAA8B,CAH9B,YAkBF,CAEA,2CAEE,oCAA6B,CAD7B,gDAEF,CAMA,gFACE,kCACF","file":"Table-50e68700.css","sourcesContent":["/* Container ---------------------------------------------------------------- */\n.TableContainer {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-areas:\n 'title actions'\n 'divider divider'\n 'subtitle subtitle'\n 'filter filter'\n 'table table'\n 'footer footer';\n column-gap: var(--base-size-8);\n}\n\n/* TableTitle */\n.TableTitle {\n margin: 0;\n font-size: var(--text-body-size-medium);\n font-weight: var(--base-text-weight-semibold);\n /* stylelint-disable-next-line primer/typography */\n line-height: 20px;\n color: var(--fgColor-default);\n grid-area: title;\n align-self: center;\n}\n\n/* TableSubtitle */\n.TableSubtitle {\n margin: 0;\n font-size: var(--text-body-size-small);\n font-weight: var(--base-text-weight-normal);\n line-height: var(--text-title-lineHeight-small);\n color: var(--fgColor-default);\n grid-area: subtitle;\n}\n\n/* TableActions */\n.TableActions {\n display: flex;\n column-gap: var(--base-size-8);\n align-items: center;\n grid-area: actions;\n justify-self: end;\n}\n\n/* TableDivider */\n.TableDivider {\n width: 100%;\n height: 1px;\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--borderColor-default);\n grid-area: divider;\n margin-block-start: var(--base-size-16);\n margin-block-end: var(--base-size-8);\n}\n\n/* Spacing before the table */\n.TableTitle + .TableOverflowWrapper,\n.TableSubtitle + .TableOverflowWrapper,\n.TableActions + .TableOverflowWrapper {\n margin-block-start: var(--base-size-8);\n}\n\n.TableOverflowWrapper {\n grid-area: table;\n}\n\n/* Table -------------------------------------------------------------------- */\n.Table {\n /* Default table styles */\n --table-border-radius: 0.375rem;\n --table-cell-padding: var(--cell-padding-block, 0.5rem) var(--cell-padding-inline, 0.75rem);\n --table-font-size: 0.75rem;\n\n display: grid;\n width: 100%;\n /* stylelint-disable-next-line primer/typography */\n font-size: var(--table-font-size);\n /* stylelint-disable-next-line primer/typography */\n line-height: calc(20 / 12);\n border-spacing: 0;\n /* stylelint-disable-next-line primer/borders */\n border-collapse: separate;\n background-color: var(--bgColor-default);\n grid-area: table;\n grid-template-columns: var(--grid-template-columns);\n\n /* Density modes: condensed, normal, spacious */\n &:where([data-cell-padding='condensed']) {\n --cell-padding-block: 0.25rem;\n --cell-padding-inline: 0.5rem;\n }\n\n &:where([data-cell-padding='normal']) {\n --cell-padding-block: 0.5rem;\n --cell-padding-inline: 0.75rem;\n }\n\n &:where([data-cell-padding='spacious']) {\n --cell-padding-block: 0.75rem;\n --cell-padding-inline: 1rem;\n }\n}\n\n/* Borders */\n.TableCell:first-child,\n.TableHeader:first-child {\n border-inline-start: var(--borderWidth-thin) solid var(--borderColor-default);\n}\n\n.TableCell:last-child,\n.TableHeader:last-child {\n border-inline-end: var(--borderWidth-thin) solid var(--borderColor-default);\n}\n\n.TableHeader,\n.TableCell {\n display: flex;\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--table-cell-padding);\n text-align: start;\n align-items: center;\n border-block-end: var(--borderWidth-thin) solid var(--borderColor-default);\n}\n\n.TableHeader:where([data-cell-align='end']),\n.TableCell:where([data-cell-align='end']) {\n display: flex;\n text-align: end;\n justify-content: flex-end;\n}\n\n.TableHeader[data-cell-align='end'] .TableSortButton {\n display: flex;\n flex-direction: row-reverse;\n}\n\n.TableHead .TableRow:first-of-type .TableHeader {\n border-block-start: var(--borderWidth-thin) solid var(--borderColor-default);\n}\n\n/* Border radius */\n/* stylelint-disable-next-line selector-max-specificity */\n.TableHead .TableRow:first-of-type .TableHeader:first-child {\n /* stylelint-disable-next-line primer/borders */\n border-top-left-radius: var(--table-border-radius);\n}\n\n/* stylelint-disable-next-line selector-max-specificity */\n.TableHead .TableRow:first-of-type .TableHeader:last-child {\n /* stylelint-disable-next-line primer/borders */\n border-top-right-radius: var(--table-border-radius);\n}\n\n/* stylelint-disable-next-line selector-max-compound-selectors,selector-max-specificity */\n.TableOverflowWrapper:last-child .Table .TableBody:last-of-type .TableRow:last-of-type .TableCell:first-child {\n /* stylelint-disable-next-line primer/borders */\n border-bottom-left-radius: var(--table-border-radius);\n}\n\n/* stylelint-disable-next-line selector-max-compound-selectors,selector-max-specificity */\n.TableOverflowWrapper:last-child .Table .TableBody:last-of-type .TableRow:last-of-type .TableCell:last-child {\n /* stylelint-disable-next-line primer/borders */\n border-bottom-right-radius: var(--table-border-radius);\n}\n\n/**\n * Offset padding to make sure type aligns regardless of cell padding\n * selection\n */\n.TableRow > *:first-child:not(.TableCellSkeleton),\n.TableRow > *:first-child .TableCellSkeletonItem {\n padding-inline-start: var(--base-size-16);\n}\n\n.TableRow > *:last-child:not(.TableCellSkeleton),\n.TableRow > *:last-child .TableCellSkeletonItem {\n padding-inline-end: var(--base-size-16);\n}\n\n/* TableHeader */\n.TableHeader {\n font-weight: var(--base-text-weight-semibold);\n color: var(--fgColor-muted);\n background-color: var(--bgColor-muted);\n border-block-start: var(--borderWidth-thin) solid var(--borderColor-default);\n}\n\n.TableHeader:where([aria-sort='descending']),\n.TableHeader:where([aria-sort='ascending']) {\n color: var(--fgColor-default);\n}\n\n/* Control visibility of sort icons */\n.TableSortIcon {\n visibility: hidden;\n}\n\n/* The ASC icon is visible if the header is sortable and is hovered or focused */\n.TableHeader:hover .TableSortIcon--ascending,\n.TableHeader .TableSortButton:focus .TableSortIcon--ascending {\n visibility: visible;\n}\n\n/* Each sort icon is visible if the TableHeader is currently in the corresponding sort state */\n.TableHeader[aria-sort='ascending'] .TableSortIcon--ascending,\n.TableHeader[aria-sort='descending'] .TableSortIcon--descending {\n visibility: visible;\n}\n\n/* TableRow */\n.TableRow:hover .TableCell:not(.TableCellSkeleton) {\n background-color: var(--control-transparent-bgColor-hover);\n}\n\n/* TableCell */\n.TableCell:where([scope='row']) {\n display: flex;\n font-weight: var(--base-text-weight-semibold);\n color: var(--fgColor-default);\n align-items: center;\n}\n\n/* TableCellSkeleton */\n.TableCellSkeleton {\n padding: 0;\n}\n\n.TableCellSkeletonItems {\n display: flex;\n width: 100%;\n flex-direction: column;\n}\n\n.TableCellSkeletonItem {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--table-cell-padding);\n\n &:nth-of-type(5n + 1) {\n --skeleton-item-width: 85%;\n }\n\n &:nth-of-type(5n + 2) {\n --skeleton-item-width: 67.5%;\n }\n\n &:nth-of-type(5n + 3) {\n --skeleton-item-width: 80%;\n }\n\n &:nth-of-type(5n + 4) {\n --skeleton-item-width: 60%;\n }\n\n &:nth-of-type(5n + 5) {\n --skeleton-item-width: 75%;\n }\n}\n\n.TableCellSkeletonItem [data-component='SkeletonText'] {\n width: var(--skeleton-item-width);\n}\n\n.TableCellSkeletonItem:not(:last-of-type) {\n border-block-end: var(--borderWidth-thin) solid var(--borderColor-default);\n}\n\n.TableSortButton {\n column-gap: 0.5rem;\n}\n\n/* Grid layout */\n.TableHead,\n.TableBody,\n.TableGroupHeaderBody,\n.TableRow {\n display: contents;\n}\n\n@supports (grid-template-columns: subgrid) {\n .TableHead,\n .TableBody,\n .TableGroupHeaderBody,\n .TableRow {\n display: grid;\n grid-template-columns: subgrid;\n grid-column: -1 /1;\n }\n}\n\n.TableGroupHeaderCell {\n display: flex;\n grid-column: 1 / -1;\n align-items: baseline;\n column-gap: var(--base-size-8);\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--table-cell-padding);\n text-align: start;\n color: var(--fgColor-muted);\n background-color: var(--bgColor-muted);\n border-inline-start: var(--borderWidth-thin) solid var(--borderColor-default);\n border-inline-end: var(--borderWidth-thin) solid var(--borderColor-default);\n border-block-end: var(--borderWidth-thin) solid var(--borderColor-default);\n}\n\n.TableGroupHeaderContent {\n display: flex;\n align-items: baseline;\n column-gap: var(--base-size-8);\n}\n\n.TableGroupHeaderLabel {\n font-weight: var(--base-text-weight-semibold);\n color: var(--fgColor-default);\n}\n\n.TableGroupHeaderCount {\n color: var(--fgColor-muted);\n}\n\n.PlaceholderText {\n color: var(--fgColor-muted);\n}\n"]}
|