@primer/react 38.38.0-rc.f9fd3e03f → 38.39.0-rc.052483c40

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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # @primer/react
2
2
 
3
+ ## 38.39.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#8372](https://github.com/primer/react/pull/8372) [`23185b7`](https://github.com/primer/react/commit/23185b7a6d457d8d8a2161d804bb36da5e62e301) Thanks [@rickyzhangca](https://github.com/rickyzhangca)! - DataTable: Add `Table.Group` for rendering accessible groups of table rows.
8
+
9
+ ### Patch Changes
10
+
11
+ - [#8370](https://github.com/primer/react/pull/8370) [`56ebdc4`](https://github.com/primer/react/commit/56ebdc49f8f6c862288ee653a4cdc7a70afe829c) Thanks [@rickyzhangca](https://github.com/rickyzhangca)! - ScrollableRegion: Remove focusability when content no longer overflows
12
+
13
+ - [#8371](https://github.com/primer/react/pull/8371) [`dc8387f`](https://github.com/primer/react/commit/dc8387f4fa07cf00887cb2412d358fb7eb54be63) Thanks [@rickyzhangca](https://github.com/rickyzhangca)! - DataTable: Keep sortable column names concise and convey the next sort action as an accessible description
14
+
3
15
  ## 38.38.0
4
16
 
5
17
  ### Minor Changes
@@ -0,0 +1,2 @@
1
+ .prc-DataTable-TableContainer-hn0p3{column-gap:var(--base-size-8,.5rem);display:grid;grid-template-areas:"title actions" "divider divider" "subtitle subtitle" "filter filter" "table table" "footer footer";grid-template-columns:1fr 1fr}.prc-DataTable-TableTitle-nM43N{align-self:center;font-size:var(--text-body-size-medium,.875rem);font-weight:var(--base-text-weight-semibold,600);grid-area:title;line-height:20px}.prc-DataTable-TableSubtitle--L6Ho,.prc-DataTable-TableTitle-nM43N{color:var(--fgColor-default,#1f2328);margin:0}.prc-DataTable-TableSubtitle--L6Ho{font-size:var(--text-body-size-small,.75rem);font-weight:var(--base-text-weight-normal,400);grid-area:subtitle;line-height:var(--text-title-lineHeight-small,1.5)}.prc-DataTable-TableActions-fkc2b{align-items:center;column-gap:var(--base-size-8,.5rem);display:flex;grid-area:actions;justify-self:end}.prc-DataTable-TableDivider-TRc3b{background-color:var(--borderColor-default,#d1d9e0);grid-area:divider;height:1px;margin-block-end:var(--base-size-8,.5rem);margin-block-start:var(--base-size-16,1rem);width:100%}.prc-DataTable-TableActions-fkc2b+.prc-DataTable-TableOverflowWrapper-bSqT-,.prc-DataTable-TableSubtitle--L6Ho+.prc-DataTable-TableOverflowWrapper-bSqT-,.prc-DataTable-TableTitle-nM43N+.prc-DataTable-TableOverflowWrapper-bSqT-{margin-block-start:var(--base-size-8,.5rem)}.prc-DataTable-Table-7ux1n,.prc-DataTable-TableOverflowWrapper-bSqT-{grid-area:table}.prc-DataTable-Table-7ux1n{--table-border-radius:0.375rem;--table-cell-padding:var(--cell-padding-block,0.5rem) var(--cell-padding-inline,0.75rem);--table-font-size:0.75rem;background-color:var(--bgColor-default,#fff);border-collapse:separate;border-spacing:0;display:grid;font-size:var(--table-font-size);grid-template-columns:var(--grid-template-columns);line-height:1.66667;width:100%}.prc-DataTable-Table-7ux1n:where([data-cell-padding=condensed]){--cell-padding-block:0.25rem;--cell-padding-inline:0.5rem}.prc-DataTable-Table-7ux1n:where([data-cell-padding=normal]){--cell-padding-block:0.5rem;--cell-padding-inline:0.75rem}.prc-DataTable-Table-7ux1n:where([data-cell-padding=spacious]){--cell-padding-block:0.75rem;--cell-padding-inline:1rem}.prc-DataTable-TableCell-Fk4ve:first-child,.prc-DataTable-TableHeader-eyTab:first-child{border-inline-start:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0)}.prc-DataTable-TableCell-Fk4ve:last-child,.prc-DataTable-TableHeader-eyTab:last-child{border-inline-end:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0)}.prc-DataTable-TableCell-Fk4ve,.prc-DataTable-TableHeader-eyTab{align-items:center;border-block-end:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0);display:flex;padding:var(--table-cell-padding);text-align:start}.prc-DataTable-TableCell-Fk4ve:where([data-cell-align=end]),.prc-DataTable-TableHeader-eyTab:where([data-cell-align=end]){display:flex;justify-content:flex-end;text-align:end}.prc-DataTable-TableHeader-eyTab[data-cell-align=end] .prc-DataTable-TableSortButton--aq0y{display:flex;flex-direction:row-reverse}.prc-DataTable-TableHead-4FaBf .prc-DataTable-TableRow-Icc7F:first-of-type .prc-DataTable-TableHeader-eyTab{border-block-start:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0)}.prc-DataTable-TableHead-4FaBf .prc-DataTable-TableRow-Icc7F:first-of-type .prc-DataTable-TableHeader-eyTab:first-child{border-top-left-radius:var(--table-border-radius)}.prc-DataTable-TableHead-4FaBf .prc-DataTable-TableRow-Icc7F:first-of-type .prc-DataTable-TableHeader-eyTab:last-child{border-top-right-radius:var(--table-border-radius)}.prc-DataTable-TableOverflowWrapper-bSqT-:last-child .prc-DataTable-Table-7ux1n .prc-DataTable-TableBody-QKQy2:last-of-type .prc-DataTable-TableRow-Icc7F:last-of-type .prc-DataTable-TableCell-Fk4ve:first-child{border-bottom-left-radius:var(--table-border-radius)}.prc-DataTable-TableOverflowWrapper-bSqT-:last-child .prc-DataTable-Table-7ux1n .prc-DataTable-TableBody-QKQy2:last-of-type .prc-DataTable-TableRow-Icc7F:last-of-type .prc-DataTable-TableCell-Fk4ve:last-child{border-bottom-right-radius:var(--table-border-radius)}.prc-DataTable-TableRow-Icc7F>:first-child .prc-DataTable-TableCellSkeletonItem-bGhwZ,.prc-DataTable-TableRow-Icc7F>:first-child:not(.prc-DataTable-TableCellSkeleton-DMdM5){padding-inline-start:var(--base-size-16,1rem)}.prc-DataTable-TableRow-Icc7F>:last-child .prc-DataTable-TableCellSkeletonItem-bGhwZ,.prc-DataTable-TableRow-Icc7F>:last-child:not(.prc-DataTable-TableCellSkeleton-DMdM5){padding-inline-end:var(--base-size-16,1rem)}.prc-DataTable-TableHeader-eyTab{background-color:var(--bgColor-muted,#f6f8fa);border-block-start:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0);color:var(--fgColor-muted,#59636e);font-weight:var(--base-text-weight-semibold,600)}.prc-DataTable-TableHeader-eyTab:where([aria-sort=ascending]),.prc-DataTable-TableHeader-eyTab:where([aria-sort=descending]){color:var(--fgColor-default,#1f2328)}.prc-DataTable-TableSortIcon-wHvJw{visibility:hidden}.prc-DataTable-TableHeader-eyTab .prc-DataTable-TableSortButton--aq0y:focus .prc-DataTable-TableSortIcon--ascending-Lpx6z,.prc-DataTable-TableHeader-eyTab:hover .prc-DataTable-TableSortIcon--ascending-Lpx6z,.prc-DataTable-TableHeader-eyTab[aria-sort=ascending] .prc-DataTable-TableSortIcon--ascending-Lpx6z,.prc-DataTable-TableHeader-eyTab[aria-sort=descending] .prc-DataTable-TableSortIcon--descending-hHJGo{visibility:visible}.prc-DataTable-TableRow-Icc7F:hover .prc-DataTable-TableCell-Fk4ve:not(.prc-DataTable-TableCellSkeleton-DMdM5){background-color:var(--control-transparent-bgColor-hover,#818b981a)}.prc-DataTable-TableCell-Fk4ve:where([scope=row]){align-items:center;color:var(--fgColor-default,#1f2328);display:flex;font-weight:var(--base-text-weight-semibold,600)}.prc-DataTable-TableCellSkeleton-DMdM5{padding:0}.prc-DataTable-TableCellSkeletonItems-Ljhq5{display:flex;flex-direction:column;width:100%}.prc-DataTable-TableCellSkeletonItem-bGhwZ{padding:var(--table-cell-padding)}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+1){--skeleton-item-width:85%}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+2){--skeleton-item-width:67.5%}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+3){--skeleton-item-width:80%}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+4){--skeleton-item-width:60%}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+5){--skeleton-item-width:75%}.prc-DataTable-TableCellSkeletonItem-bGhwZ [data-component=SkeletonText]{width:var(--skeleton-item-width)}.prc-DataTable-TableCellSkeletonItem-bGhwZ:not(:last-of-type){border-block-end:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0)}.prc-DataTable-TableSortButton--aq0y{column-gap:.5rem}.prc-DataTable-TableBody-QKQy2,.prc-DataTable-TableGroupHeaderBody-K-YqR,.prc-DataTable-TableHead-4FaBf,.prc-DataTable-TableRow-Icc7F{display:contents}@supports (grid-template-columns:subgrid){.prc-DataTable-TableBody-QKQy2,.prc-DataTable-TableGroupHeaderBody-K-YqR,.prc-DataTable-TableHead-4FaBf,.prc-DataTable-TableRow-Icc7F{display:grid;grid-column:-1/1;grid-template-columns:subgrid}}.prc-DataTable-TableGroupHeaderCell-vnb30{background-color:var(--bgColor-muted,#f6f8fa);border-block-end:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0);border-inline-end:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0);border-inline-start:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0);color:var(--fgColor-muted,#59636e);grid-column:1/-1;padding:var(--table-cell-padding);text-align:start}.prc-DataTable-TableGroupHeaderCell-vnb30,.prc-DataTable-TableGroupHeaderContent-H9FbA{align-items:baseline;column-gap:var(--base-size-8,.5rem);display:flex}.prc-DataTable-TableGroupHeaderLabel--c-od{color:var(--fgColor-default,#1f2328);font-weight:var(--base-text-weight-semibold,600)}.prc-DataTable-PlaceholderText-8bHo7,.prc-DataTable-TableGroupHeaderCount-6r8Pj{color:var(--fgColor-muted,#59636e)}
2
+ /*# sourceMappingURL=Table-50e68700.css.map */
@@ -0,0 +1 @@
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"]}
@@ -82,6 +82,7 @@ declare function TableCell({
82
82
  className,
83
83
  children,
84
84
  scope,
85
+ headers,
85
86
  ...rest
86
87
  }: TableCellProps): JSX.Element;
87
88
  type TableCellPlaceholderProps = React.PropsWithChildren;
@@ -5,15 +5,16 @@ import { SkeletonText } from "../SkeletonText/SkeletonText.js";
5
5
  import { SortDirection } from "./sorting.js";
6
6
  import { useTableLayout } from "./useTable.js";
7
7
  import { Button } from "../internal/components/ButtonReset.js";
8
+ import { TableGroupContext } from "./TableGroupContext.js";
8
9
  import Table_module_css_default from "./Table.module.css.js";
9
10
  import { c } from "react-compiler-runtime";
10
- import React from "react";
11
+ import React, { useContext } from "react";
11
12
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
13
  import { clsx } from "clsx";
13
14
  import { SortAscIcon, SortDescIcon } from "@primer/octicons-react";
14
15
  //#region src/DataTable/Table.tsx
15
16
  const Table = /*#__PURE__*/ React.forwardRef(function Table(t0, ref) {
16
- const $ = c(21);
17
+ const $ = c(24);
17
18
  let className;
18
19
  let gridTemplateColumns;
19
20
  let labelledby;
@@ -35,6 +36,7 @@ const Table = /*#__PURE__*/ React.forwardRef(function Table(t0, ref) {
35
36
  t1 = $[5];
36
37
  }
37
38
  const cellPadding = t1 === void 0 ? "normal" : t1;
39
+ const inheritedGroup = useContext(TableGroupContext);
38
40
  let t2;
39
41
  if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
40
42
  t2 = clsx("TableOverflowWrapper", Table_module_css_default.TableOverflowWrapper);
@@ -84,7 +86,18 @@ const Table = /*#__PURE__*/ React.forwardRef(function Table(t0, ref) {
84
86
  $[19] = t6;
85
87
  $[20] = t7;
86
88
  } else t7 = $[20];
87
- return t7;
89
+ const table = t7;
90
+ let t8;
91
+ if ($[21] !== inheritedGroup || $[22] !== table) {
92
+ t8 = inheritedGroup ? /*#__PURE__*/ jsx(TableGroupContext.Provider, {
93
+ value: void 0,
94
+ children: table
95
+ }) : table;
96
+ $[21] = inheritedGroup;
97
+ $[22] = table;
98
+ $[23] = t8;
99
+ } else t8 = $[23];
100
+ return t8;
88
101
  });
89
102
  function TableHead(t0) {
90
103
  const $ = c(3);
@@ -168,7 +181,7 @@ function TableHeader(t0) {
168
181
  return t2;
169
182
  }
170
183
  function TableSortHeader(t0) {
171
- const $ = c(23);
184
+ const $ = c(24);
172
185
  let align;
173
186
  let children;
174
187
  let direction;
@@ -190,6 +203,7 @@ function TableSortHeader(t0) {
190
203
  rest = $[5];
191
204
  }
192
205
  const ariaSort = direction === "DESC" ? "descending" : direction === "ASC" ? "ascending" : void 0;
206
+ const sortAction = direction === SortDirection.ASC ? "Sort descending" : "Sort ascending";
193
207
  let t1;
194
208
  if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
195
209
  t1 = clsx("TableSortButton", Table_module_css_default.TableSortButton);
@@ -205,7 +219,7 @@ function TableSortHeader(t0) {
205
219
  } else t2 = $[8];
206
220
  let t3;
207
221
  if ($[9] !== direction) {
208
- t3 = direction === SortDirection.NONE || direction === SortDirection.ASC ? /*#__PURE__*/ jsxs(Fragment$1, { children: [/*#__PURE__*/ jsx(SortAscIcon, { className: clsx("TableSortIcon", "TableSortIcon--ascending", Table_module_css_default.TableSortIcon, Table_module_css_default["TableSortIcon--ascending"]) }), direction === SortDirection.NONE ? /*#__PURE__*/ jsx(VisuallyHidden, { children: "sort ascending" }) : null] }) : null;
222
+ t3 = direction === SortDirection.NONE || direction === SortDirection.ASC ? /*#__PURE__*/ jsx(Fragment$1, { children: /*#__PURE__*/ jsx(SortAscIcon, { className: clsx("TableSortIcon", "TableSortIcon--ascending", Table_module_css_default.TableSortIcon, Table_module_css_default["TableSortIcon--ascending"]) }) }) : null;
209
223
  $[9] = direction;
210
224
  $[10] = t3;
211
225
  } else t3 = $[10];
@@ -216,11 +230,12 @@ function TableSortHeader(t0) {
216
230
  $[12] = t4;
217
231
  } else t4 = $[12];
218
232
  let t5;
219
- if ($[13] !== children || $[14] !== t2 || $[15] !== t3 || $[16] !== t4) {
233
+ if ($[13] !== children || $[14] !== sortAction || $[15] !== t2 || $[16] !== t3 || $[17] !== t4) {
220
234
  t5 = /*#__PURE__*/ jsxs(Button, {
221
235
  type: "button",
222
236
  className: t1,
223
237
  "data-component": "Table.SortHeader.Button",
238
+ "aria-description": sortAction,
224
239
  onClick: t2,
225
240
  children: [
226
241
  children,
@@ -229,13 +244,14 @@ function TableSortHeader(t0) {
229
244
  ]
230
245
  });
231
246
  $[13] = children;
232
- $[14] = t2;
233
- $[15] = t3;
234
- $[16] = t4;
235
- $[17] = t5;
236
- } else t5 = $[17];
247
+ $[14] = sortAction;
248
+ $[15] = t2;
249
+ $[16] = t3;
250
+ $[17] = t4;
251
+ $[18] = t5;
252
+ } else t5 = $[18];
237
253
  let t6;
238
- if ($[18] !== align || $[19] !== ariaSort || $[20] !== rest || $[21] !== t5) {
254
+ if ($[19] !== align || $[20] !== ariaSort || $[21] !== rest || $[22] !== t5) {
239
255
  t6 = /*#__PURE__*/ jsx(TableHeader, {
240
256
  ...rest,
241
257
  "aria-sort": ariaSort,
@@ -243,12 +259,12 @@ function TableSortHeader(t0) {
243
259
  "data-component": "Table.SortHeader",
244
260
  children: t5
245
261
  });
246
- $[18] = align;
247
- $[19] = ariaSort;
248
- $[20] = rest;
249
- $[21] = t5;
250
- $[22] = t6;
251
- } else t6 = $[22];
262
+ $[19] = align;
263
+ $[20] = ariaSort;
264
+ $[21] = rest;
265
+ $[22] = t5;
266
+ $[23] = t6;
267
+ } else t6 = $[23];
252
268
  return t6;
253
269
  }
254
270
  function TableRow(t0) {
@@ -285,56 +301,70 @@ function TableRow(t0) {
285
301
  return t2;
286
302
  }
287
303
  function TableCell(t0) {
288
- const $ = c(16);
304
+ const $ = c(21);
289
305
  let align;
290
306
  let children;
291
307
  let className;
308
+ let headers;
292
309
  let rest;
293
310
  let scope;
294
311
  if ($[0] !== t0) {
295
- ({align, className, children, scope, ...rest} = t0);
312
+ ({align, className, children, scope, headers, ...rest} = t0);
296
313
  $[0] = t0;
297
314
  $[1] = align;
298
315
  $[2] = children;
299
316
  $[3] = className;
300
- $[4] = rest;
301
- $[5] = scope;
317
+ $[4] = headers;
318
+ $[5] = rest;
319
+ $[6] = scope;
302
320
  } else {
303
321
  align = $[1];
304
322
  children = $[2];
305
323
  className = $[3];
306
- rest = $[4];
307
- scope = $[5];
324
+ headers = $[4];
325
+ rest = $[5];
326
+ scope = $[6];
308
327
  }
309
328
  const BaseComponent = scope ? "th" : "td";
310
329
  const role = scope ? "rowheader" : "cell";
330
+ const group = useContext(TableGroupContext);
311
331
  let t1;
312
- if ($[6] !== className) {
313
- t1 = clsx("TableCell", className, Table_module_css_default.TableCell);
314
- $[6] = className;
315
- $[7] = t1;
316
- } else t1 = $[7];
332
+ if ($[7] !== (group === null || group === void 0 ? void 0 : group.headerId) || $[8] !== headers) {
333
+ t1 = [group === null || group === void 0 ? void 0 : group.headerId, headers].filter(Boolean).join(" ") || void 0;
334
+ $[7] = group === null || group === void 0 ? void 0 : group.headerId;
335
+ $[8] = headers;
336
+ $[9] = t1;
337
+ } else t1 = $[9];
338
+ const resolvedHeaders = t1;
317
339
  let t2;
318
- if ($[8] !== BaseComponent || $[9] !== align || $[10] !== children || $[11] !== rest || $[12] !== role || $[13] !== scope || $[14] !== t1) {
319
- t2 = /*#__PURE__*/ jsx(BaseComponent, {
340
+ if ($[10] !== className) {
341
+ t2 = clsx("TableCell", className, Table_module_css_default.TableCell);
342
+ $[10] = className;
343
+ $[11] = t2;
344
+ } else t2 = $[11];
345
+ let t3;
346
+ if ($[12] !== BaseComponent || $[13] !== align || $[14] !== children || $[15] !== resolvedHeaders || $[16] !== rest || $[17] !== role || $[18] !== scope || $[19] !== t2) {
347
+ t3 = /*#__PURE__*/ jsx(BaseComponent, {
320
348
  ...rest,
321
- className: t1,
349
+ className: t2,
322
350
  scope,
323
351
  role,
324
352
  "data-cell-align": align,
325
353
  "data-component": "Table.Cell",
354
+ headers: resolvedHeaders,
326
355
  children
327
356
  });
328
- $[8] = BaseComponent;
329
- $[9] = align;
330
- $[10] = children;
331
- $[11] = rest;
332
- $[12] = role;
333
- $[13] = scope;
334
- $[14] = t1;
335
- $[15] = t2;
336
- } else t2 = $[15];
337
- return t2;
357
+ $[12] = BaseComponent;
358
+ $[13] = align;
359
+ $[14] = children;
360
+ $[15] = resolvedHeaders;
361
+ $[16] = rest;
362
+ $[17] = role;
363
+ $[18] = scope;
364
+ $[19] = t2;
365
+ $[20] = t3;
366
+ } else t3 = $[20];
367
+ return t3;
338
368
  }
339
369
  function TableCellPlaceholder(t0) {
340
370
  const $ = c(2);
@@ -1,4 +1,4 @@
1
- import "./Table-7f5cb3e4.css";
1
+ import "./Table-50e68700.css";
2
2
  //#region src/DataTable/Table.module.css.js
3
3
  var Table_module_css_default = {
4
4
  "TableContainer": "prc-DataTable-TableContainer-hn0p3",
@@ -20,7 +20,12 @@ var Table_module_css_default = {
20
20
  "TableSortIcon--ascending": "prc-DataTable-TableSortIcon--ascending-Lpx6z",
21
21
  "TableSortIcon--descending": "prc-DataTable-TableSortIcon--descending-hHJGo",
22
22
  "TableCellSkeletonItems": "prc-DataTable-TableCellSkeletonItems-Ljhq5",
23
- "PlaceholderText": "prc-DataTable-PlaceholderText-8bHo7"
23
+ "TableGroupHeaderBody": "prc-DataTable-TableGroupHeaderBody-K-YqR",
24
+ "TableGroupHeaderCell": "prc-DataTable-TableGroupHeaderCell-vnb30",
25
+ "TableGroupHeaderContent": "prc-DataTable-TableGroupHeaderContent-H9FbA",
26
+ "TableGroupHeaderLabel": "prc-DataTable-TableGroupHeaderLabel--c-od",
27
+ "PlaceholderText": "prc-DataTable-PlaceholderText-8bHo7",
28
+ "TableGroupHeaderCount": "prc-DataTable-TableGroupHeaderCount-6r8Pj"
24
29
  };
25
30
  //#endregion
26
31
  export { Table_module_css_default as default };
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+
3
+ //#region src/DataTable/TableGroup.d.ts
4
+ type TableGroupProps = {
5
+ /**
6
+ * Provide a custom class name for the group header section
7
+ */
8
+ className?: string;
9
+ /**
10
+ * Provide a stable identifier exposed on both group sections as `data-group-id`
11
+ */
12
+ id: string | number;
13
+ /**
14
+ * Provide a label for the group header
15
+ */
16
+ label: string;
17
+ /**
18
+ * Specify the number of member rows in the group
19
+ */
20
+ rowCount: number;
21
+ /**
22
+ * Provide an accessible name for the group header
23
+ */
24
+ 'aria-label'?: string;
25
+ /**
26
+ * Specify the number of columns spanned by the group header
27
+ */
28
+ colSpan: number;
29
+ children?: React.ReactNode;
30
+ };
31
+ declare function TableGroup({
32
+ className,
33
+ id,
34
+ label,
35
+ rowCount,
36
+ colSpan,
37
+ children,
38
+ 'aria-label': ariaLabel
39
+ }: TableGroupProps): React.JSX.Element;
40
+ //#endregion
41
+ export { TableGroup, TableGroupProps };
@@ -0,0 +1,155 @@
1
+ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
2
+ import { TableGroupContext } from "./TableGroupContext.js";
3
+ import Table_module_css_default from "./Table.module.css.js";
4
+ import { TableRow } from "./Table.js";
5
+ import { c } from "react-compiler-runtime";
6
+ import { useId } from "react";
7
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
+ import { clsx } from "clsx";
9
+ //#region src/DataTable/TableGroup.tsx
10
+ function TableGroup(t0) {
11
+ const $ = c(37);
12
+ const { className, id, label, rowCount, colSpan, children, "aria-label": ariaLabel } = t0;
13
+ const headerId = useId();
14
+ const accessibleName = `${label}, ${rowCount} ${rowCount === 1 ? "row" : "rows"}`;
15
+ let t1;
16
+ if ($[0] !== headerId) {
17
+ t1 = { headerId };
18
+ $[0] = headerId;
19
+ $[1] = t1;
20
+ } else t1 = $[1];
21
+ const contextValue = t1;
22
+ let t2;
23
+ if ($[2] !== className) {
24
+ t2 = clsx("TableGroupHeaderBody", Table_module_css_default.TableGroupHeaderBody, className);
25
+ $[2] = className;
26
+ $[3] = t2;
27
+ } else t2 = $[3];
28
+ let t3;
29
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
30
+ t3 = clsx("TableGroupHeaderCell", Table_module_css_default.TableGroupHeaderCell);
31
+ $[4] = t3;
32
+ } else t3 = $[4];
33
+ let t4;
34
+ if ($[5] !== accessibleName) {
35
+ t4 = /*#__PURE__*/ jsx(VisuallyHidden, { children: accessibleName });
36
+ $[5] = accessibleName;
37
+ $[6] = t4;
38
+ } else t4 = $[6];
39
+ let t5;
40
+ let t6;
41
+ if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
42
+ t5 = clsx("TableGroupHeaderContent", Table_module_css_default.TableGroupHeaderContent);
43
+ t6 = clsx("TableGroupHeaderLabel", Table_module_css_default.TableGroupHeaderLabel);
44
+ $[7] = t5;
45
+ $[8] = t6;
46
+ } else {
47
+ t5 = $[7];
48
+ t6 = $[8];
49
+ }
50
+ let t7;
51
+ if ($[9] !== label) {
52
+ t7 = /*#__PURE__*/ jsx("span", {
53
+ className: t6,
54
+ children: label
55
+ });
56
+ $[9] = label;
57
+ $[10] = t7;
58
+ } else t7 = $[10];
59
+ let t8;
60
+ if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
61
+ t8 = clsx("TableGroupHeaderCount", Table_module_css_default.TableGroupHeaderCount);
62
+ $[11] = t8;
63
+ } else t8 = $[11];
64
+ let t9;
65
+ if ($[12] !== rowCount) {
66
+ t9 = /*#__PURE__*/ jsx("span", {
67
+ className: t8,
68
+ children: rowCount
69
+ });
70
+ $[12] = rowCount;
71
+ $[13] = t9;
72
+ } else t9 = $[13];
73
+ let t10;
74
+ if ($[14] !== t7 || $[15] !== t9) {
75
+ t10 = /*#__PURE__*/ jsxs("span", {
76
+ "aria-hidden": "true",
77
+ className: t5,
78
+ children: [t7, t9]
79
+ });
80
+ $[14] = t7;
81
+ $[15] = t9;
82
+ $[16] = t10;
83
+ } else t10 = $[16];
84
+ let t11;
85
+ if ($[17] !== ariaLabel || $[18] !== colSpan || $[19] !== headerId || $[20] !== t10 || $[21] !== t4) {
86
+ t11 = /*#__PURE__*/ jsx(TableRow, { children: /*#__PURE__*/ jsxs("th", {
87
+ id: headerId,
88
+ className: t3,
89
+ scope: "colgroup",
90
+ colSpan,
91
+ role: "columnheader",
92
+ "aria-label": ariaLabel,
93
+ "data-component": "Table.Group.Header",
94
+ children: [t4, t10]
95
+ }) });
96
+ $[17] = ariaLabel;
97
+ $[18] = colSpan;
98
+ $[19] = headerId;
99
+ $[20] = t10;
100
+ $[21] = t4;
101
+ $[22] = t11;
102
+ } else t11 = $[22];
103
+ let t12;
104
+ if ($[23] !== id || $[24] !== t11 || $[25] !== t2) {
105
+ t12 = /*#__PURE__*/ jsx("tbody", {
106
+ className: t2,
107
+ role: "rowgroup",
108
+ "data-component": "Table.Group",
109
+ "data-group-id": id,
110
+ children: t11
111
+ });
112
+ $[23] = id;
113
+ $[24] = t11;
114
+ $[25] = t2;
115
+ $[26] = t12;
116
+ } else t12 = $[26];
117
+ let t13;
118
+ if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
119
+ t13 = clsx("TableBody", Table_module_css_default.TableBody);
120
+ $[27] = t13;
121
+ } else t13 = $[27];
122
+ let t14;
123
+ if ($[28] !== children || $[29] !== contextValue) {
124
+ t14 = /*#__PURE__*/ jsx(TableGroupContext.Provider, {
125
+ value: contextValue,
126
+ children
127
+ });
128
+ $[28] = children;
129
+ $[29] = contextValue;
130
+ $[30] = t14;
131
+ } else t14 = $[30];
132
+ let t15;
133
+ if ($[31] !== id || $[32] !== t14) {
134
+ t15 = /*#__PURE__*/ jsx("tbody", {
135
+ className: t13,
136
+ role: "rowgroup",
137
+ "data-component": "Table.Group.Body",
138
+ "data-group-id": id,
139
+ children: t14
140
+ });
141
+ $[31] = id;
142
+ $[32] = t14;
143
+ $[33] = t15;
144
+ } else t15 = $[33];
145
+ let t16;
146
+ if ($[34] !== t12 || $[35] !== t15) {
147
+ t16 = /*#__PURE__*/ jsxs(Fragment$1, { children: [t12, t15] });
148
+ $[34] = t12;
149
+ $[35] = t15;
150
+ $[36] = t16;
151
+ } else t16 = $[36];
152
+ return t16;
153
+ }
154
+ //#endregion
155
+ export { TableGroup };
@@ -0,0 +1,5 @@
1
+ import { createContext } from "react";
2
+ //#region src/DataTable/TableGroupContext.ts
3
+ const TableGroupContext = /*#__PURE__*/ createContext(void 0);
4
+ //#endregion
5
+ export { TableGroupContext };
@@ -5,6 +5,7 @@ import { CellAlignment, Column, ColumnWidth, createColumnHelper } from "./column
5
5
  import { DataTable, DataTableProps } from "./DataTable.js";
6
6
  import { ErrorDialog } from "./ErrorDialog.js";
7
7
  import { Table as Table$1, TableActions, TableActionsProps, TableBody, TableBodyProps, TableCell, TableCellPlaceholder, TableCellProps, TableContainer, TableContainerProps, TableDivider, TableHead, TableHeadProps, TableHeader, TableHeaderProps, TableProps, TableRow, TableRowProps, TableSkeleton, TableSkeletonProps, TableSubtitle, TableSubtitleProps, TableTitle, TableTitleProps } from "./Table.js";
8
+ import { TableGroup, TableGroupProps } from "./TableGroup.js";
8
9
  import { Pagination } from "./Pagination.js";
9
10
 
10
11
  //#region src/DataTable/index.d.ts
@@ -17,6 +18,7 @@ declare const Table: typeof Table$1 & SlotMarker & {
17
18
  Skeleton: typeof TableSkeleton;
18
19
  Head: typeof TableHead;
19
20
  Body: typeof TableBody;
21
+ Group: typeof TableGroup;
20
22
  Header: typeof TableHeader;
21
23
  Row: typeof TableRow;
22
24
  Cell: typeof TableCell;
@@ -25,4 +27,4 @@ declare const Table: typeof Table$1 & SlotMarker & {
25
27
  ErrorDialog: typeof ErrorDialog;
26
28
  };
27
29
  //#endregion
28
- export { type CellAlignment, type Column, type ColumnWidth, DataTable, type DataTableProps, type ObjectPaths, Table, type TableActionsProps, type TableBodyProps, type TableCellProps, type TableContainerProps, type TableHeadProps, type TableHeaderProps, type TableProps, type TableRowProps, type TableSubtitleProps, type TableTitleProps, type UniqueRow, createColumnHelper };
30
+ export { type CellAlignment, type Column, type ColumnWidth, DataTable, type DataTableProps, type ObjectPaths, Table, type TableActionsProps, type TableBodyProps, type TableCellProps, type TableContainerProps, type TableGroupProps, type TableHeadProps, type TableHeaderProps, type TableProps, type TableRowProps, type TableSubtitleProps, type TableTitleProps, type UniqueRow, createColumnHelper };
@@ -1,6 +1,7 @@
1
1
  import { Table as Table$1, TableActions, TableBody, TableCell, TableCellPlaceholder, TableContainer, TableDivider, TableHead, TableHeader, TableRow, TableSkeleton, TableSubtitle, TableTitle } from "./Table.js";
2
2
  import { DataTable } from "./DataTable.js";
3
3
  import { ErrorDialog } from "./ErrorDialog.js";
4
+ import { TableGroup } from "./TableGroup.js";
4
5
  import { Pagination } from "./Pagination.js";
5
6
  import { createColumnHelper } from "./column.js";
6
7
  //#region src/DataTable/index.ts
@@ -13,6 +14,7 @@ const Table = Object.assign(Table$1, {
13
14
  Skeleton: TableSkeleton,
14
15
  Head: TableHead,
15
16
  Body: TableBody,
17
+ Group: TableGroup,
16
18
  Header: TableHeader,
17
19
  Row: TableRow,
18
20
  Cell: TableCell,
@@ -29,6 +29,7 @@ import { CardActionProps as ActionProps, CardDescriptionProps as DescriptionProp
29
29
  import { Card } from "../Card/index.js";
30
30
  import { DataTable, DataTableProps } from "../DataTable/DataTable.js";
31
31
  import { TableActionsProps, TableBodyProps, TableCellProps, TableContainerProps, TableHeadProps, TableHeaderProps, TableProps, TableRowProps, TableSubtitleProps, TableTitleProps } from "../DataTable/Table.js";
32
+ import { TableGroupProps } from "../DataTable/TableGroup.js";
32
33
  import { Table } from "../DataTable/index.js";
33
34
  import { InlineMessage, InlineMessageProps } from "../InlineMessage/InlineMessage.js";
34
35
  import { Hidden, HiddenProps } from "../Hidden/Hidden.js";
@@ -50,4 +51,4 @@ import { useTabPanel } from "./Tabs/useTabPanel.js";
50
51
  import { TopicTagProps } from "../TopicTag/TopicTag.js";
51
52
  import { TopicTagGroupProps } from "../TopicTag/TopicTagGroup.js";
52
53
  import { TopicTag } from "../TopicTag/index.js";
53
- 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 DataTableProps, 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 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 DataTableProps, 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 };
@@ -10,10 +10,7 @@ function useOverflow(ref) {
10
10
  t0 = () => {
11
11
  if (ref.current === null) return;
12
12
  const observer = new ResizeObserver((entries) => {
13
- for (const entry of entries) if (entry.target.scrollHeight > entry.target.clientHeight || entry.target.scrollWidth > entry.target.clientWidth) {
14
- setHasOverflow(true);
15
- break;
16
- }
13
+ setHasOverflow(entries.some(_temp));
17
14
  });
18
15
  observer.observe(ref.current);
19
16
  return () => {
@@ -31,5 +28,8 @@ function useOverflow(ref) {
31
28
  useEffect(t0, t1);
32
29
  return hasOverflow;
33
30
  }
31
+ function _temp(entry) {
32
+ return entry.target.scrollHeight > entry.target.clientHeight || entry.target.scrollWidth > entry.target.clientWidth;
33
+ }
34
34
  //#endregion
35
35
  export { useOverflow };
@@ -2736,6 +2736,10 @@
2736
2736
  {
2737
2737
  "id": "experimental-components-datatable-features--with-pagination",
2738
2738
  "code": "() => {\n const pageSize = 10\n const [pageIndex, setPageIndex] = React.useState(0)\n const start = pageIndex * pageSize\n const end = start + pageSize\n const rows = repos.slice(start, end)\n return (\n <Table.Container>\n <Table.Title as=\"h2\" id=\"repositories\">\n Repositories\n </Table.Title>\n <Table.Subtitle as=\"p\" id=\"repositories-subtitle\">\n A subtitle could appear here to give extra context to the data.\n </Table.Subtitle>\n <DataTable\n aria-labelledby=\"repositories\"\n aria-describedby=\"repositories-subtitle\"\n data={rows}\n columns={[\n {\n header: 'Repository',\n field: 'name',\n rowHeader: true,\n },\n {\n header: 'Type',\n field: 'type',\n renderCell: (row) => {\n return <Label>{uppercase(row.type)}</Label>\n },\n },\n {\n header: 'Updated',\n field: 'updatedAt',\n renderCell: (row) => {\n return <RelativeTime date={new Date(row.updatedAt)} />\n },\n },\n {\n header: 'Dependabot',\n field: 'securityFeatures.dependabot',\n renderCell: (row) => {\n return row.securityFeatures.dependabot.length > 0 ? (\n <LabelGroup>\n {row.securityFeatures.dependabot.map((feature) => {\n return <Label key={feature}>{uppercase(feature)}</Label>\n })}\n </LabelGroup>\n ) : null\n },\n },\n {\n header: 'Code scanning',\n field: 'securityFeatures.codeScanning',\n renderCell: (row) => {\n return row.securityFeatures.codeScanning.length > 0 ? (\n <LabelGroup>\n {row.securityFeatures.codeScanning.map((feature) => {\n return <Label key={feature}>{uppercase(feature)}</Label>\n })}\n </LabelGroup>\n ) : null\n },\n },\n ]}\n />\n <Table.Pagination\n aria-label=\"Pagination for Repositories\"\n pageSize={pageSize}\n totalCount={repos.length}\n onChange={({ pageIndex }) => {\n setPageIndex(pageIndex)\n }}\n />\n </Table.Container>\n )\n}"
2739
+ },
2740
+ {
2741
+ "id": "experimental-components-datatable-features--with-groups",
2742
+ "code": "() => (\n <Table.Container>\n <Table.Title as=\"h2\" id=\"repositories-by-visibility\">\n Repositories by visibility\n </Table.Title>\n <Table\n aria-labelledby=\"repositories-by-visibility\"\n gridTemplateColumns=\"minmax(0, 1fr) auto\"\n >\n <Table.Head>\n <Table.Row>\n <Table.Header id={groupedColumnHeaderIds[0]}>Name</Table.Header>\n <Table.Header id={groupedColumnHeaderIds[1]}>Updated</Table.Header>\n </Table.Row>\n </Table.Head>\n {repoGroups.map((group) => (\n <Table.Group\n key={group.id}\n id={group.id}\n label={group.label}\n rowCount={group.repos.length}\n colSpan={groupedColumnHeaderIds.length}\n >\n {group.repos.map((repo) => (\n <Table.Row key={repo.id}>\n <Table.Cell scope=\"row\" headers={groupedColumnHeaderIds[0]}>\n {repo.name}\n </Table.Cell>\n <Table.Cell headers={groupedColumnHeaderIds[1]}>\n <RelativeTime date={new Date(repo.updatedAt)} />\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Group>\n ))}\n </Table>\n </Table.Container>\n)"
2739
2743
  }
2740
2744
  ],
2741
2745
  "importPath": "@primer/react/experimental",
@@ -2860,6 +2864,41 @@
2860
2864
  }
2861
2865
  ]
2862
2866
  },
2867
+ {
2868
+ "name": "Table.Group",
2869
+ "props": [
2870
+ {
2871
+ "name": "id",
2872
+ "type": "string | number",
2873
+ "description": "A stable identifier exposed on both group sections as `data-group-id`. The group header's DOM id is generated separately so it is safe for use in `headers`."
2874
+ },
2875
+ {
2876
+ "name": "label",
2877
+ "type": "string",
2878
+ "description": "The visible label for the group, shown in the group header and included in its accessible name along with the row count."
2879
+ },
2880
+ {
2881
+ "name": "rowCount",
2882
+ "type": "number",
2883
+ "description": "The number of member rows in the group. Combined with `label` to build the group header's accessible name, for example \"Admins, 2 rows\"."
2884
+ },
2885
+ {
2886
+ "name": "aria-label",
2887
+ "type": "string",
2888
+ "description": "Override the group header's accessible name, for example to localize its row count description."
2889
+ },
2890
+ {
2891
+ "name": "colSpan",
2892
+ "type": "number",
2893
+ "description": "The number of columns spanned by the group header."
2894
+ },
2895
+ {
2896
+ "name": "children",
2897
+ "type": "React.ReactNode",
2898
+ "description": "The group's member rows, typically a list of `Table.Row` elements. When composing a grouped table directly, use each `Table.Cell`'s native `headers` prop to reference the corresponding `Table.Header` id. The group header association is added automatically."
2899
+ }
2900
+ ]
2901
+ },
2863
2902
  {
2864
2903
  "name": "Table.Row",
2865
2904
  "props": [
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@primer/react",
3
3
  "type": "module",
4
- "version": "38.38.0-rc.f9fd3e03f",
4
+ "version": "38.39.0-rc.052483c40",
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",
@@ -108,12 +108,12 @@
108
108
  "@primer/doc-gen": "^0.0.1",
109
109
  "@primer/react-compiler-check": "^0.0.0",
110
110
  "@rolldown/plugin-babel": "^0.2.3",
111
- "@storybook/addon-a11y": "10.5.8",
112
- "@storybook/addon-docs": "10.5.8",
113
- "@storybook/addon-links": "10.5.8",
111
+ "@storybook/addon-a11y": "10.5.10",
112
+ "@storybook/addon-docs": "10.5.10",
113
+ "@storybook/addon-links": "10.5.10",
114
114
  "@storybook/addon-mcp": "^0.7.0",
115
115
  "@storybook/icons": "^2.1.0",
116
- "@storybook/react-vite": "10.5.8",
116
+ "@storybook/react-vite": "10.5.10",
117
117
  "@testing-library/dom": "^10.4.0",
118
118
  "@testing-library/jest-dom": "^6.4.5",
119
119
  "@testing-library/react": "^16.3.0",
@@ -166,11 +166,11 @@
166
166
  "react-is": "18.3.1",
167
167
  "recast": "0.23.7",
168
168
  "rimraf": "5.0.5",
169
- "rolldown": "^1.2.5",
169
+ "rolldown": "^1.2.6",
170
170
  "rolldown-plugin-dts": "^0.26.0",
171
171
  "rolldown-plugin-import-css": "^0.0.0",
172
172
  "rolldown-plugin-preserve-directives": "^0.0.0",
173
- "storybook": "10.5.8",
173
+ "storybook": "10.5.10",
174
174
  "terser": "5.36.0",
175
175
  "ts-toolbelt": "9.6.0",
176
176
  "tsx": "4.20.3",
@@ -1,2 +0,0 @@
1
- .prc-DataTable-TableContainer-hn0p3{column-gap:var(--base-size-8,.5rem);display:grid;grid-template-areas:"title actions" "divider divider" "subtitle subtitle" "filter filter" "table table" "footer footer";grid-template-columns:1fr 1fr}.prc-DataTable-TableTitle-nM43N{align-self:center;font-size:var(--text-body-size-medium,.875rem);font-weight:var(--base-text-weight-semibold,600);grid-area:title;line-height:20px}.prc-DataTable-TableSubtitle--L6Ho,.prc-DataTable-TableTitle-nM43N{color:var(--fgColor-default,#1f2328);margin:0}.prc-DataTable-TableSubtitle--L6Ho{font-size:var(--text-body-size-small,.75rem);font-weight:var(--base-text-weight-normal,400);grid-area:subtitle;line-height:var(--text-title-lineHeight-small,1.5)}.prc-DataTable-TableActions-fkc2b{align-items:center;column-gap:var(--base-size-8,.5rem);display:flex;grid-area:actions;justify-self:end}.prc-DataTable-TableDivider-TRc3b{background-color:var(--borderColor-default,#d1d9e0);grid-area:divider;height:1px;margin-block-end:var(--base-size-8,.5rem);margin-block-start:var(--base-size-16,1rem);width:100%}.prc-DataTable-TableActions-fkc2b+.prc-DataTable-TableOverflowWrapper-bSqT-,.prc-DataTable-TableSubtitle--L6Ho+.prc-DataTable-TableOverflowWrapper-bSqT-,.prc-DataTable-TableTitle-nM43N+.prc-DataTable-TableOverflowWrapper-bSqT-{margin-block-start:var(--base-size-8,.5rem)}.prc-DataTable-Table-7ux1n,.prc-DataTable-TableOverflowWrapper-bSqT-{grid-area:table}.prc-DataTable-Table-7ux1n{--table-border-radius:0.375rem;--table-cell-padding:var(--cell-padding-block,0.5rem) var(--cell-padding-inline,0.75rem);--table-font-size:0.75rem;background-color:var(--bgColor-default,#fff);border-collapse:separate;border-spacing:0;display:grid;font-size:var(--table-font-size);grid-template-columns:var(--grid-template-columns);line-height:1.66667;width:100%}.prc-DataTable-Table-7ux1n:where([data-cell-padding=condensed]){--cell-padding-block:0.25rem;--cell-padding-inline:0.5rem}.prc-DataTable-Table-7ux1n:where([data-cell-padding=normal]){--cell-padding-block:0.5rem;--cell-padding-inline:0.75rem}.prc-DataTable-Table-7ux1n:where([data-cell-padding=spacious]){--cell-padding-block:0.75rem;--cell-padding-inline:1rem}.prc-DataTable-TableCell-Fk4ve:first-child,.prc-DataTable-TableHeader-eyTab:first-child{border-inline-start:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0)}.prc-DataTable-TableCell-Fk4ve:last-child,.prc-DataTable-TableHeader-eyTab:last-child{border-inline-end:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0)}.prc-DataTable-TableCell-Fk4ve,.prc-DataTable-TableHeader-eyTab{align-items:center;border-block-end:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0);display:flex;padding:var(--table-cell-padding);text-align:start}.prc-DataTable-TableCell-Fk4ve:where([data-cell-align=end]),.prc-DataTable-TableHeader-eyTab:where([data-cell-align=end]){display:flex;justify-content:flex-end;text-align:end}.prc-DataTable-TableHeader-eyTab[data-cell-align=end] .prc-DataTable-TableSortButton--aq0y{display:flex;flex-direction:row-reverse}.prc-DataTable-TableHead-4FaBf .prc-DataTable-TableRow-Icc7F:first-of-type .prc-DataTable-TableHeader-eyTab{border-block-start:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0)}.prc-DataTable-TableHead-4FaBf .prc-DataTable-TableRow-Icc7F:first-of-type .prc-DataTable-TableHeader-eyTab:first-child{border-top-left-radius:var(--table-border-radius)}.prc-DataTable-TableHead-4FaBf .prc-DataTable-TableRow-Icc7F:first-of-type .prc-DataTable-TableHeader-eyTab:last-child{border-top-right-radius:var(--table-border-radius)}.prc-DataTable-TableOverflowWrapper-bSqT-:last-child .prc-DataTable-Table-7ux1n .prc-DataTable-TableBody-QKQy2 .prc-DataTable-TableRow-Icc7F:last-of-type .prc-DataTable-TableCell-Fk4ve:first-child{border-bottom-left-radius:var(--table-border-radius)}.prc-DataTable-TableOverflowWrapper-bSqT-:last-child .prc-DataTable-Table-7ux1n .prc-DataTable-TableBody-QKQy2 .prc-DataTable-TableRow-Icc7F:last-of-type .prc-DataTable-TableCell-Fk4ve:last-child{border-bottom-right-radius:var(--table-border-radius)}.prc-DataTable-TableRow-Icc7F>:first-child .prc-DataTable-TableCellSkeletonItem-bGhwZ,.prc-DataTable-TableRow-Icc7F>:first-child:not(.prc-DataTable-TableCellSkeleton-DMdM5){padding-inline-start:var(--base-size-16,1rem)}.prc-DataTable-TableRow-Icc7F>:last-child .prc-DataTable-TableCellSkeletonItem-bGhwZ,.prc-DataTable-TableRow-Icc7F>:last-child:not(.prc-DataTable-TableCellSkeleton-DMdM5){padding-inline-end:var(--base-size-16,1rem)}.prc-DataTable-TableHeader-eyTab{background-color:var(--bgColor-muted,#f6f8fa);border-block-start:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0);color:var(--fgColor-muted,#59636e);font-weight:var(--base-text-weight-semibold,600)}.prc-DataTable-TableHeader-eyTab:where([aria-sort=ascending]),.prc-DataTable-TableHeader-eyTab:where([aria-sort=descending]){color:var(--fgColor-default,#1f2328)}.prc-DataTable-TableSortIcon-wHvJw{visibility:hidden}.prc-DataTable-TableHeader-eyTab .prc-DataTable-TableSortButton--aq0y:focus .prc-DataTable-TableSortIcon--ascending-Lpx6z,.prc-DataTable-TableHeader-eyTab:hover .prc-DataTable-TableSortIcon--ascending-Lpx6z,.prc-DataTable-TableHeader-eyTab[aria-sort=ascending] .prc-DataTable-TableSortIcon--ascending-Lpx6z,.prc-DataTable-TableHeader-eyTab[aria-sort=descending] .prc-DataTable-TableSortIcon--descending-hHJGo{visibility:visible}.prc-DataTable-TableRow-Icc7F:hover .prc-DataTable-TableCell-Fk4ve:not(.prc-DataTable-TableCellSkeleton-DMdM5){background-color:var(--control-transparent-bgColor-hover,#818b981a)}.prc-DataTable-TableCell-Fk4ve:where([scope=row]){align-items:center;color:var(--fgColor-default,#1f2328);display:flex;font-weight:var(--base-text-weight-semibold,600)}.prc-DataTable-TableCellSkeleton-DMdM5{padding:0}.prc-DataTable-TableCellSkeletonItems-Ljhq5{display:flex;flex-direction:column;width:100%}.prc-DataTable-TableCellSkeletonItem-bGhwZ{padding:var(--table-cell-padding)}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+1){--skeleton-item-width:85%}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+2){--skeleton-item-width:67.5%}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+3){--skeleton-item-width:80%}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+4){--skeleton-item-width:60%}.prc-DataTable-TableCellSkeletonItem-bGhwZ:nth-of-type(5n+5){--skeleton-item-width:75%}.prc-DataTable-TableCellSkeletonItem-bGhwZ [data-component=SkeletonText]{width:var(--skeleton-item-width)}.prc-DataTable-TableCellSkeletonItem-bGhwZ:not(:last-of-type){border-block-end:var(--borderWidth-thin,.0625rem) solid var(--borderColor-default,#d1d9e0)}.prc-DataTable-TableSortButton--aq0y{column-gap:.5rem}.prc-DataTable-TableBody-QKQy2,.prc-DataTable-TableHead-4FaBf,.prc-DataTable-TableRow-Icc7F{display:contents}@supports (grid-template-columns:subgrid){.prc-DataTable-TableBody-QKQy2,.prc-DataTable-TableHead-4FaBf,.prc-DataTable-TableRow-Icc7F{display:grid;grid-column:-1/1;grid-template-columns:subgrid}}.prc-DataTable-PlaceholderText-8bHo7{color:var(--fgColor-muted,#59636e)}
2
- /*# sourceMappingURL=Table-7f5cb3e4.css.map */
@@ -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,qMAEE,oDACF,CAGA,oMAEE,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,4FAGE,gBACF,CAEA,0CACE,4FAGE,YAAa,CAEb,gBAAkB,CADlB,6BAEF,CACF,CAEA,qCACE,kCACF","file":"Table-7f5cb3e4.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 .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 .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.TableRow {\n display: contents;\n}\n\n@supports (grid-template-columns: subgrid) {\n .TableHead,\n .TableBody,\n .TableRow {\n display: grid;\n grid-template-columns: subgrid;\n grid-column: -1 /1;\n }\n}\n\n.PlaceholderText {\n color: var(--fgColor-muted);\n}\n"]}