@12-apps/ui 6.50.0 → 6.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/components-catalog.md +2 -2
  2. package/dist/_internal/components/data-display/Badge/Badge.js +4 -4
  3. package/dist/_internal/components/data-display/Badge/Badge.styles.js +4 -4
  4. package/dist/_internal/components/data-display/Badge/BadgeContent.js +4 -4
  5. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +4 -4
  6. package/dist/_internal/components/data-display/Carousel/Carousel.js +4 -4
  7. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +4 -4
  8. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +4 -4
  9. package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
  10. package/dist/_internal/components/data-display/Chart/SpecChart.js +4 -4
  11. package/dist/_internal/components/data-display/Chart/chart-context.js +4 -4
  12. package/dist/_internal/components/data-display/Chart/chart-internals.js +4 -4
  13. package/dist/_internal/components/data-display/Chart/chart-renderers.js +4 -4
  14. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +6 -6
  15. package/dist/_internal/components/data-display/DataGrid/DataGrid.model.js +5 -5
  16. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +16 -16
  17. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +17 -17
  18. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +8 -8
  19. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +7 -7
  20. package/dist/_internal/components/data-display/DataViews/base-list-card.js +9 -9
  21. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +7 -7
  22. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +6 -6
  23. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +9 -9
  24. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +15 -15
  25. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +5 -5
  26. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +6 -6
  27. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +9 -9
  28. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +8 -8
  29. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +6 -6
  30. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +4 -4
  31. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +4 -4
  32. package/dist/_internal/components/data-display/Sheet/Sheet.js +4 -4
  33. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +4 -4
  34. package/dist/_internal/components/data-display/Table/Table.js +5 -5
  35. package/dist/_internal/components/data-display/index.js +7 -7
  36. package/dist/_internal/components/form/Command/Command.js +4 -4
  37. package/dist/_internal/components/form/Command/Command.styles.js +4 -4
  38. package/dist/_internal/components/form/Label/Label.js +4 -4
  39. package/dist/_internal/components/form/Label/Label.styles.js +4 -4
  40. package/dist/_internal/components/form/Menubar/Menubar.item.js +4 -4
  41. package/dist/_internal/components/form/Menubar/Menubar.js +4 -4
  42. package/dist/_internal/components/form/Menubar/Menubar.styles.js +4 -4
  43. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +4 -4
  44. package/dist/_internal/components/form/index.js +4 -4
  45. package/dist/_internal/components/index.js +23 -23
  46. package/dist/_internal/components/layout/Box/Box.js +7 -7
  47. package/dist/_internal/components/layout/SettingCard/SettingCard.js +9 -9
  48. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +8 -8
  49. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +9 -9
  50. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +10 -10
  51. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +9 -9
  52. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +10 -10
  53. package/dist/_internal/components/layout/Stack/Stack.js +8 -8
  54. package/dist/_internal/components/layout/index.js +13 -13
  55. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +4 -4
  56. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +4 -4
  57. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +9 -9
  58. package/dist/_internal/components/navigation/SectionNav/SectionNav.helpers.js +5 -1
  59. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +11 -11
  60. package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +12 -6
  61. package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +7 -7
  62. package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +7 -7
  63. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +7 -7
  64. package/dist/_internal/components/navigation/SectionNav/__stories__/fixtures.js +16 -4
  65. package/dist/_internal/components/navigation/SectionNav/__stories__/fixtures.js.map +1 -1
  66. package/dist/_internal/components/navigation/index.js +11 -11
  67. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +4 -4
  68. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +4 -4
  69. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +4 -4
  70. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +4 -4
  71. package/dist/_internal/components/utility/index.js +4 -4
  72. package/dist/_internal/icons/Icon.js +7 -7
  73. package/dist/_internal/provider/UiProvider.js +6 -6
  74. package/dist/_internal/provider/mui-bridge.js +5 -5
  75. package/dist/_internal/provider/use-ui-theme.js +6 -6
  76. package/dist/_internal/tokens/density-overrides.js +3 -3
  77. package/dist/_internal/tokens/density-overrides.navigation.js +1 -1
  78. package/dist/_internal/tokens/density-overrides.selection.js +1 -1
  79. package/dist/_internal/tokens/density.js +4 -4
  80. package/dist/charts.js +4 -4
  81. package/dist/{chunk-XK77FY42.js → chunk-25MSGLNU.js} +4 -3
  82. package/dist/chunk-25MSGLNU.js.map +1 -0
  83. package/dist/{chunk-7VC6YBD3.js → chunk-3U45DRNS.js} +2 -2
  84. package/dist/{chunk-ZQCZMSLO.js → chunk-4B5WSVS7.js} +2 -2
  85. package/dist/{chunk-F4FOBTLJ.js → chunk-4BI5PCOM.js} +2 -2
  86. package/dist/{chunk-HVZ4HF4M.js → chunk-5N2UJOCT.js} +2 -2
  87. package/dist/{chunk-DFCX3FNB.js → chunk-5ZBFADBL.js} +2 -2
  88. package/dist/{chunk-GLKQT2DS.js → chunk-A436VORP.js} +33 -4
  89. package/dist/chunk-A436VORP.js.map +1 -0
  90. package/dist/{chunk-LWBR5U6V.js → chunk-ABPTS3XK.js} +2 -2
  91. package/dist/{chunk-43EQITNF.js → chunk-BHPLHGZP.js} +4 -4
  92. package/dist/{chunk-YMW2VYGU.js → chunk-DLO5V4AV.js} +2 -2
  93. package/dist/{chunk-7FQF5BC2.js → chunk-ESW4Z5I7.js} +2 -2
  94. package/dist/{chunk-ZPD6MGAO.js → chunk-FDJLYYDA.js} +4 -4
  95. package/dist/{chunk-LZL6HDTZ.js → chunk-FM5RBGG7.js} +2 -2
  96. package/dist/{chunk-V2SAZOT2.js → chunk-FYTC4LOD.js} +2 -2
  97. package/dist/{chunk-4ELI2MM3.js → chunk-GAXHYRX6.js} +9 -6
  98. package/dist/chunk-GAXHYRX6.js.map +1 -0
  99. package/dist/{chunk-CT45KNCT.js → chunk-GPTICJVN.js} +3 -3
  100. package/dist/{chunk-URGH4673.js → chunk-H556NMKE.js} +4 -4
  101. package/dist/{chunk-VOF6QVCF.js → chunk-HF7V3RI5.js} +2 -2
  102. package/dist/{chunk-NKJMOWY3.js → chunk-HJUR6ZY6.js} +2 -2
  103. package/dist/{chunk-RX7J6VRI.js → chunk-HKEBTPKY.js} +119 -42
  104. package/dist/chunk-HKEBTPKY.js.map +1 -0
  105. package/dist/{chunk-ZC3NEUNQ.js → chunk-I2LF53MJ.js} +2 -2
  106. package/dist/{chunk-ZFQVT6HZ.js → chunk-II7Z5UB6.js} +2 -2
  107. package/dist/{chunk-K65NSHQI.js → chunk-L3CQTVFU.js} +4 -4
  108. package/dist/{chunk-EY4GPLMF.js → chunk-MT7XMJUJ.js} +5 -5
  109. package/dist/{chunk-TELVW2OI.js → chunk-MYCR7FMI.js} +2 -2
  110. package/dist/{chunk-56TGECKZ.js → chunk-NP6SHLQ3.js} +4 -3
  111. package/dist/chunk-NP6SHLQ3.js.map +1 -0
  112. package/dist/{chunk-WB6BTUXQ.js → chunk-OWILUXWM.js} +2 -2
  113. package/dist/{chunk-VHVI3D4R.js → chunk-P3GBXE73.js} +11 -2
  114. package/dist/chunk-P3GBXE73.js.map +1 -0
  115. package/dist/{chunk-WSBTMZJM.js → chunk-P7YUOH2E.js} +2 -2
  116. package/dist/{chunk-VOP2BXKL.js → chunk-QWTPK3FT.js} +2 -2
  117. package/dist/{chunk-XQ6Y5Z7R.js → chunk-RCJOTNIW.js} +2 -2
  118. package/dist/{chunk-32JMSHEA.js → chunk-S4ZUZ6DS.js} +10 -6
  119. package/dist/chunk-S4ZUZ6DS.js.map +1 -0
  120. package/dist/{chunk-SWDDXMV7.js → chunk-SJ4IAZ3V.js} +4 -4
  121. package/dist/{chunk-FHWBOOS3.js → chunk-TH7RBREI.js} +2 -2
  122. package/dist/{chunk-SA2ERYVV.js → chunk-VAO63IIP.js} +3 -3
  123. package/dist/{chunk-43Q6CVPB.js → chunk-VELGOFCL.js} +127 -78
  124. package/dist/chunk-VELGOFCL.js.map +1 -0
  125. package/dist/{chunk-RCJYLDXV.js → chunk-VJBTFWDK.js} +4 -4
  126. package/dist/chunk-WNKRFMSI.js +113 -0
  127. package/dist/chunk-WNKRFMSI.js.map +1 -0
  128. package/dist/{chunk-LM2YOONY.js → chunk-XYHNXO6Q.js} +2 -2
  129. package/dist/{chunk-FT7BNFGS.js → chunk-YK4ZG5Y4.js} +2 -2
  130. package/dist/data-display/Badge.js +4 -4
  131. package/dist/data-display/Carousel.js +4 -4
  132. package/dist/data-display/Chart.js +4 -4
  133. package/dist/data-display/DataGrid.js +6 -6
  134. package/dist/data-display/DataViews.js +20 -20
  135. package/dist/data-display/FleetMap.js +4 -4
  136. package/dist/data-display/Sheet.js +4 -4
  137. package/dist/data-display/Table.js +5 -5
  138. package/dist/form/Command.js +4 -4
  139. package/dist/form/Label.js +4 -4
  140. package/dist/form/Menubar.js +4 -4
  141. package/dist/icons.js +7 -7
  142. package/dist/layout/Box.js +7 -7
  143. package/dist/layout/SettingCard.js +13 -13
  144. package/dist/layout/Stack.js +8 -8
  145. package/dist/navigation/AppHeader.js +4 -4
  146. package/dist/navigation/SectionNav.js +11 -11
  147. package/dist/provider.js +7 -7
  148. package/dist/tokens.js +4 -4
  149. package/dist/types/components/navigation/SectionNav/SectionNav.bar.d.ts.map +1 -1
  150. package/dist/types/components/navigation/SectionNav/SectionNav.helpers.d.ts +12 -1
  151. package/dist/types/components/navigation/SectionNav/SectionNav.helpers.d.ts.map +1 -1
  152. package/dist/types/components/navigation/SectionNav/SectionNav.parts.d.ts +36 -2
  153. package/dist/types/components/navigation/SectionNav/SectionNav.parts.d.ts.map +1 -1
  154. package/dist/types/components/navigation/SectionNav/SectionNav.primary.d.ts +22 -4
  155. package/dist/types/components/navigation/SectionNav/SectionNav.primary.d.ts.map +1 -1
  156. package/dist/types/components/navigation/SectionNav/SectionNav.rail.d.ts.map +1 -1
  157. package/dist/types/components/navigation/SectionNav/SectionNav.sheet.d.ts.map +1 -1
  158. package/dist/types/components/navigation/SectionNav/SectionNav.types.d.ts +81 -5
  159. package/dist/types/components/navigation/SectionNav/SectionNav.types.d.ts.map +1 -1
  160. package/dist/types/components/navigation/SectionNav/__stories__/fixtures.d.ts +11 -1
  161. package/dist/types/components/navigation/SectionNav/__stories__/fixtures.d.ts.map +1 -1
  162. package/dist/types/components/navigation/SectionNav/index.d.ts +1 -1
  163. package/dist/types/components/navigation/SectionNav/index.d.ts.map +1 -1
  164. package/dist/types/tokens/density-overrides.d.ts.map +1 -1
  165. package/dist/types/tokens/density-overrides.navigation.d.ts.map +1 -1
  166. package/dist/types/tokens/density-overrides.selection.d.ts.map +1 -1
  167. package/dist/utility/WorkflowStep.js +4 -4
  168. package/package.json +1 -1
  169. package/src/components/navigation/SectionNav/SectionNav.bar.tsx +161 -88
  170. package/src/components/navigation/SectionNav/SectionNav.helpers.ts +16 -1
  171. package/src/components/navigation/SectionNav/SectionNav.md +40 -4
  172. package/src/components/navigation/SectionNav/SectionNav.parts.tsx +59 -1
  173. package/src/components/navigation/SectionNav/SectionNav.primary.tsx +107 -30
  174. package/src/components/navigation/SectionNav/SectionNav.rail.tsx +154 -41
  175. package/src/components/navigation/SectionNav/SectionNav.sheet.tsx +6 -2
  176. package/src/components/navigation/SectionNav/SectionNav.types.ts +82 -5
  177. package/src/components/navigation/SectionNav/__stories__/fixtures.tsx +21 -1
  178. package/src/components/navigation/SectionNav/index.ts +1 -0
  179. package/src/tokens/density-overrides.navigation.ts +15 -2
  180. package/src/tokens/density-overrides.selection.ts +31 -14
  181. package/src/tokens/density-overrides.ts +27 -11
  182. package/dist/chunk-32JMSHEA.js.map +0 -1
  183. package/dist/chunk-43Q6CVPB.js.map +0 -1
  184. package/dist/chunk-4ELI2MM3.js.map +0 -1
  185. package/dist/chunk-56TGECKZ.js.map +0 -1
  186. package/dist/chunk-GLKQT2DS.js.map +0 -1
  187. package/dist/chunk-RX7J6VRI.js.map +0 -1
  188. package/dist/chunk-RZ4SBSLP.js +0 -62
  189. package/dist/chunk-RZ4SBSLP.js.map +0 -1
  190. package/dist/chunk-VHVI3D4R.js.map +0 -1
  191. package/dist/chunk-XK77FY42.js.map +0 -1
  192. /package/dist/{chunk-7VC6YBD3.js.map → chunk-3U45DRNS.js.map} +0 -0
  193. /package/dist/{chunk-ZQCZMSLO.js.map → chunk-4B5WSVS7.js.map} +0 -0
  194. /package/dist/{chunk-F4FOBTLJ.js.map → chunk-4BI5PCOM.js.map} +0 -0
  195. /package/dist/{chunk-HVZ4HF4M.js.map → chunk-5N2UJOCT.js.map} +0 -0
  196. /package/dist/{chunk-DFCX3FNB.js.map → chunk-5ZBFADBL.js.map} +0 -0
  197. /package/dist/{chunk-LWBR5U6V.js.map → chunk-ABPTS3XK.js.map} +0 -0
  198. /package/dist/{chunk-43EQITNF.js.map → chunk-BHPLHGZP.js.map} +0 -0
  199. /package/dist/{chunk-YMW2VYGU.js.map → chunk-DLO5V4AV.js.map} +0 -0
  200. /package/dist/{chunk-7FQF5BC2.js.map → chunk-ESW4Z5I7.js.map} +0 -0
  201. /package/dist/{chunk-ZPD6MGAO.js.map → chunk-FDJLYYDA.js.map} +0 -0
  202. /package/dist/{chunk-LZL6HDTZ.js.map → chunk-FM5RBGG7.js.map} +0 -0
  203. /package/dist/{chunk-V2SAZOT2.js.map → chunk-FYTC4LOD.js.map} +0 -0
  204. /package/dist/{chunk-CT45KNCT.js.map → chunk-GPTICJVN.js.map} +0 -0
  205. /package/dist/{chunk-URGH4673.js.map → chunk-H556NMKE.js.map} +0 -0
  206. /package/dist/{chunk-VOF6QVCF.js.map → chunk-HF7V3RI5.js.map} +0 -0
  207. /package/dist/{chunk-NKJMOWY3.js.map → chunk-HJUR6ZY6.js.map} +0 -0
  208. /package/dist/{chunk-ZC3NEUNQ.js.map → chunk-I2LF53MJ.js.map} +0 -0
  209. /package/dist/{chunk-ZFQVT6HZ.js.map → chunk-II7Z5UB6.js.map} +0 -0
  210. /package/dist/{chunk-K65NSHQI.js.map → chunk-L3CQTVFU.js.map} +0 -0
  211. /package/dist/{chunk-EY4GPLMF.js.map → chunk-MT7XMJUJ.js.map} +0 -0
  212. /package/dist/{chunk-TELVW2OI.js.map → chunk-MYCR7FMI.js.map} +0 -0
  213. /package/dist/{chunk-WB6BTUXQ.js.map → chunk-OWILUXWM.js.map} +0 -0
  214. /package/dist/{chunk-WSBTMZJM.js.map → chunk-P7YUOH2E.js.map} +0 -0
  215. /package/dist/{chunk-VOP2BXKL.js.map → chunk-QWTPK3FT.js.map} +0 -0
  216. /package/dist/{chunk-XQ6Y5Z7R.js.map → chunk-RCJOTNIW.js.map} +0 -0
  217. /package/dist/{chunk-SWDDXMV7.js.map → chunk-SJ4IAZ3V.js.map} +0 -0
  218. /package/dist/{chunk-FHWBOOS3.js.map → chunk-TH7RBREI.js.map} +0 -0
  219. /package/dist/{chunk-SA2ERYVV.js.map → chunk-VAO63IIP.js.map} +0 -0
  220. /package/dist/{chunk-RCJYLDXV.js.map → chunk-VJBTFWDK.js.map} +0 -0
  221. /package/dist/{chunk-LM2YOONY.js.map → chunk-XYHNXO6Q.js.map} +0 -0
  222. /package/dist/{chunk-FT7BNFGS.js.map → chunk-YK4ZG5Y4.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/navigation/SectionNav/SectionNav.rail.tsx"],"sourcesContent":["import Typography from '@mui/material/Typography/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type { ElementType, ReactNode } from 'react';\n\nimport type { SectionNavCopy } from '../../../copy';\nimport { rem } from '../../../tokens/scales';\n\nimport { destinationState, isMenu } from './SectionNav.helpers';\nimport {\n Box,\n CONTROL_RESET,\n CountedIcon,\n NOT_LIVE,\n SlotIcon,\n controlProps,\n destinationControl,\n focusRing,\n} from './SectionNav.parts';\nimport type {\n SectionNavAction,\n SectionNavBack,\n SectionNavDestination,\n SectionNavMenu,\n SectionNavProps,\n} from './SectionNav.types';\n\n/**\n * One rail row: icon, label, and the count at the far end.\n *\n * Destinations and menu entries draw the same row — in the rail there is room\n * for everything, so the difference between \"a place\" and \"an action\" is the\n * section it sits in, not its shape.\n *\n * `active` is the look; `current` is what `aria-current` reports, and is a\n * link's claim only — an action row that is ON says so with `aria-pressed`,\n * which arrives in `control`. Omitted, `current` follows `active`.\n */\nfunction RailRow({\n label,\n description,\n icon,\n count,\n active,\n current = active,\n copy,\n testId,\n control,\n loading = false,\n}: {\n label: string;\n description?: string;\n icon: ReactNode;\n count: number | undefined;\n active: boolean;\n current?: boolean;\n copy: SectionNavCopy;\n testId: string;\n control: Record<string, unknown>;\n loading?: boolean;\n}): React.JSX.Element {\n const theme = useTheme();\n return (\n <Box\n {...control}\n aria-current={current ? 'page' : undefined}\n aria-busy={loading || undefined}\n data-testid={testId}\n sx={{\n ...CONTROL_RESET,\n ...focusRing(theme),\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n width: '100%',\n minHeight: rem(theme, 40),\n px: 1.25,\n py: 0.75,\n borderRadius: 1,\n textAlign: 'start',\n color: active ? 'primary.main' : 'text.primary',\n bgcolor: active ? 'action.selected' : 'transparent',\n '&:hover': { bgcolor: active ? 'action.selected' : 'action.hover' },\n '& svg': { color: 'primary.main', fontSize: rem(theme, 20) },\n [NOT_LIVE]: { color: 'text.disabled', '& svg': { color: 'text.disabled' } },\n }}\n >\n <CountedIcon\n icon={<SlotIcon icon={icon} loading={loading} />}\n count={count}\n label={copy.badge}\n testId={`${testId}-badge`}\n />\n <Box component=\"span\" sx={{ display: 'flex', flexDirection: 'column', minWidth: 0 }}>\n <Typography component=\"span\" variant=\"body2\" sx={{ fontWeight: active ? 700 : 500 }}>\n {label}\n </Typography>\n {description ? (\n <Typography component=\"span\" variant=\"caption\" color=\"text.secondary\">\n {description}\n </Typography>\n ) : null}\n </Box>\n </Box>\n );\n}\n\n/** A heading between the rail's sections, in the sidebar's small-caps voice. */\nfunction RailHeading({ children }: { children: ReactNode }): React.JSX.Element {\n return (\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ px: 1.25, pt: 1.5, lineHeight: 1.6 }}>\n {children}\n </Typography>\n );\n}\n\n/**\n * A menu's groups, listed under its title — nothing folded away on a wide\n * screen. A `disabled` menu has no trigger here to refuse, so every row of it\n * is inert instead.\n */\nfunction RailMenu({\n menu,\n linkComponent,\n copy,\n testId,\n}: {\n menu: SectionNavMenu;\n linkComponent: ElementType | undefined;\n copy: SectionNavCopy;\n testId: string;\n}): React.JSX.Element {\n return (\n <Box component=\"section\" data-testid={testId} sx={{ display: 'flex', flexDirection: 'column', gap: 0.25 }}>\n <RailHeading>{menu.title}</RailHeading>\n {menu.groups.map((group) => (\n <Box key={group.id} sx={{ display: 'flex', flexDirection: 'column', gap: 0.25 }}>\n {group.title ? (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ px: 1.25, pt: 0.5 }}>\n {group.title}\n </Typography>\n ) : null}\n {group.entries.map((entry) => (\n <RailRow\n key={entry.id}\n label={entry.label}\n description={entry.description}\n icon={entry.icon}\n count={entry.badge}\n active={entry.active === true}\n copy={copy}\n testId={entry.dataTestId ?? `${testId}-entry-${entry.id}`}\n control={controlProps({\n href: entry.href,\n linkComponent,\n inert: menu.disabled === true || entry.disabled === true,\n onClick: () => entry.onSelect?.(),\n })}\n />\n ))}\n </Box>\n ))}\n </Box>\n );\n}\n\n/** The way back out of the section, at the top of the rail. */\nfunction RailBack({\n back,\n linkComponent,\n testId,\n}: {\n back: SectionNavBack;\n linkComponent: ElementType | undefined;\n testId: string;\n}): React.JSX.Element {\n const theme = useTheme();\n return (\n <Box\n {...controlProps({ href: back.href, linkComponent })}\n data-testid={testId}\n sx={{\n ...CONTROL_RESET,\n ...focusRing(theme),\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n px: 1.25,\n py: 0.75,\n mb: 0.5,\n borderRadius: 1,\n color: 'text.secondary',\n '&:hover': { bgcolor: 'action.hover', color: 'text.primary' },\n '& svg': { fontSize: rem(theme, 20) },\n }}\n >\n {back.icon}\n <Typography component=\"span\" variant=\"body2\" sx={{ fontWeight: 600 }}>\n {back.label}\n </Typography>\n </Box>\n );\n}\n\n/** A primary that ACTS, as one row: there is no sheet to list on a wide screen. */\nfunction RailAction({\n action,\n linkComponent,\n copy,\n testId,\n}: {\n action: SectionNavAction;\n linkComponent: ElementType | undefined;\n copy: SectionNavCopy;\n testId: string;\n}): React.JSX.Element {\n return (\n <RailRow\n label={action.label}\n icon={action.icon}\n count={undefined}\n active={false}\n copy={copy}\n testId={action.dataTestId ?? testId}\n loading={action.loading === true}\n control={controlProps({\n href: undefined,\n linkComponent,\n inert: action.disabled === true,\n busy: action.loading === true,\n onClick: action.onSelect,\n })}\n />\n );\n}\n\n/** A destination as a row: a link, or an action (a toggle when it carries `active`). */\nfunction RailDestination({\n destination,\n linkComponent,\n copy,\n testId,\n}: {\n destination: SectionNavDestination;\n linkComponent: ElementType | undefined;\n copy: SectionNavCopy;\n testId: string;\n}): React.JSX.Element {\n const { current, lit } = destinationState(destination);\n return (\n <RailRow\n label={destination.label}\n icon={destination.icon}\n count={destination.badge}\n active={lit}\n current={current}\n copy={copy}\n testId={testId}\n loading={destination.loading === true}\n control={destinationControl(destination, linkComponent, () => destination.onSelect?.())}\n />\n );\n}\n\n/**\n * The wide-screen layout: a vertical rail — the way back, the destinations,\n * then every menu's entries.\n *\n * It fills the column the host gives it and scrolls on its own, like the\n * sidebar it stands in for.\n */\nexport function SectionNavRail({\n label,\n destinations,\n primary,\n more,\n back,\n heading,\n linkComponent,\n copy,\n dataTestId,\n}: Required<Pick<SectionNavProps, 'label' | 'destinations' | 'copy' | 'dataTestId'>> &\n Pick<SectionNavProps, 'primary' | 'more' | 'back' | 'heading'> & {\n linkComponent: ElementType | undefined;\n }): React.JSX.Element {\n return (\n <Box\n component=\"nav\"\n aria-label={label}\n data-testid={dataTestId}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 0.25,\n height: '100%',\n overflowY: 'auto',\n px: 1,\n py: 1.5,\n bgcolor: 'background.paper',\n }}\n >\n {back ? <RailBack back={back} linkComponent={linkComponent} testId={`${dataTestId}-back`} /> : null}\n {heading ? <RailHeading>{heading}</RailHeading> : null}\n {destinations.map((destination) => (\n <RailDestination\n key={destination.id}\n destination={destination}\n linkComponent={linkComponent}\n copy={copy}\n testId={destination.dataTestId ?? `${dataTestId}-dest-${destination.id}`}\n />\n ))}\n {primary && !isMenu(primary) ? (\n <RailAction action={primary} linkComponent={linkComponent} copy={copy} testId={`${dataTestId}-primary`} />\n ) : null}\n {isMenu(primary) ? (\n <RailMenu menu={primary} linkComponent={linkComponent} copy={copy} testId={`${dataTestId}-primary`} />\n ) : null}\n {more ? <RailMenu menu={more} linkComponent={linkComponent} copy={copy} testId={`${dataTestId}-more`} /> : null}\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,OAAO,gBAAgB;AACvB,SAAS,gBAAgB;AAsFX,cAKR,YALQ;AAlDd,SAAS,QAAQ;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAWsB;AACpB,QAAM,QAAQ,SAAS;AACvB,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,gBAAc,UAAU,SAAS;AAAA,MACjC,aAAW,WAAW;AAAA,MACtB,eAAa;AAAA,MACb,IAAI;AAAA,QACF,GAAG;AAAA,QACH,GAAG,UAAU,KAAK;AAAA,QAClB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,OAAO;AAAA,QACP,WAAW,IAAI,OAAO,EAAE;AAAA,QACxB,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,cAAc;AAAA,QACd,WAAW;AAAA,QACX,OAAO,SAAS,iBAAiB;AAAA,QACjC,SAAS,SAAS,oBAAoB;AAAA,QACtC,WAAW,EAAE,SAAS,SAAS,oBAAoB,eAAe;AAAA,QAClE,SAAS,EAAE,OAAO,gBAAgB,UAAU,IAAI,OAAO,EAAE,EAAE;AAAA,QAC3D,CAAC,QAAQ,GAAG,EAAE,OAAO,iBAAiB,SAAS,EAAE,OAAO,gBAAgB,EAAE;AAAA,MAC5E;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,oBAAC,YAAS,MAAY,SAAkB;AAAA,YAC9C;AAAA,YACA,OAAO,KAAK;AAAA,YACZ,QAAQ,GAAG,MAAM;AAAA;AAAA,QACnB;AAAA,QACA,qBAAC,OAAI,WAAU,QAAO,IAAI,EAAE,SAAS,QAAQ,eAAe,UAAU,UAAU,EAAE,GAChF;AAAA,8BAAC,cAAW,WAAU,QAAO,SAAQ,SAAQ,IAAI,EAAE,YAAY,SAAS,MAAM,IAAI,GAC/E,iBACH;AAAA,UACC,cACC,oBAAC,cAAW,WAAU,QAAO,SAAQ,WAAU,OAAM,kBAClD,uBACH,IACE;AAAA,WACN;AAAA;AAAA;AAAA,EACF;AAEJ;AAGA,SAAS,YAAY,EAAE,SAAS,GAA+C;AAC7E,SACE,oBAAC,cAAW,SAAQ,YAAW,OAAM,kBAAiB,IAAI,EAAE,IAAI,MAAM,IAAI,KAAK,YAAY,IAAI,GAC5F,UACH;AAEJ;AAOA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKsB;AACpB,SACE,qBAAC,OAAI,WAAU,WAAU,eAAa,QAAQ,IAAI,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,KAAK,GACtG;AAAA,wBAAC,eAAa,eAAK,OAAM;AAAA,IACxB,KAAK,OAAO,IAAI,CAAC,UAChB,qBAAC,OAAmB,IAAI,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,KAAK,GAC3E;AAAA,YAAM,QACL,oBAAC,cAAW,SAAQ,WAAU,OAAM,kBAAiB,IAAI,EAAE,IAAI,MAAM,IAAI,IAAI,GAC1E,gBAAM,OACT,IACE;AAAA,MACH,MAAM,QAAQ,IAAI,CAAC,UAClB;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO,MAAM;AAAA,UACb,aAAa,MAAM;AAAA,UACnB,MAAM,MAAM;AAAA,UACZ,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM,WAAW;AAAA,UACzB;AAAA,UACA,QAAQ,MAAM,cAAc,GAAG,MAAM,UAAU,MAAM,EAAE;AAAA,UACvD,SAAS,aAAa;AAAA,YACpB,MAAM,MAAM;AAAA,YACZ;AAAA,YACA,OAAO,KAAK,aAAa,QAAQ,MAAM,aAAa;AAAA,YACpD,SAAS,MAAM,MAAM,WAAW;AAAA,UAClC,CAAC;AAAA;AAAA,QAbI,MAAM;AAAA,MAcb,CACD;AAAA,SAvBO,MAAM,EAwBhB,CACD;AAAA,KACH;AAEJ;AAGA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AACF,GAIsB;AACpB,QAAM,QAAQ,SAAS;AACvB,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG,aAAa,EAAE,MAAM,KAAK,MAAM,cAAc,CAAC;AAAA,MACnD,eAAa;AAAA,MACb,IAAI;AAAA,QACF,GAAG;AAAA,QACH,GAAG,UAAU,KAAK;AAAA,QAClB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,cAAc;AAAA,QACd,OAAO;AAAA,QACP,WAAW,EAAE,SAAS,gBAAgB,OAAO,eAAe;AAAA,QAC5D,SAAS,EAAE,UAAU,IAAI,OAAO,EAAE,EAAE;AAAA,MACtC;AAAA,MAEC;AAAA,aAAK;AAAA,QACN,oBAAC,cAAW,WAAU,QAAO,SAAQ,SAAQ,IAAI,EAAE,YAAY,IAAI,GAChE,eAAK,OACR;AAAA;AAAA;AAAA,EACF;AAEJ;AAGA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ,OAAO,cAAc;AAAA,MAC7B,SAAS,OAAO,YAAY;AAAA,MAC5B,SAAS,aAAa;AAAA,QACpB,MAAM;AAAA,QACN;AAAA,QACA,OAAO,OAAO,aAAa;AAAA,QAC3B,MAAM,OAAO,YAAY;AAAA,QACzB,SAAS,OAAO;AAAA,MAClB,CAAC;AAAA;AAAA,EACH;AAEJ;AAGA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKsB;AACpB,QAAM,EAAE,SAAS,IAAI,IAAI,iBAAiB,WAAW;AACrD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,YAAY;AAAA,MACnB,MAAM,YAAY;AAAA,MAClB,OAAO,YAAY;AAAA,MACnB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,YAAY,YAAY;AAAA,MACjC,SAAS,mBAAmB,aAAa,eAAe,MAAM,YAAY,WAAW,CAAC;AAAA;AAAA,EACxF;AAEJ;AASO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGwB;AACtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,cAAY;AAAA,MACZ,eAAa;AAAA,MACb,IAAI;AAAA,QACF,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,SAAS;AAAA,MACX;AAAA,MAEC;AAAA,eAAO,oBAAC,YAAS,MAAY,eAA8B,QAAQ,GAAG,UAAU,SAAS,IAAK;AAAA,QAC9F,UAAU,oBAAC,eAAa,mBAAQ,IAAiB;AAAA,QACjD,aAAa,IAAI,CAAC,gBACjB;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ,YAAY,cAAc,GAAG,UAAU,SAAS,YAAY,EAAE;AAAA;AAAA,UAJjE,YAAY;AAAA,QAKnB,CACD;AAAA,QACA,WAAW,CAAC,OAAO,OAAO,IACzB,oBAAC,cAAW,QAAQ,SAAS,eAA8B,MAAY,QAAQ,GAAG,UAAU,YAAY,IACtG;AAAA,QACH,OAAO,OAAO,IACb,oBAAC,YAAS,MAAM,SAAS,eAA8B,MAAY,QAAQ,GAAG,UAAU,YAAY,IAClG;AAAA,QACH,OAAO,oBAAC,YAAS,MAAM,MAAM,eAA8B,MAAY,QAAQ,GAAG,UAAU,SAAS,IAAK;AAAA;AAAA;AAAA,EAC7G;AAEJ;","names":[]}
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-6DPAWXZ3.js";
13
13
  import {
14
14
  useDensity
15
- } from "./chunk-SWDDXMV7.js";
15
+ } from "./chunk-SJ4IAZ3V.js";
16
16
  import {
17
17
  sxRem
18
18
  } from "./chunk-YKCAJ2TN.js";
@@ -196,4 +196,4 @@ export {
196
196
  useDataViewsLayout,
197
197
  DataViewsZoomSlider
198
198
  };
199
- //# sourceMappingURL=chunk-ZC3NEUNQ.js.map
199
+ //# sourceMappingURL=chunk-I2LF53MJ.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  DisplayTab,
6
6
  SortTab
7
- } from "./chunk-YMW2VYGU.js";
7
+ } from "./chunk-DLO5V4AV.js";
8
8
  import {
9
9
  ViewActions,
10
10
  ViewFooter,
@@ -265,4 +265,4 @@ function DataViewsDisplayPanel({
265
265
  export {
266
266
  DataViewsDisplayPanel
267
267
  };
268
- //# sourceMappingURL=chunk-ZFQVT6HZ.js.map
268
+ //# sourceMappingURL=chunk-II7Z5UB6.js.map
@@ -12,20 +12,20 @@ import {
12
12
  } from "./chunk-UWCMMK2T.js";
13
13
  import {
14
14
  ListCardGroup
15
- } from "./chunk-DFCX3FNB.js";
15
+ } from "./chunk-5ZBFADBL.js";
16
16
  import {
17
17
  DENSITY_BOARD_SCALE,
18
18
  DENSITY_ROW_PADDING,
19
19
  cardScaleForZoom,
20
20
  cardTargetWidthFor,
21
21
  useDataViewsLayout
22
- } from "./chunk-ZC3NEUNQ.js";
22
+ } from "./chunk-I2LF53MJ.js";
23
23
  import {
24
24
  useDataViewsCopy
25
25
  } from "./chunk-KHG57NAE.js";
26
26
  import {
27
27
  DataGrid
28
- } from "./chunk-ZQCZMSLO.js";
28
+ } from "./chunk-4B5WSVS7.js";
29
29
  import {
30
30
  default as default2
31
31
  } from "./chunk-6DPAWXZ3.js";
@@ -274,4 +274,4 @@ function GridMain(props) {
274
274
  export {
275
275
  GridMain
276
276
  };
277
- //# sourceMappingURL=chunk-K65NSHQI.js.map
277
+ //# sourceMappingURL=chunk-L3CQTVFU.js.map
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-MPYIEIBA.js";
14
14
  import {
15
15
  GridMain
16
- } from "./chunk-K65NSHQI.js";
16
+ } from "./chunk-L3CQTVFU.js";
17
17
  import {
18
18
  DataViewsPagination
19
19
  } from "./chunk-GPROISHG.js";
@@ -26,17 +26,17 @@ import {
26
26
  } from "./chunk-KX75HM5U.js";
27
27
  import {
28
28
  ScopeTabsSlot
29
- } from "./chunk-7FQF5BC2.js";
29
+ } from "./chunk-ESW4Z5I7.js";
30
30
  import {
31
31
  ShellToolbar
32
- } from "./chunk-FT7BNFGS.js";
32
+ } from "./chunk-YK4ZG5Y4.js";
33
33
  import {
34
34
  togglePillValues
35
35
  } from "./chunk-UWCMMK2T.js";
36
36
  import {
37
37
  DataViewsLayoutProvider,
38
38
  useDataViewsLayout
39
- } from "./chunk-ZC3NEUNQ.js";
39
+ } from "./chunk-I2LF53MJ.js";
40
40
  import {
41
41
  useDataViewsCopy
42
42
  } from "./chunk-KHG57NAE.js";
@@ -238,4 +238,4 @@ function GridShell(props) {
238
238
  export {
239
239
  GridShell
240
240
  };
241
- //# sourceMappingURL=chunk-EY4GPLMF.js.map
241
+ //# sourceMappingURL=chunk-MT7XMJUJ.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-MKJ4FMEF.js";
4
4
  import {
5
5
  DataViewsDisplayPanel
6
- } from "./chunk-ZFQVT6HZ.js";
6
+ } from "./chunk-II7Z5UB6.js";
7
7
  import {
8
8
  renderBulkActions
9
9
  } from "./chunk-UWCMMK2T.js";
@@ -136,4 +136,4 @@ function GridToolbar(props) {
136
136
  export {
137
137
  GridToolbar
138
138
  };
139
- //# sourceMappingURL=chunk-TELVW2OI.js.map
139
+ //# sourceMappingURL=chunk-MYCR7FMI.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-YKCAJ2TN.js";
8
8
 
9
9
  // src/tokens/density-overrides.navigation.ts
10
- import { tableCellClasses } from "@mui/material/TableCell/index.js";
10
+ import generateUtilityClass from "@mui/material/generateUtilityClass/index.js";
11
11
  var toggleButtonRootPadding = ({ theme }) => ({
12
12
  padding: rem(theme, 11),
13
13
  borderRadius: fieldRadius(theme)
@@ -46,9 +46,10 @@ function tabDensityOverrides() {
46
46
  }
47
47
  var isDefaultTableCellPadding = (padding) => padding === void 0 || padding === "normal";
48
48
  var tableCellRootPadding = ({ theme, ownerState }) => isDefaultTableCellPadding(ownerState?.padding) ? { padding: rem(theme, 16) } : {};
49
+ var TABLE_CELL_PADDING_CHECKBOX = generateUtilityClass("MuiTableCell", "paddingCheckbox");
49
50
  var tableCellSmallPadding = ({ theme, ownerState }) => {
50
51
  const style = {
51
- [`&.${tableCellClasses.paddingCheckbox}`]: { padding: rems(theme, 0, 12, 0, 16) }
52
+ [`&.${TABLE_CELL_PADDING_CHECKBOX}`]: { padding: rems(theme, 0, 12, 0, 16) }
52
53
  };
53
54
  if (isDefaultTableCellPadding(ownerState?.padding)) style.padding = rems(theme, 6, 16);
54
55
  return style;
@@ -129,4 +130,4 @@ export {
129
130
  sliderDensityOverrides,
130
131
  tabsIndicatorDensityOverrides
131
132
  };
132
- //# sourceMappingURL=chunk-56TGECKZ.js.map
133
+ //# sourceMappingURL=chunk-NP6SHLQ3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tokens/density-overrides.navigation.ts"],"sourcesContent":["import generateUtilityClass from '@mui/material/generateUtilityClass/index.js';\nimport type { Components, CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { fieldRadius } from './field-radius';\nimport { rem, rems } from './relative';\n\n/**\n * TOGGLEBUTTON / TAB / TABLECELL / PAGINATIONITEM / SLIDER GEOMETRY,\n * DENSITY-AWARE (FUT-2768).\n *\n * The remainder of the fixed-px geometry the density audit catalogued, none\n * of it hard-coded in `@12-apps/ui`'s own source. Verified against the\n * installed `@mui/material@6.5.0` source; each goes through the SAME\n * per-size/per-slot `overridesResolver` key MUI itself resolves\n * (`iconButtonDensityOverrides`/`chipDensityOverrides`'s own mechanism), so a\n * theme value composes with MUI's baked-in `variants` instead of replacing\n * them outright:\n *\n * - `ToggleButton`: `padding: 11/7/15` at medium(root)/small/large — same\n * `root`/`sizeSmall`/`sizeLarge` shape as `iconButtonDensityOverrides`. The\n * `root` slot ALSO carries `theme.fieldRadius` (FUT-2967, `field-radius.ts`)\n * — see the note at the end of this docblock.\n * - `Tab`: `minHeight: 48`, `padding: '12px 16px'` on the root (via `rems()`).\n * The icon+label combo (`minHeight: 72`, `paddingTop`/`Bottom: 9`) is a\n * SEPARATE MUI variant, exposed as the `labelIcon` key.\n * - `TableCell`: `padding: 16` on the root, `'6px 16px'` at small, nested\n * inside it `'0 12px 0 16px'` on the small+checkbox combo — all gated on\n * `ownerState.padding === 'normal'` (MUI's default): `checkbox`/`none` are\n * separate variants with their OWN unscaled padding (`'0 0 0 4px'`/`0`) an\n * unconditional rule clobbered at every size but small (FUT-2861 review —\n * the SAME Lesson-1 clobber the ellipsis fix above avoids, missed here).\n * `@12-apps/ui`'s own `Table` (FUT-2769) wins regardless (two classes deep\n * under its styled root); this reaches a BARE `<TableCell>`.\n * - `PaginationItem`: `minWidth/height: 32/26/40` at medium(root)/small/large.\n * The ellipsis shares the SAME slot and `minWidth` but has NO `height` of\n * its own (`'auto'`), gated on `ownerState.type` being neither\n * `'start-ellipsis'` nor `'end-ellipsis'` — skipping it would force a\n * height onto the ellipsis (Lesson 1).\n * - `Slider`: rail `height: 4/2` at `orientation=\"horizontal\"`/`size=\"small\"`\n * — gated on `ownerState.orientation` since the SAME key answers for either\n * axis (MUI sets `height` horizontal / `width` vertical, leaving the other\n * `'100%'`). Thumb `20×20`/`12×12` needs no gate. `@12-apps/ui`'s own\n * `Slider` already sets rail/thumb size through `rem()` and never forwards\n * `size` — a no-op THERE, reaches a BARE `<Slider>`. The thumb's ring and\n * the value-label offset were checked and left OUT — that story's own doc.\n *\n * `Avatar` is NOT in this file: `@12-apps/ui`'s own `Avatar` wraps `MuiAvatar`\n * in a `StyledAvatar` that ALREADY sets `width`/`height` through\n * `rem(theme, boxPx(size))` (`40` at `md`) — higher specificity than any\n * `MuiAvatar.styleOverrides.root`, dead code here, so it ships none.\n *\n * PADDING is geometry-neutral at `normal` — the same 11/7/15 literals\n * `ToggleButton.js` hard-codes; each slot a MODULE-LEVEL function, as above.\n *\n * `MuiToggleButton.root` is the one exception, and it is NOT neutral even at\n * `normal` (FUT-2967): `fieldRadiusOverrides` (`field-radius.ts`) and this\n * callback both style `MuiToggleButton.root` — the radius override's own\n * `{ borderRadius }` and this one's `{ padding }` — and a `styleOverrides`\n * slot two sources touch is replaced WHOLESALE by whichever is spread last\n * (`mergeMuiComponents`), so a theme built with density silently dropped the\n * field radius off a bare `<ToggleButton>` the moment density's `root`\n * callback (this one) was the later source. Fixed AT THE SOURCE rather than\n * in the merge: this MODULE-LEVEL callback (still a single, stable reference,\n * so two builds still compare equal) reads `theme.fieldRadius` itself and\n * returns the corner alongside the padding, so there is no second `root`\n * value for a later merge to lose. The consequence is deliberate and worth\n * naming: a host that applies ONLY `toggleButtonDensityOverrides()` to a\n * plain MUI theme now gets the FIELD radius (8px, `DEFAULT_FIELD_RADIUS`) on\n * `<ToggleButton>`, not MUI's own `shape.borderRadius` (4px) — matching the\n * fields beside it, not a MUI default nothing else in this package still\n * draws with.\n */\n\nconst toggleButtonRootPadding = ({ theme }: { theme: Theme }): CSSObject => ({\n padding: rem(theme, 11),\n borderRadius: fieldRadius(theme),\n});\nconst toggleButtonSmallPadding = ({ theme }: { theme: Theme }): CSSObject => ({ padding: rem(theme, 7) });\nconst toggleButtonLargePadding = ({ theme }: { theme: Theme }): CSSObject => ({ padding: rem(theme, 15) });\n\n/** `MuiToggleButton`'s own padding, at every size MUI has. */\nexport function toggleButtonDensityOverrides(): Components<Theme> {\n return {\n MuiToggleButton: {\n styleOverrides: {\n root: toggleButtonRootPadding,\n sizeSmall: toggleButtonSmallPadding,\n sizeLarge: toggleButtonLargePadding,\n },\n },\n };\n}\n\nconst tabRootGeometry = ({ theme }: { theme: Theme }): CSSObject => ({\n minHeight: rem(theme, 48),\n padding: rems(theme, 12, 16),\n});\nconst tabLabelIconGeometry = ({ theme }: { theme: Theme }): CSSObject => ({\n minHeight: rem(theme, 72),\n paddingTop: rem(theme, 9),\n paddingBottom: rem(theme, 9),\n});\n\n/** `MuiTab`'s own root height/padding, and the icon+label combo's taller box. */\nexport function tabDensityOverrides(): Components<Theme> {\n return {\n MuiTab: {\n styleOverrides: {\n root: tabRootGeometry,\n labelIcon: tabLabelIconGeometry,\n },\n },\n };\n}\n\ninterface TableCellOwnerStateForOverrides {\n padding?: 'normal' | 'checkbox' | 'none';\n}\ntype TableCellStyleFn = (props: { theme: Theme; ownerState?: TableCellOwnerStateForOverrides }) => CSSObject;\nconst isDefaultTableCellPadding = (padding: TableCellOwnerStateForOverrides['padding']): boolean =>\n padding === undefined || padding === 'normal';\n\nconst tableCellRootPadding: TableCellStyleFn = ({ theme, ownerState }) =>\n isDefaultTableCellPadding(ownerState?.padding) ? { padding: rem(theme, 16) } : {};\n\n/**\n * Built with `generateUtilityClass`, not imported from\n * `@mui/material/TableCell`'s own `tableCellClasses` — the same generated\n * string (`TableCell.js` builds `tableCellClasses` from this exact helper),\n * but without pulling `MuiTableCell` onto the critical path of every host\n * that imports `densityThemeOptions`, the same reason `density-overrides.ts`'s\n * `CHIP_LABEL` and `density-overrides.selection.ts`'s `SWITCH_*` constants\n * are built this way instead of read off the component's own classes module\n * (FUT-2993). It also honours a host's own `ClassNameGenerator.configure`,\n * which a hand-typed `.MuiTableCell-paddingCheckbox` string would not.\n */\nconst TABLE_CELL_PADDING_CHECKBOX = generateUtilityClass('MuiTableCell', 'paddingCheckbox');\n\nconst tableCellSmallPadding: TableCellStyleFn = ({ theme, ownerState }) => {\n const style: CSSObject = {\n [`&.${TABLE_CELL_PADDING_CHECKBOX}`]: { padding: rems(theme, 0, 12, 0, 16) },\n };\n if (isDefaultTableCellPadding(ownerState?.padding)) style.padding = rems(theme, 6, 16);\n return style;\n};\n\n/** Reaches a BARE `<TableCell>` only — module doc comment above. */\nexport function tableCellDensityOverrides(): Components<Theme> {\n return {\n MuiTableCell: {\n styleOverrides: {\n root: tableCellRootPadding,\n sizeSmall: tableCellSmallPadding,\n },\n },\n };\n}\n\n/** The `ownerState` field that tells the ellipsis item apart from a real button. */\ninterface PaginationItemOwnerStateForOverrides {\n type?: 'page' | 'first' | 'last' | 'start-ellipsis' | 'end-ellipsis' | 'previous' | 'next';\n}\ntype PaginationItemStyleFn = (props: {\n theme: Theme;\n ownerState?: PaginationItemOwnerStateForOverrides;\n}) => CSSObject;\n\nconst isPaginationEllipsis = (type: PaginationItemOwnerStateForOverrides['type']): boolean =>\n type === 'start-ellipsis' || type === 'end-ellipsis';\n\n/** `minWidth` always; `height` only off the ellipsis, which has none of its own. */\nfunction paginationItemGeometryAt(px: number): PaginationItemStyleFn {\n return ({ theme, ownerState }) => {\n const style: CSSObject = { minWidth: rem(theme, px) };\n if (!isPaginationEllipsis(ownerState?.type)) style.height = rem(theme, px);\n return style;\n };\n}\nconst paginationItemRootGeometry = paginationItemGeometryAt(32);\nconst paginationItemSmallGeometry = paginationItemGeometryAt(26);\nconst paginationItemLargeGeometry = paginationItemGeometryAt(40);\n\n/**\n * `MuiPaginationItem`'s own `minWidth`/`height`, at every size MUI has —\n * `height` skipped on the ellipsis item, which has none of its own (`auto`).\n */\nexport function paginationItemDensityOverrides(): Components<Theme> {\n return {\n MuiPaginationItem: {\n styleOverrides: {\n root: paginationItemRootGeometry,\n sizeSmall: paginationItemSmallGeometry,\n sizeLarge: paginationItemLargeGeometry,\n },\n },\n };\n}\n\n/** The `ownerState` field that tells which axis the rail's `height`/`4` reads as. */\ninterface SliderOwnerStateForOverrides {\n orientation?: 'horizontal' | 'vertical';\n}\ntype SliderStyleFn = (props: { theme: Theme; ownerState?: SliderOwnerStateForOverrides }) => CSSObject;\n\n/** The rail's `4`/`2` reads as `height` for a horizontal slider, `width` for a vertical one. */\nfunction sliderRailAxisAt(px: number): SliderStyleFn {\n return ({ theme, ownerState }) =>\n ownerState?.orientation === 'vertical' ? { width: rem(theme, px) } : { height: rem(theme, px) };\n}\nconst sliderRootGeometry = sliderRailAxisAt(4);\nconst sliderSmallGeometry = sliderRailAxisAt(2);\nconst sliderThumbGeometry = ({ theme }: { theme: Theme }): CSSObject => ({\n width: rem(theme, 20),\n height: rem(theme, 20),\n});\nconst sliderThumbSmallGeometry = ({ theme }: { theme: Theme }): CSSObject => ({\n width: rem(theme, 12),\n height: rem(theme, 12),\n});\n\n/** `MuiSlider`'s own rail thickness (root/sizeSmall) and thumb box (thumb/thumbSizeSmall). */\nexport function sliderDensityOverrides(): Components<Theme> {\n return {\n MuiSlider: {\n styleOverrides: {\n root: sliderRootGeometry,\n sizeSmall: sliderSmallGeometry,\n thumb: sliderThumbGeometry,\n thumbSizeSmall: sliderThumbSmallGeometry,\n },\n },\n };\n}\n\n/**\n * `MuiTabs`' own indicator thickness (`height: 2` horizontal, `width: 2`\n * vertical) — one short of `Tab` in the ticket's own literal list, added\n * after a FUT-2767-review pass over state/orientation-gated literals; same\n * orientation gate as the Slider rail. `@12-apps/ui`'s own `Tabs` draws its\n * OWN 3px indicator through `rem()` already, blocking THIS override there —\n * `tabDensityOverrides` reaches `Tab.root`'s `minHeight` instead (both\n * measured in `density-wrapper-reach.test.stories.tsx`).\n */\ninterface TabsIndicatorOwnerStateForOverrides {\n orientation?: 'horizontal' | 'vertical';\n}\ntype TabsIndicatorStyleFn = (props: {\n theme: Theme;\n ownerState?: TabsIndicatorOwnerStateForOverrides;\n}) => CSSObject;\n\nconst tabsIndicatorAxisAt: TabsIndicatorStyleFn = ({ theme, ownerState }) =>\n ownerState?.orientation === 'vertical' ? { width: rem(theme, 2) } : { height: rem(theme, 2) };\n\n/** `MuiTabs`' own indicator thickness, by orientation. */\nexport function tabsIndicatorDensityOverrides(): Components<Theme> {\n return {\n MuiTabs: {\n styleOverrides: {\n indicator: tabsIndicatorAxisAt,\n },\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-G3E66C6J.js";
4
4
  import {
5
5
  useDensity
6
- } from "./chunk-SWDDXMV7.js";
6
+ } from "./chunk-SJ4IAZ3V.js";
7
7
  import {
8
8
  rem,
9
9
  remPx
@@ -203,4 +203,4 @@ export {
203
203
  mapThemeToGridDensity,
204
204
  useDataGridModel
205
205
  };
206
- //# sourceMappingURL=chunk-WB6BTUXQ.js.map
206
+ //# sourceMappingURL=chunk-OWILUXWM.js.map
@@ -16,11 +16,20 @@ function barSlots(destinations, hasMore, hasPrimary) {
16
16
  if (hasPrimary) slots.splice(Math.floor(slots.length / 2), 0, { kind: "primary" });
17
17
  return slots;
18
18
  }
19
+ function isMenu(primary) {
20
+ return primary !== void 0 && "groups" in primary;
21
+ }
22
+ function destinationState(destination) {
23
+ const active = destination.active === true;
24
+ return { current: active && destination.href !== void 0, lit: active && destination.dimmed !== true };
25
+ }
19
26
 
20
27
  export {
21
28
  shownCount,
22
29
  menuCount,
23
30
  menuActive,
24
- barSlots
31
+ barSlots,
32
+ isMenu,
33
+ destinationState
25
34
  };
26
- //# sourceMappingURL=chunk-VHVI3D4R.js.map
35
+ //# sourceMappingURL=chunk-P3GBXE73.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/navigation/SectionNav/SectionNav.helpers.ts"],"sourcesContent":["import type { SectionNavAction, SectionNavDestination, SectionNavMenu } from './SectionNav.types';\n\n/** A count worth drawing: positive and finite. Zero and \"unknown\" draw nothing. */\nexport function shownCount(count: number | undefined): number | undefined {\n return count !== undefined && Number.isFinite(count) && count > 0 ? count : undefined;\n}\n\n/**\n * The \"more\" slot's badge: its entries' counts, rolled up.\n *\n * The same reason a folded sidebar parent shows its children's counts — the\n * sheet starts closed, so a count only visible once it is opened is one nobody\n * sees.\n */\nexport function menuCount(menu: SectionNavMenu | undefined): number | undefined {\n if (!menu) return undefined;\n const total = menu.groups\n .flatMap((group) => group.entries)\n .reduce((sum, entry) => sum + (shownCount(entry.badge) ?? 0), 0);\n return shownCount(total);\n}\n\n/** Is the viewer on one of this menu's entries? Then its slot reads as current. */\nexport function menuActive(menu: SectionNavMenu | undefined): boolean {\n return menu?.groups.some((group) => group.entries.some((entry) => entry.active === true)) ?? false;\n}\n\n/** What one bar slot holds, in left-to-right order. */\nexport type BarSlot =\n | { kind: 'destination'; destination: SectionNavDestination }\n | { kind: 'more' }\n | { kind: 'primary' };\n\n/**\n * The bar's slots: the destinations, then `more`, with `primary` in the MIDDLE.\n *\n * The middle is where a thumb rests and where a raised button reads as the\n * one thing this bar is for. With four slots it lands between the second and\n * the third; with an odd count it takes the lower middle, so the heavier side\n * is the right one, under the thumb of a right-handed phone.\n */\nexport function barSlots(\n destinations: readonly SectionNavDestination[],\n hasMore: boolean,\n hasPrimary: boolean,\n): BarSlot[] {\n const slots: BarSlot[] = destinations.map((destination) => ({ kind: 'destination', destination }));\n if (hasMore) slots.push({ kind: 'more' });\n if (hasPrimary) slots.splice(Math.floor(slots.length / 2), 0, { kind: 'primary' });\n return slots;\n}\n\n/** A primary that opens a sheet, as opposed to one that acts on tap. */\nexport function isMenu(primary: SectionNavMenu | SectionNavAction | undefined): primary is SectionNavMenu {\n return primary !== undefined && 'groups' in primary;\n}\n\n/**\n * How a destination reads. `current` is `aria-current=\"page\"` and belongs to a\n * LINK only — an action slot that is ON reports `aria-pressed` instead. `lit`\n * is the look, and a `dimmed` slot is never lit: it says \"not now\".\n */\nexport function destinationState(destination: SectionNavDestination): { current: boolean; lit: boolean } {\n const active = destination.active === true;\n return { current: active && destination.href !== undefined, lit: active && destination.dimmed !== true };\n}\n"],"mappings":";AAGO,SAAS,WAAW,OAA+C;AACxE,SAAO,UAAU,UAAa,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AAC9E;AASO,SAAS,UAAU,MAAsD;AAC9E,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QAAQ,KAAK,OAChB,QAAQ,CAAC,UAAU,MAAM,OAAO,EAChC,OAAO,CAAC,KAAK,UAAU,OAAO,WAAW,MAAM,KAAK,KAAK,IAAI,CAAC;AACjE,SAAO,WAAW,KAAK;AACzB;AAGO,SAAS,WAAW,MAA2C;AACpE,SAAO,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,QAAQ,KAAK,CAAC,UAAU,MAAM,WAAW,IAAI,CAAC,KAAK;AAC/F;AAgBO,SAAS,SACd,cACA,SACA,YACW;AACX,QAAM,QAAmB,aAAa,IAAI,CAAC,iBAAiB,EAAE,MAAM,eAAe,YAAY,EAAE;AACjG,MAAI,QAAS,OAAM,KAAK,EAAE,MAAM,OAAO,CAAC;AACxC,MAAI,WAAY,OAAM,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC,GAAG,GAAG,EAAE,MAAM,UAAU,CAAC;AACjF,SAAO;AACT;AAGO,SAAS,OAAO,SAAmF;AACxG,SAAO,YAAY,UAAa,YAAY;AAC9C;AAOO,SAAS,iBAAiB,aAAwE;AACvG,QAAM,SAAS,YAAY,WAAW;AACtC,SAAO,EAAE,SAAS,UAAU,YAAY,SAAS,QAAW,KAAK,UAAU,YAAY,WAAW,KAAK;AACzG;","names":[]}
@@ -26,7 +26,7 @@ import {
26
26
  } from "./chunk-L3MRRAZM.js";
27
27
  import {
28
28
  useDensity
29
- } from "./chunk-SWDDXMV7.js";
29
+ } from "./chunk-SJ4IAZ3V.js";
30
30
  import {
31
31
  rem
32
32
  } from "./chunk-YKCAJ2TN.js";
@@ -311,4 +311,4 @@ Table.displayName = "Table";
311
311
  export {
312
312
  Table
313
313
  };
314
- //# sourceMappingURL=chunk-WSBTMZJM.js.map
314
+ //# sourceMappingURL=chunk-P7YUOH2E.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  GridShell
3
- } from "./chunk-EY4GPLMF.js";
3
+ } from "./chunk-MT7XMJUJ.js";
4
4
  import {
5
5
  useDataViewsState
6
6
  } from "./chunk-4A535L3N.js";
@@ -27,4 +27,4 @@ function DataViewsGrid(props) {
27
27
  export {
28
28
  DataViewsGrid
29
29
  };
30
- //# sourceMappingURL=chunk-VOP2BXKL.js.map
30
+ //# sourceMappingURL=chunk-QWTPK3FT.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  SettingSwitchBlock,
6
6
  useSettingSwitchIds
7
- } from "./chunk-7VC6YBD3.js";
7
+ } from "./chunk-3U45DRNS.js";
8
8
  import {
9
9
  flatStyles,
10
10
  surfaceStyles,
@@ -44,4 +44,4 @@ SettingToggle.displayName = "SettingToggle";
44
44
  export {
45
45
  SettingToggle
46
46
  };
47
- //# sourceMappingURL=chunk-XQ6Y5Z7R.js.map
47
+ //# sourceMappingURL=chunk-RCJOTNIW.js.map
@@ -4,7 +4,7 @@ import {
4
4
  CountedIcon,
5
5
  controlProps,
6
6
  focusRing
7
- } from "./chunk-GLKQT2DS.js";
7
+ } from "./chunk-A436VORP.js";
8
8
  import {
9
9
  Drawer,
10
10
  DrawerContent,
@@ -26,13 +26,14 @@ function GridEntry({ entry, linkComponent, copy, testId, onDone }) {
26
26
  ...controlProps({
27
27
  href: entry.href,
28
28
  linkComponent,
29
+ inert: entry.disabled === true,
29
30
  onClick: () => {
30
31
  entry.onSelect?.();
31
32
  onDone();
32
33
  }
33
34
  }),
34
35
  "aria-current": entry.active ? "page" : void 0,
35
- "data-testid": `${testId}-entry-${entry.id}`,
36
+ "data-testid": entry.dataTestId ?? `${testId}-entry-${entry.id}`,
36
37
  sx: {
37
38
  ...CONTROL_RESET,
38
39
  ...focusRing(theme),
@@ -48,7 +49,8 @@ function GridEntry({ entry, linkComponent, copy, testId, onDone }) {
48
49
  textAlign: "center",
49
50
  bgcolor: entry.active ? "action.selected" : "action.hover",
50
51
  color: entry.active ? "primary.main" : "text.primary",
51
- "& svg": { color: "primary.main" }
52
+ "& svg": { color: "primary.main" },
53
+ "&:disabled": { color: "text.disabled", "& svg": { color: "text.disabled" } }
52
54
  },
53
55
  children: [
54
56
  /* @__PURE__ */ jsx(CountedIcon, { icon: entry.icon, count: entry.badge, label: copy.badge, testId: `${testId}-badge-${entry.id}` }),
@@ -65,13 +67,14 @@ function ListEntry({ entry, linkComponent, copy, testId, onDone }) {
65
67
  ...controlProps({
66
68
  href: entry.href,
67
69
  linkComponent,
70
+ inert: entry.disabled === true,
68
71
  onClick: () => {
69
72
  entry.onSelect?.();
70
73
  onDone();
71
74
  }
72
75
  }),
73
76
  "aria-current": entry.active ? "page" : void 0,
74
- "data-testid": `${testId}-entry-${entry.id}`,
77
+ "data-testid": entry.dataTestId ?? `${testId}-entry-${entry.id}`,
75
78
  sx: {
76
79
  ...CONTROL_RESET,
77
80
  ...focusRing(theme),
@@ -85,7 +88,8 @@ function ListEntry({ entry, linkComponent, copy, testId, onDone }) {
85
88
  borderRadius: 1.5,
86
89
  textAlign: "start",
87
90
  bgcolor: entry.active ? "action.selected" : "action.hover",
88
- "& svg": { color: "primary.main" }
91
+ "& svg": { color: "primary.main" },
92
+ "&:disabled": { color: "text.disabled", "& svg": { color: "text.disabled" } }
89
93
  },
90
94
  children: [
91
95
  /* @__PURE__ */ jsx(CountedIcon, { icon: entry.icon, count: entry.badge, label: copy.badge, testId: `${testId}-badge-${entry.id}` }),
@@ -171,4 +175,4 @@ function SectionNavSheet({
171
175
  export {
172
176
  SectionNavSheet
173
177
  };
174
- //# sourceMappingURL=chunk-32JMSHEA.js.map
178
+ //# sourceMappingURL=chunk-S4ZUZ6DS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/navigation/SectionNav/SectionNav.sheet.tsx"],"sourcesContent":["import Typography from '@mui/material/Typography/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type { ElementType } from 'react';\n\nimport { rem } from '../../../tokens/scales';\nimport { Drawer, DrawerContent, DrawerHeader } from '../../layout/Drawer';\n\nimport { Box, CONTROL_RESET, CountedIcon, controlProps, focusRing } from './SectionNav.parts';\nimport type { SectionNavEntry, SectionNavGroup, SectionNavMenu } from './SectionNav.types';\nimport type { SectionNavCopy } from '../../../copy';\n\ninterface EntryProps {\n entry: SectionNavEntry;\n linkComponent: ElementType | undefined;\n copy: SectionNavCopy;\n testId: string;\n onDone: () => void;\n}\n\n/** A tile in a `grid` group: icon over a short label. */\nfunction GridEntry({ entry, linkComponent, copy, testId, onDone }: EntryProps): React.JSX.Element {\n const theme = useTheme();\n return (\n <Box\n {...controlProps({\n href: entry.href,\n linkComponent,\n inert: entry.disabled === true,\n onClick: () => {\n entry.onSelect?.();\n onDone();\n },\n })}\n aria-current={entry.active ? 'page' : undefined}\n data-testid={entry.dataTestId ?? `${testId}-entry-${entry.id}`}\n sx={{\n ...CONTROL_RESET,\n ...focusRing(theme),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 0.75,\n minHeight: rem(theme, 76),\n px: 0.5,\n py: 1,\n borderRadius: 1.5,\n textAlign: 'center',\n bgcolor: entry.active ? 'action.selected' : 'action.hover',\n color: entry.active ? 'primary.main' : 'text.primary',\n '& svg': { color: 'primary.main' },\n '&:disabled': { color: 'text.disabled', '& svg': { color: 'text.disabled' } },\n }}\n >\n <CountedIcon icon={entry.icon} count={entry.badge} label={copy.badge} testId={`${testId}-badge-${entry.id}`} />\n <Typography component=\"span\" variant=\"caption\" sx={{ lineHeight: 1.2, fontWeight: entry.active ? 700 : 500 }}>\n {entry.label}\n </Typography>\n </Box>\n );\n}\n\n/** A row in a `list` group: icon, label, and the description under it. */\nfunction ListEntry({ entry, linkComponent, copy, testId, onDone }: EntryProps): React.JSX.Element {\n const theme = useTheme();\n return (\n <Box\n {...controlProps({\n href: entry.href,\n linkComponent,\n inert: entry.disabled === true,\n onClick: () => {\n entry.onSelect?.();\n onDone();\n },\n })}\n aria-current={entry.active ? 'page' : undefined}\n data-testid={entry.dataTestId ?? `${testId}-entry-${entry.id}`}\n sx={{\n ...CONTROL_RESET,\n ...focusRing(theme),\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n width: '100%',\n minHeight: rem(theme, 52),\n px: 1.5,\n py: 1,\n borderRadius: 1.5,\n textAlign: 'start',\n bgcolor: entry.active ? 'action.selected' : 'action.hover',\n '& svg': { color: 'primary.main' },\n '&:disabled': { color: 'text.disabled', '& svg': { color: 'text.disabled' } },\n }}\n >\n <CountedIcon icon={entry.icon} count={entry.badge} label={copy.badge} testId={`${testId}-badge-${entry.id}`} />\n <Box component=\"span\" sx={{ display: 'flex', flexDirection: 'column', minWidth: 0 }}>\n <Typography component=\"span\" variant=\"body2\" sx={{ fontWeight: 600 }}>\n {entry.label}\n </Typography>\n {entry.description ? (\n <Typography component=\"span\" variant=\"caption\" color=\"text.secondary\">\n {entry.description}\n </Typography>\n ) : null}\n </Box>\n </Box>\n );\n}\n\n/** One titled run of entries, as tiles or rows. */\nfunction SheetGroup({\n group,\n linkComponent,\n copy,\n testId,\n onDone,\n}: Omit<EntryProps, 'entry'> & { group: SectionNavGroup }): React.JSX.Element {\n const grid = group.layout === 'grid';\n const Entry = grid ? GridEntry : ListEntry;\n return (\n <Box component=\"section\" data-testid={`${testId}-group-${group.id}`} sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n {group.title ? (\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ lineHeight: 1.6 }}>\n {group.title}\n </Typography>\n ) : null}\n <Box\n sx={\n grid\n ? { display: 'grid', gridTemplateColumns: 'repeat(3, minmax(0, 1fr))', gap: 1 }\n : { display: 'flex', flexDirection: 'column', gap: 0.75 }\n }\n >\n {group.entries.map((entry) => (\n <Entry key={entry.id} entry={entry} linkComponent={linkComponent} copy={copy} testId={testId} onDone={onDone} />\n ))}\n </Box>\n </Box>\n );\n}\n\n/**\n * A menu opened from the bar: a bottom sheet over the page.\n *\n * Choosing an entry closes it — a link has somewhere to go and an action has\n * something to do, and neither wants the sheet still covering the screen.\n */\nexport function SectionNavSheet({\n menu,\n open,\n onClose,\n linkComponent,\n copy,\n testId,\n bottomOffset,\n}: {\n menu: SectionNavMenu;\n open: boolean;\n onClose: () => void;\n linkComponent: ElementType | undefined;\n copy: SectionNavCopy;\n testId: string;\n /** How far above the viewport's foot the sheet stops — the bar's own height, so the bar stays visible. */\n bottomOffset: string;\n}): React.JSX.Element {\n const theme = useTheme();\n return (\n <Drawer\n open={open}\n onClose={onClose}\n anchor=\"bottom\"\n height=\"auto\"\n dataTestId={testId}\n paperSx={{\n borderTopLeftRadius: rem(theme, Number(theme.shape.borderRadius) * 3),\n borderTopRightRadius: rem(theme, Number(theme.shape.borderRadius) * 3),\n maxHeight: `calc(85dvh - ${bottomOffset})`,\n bottom: bottomOffset,\n }}\n >\n {/* The library Drawer names nothing: the dialog role and its name live\n here, around everything the focus trap holds. */}\n <Box\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={menu.title}\n sx={{ display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0 }}\n >\n <DrawerHeader onClose={onClose} closeLabel={copy.close} dataTestId={`${testId}-header`}>\n {menu.title}\n </DrawerHeader>\n <DrawerContent>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {menu.groups.map((group) => (\n <SheetGroup\n key={group.id}\n group={group}\n linkComponent={linkComponent}\n copy={copy}\n testId={testId}\n onDone={onClose}\n />\n ))}\n </Box>\n </DrawerContent>\n </Box>\n </Drawer>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  chipDensityOverrides,
3
3
  iconButtonDensityOverrides
4
- } from "./chunk-XK77FY42.js";
4
+ } from "./chunk-25MSGLNU.js";
5
5
  import {
6
6
  checkboxRadioDensityOverrides,
7
7
  switchDensityOverrides
8
- } from "./chunk-4ELI2MM3.js";
8
+ } from "./chunk-GAXHYRX6.js";
9
9
  import {
10
10
  paginationItemDensityOverrides,
11
11
  sliderDensityOverrides,
@@ -13,7 +13,7 @@ import {
13
13
  tableCellDensityOverrides,
14
14
  tabsIndicatorDensityOverrides,
15
15
  toggleButtonDensityOverrides
16
- } from "./chunk-56TGECKZ.js";
16
+ } from "./chunk-NP6SHLQ3.js";
17
17
  import {
18
18
  fieldOverrides,
19
19
  mergeMuiComponents
@@ -66,4 +66,4 @@ export {
66
66
  useDensity,
67
67
  densityThemeOptions
68
68
  };
69
- //# sourceMappingURL=chunk-SWDDXMV7.js.map
69
+ //# sourceMappingURL=chunk-SJ4IAZ3V.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RAIL_GAP_PX
3
- } from "./chunk-DFCX3FNB.js";
3
+ } from "./chunk-5ZBFADBL.js";
4
4
  import {
5
5
  DescriptionItem
6
6
  } from "./chunk-DSHM7VN6.js";
@@ -226,4 +226,4 @@ export {
226
226
  ListCardActions,
227
227
  ListCardTail
228
228
  };
229
- //# sourceMappingURL=chunk-FHWBOOS3.js.map
229
+ //# sourceMappingURL=chunk-TH7RBREI.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  SectionNavBar
3
- } from "./chunk-43Q6CVPB.js";
3
+ } from "./chunk-VELGOFCL.js";
4
4
  import {
5
5
  SectionNavRail
6
- } from "./chunk-RX7J6VRI.js";
6
+ } from "./chunk-HKEBTPKY.js";
7
7
 
8
8
  // src/components/navigation/SectionNav/SectionNav.tsx
9
9
  import { jsx } from "react/jsx-runtime";
@@ -52,4 +52,4 @@ function SectionNav({
52
52
  export {
53
53
  SectionNav
54
54
  };
55
- //# sourceMappingURL=chunk-SA2ERYVV.js.map
55
+ //# sourceMappingURL=chunk-VAO63IIP.js.map