@12-apps/ui 6.74.2 → 6.76.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 (74) hide show
  1. package/dist/_internal/components/form/Textarea/Textarea.js +1 -1
  2. package/dist/_internal/components/form/index.js +1 -1
  3. package/dist/_internal/components/index.js +5 -5
  4. package/dist/_internal/components/layout/Drawer/Drawer.js +1 -1
  5. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.items.js +3 -3
  6. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +8 -8
  7. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.rail.js +4 -4
  8. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.styles.js +3 -1
  9. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +5 -5
  10. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +3 -3
  11. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionHeader.js +2 -2
  12. package/dist/_internal/components/layout/SettingsLayout/SettingsStatusMarker.js +2 -2
  13. package/dist/_internal/components/layout/index.js +1 -1
  14. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +3 -3
  15. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +4 -4
  16. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +2 -2
  17. package/dist/_internal/components/navigation/index.js +4 -4
  18. package/dist/{chunk-V5EWCJBT.js → chunk-4BLVVMY7.js} +3 -3
  19. package/dist/{chunk-OKYYHBGS.js → chunk-6KM3TL4Q.js} +11 -4
  20. package/dist/chunk-6KM3TL4Q.js.map +1 -0
  21. package/dist/{chunk-27F2VXS4.js → chunk-7IXXASQ6.js} +2 -2
  22. package/dist/{chunk-DBFRCTI5.js → chunk-7Y2VWMGS.js} +2 -2
  23. package/dist/{chunk-UALPKKAY.js → chunk-F742IMLQ.js} +5 -2
  24. package/dist/{chunk-UALPKKAY.js.map → chunk-F742IMLQ.js.map} +1 -1
  25. package/dist/{chunk-F3Q4CMRB.js → chunk-GBVNY2LG.js} +3 -3
  26. package/dist/{chunk-NM46HQSW.js → chunk-J26ZWYQI.js} +2 -2
  27. package/dist/{chunk-KKVM723A.js → chunk-LY5I3ZSV.js} +4 -4
  28. package/dist/{chunk-NYFNF7I5.js → chunk-NK4T624E.js} +3 -1
  29. package/dist/chunk-NK4T624E.js.map +1 -0
  30. package/dist/{chunk-URSYEHPU.js → chunk-PMRLFNBT.js} +2 -2
  31. package/dist/{chunk-X47MWURD.js → chunk-Q6MZHT2F.js} +10 -8
  32. package/dist/chunk-Q6MZHT2F.js.map +1 -0
  33. package/dist/{chunk-TNYKM4UU.js → chunk-SWQXAUUG.js} +55 -21
  34. package/dist/chunk-SWQXAUUG.js.map +1 -0
  35. package/dist/{chunk-6KEXHOIF.js → chunk-WOXNVM52.js} +2 -2
  36. package/dist/form/Textarea.js +1 -1
  37. package/dist/layout/Drawer.js +1 -1
  38. package/dist/layout/SettingsLayout.js +8 -8
  39. package/dist/navigation/SectionNav.js +4 -4
  40. package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
  41. package/dist/types/components/form/Textarea/Textarea.types.d.ts +4 -2
  42. package/dist/types/components/form/Textarea/Textarea.types.d.ts.map +1 -1
  43. package/dist/types/components/layout/Drawer/Drawer.d.ts.map +1 -1
  44. package/dist/types/components/layout/SettingsLayout/SettingsLayout.d.ts.map +1 -1
  45. package/dist/types/components/layout/SettingsLayout/SettingsLayout.rail.d.ts +6 -2
  46. package/dist/types/components/layout/SettingsLayout/SettingsLayout.rail.d.ts.map +1 -1
  47. package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts +2 -0
  48. package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts.map +1 -1
  49. package/dist/types/components/layout/SettingsLayout/SettingsLayout.types.d.ts +19 -0
  50. package/dist/types/components/layout/SettingsLayout/SettingsLayout.types.d.ts.map +1 -1
  51. package/dist/types/components/layout/SettingsLayout/index.d.ts +1 -1
  52. package/dist/types/components/layout/SettingsLayout/index.d.ts.map +1 -1
  53. package/package.json +1 -1
  54. package/src/components/form/Textarea/Textarea.tsx +14 -7
  55. package/src/components/form/Textarea/Textarea.types.ts +4 -2
  56. package/src/components/layout/Drawer/Drawer.tsx +4 -1
  57. package/src/components/layout/SettingsLayout/SettingsLayout.md +19 -0
  58. package/src/components/layout/SettingsLayout/SettingsLayout.rail.tsx +67 -23
  59. package/src/components/layout/SettingsLayout/SettingsLayout.styles.ts +3 -0
  60. package/src/components/layout/SettingsLayout/SettingsLayout.tsx +12 -0
  61. package/src/components/layout/SettingsLayout/SettingsLayout.types.ts +20 -0
  62. package/src/components/layout/SettingsLayout/index.ts +1 -0
  63. package/dist/chunk-NYFNF7I5.js.map +0 -1
  64. package/dist/chunk-OKYYHBGS.js.map +0 -1
  65. package/dist/chunk-TNYKM4UU.js.map +0 -1
  66. package/dist/chunk-X47MWURD.js.map +0 -1
  67. /package/dist/{chunk-V5EWCJBT.js.map → chunk-4BLVVMY7.js.map} +0 -0
  68. /package/dist/{chunk-27F2VXS4.js.map → chunk-7IXXASQ6.js.map} +0 -0
  69. /package/dist/{chunk-DBFRCTI5.js.map → chunk-7Y2VWMGS.js.map} +0 -0
  70. /package/dist/{chunk-F3Q4CMRB.js.map → chunk-GBVNY2LG.js.map} +0 -0
  71. /package/dist/{chunk-NM46HQSW.js.map → chunk-J26ZWYQI.js.map} +0 -0
  72. /package/dist/{chunk-KKVM723A.js.map → chunk-LY5I3ZSV.js.map} +0 -0
  73. /package/dist/{chunk-URSYEHPU.js.map → chunk-PMRLFNBT.js.map} +0 -0
  74. /package/dist/{chunk-6KEXHOIF.js.map → chunk-WOXNVM52.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Textarea
3
- } from "../../../../chunk-X47MWURD.js";
3
+ } from "../../../../chunk-Q6MZHT2F.js";
4
4
  import "../../../../chunk-IPC426NS.js";
5
5
  import "../../../../chunk-RGVNXES5.js";
6
6
  import "../../../../chunk-GDN2LUTZ.js";
@@ -2,7 +2,7 @@ import "../../../chunk-BOWS4U6W.js";
2
2
  import "../../../chunk-BH5GSBR3.js";
3
3
  import {
4
4
  Textarea
5
- } from "../../../chunk-X47MWURD.js";
5
+ } from "../../../chunk-Q6MZHT2F.js";
6
6
  import "../../../chunk-IPC426NS.js";
7
7
  import "../../../chunk-6I3TYKE2.js";
8
8
  import {
@@ -130,13 +130,13 @@ import "../../chunk-3AIRFAI3.js";
130
130
  import "../../chunk-R26KYJHK.js";
131
131
  import {
132
132
  SectionNav
133
- } from "../../chunk-27F2VXS4.js";
133
+ } from "../../chunk-7IXXASQ6.js";
134
134
  import "../../chunk-SNWCT6JN.js";
135
135
  import "../../chunk-ILJ3FXIC.js";
136
136
  import {
137
137
  sectionNavBarInset
138
- } from "../../chunk-URSYEHPU.js";
139
- import "../../chunk-NM46HQSW.js";
138
+ } from "../../chunk-PMRLFNBT.js";
139
+ import "../../chunk-J26ZWYQI.js";
140
140
  import {
141
141
  RaisedActionButton
142
142
  } from "../../chunk-UKUGSU3Y.js";
@@ -201,7 +201,7 @@ import {
201
201
  Drawer,
202
202
  DrawerContent,
203
203
  DrawerHeader
204
- } from "../../chunk-UALPKKAY.js";
204
+ } from "../../chunk-F742IMLQ.js";
205
205
  import "../../chunk-ENORM6S2.js";
206
206
  import {
207
207
  Resizable
@@ -219,7 +219,7 @@ import "../../chunk-QUWK7SYN.js";
219
219
  import "../../chunk-BH5GSBR3.js";
220
220
  import {
221
221
  Textarea
222
- } from "../../chunk-X47MWURD.js";
222
+ } from "../../chunk-Q6MZHT2F.js";
223
223
  import "../../chunk-IPC426NS.js";
224
224
  import "../../chunk-6I3TYKE2.js";
225
225
  import {
@@ -2,7 +2,7 @@ import {
2
2
  Drawer,
3
3
  DrawerContent,
4
4
  DrawerHeader
5
- } from "../../../../chunk-UALPKKAY.js";
5
+ } from "../../../../chunk-F742IMLQ.js";
6
6
  import "../../../../chunk-XJAD6E3V.js";
7
7
  import "../../../../chunk-F5H2ZXST.js";
8
8
  import "../../../../chunk-N3GAFIXG.js";
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  SettingsRailGroup,
4
4
  SettingsRailItem
5
- } from "../../../../chunk-V5EWCJBT.js";
6
- import "../../../../chunk-DBFRCTI5.js";
7
- import "../../../../chunk-NYFNF7I5.js";
5
+ } from "../../../../chunk-4BLVVMY7.js";
6
+ import "../../../../chunk-7Y2VWMGS.js";
7
+ import "../../../../chunk-NK4T624E.js";
8
8
  import "../../../../chunk-YKCAJ2TN.js";
9
9
  import "../../../../chunk-PZ5AY32C.js";
10
10
  export {
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  import {
3
3
  SettingsLayout
4
- } from "../../../../chunk-OKYYHBGS.js";
4
+ } from "../../../../chunk-6KM3TL4Q.js";
5
5
  import "../../../../chunk-BXC6GRLE.js";
6
- import "../../../../chunk-KKVM723A.js";
7
- import "../../../../chunk-F3Q4CMRB.js";
6
+ import "../../../../chunk-LY5I3ZSV.js";
7
+ import "../../../../chunk-GBVNY2LG.js";
8
8
  import "../../../../chunk-AJUSBPWG.js";
9
- import "../../../../chunk-TNYKM4UU.js";
10
- import "../../../../chunk-V5EWCJBT.js";
11
- import "../../../../chunk-DBFRCTI5.js";
12
- import "../../../../chunk-6KEXHOIF.js";
13
- import "../../../../chunk-NYFNF7I5.js";
9
+ import "../../../../chunk-SWQXAUUG.js";
10
+ import "../../../../chunk-4BLVVMY7.js";
11
+ import "../../../../chunk-7Y2VWMGS.js";
12
+ import "../../../../chunk-WOXNVM52.js";
13
+ import "../../../../chunk-NK4T624E.js";
14
14
  import "../../../../chunk-HPK33ACY.js";
15
15
  import "../../../../chunk-YKCAJ2TN.js";
16
16
  import "../../../../chunk-PZ5AY32C.js";
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import {
3
3
  SettingsRail
4
- } from "../../../../chunk-TNYKM4UU.js";
5
- import "../../../../chunk-V5EWCJBT.js";
6
- import "../../../../chunk-DBFRCTI5.js";
7
- import "../../../../chunk-NYFNF7I5.js";
4
+ } from "../../../../chunk-SWQXAUUG.js";
5
+ import "../../../../chunk-4BLVVMY7.js";
6
+ import "../../../../chunk-7Y2VWMGS.js";
7
+ import "../../../../chunk-NK4T624E.js";
8
8
  import "../../../../chunk-YKCAJ2TN.js";
9
9
  import "../../../../chunk-PZ5AY32C.js";
10
10
  export {
@@ -4,8 +4,9 @@ import {
4
4
  TOUCH_TARGET,
5
5
  atLeastRail,
6
6
  displayAcrossRail,
7
+ railCardWidth,
7
8
  railWidth
8
- } from "../../../../chunk-NYFNF7I5.js";
9
+ } from "../../../../chunk-NK4T624E.js";
9
10
  import "../../../../chunk-YKCAJ2TN.js";
10
11
  import "../../../../chunk-PZ5AY32C.js";
11
12
  export {
@@ -14,6 +15,7 @@ export {
14
15
  TOUCH_TARGET,
15
16
  atLeastRail,
16
17
  displayAcrossRail,
18
+ railCardWidth,
17
19
  railWidth
18
20
  };
19
21
  //# sourceMappingURL=SettingsLayout.styles.js.map
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import {
3
3
  SettingsPanel
4
- } from "../../../../chunk-KKVM723A.js";
5
- import "../../../../chunk-F3Q4CMRB.js";
4
+ } from "../../../../chunk-LY5I3ZSV.js";
5
+ import "../../../../chunk-GBVNY2LG.js";
6
6
  import "../../../../chunk-AJUSBPWG.js";
7
- import "../../../../chunk-DBFRCTI5.js";
8
- import "../../../../chunk-6KEXHOIF.js";
9
- import "../../../../chunk-NYFNF7I5.js";
7
+ import "../../../../chunk-7Y2VWMGS.js";
8
+ import "../../../../chunk-WOXNVM52.js";
9
+ import "../../../../chunk-NK4T624E.js";
10
10
  import "../../../../chunk-YKCAJ2TN.js";
11
11
  import "../../../../chunk-PZ5AY32C.js";
12
12
  export {
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import {
3
3
  SettingsSectionChips
4
- } from "../../../../chunk-F3Q4CMRB.js";
4
+ } from "../../../../chunk-GBVNY2LG.js";
5
5
  import "../../../../chunk-AJUSBPWG.js";
6
- import "../../../../chunk-DBFRCTI5.js";
7
- import "../../../../chunk-NYFNF7I5.js";
6
+ import "../../../../chunk-7Y2VWMGS.js";
7
+ import "../../../../chunk-NK4T624E.js";
8
8
  import "../../../../chunk-YKCAJ2TN.js";
9
9
  import "../../../../chunk-PZ5AY32C.js";
10
10
  export {
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import {
3
3
  SettingsSectionHeader
4
- } from "../../../../chunk-6KEXHOIF.js";
5
- import "../../../../chunk-NYFNF7I5.js";
4
+ } from "../../../../chunk-WOXNVM52.js";
5
+ import "../../../../chunk-NK4T624E.js";
6
6
  import "../../../../chunk-YKCAJ2TN.js";
7
7
  import "../../../../chunk-PZ5AY32C.js";
8
8
  export {
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import {
3
3
  SettingsStatusMarker
4
- } from "../../../../chunk-DBFRCTI5.js";
5
- import "../../../../chunk-NYFNF7I5.js";
4
+ } from "../../../../chunk-7Y2VWMGS.js";
5
+ import "../../../../chunk-NK4T624E.js";
6
6
  import "../../../../chunk-YKCAJ2TN.js";
7
7
  import "../../../../chunk-PZ5AY32C.js";
8
8
  export {
@@ -58,7 +58,7 @@ import {
58
58
  Drawer,
59
59
  DrawerContent,
60
60
  DrawerHeader
61
- } from "../../../chunk-UALPKKAY.js";
61
+ } from "../../../chunk-F742IMLQ.js";
62
62
  import "../../../chunk-ENORM6S2.js";
63
63
  import {
64
64
  Resizable
@@ -2,13 +2,13 @@ import {
2
2
  SectionNavBar,
3
3
  sectionNavBarInset,
4
4
  sectionNavSheetOffset
5
- } from "../../../../chunk-URSYEHPU.js";
6
- import "../../../../chunk-NM46HQSW.js";
5
+ } from "../../../../chunk-PMRLFNBT.js";
6
+ import "../../../../chunk-J26ZWYQI.js";
7
7
  import "../../../../chunk-UKUGSU3Y.js";
8
8
  import "../../../../chunk-24HHUCWB.js";
9
9
  import "../../../../chunk-YCCWJ5XQ.js";
10
10
  import "../../../../chunk-TMSWLFL4.js";
11
- import "../../../../chunk-UALPKKAY.js";
11
+ import "../../../../chunk-F742IMLQ.js";
12
12
  import "../../../../chunk-PUFA7FQ7.js";
13
13
  import "../../../../chunk-5AK2EZG5.js";
14
14
  import "../../../../chunk-N5PVD4J5.js";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  SectionNav
3
- } from "../../../../chunk-27F2VXS4.js";
3
+ } from "../../../../chunk-7IXXASQ6.js";
4
4
  import "../../../../chunk-SNWCT6JN.js";
5
5
  import "../../../../chunk-ILJ3FXIC.js";
6
- import "../../../../chunk-URSYEHPU.js";
7
- import "../../../../chunk-NM46HQSW.js";
6
+ import "../../../../chunk-PMRLFNBT.js";
7
+ import "../../../../chunk-J26ZWYQI.js";
8
8
  import "../../../../chunk-UKUGSU3Y.js";
9
9
  import "../../../../chunk-24HHUCWB.js";
10
10
  import "../../../../chunk-YCCWJ5XQ.js";
11
11
  import "../../../../chunk-TMSWLFL4.js";
12
- import "../../../../chunk-UALPKKAY.js";
12
+ import "../../../../chunk-F742IMLQ.js";
13
13
  import "../../../../chunk-PUFA7FQ7.js";
14
14
  import "../../../../chunk-5AK2EZG5.js";
15
15
  import "../../../../chunk-N5PVD4J5.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  SectionNavSheet
3
- } from "../../../../chunk-NM46HQSW.js";
3
+ } from "../../../../chunk-J26ZWYQI.js";
4
4
  import "../../../../chunk-24HHUCWB.js";
5
5
  import "../../../../chunk-YCCWJ5XQ.js";
6
6
  import "../../../../chunk-TMSWLFL4.js";
7
- import "../../../../chunk-UALPKKAY.js";
7
+ import "../../../../chunk-F742IMLQ.js";
8
8
  import "../../../../chunk-PUFA7FQ7.js";
9
9
  import "../../../../chunk-5AK2EZG5.js";
10
10
  import "../../../../chunk-N5PVD4J5.js";
@@ -54,20 +54,20 @@ import "../../../chunk-3AIRFAI3.js";
54
54
  import "../../../chunk-R26KYJHK.js";
55
55
  import {
56
56
  SectionNav
57
- } from "../../../chunk-27F2VXS4.js";
57
+ } from "../../../chunk-7IXXASQ6.js";
58
58
  import "../../../chunk-SNWCT6JN.js";
59
59
  import "../../../chunk-ILJ3FXIC.js";
60
60
  import {
61
61
  sectionNavBarInset
62
- } from "../../../chunk-URSYEHPU.js";
63
- import "../../../chunk-NM46HQSW.js";
62
+ } from "../../../chunk-PMRLFNBT.js";
63
+ import "../../../chunk-J26ZWYQI.js";
64
64
  import {
65
65
  RaisedActionButton
66
66
  } from "../../../chunk-UKUGSU3Y.js";
67
67
  import "../../../chunk-24HHUCWB.js";
68
68
  import "../../../chunk-YCCWJ5XQ.js";
69
69
  import "../../../chunk-TMSWLFL4.js";
70
- import "../../../chunk-UALPKKAY.js";
70
+ import "../../../chunk-F742IMLQ.js";
71
71
  import "../../../chunk-7K23NEZO.js";
72
72
  import "../../../chunk-5MMAV7XK.js";
73
73
  import "../../../chunk-3ROCD7XF.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  SettingsStatusMarker
3
- } from "./chunk-DBFRCTI5.js";
3
+ } from "./chunk-7Y2VWMGS.js";
4
4
  import {
5
5
  TOUCH_TARGET,
6
6
  atLeastRail
7
- } from "./chunk-NYFNF7I5.js";
7
+ } from "./chunk-NK4T624E.js";
8
8
  import {
9
9
  rem
10
10
  } from "./chunk-YKCAJ2TN.js";
@@ -169,4 +169,4 @@ export {
169
169
  SettingsRailItem,
170
170
  SettingsRailGroup
171
171
  };
172
- //# sourceMappingURL=chunk-V5EWCJBT.js.map
172
+ //# sourceMappingURL=chunk-4BLVVMY7.js.map
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-BXC6GRLE.js";
5
5
  import {
6
6
  SettingsPanel
7
- } from "./chunk-KKVM723A.js";
7
+ } from "./chunk-LY5I3ZSV.js";
8
8
  import {
9
9
  SettingsRail
10
- } from "./chunk-TNYKM4UU.js";
10
+ } from "./chunk-SWQXAUUG.js";
11
11
  import {
12
12
  atLeastRail
13
- } from "./chunk-NYFNF7I5.js";
13
+ } from "./chunk-NK4T624E.js";
14
14
  import {
15
15
  withDefaults
16
16
  } from "./chunk-HPK33ACY.js";
@@ -29,6 +29,12 @@ var DEFAULTS = {
29
29
  atIndex: false,
30
30
  backLabel: "Back"
31
31
  };
32
+ function railLookOf({
33
+ searchable = true,
34
+ railVariant = "divided"
35
+ }) {
36
+ return { searchable, railVariant };
37
+ }
32
38
  function shellSx(breakpoint, fillHeight) {
33
39
  return (theme) => ({
34
40
  display: "flex",
@@ -101,6 +107,7 @@ var SettingsLayout = (props) => {
101
107
  onNavigate: () => setNavOpen(false),
102
108
  testIdPrefix,
103
109
  variant: navVariant,
110
+ ...railLookOf(props),
104
111
  breakpoint: railBreakpoint,
105
112
  atIndex,
106
113
  fillHeight
@@ -135,4 +142,4 @@ SettingsLayout.displayName = "SettingsLayout";
135
142
  export {
136
143
  SettingsLayout
137
144
  };
138
- //# sourceMappingURL=chunk-OKYYHBGS.js.map
145
+ //# sourceMappingURL=chunk-6KM3TL4Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsLayout.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport type { SxProps, Theme } from '@mui/material/styles/index.js';\nimport React, { useMemo, useState } from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\nimport { activeItemLabel, filterGroups } from './SettingsLayout.filters';\nimport { SettingsRail } from './SettingsLayout.rail';\nimport { atLeastRail } from './SettingsLayout.styles';\nimport { SettingsPanel } from './SettingsPanel';\nimport type { SettingsLayoutProps } from './SettingsLayout.types';\n\n/**\n * The props with every default already applied.\n *\n * A table through `withDefaults` rather than a `= default` per destructured\n * prop: each of those is a branch, and seven of them put the component over the\n * complexity bar before it renders anything. The single cast is what buys the\n * body non-optional values — without it every use site would restate the\n * default as a `??`, which is the same default written twice and free to drift.\n */\ntype ResolvedProps = SettingsLayoutProps &\n Required<\n Pick<\n SettingsLayoutProps,\n | 'searchPlaceholder'\n | 'defaultQuery'\n | 'emptySearchLabel'\n | 'testIdPrefix'\n | 'railBreakpoint'\n | 'navVariant'\n | 'atIndex'\n | 'backLabel'\n >\n >;\n\nconst DEFAULTS = {\n searchPlaceholder: 'Search settings',\n defaultQuery: '',\n emptySearchLabel: 'No settings match your search.',\n testIdPrefix: 'settings',\n railBreakpoint: 'md',\n navVariant: 'switcher',\n atIndex: false,\n backLabel: 'Back',\n} satisfies Partial<SettingsLayoutProps>;\n\n/**\n * How the rail looks: its search field, and its frame from the breakpoint up.\n * Both default to the shape every consumer had before they existed.\n */\nfunction railLookOf({\n searchable = true,\n railVariant = 'divided',\n}: SettingsLayoutProps): Required<Pick<SettingsLayoutProps, 'searchable' | 'railVariant'>> {\n return { searchable, railVariant };\n}\n\n/** Stacked below the rail's breakpoint, two columns at and above it. */\nfunction shellSx(breakpoint: SettingsLayoutProps['railBreakpoint'], fillHeight: boolean): SxProps<Theme> {\n return (theme: Theme) => ({\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'stretch',\n gap: 1.5,\n width: '100%',\n minWidth: 0,\n // Only ever at the wide shape. Narrow, the rail is a disclosure or the page\n // itself, and two independent scrollbars on a phone is a trap rather than a\n // convenience.\n [atLeastRail(theme, breakpoint ?? 'md')]: {\n flexDirection: 'row',\n gap: 3,\n ...(fillHeight ? { height: '100%', minHeight: 0 } : {}),\n },\n });\n}\n\n/**\n * A reusable, agnostic Facebook-style settings shell: a searchable left rail of\n * grouped categories/subcategories and a central panel that renders the selected\n * configuration screen (`children`). Navigation is data-driven via `groups`; the\n * host owns routing (pass `linkComponent` + item `href`, or handle `onSelectItem`).\n *\n * ## Two narrow-width shapes\n *\n * `navVariant=\"switcher\"` (the default) folds the rail into a disclosure above\n * the panel. `navVariant=\"drilldown\"` gives the phone shape instead: at the\n * area's index the LIST is the page, and inside a section the panel is the page\n * with a back link and a scrollable strip of sibling sections above it.\n *\n * ## Why the width decision is CSS and not JavaScript\n *\n * Every part that changes between the two shapes does it through a `display`\n * pair keyed on `railBreakpoint`. Nothing here asks a media query in JS and\n * renders one branch.\n *\n * That is not a performance preference. A layout that RENDERS one navigation and\n * not the other can offer the narrow width less than the wide one, and no test\n * or review catches it — the missing control simply is not in the tree to be\n * asserted about. With both forms always mounted, \"the narrow width reaches\n * everything the wide one does\" holds by construction, and an audit that counts\n * controls per width gets the same answer at both.\n */\nexport const SettingsLayout: React.FC<SettingsLayoutProps> = (props) => {\n const {\n title,\n groups,\n activeItemId,\n onSelectItem,\n searchPlaceholder,\n defaultQuery,\n emptySearchLabel,\n emptySearchAction,\n linkComponent,\n children,\n testIdPrefix,\n railBreakpoint,\n fillHeight = false,\n navVariant,\n atIndex,\n indexHref,\n backLabel,\n sectionChips,\n } = withDefaults(props, DEFAULTS) as ResolvedProps;\n const [query, setQuery] = useState(defaultQuery);\n const [navOpen, setNavOpen] = useState(false);\n const filteredGroups = useMemo(() => filterGroups(groups, query), [groups, query]);\n const activeLabel = useMemo(() => activeItemLabel(groups, activeItemId), [groups, activeItemId]);\n\n const drilldown = navVariant === 'drilldown';\n const ariaLabel = typeof title === 'string' ? title : 'Settings';\n\n return (\n <Box\n data-testid={testIdPrefix}\n data-nav-variant={navVariant}\n data-at-index={atIndex ? 'true' : 'false'}\n sx={shellSx(railBreakpoint, fillHeight)}\n >\n <SettingsRail\n title={title}\n activeLabel={activeLabel}\n navOpen={navOpen}\n onToggleNav={() => setNavOpen((open) => !open)}\n query={query}\n onQueryChange={setQuery}\n searchPlaceholder={searchPlaceholder}\n emptySearchLabel={emptySearchLabel}\n emptySearchAction={emptySearchAction}\n filteredGroups={filteredGroups}\n activeItemId={activeItemId}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n onNavigate={() => setNavOpen(false)}\n testIdPrefix={testIdPrefix}\n variant={navVariant}\n {...railLookOf(props)}\n breakpoint={railBreakpoint}\n atIndex={atIndex}\n fillHeight={fillHeight}\n />\n\n <SettingsPanel\n inSection={drilldown && !atIndex}\n hideOnNarrow={drilldown && atIndex}\n breakpoint={railBreakpoint}\n indexHref={indexHref}\n sectionTitle={props.sectionTitle}\n sectionDescription={props.sectionDescription}\n backLabel={backLabel}\n ariaLabel={ariaLabel}\n sectionChips={sectionChips}\n activeItemId={activeItemId}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n testIdPrefix={testIdPrefix}\n fillHeight={fillHeight}\n >\n {children}\n </SettingsPanel>\n </Box>\n );\n};\n\nSettingsLayout.displayName = 'SettingsLayout';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAEA,OAAO,SAAS;AAEhB,SAAgB,SAAS,gBAAgB;AAmIrC,SAME,KANF;AAlGJ,IAAM,WAAW;AAAA,EACf,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,WAAW;AACb;AAMA,SAAS,WAAW;AAAA,EAClB,aAAa;AAAA,EACb,cAAc;AAChB,GAA2F;AACzF,SAAO,EAAE,YAAY,YAAY;AACnC;AAGA,SAAS,QAAQ,YAAmD,YAAqC;AACvG,SAAO,CAAC,WAAkB;AAAA,IACxB,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA;AAAA;AAAA;AAAA,IAIV,CAAC,YAAY,OAAO,cAAc,IAAI,CAAC,GAAG;AAAA,MACxC,eAAe;AAAA,MACf,KAAK;AAAA,MACL,GAAI,aAAa,EAAE,QAAQ,QAAQ,WAAW,EAAE,IAAI,CAAC;AAAA,IACvD;AAAA,EACF;AACF;AA4BO,IAAM,iBAAgD,CAAC,UAAU;AACtE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa,OAAO,QAAQ;AAChC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,iBAAiB,QAAQ,MAAM,aAAa,QAAQ,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC;AACjF,QAAM,cAAc,QAAQ,MAAM,gBAAgB,QAAQ,YAAY,GAAG,CAAC,QAAQ,YAAY,CAAC;AAE/F,QAAM,YAAY,eAAe;AACjC,QAAM,YAAY,OAAO,UAAU,WAAW,QAAQ;AAEtD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa;AAAA,MACb,oBAAkB;AAAA,MAClB,iBAAe,UAAU,SAAS;AAAA,MAClC,IAAI,QAAQ,gBAAgB,UAAU;AAAA,MAEtC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,aAAa,MAAM,WAAW,CAAC,SAAS,CAAC,IAAI;AAAA,YAC7C;AAAA,YACA,eAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY,MAAM,WAAW,KAAK;AAAA,YAClC;AAAA,YACA,SAAS;AAAA,YACR,GAAG,WAAW,KAAK;AAAA,YACpB,YAAY;AAAA,YACZ;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,aAAa,CAAC;AAAA,YACzB,cAAc,aAAa;AAAA,YAC3B,YAAY;AAAA,YACZ;AAAA,YACA,cAAc,MAAM;AAAA,YACpB,oBAAoB,MAAM;AAAA,YAC1B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YAEC;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,eAAe,cAAc;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-SNWCT6JN.js";
4
4
  import {
5
5
  SectionNavBar
6
- } from "./chunk-URSYEHPU.js";
6
+ } from "./chunk-PMRLFNBT.js";
7
7
 
8
8
  // src/components/navigation/SectionNav/SectionNav.tsx
9
9
  import { jsx } from "react/jsx-runtime";
@@ -55,4 +55,4 @@ function SectionNav({
55
55
  export {
56
56
  SectionNav
57
57
  };
58
- //# sourceMappingURL=chunk-27F2VXS4.js.map
58
+ //# sourceMappingURL=chunk-7IXXASQ6.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SR_ONLY_SX,
3
3
  STATUS_COLOR
4
- } from "./chunk-NYFNF7I5.js";
4
+ } from "./chunk-NK4T624E.js";
5
5
  import {
6
6
  sxRem
7
7
  } from "./chunk-YKCAJ2TN.js";
@@ -62,4 +62,4 @@ SettingsStatusMarker.displayName = "SettingsStatusMarker";
62
62
  export {
63
63
  SettingsStatusMarker
64
64
  };
65
- //# sourceMappingURL=chunk-DBFRCTI5.js.map
65
+ //# sourceMappingURL=chunk-7Y2VWMGS.js.map
@@ -122,7 +122,10 @@ var DrawerHeader = ({
122
122
  sx: {
123
123
  display: "flex",
124
124
  alignItems: "center",
125
- padding: theme.spacing(2),
125
+ // 12px above and below: the close button is 40px tall, so the header lands on
126
+ // its own 64px minimum instead of 72 — the height of the page header beside
127
+ // a docked drawer (FUT-3476).
128
+ padding: theme.spacing(1.5, 2),
126
129
  borderBottom: `1px solid ${theme.palette.divider}`,
127
130
  minHeight: rem(theme, 64),
128
131
  justifyContent: "space-between"
@@ -164,4 +167,4 @@ export {
164
167
  DrawerHeader,
165
168
  DrawerContent
166
169
  };
167
- //# sourceMappingURL=chunk-UALPKKAY.js.map
170
+ //# sourceMappingURL=chunk-F742IMLQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/layout/Drawer/Drawer.tsx"],"sourcesContent":["import Close from '@mui/icons-material/Close';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport MuiDrawer from '@mui/material/Drawer/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { DrawerContentProps,DrawerHeaderProps, DrawerProps } from './Drawer.types';\nimport { shadowInk } from '../../../tokens/ink';\nimport { rem, rems } from '../../../tokens/relative';\n\ntype DrawerAnchor = 'left' | 'right' | 'top' | 'bottom';\n\n/**\n * A `width`/`height` prop as CSS. `sx` reads a number of 1 or less as a\n * fraction of the parent, and that stays so; any other number is design px,\n * through the type scale; a string is as given.\n */\nconst drawerLength = (theme: Theme, value: number | string | undefined): string | undefined => {\n if (typeof value !== 'number') return value;\n return value <= 1 && value !== 0 ? `${value * 100}%` : rem(theme, value);\n};\n\n// `variant` doubles as a position preset, but an explicit `anchor` always wins.\nconst resolveAnchor = (\n anchor: DrawerProps['anchor'],\n variant: DrawerProps['variant'],\n): DrawerAnchor => {\n if (anchor) return anchor;\n\n // Map variant to anchor position\n switch (variant) {\n case 'right':\n return 'right';\n case 'top':\n return 'top';\n case 'bottom':\n return 'bottom';\n case 'glass':\n return 'right';\n case 'left':\n default:\n return 'left';\n }\n};\n\nconst buildDrawerStyles = (\n theme: Theme,\n anchor: DrawerAnchor,\n variant: DrawerProps['variant'],\n width: DrawerProps['width'],\n height: DrawerProps['height'],\n // Merged LAST into the surface's own rules, so a caller can shape the sliding\n // surface itself (rounded corners on a bottom sheet, a docked panel's offset)\n // without reaching for the MUI paper class from outside. Undefined by default:\n // omit it and the drawer styles exactly as it always has.\n paperSx?: DrawerProps['paperSx'],\n) => {\n const widthCss = drawerLength(theme, width);\n const heightCss = drawerLength(theme, height);\n const baseStyles = {\n width: ['left', 'right'].includes(anchor) ? widthCss : '100%',\n height: ['top', 'bottom'].includes(anchor) ? heightCss : '100%',\n flexShrink: 0,\n };\n\n if (variant === 'glass') {\n return {\n ...baseStyles,\n '& .MuiDrawer-paper': {\n width: widthCss,\n height: '100%',\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: `blur(${rem(theme, 20)})`,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n boxShadow: `${rems(theme, 0, 8, 32)} ${shadowInk(theme, 0.1)}`,\n ...paperSx,\n },\n };\n }\n\n return {\n ...baseStyles,\n '& .MuiDrawer-paper': {\n width: ['left', 'right'].includes(anchor) ? widthCss : '100%',\n height: ['top', 'bottom'].includes(anchor) ? heightCss : '100%',\n boxSizing: 'border-box',\n ...paperSx,\n },\n };\n};\n\nexport const Drawer: React.FC<DrawerProps> = ({\n children,\n open,\n onClose,\n variant = 'left',\n anchor,\n width,\n height = '100%',\n persistent = false,\n backdrop = true,\n hideBackdrop = false,\n keepMounted = false,\n paperSx,\n className,\n dataTestId,\n ...rest\n}) => {\n const theme = useTheme();\n const drawerAnchor = resolveAnchor(anchor, variant);\n\n return (\n <MuiDrawer\n anchor={drawerAnchor}\n open={open}\n onClose={onClose}\n variant={persistent ? 'persistent' : 'temporary'}\n ModalProps={{\n keepMounted,\n hideBackdrop,\n BackdropProps: {\n invisible: !backdrop,\n },\n }}\n sx={buildDrawerStyles(theme, drawerAnchor, variant, width ?? 280, height, paperSx)}\n className={className}\n data-testid={dataTestId || 'drawer'}\n {...rest}\n >\n {children}\n </MuiDrawer>\n );\n};\n\nexport const DrawerHeader: React.FC<DrawerHeaderProps> = ({\n children,\n onClose,\n showCloseButton = true,\n closeLabel,\n dataTestId,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId || 'drawer-header'}\n sx={{\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n borderBottom: `1px solid ${theme.palette.divider}`,\n minHeight: rem(theme, 64),\n justifyContent: 'space-between',\n }}\n >\n <Box sx={{ flex: 1 }} data-testid={dataTestId ? `${dataTestId}-title` : 'drawer-title'}>\n {typeof children === 'string' ? <Typography variant=\"h6\">{children}</Typography> : children}\n </Box>\n {showCloseButton && onClose && (\n <IconButton\n onClick={onClose}\n edge=\"end\"\n aria-label={closeLabel ?? 'Close drawer'}\n data-testid={dataTestId ? `${dataTestId}-close` : 'drawer-close'}\n >\n <Close />\n </IconButton>\n )}\n </Box>\n );\n};\n\nexport const DrawerContent: React.FC<DrawerContentProps> = ({ children, padding = true, dataTestId }) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId || 'drawer-content'}\n sx={{\n flex: 1,\n overflow: 'auto',\n padding: padding ? theme.spacing(2) : 0,\n }}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/components/layout/Drawer/Drawer.tsx"],"sourcesContent":["import Close from '@mui/icons-material/Close';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport MuiDrawer from '@mui/material/Drawer/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { DrawerContentProps,DrawerHeaderProps, DrawerProps } from './Drawer.types';\nimport { shadowInk } from '../../../tokens/ink';\nimport { rem, rems } from '../../../tokens/relative';\n\ntype DrawerAnchor = 'left' | 'right' | 'top' | 'bottom';\n\n/**\n * A `width`/`height` prop as CSS. `sx` reads a number of 1 or less as a\n * fraction of the parent, and that stays so; any other number is design px,\n * through the type scale; a string is as given.\n */\nconst drawerLength = (theme: Theme, value: number | string | undefined): string | undefined => {\n if (typeof value !== 'number') return value;\n return value <= 1 && value !== 0 ? `${value * 100}%` : rem(theme, value);\n};\n\n// `variant` doubles as a position preset, but an explicit `anchor` always wins.\nconst resolveAnchor = (\n anchor: DrawerProps['anchor'],\n variant: DrawerProps['variant'],\n): DrawerAnchor => {\n if (anchor) return anchor;\n\n // Map variant to anchor position\n switch (variant) {\n case 'right':\n return 'right';\n case 'top':\n return 'top';\n case 'bottom':\n return 'bottom';\n case 'glass':\n return 'right';\n case 'left':\n default:\n return 'left';\n }\n};\n\nconst buildDrawerStyles = (\n theme: Theme,\n anchor: DrawerAnchor,\n variant: DrawerProps['variant'],\n width: DrawerProps['width'],\n height: DrawerProps['height'],\n // Merged LAST into the surface's own rules, so a caller can shape the sliding\n // surface itself (rounded corners on a bottom sheet, a docked panel's offset)\n // without reaching for the MUI paper class from outside. Undefined by default:\n // omit it and the drawer styles exactly as it always has.\n paperSx?: DrawerProps['paperSx'],\n) => {\n const widthCss = drawerLength(theme, width);\n const heightCss = drawerLength(theme, height);\n const baseStyles = {\n width: ['left', 'right'].includes(anchor) ? widthCss : '100%',\n height: ['top', 'bottom'].includes(anchor) ? heightCss : '100%',\n flexShrink: 0,\n };\n\n if (variant === 'glass') {\n return {\n ...baseStyles,\n '& .MuiDrawer-paper': {\n width: widthCss,\n height: '100%',\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: `blur(${rem(theme, 20)})`,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n boxShadow: `${rems(theme, 0, 8, 32)} ${shadowInk(theme, 0.1)}`,\n ...paperSx,\n },\n };\n }\n\n return {\n ...baseStyles,\n '& .MuiDrawer-paper': {\n width: ['left', 'right'].includes(anchor) ? widthCss : '100%',\n height: ['top', 'bottom'].includes(anchor) ? heightCss : '100%',\n boxSizing: 'border-box',\n ...paperSx,\n },\n };\n};\n\nexport const Drawer: React.FC<DrawerProps> = ({\n children,\n open,\n onClose,\n variant = 'left',\n anchor,\n width,\n height = '100%',\n persistent = false,\n backdrop = true,\n hideBackdrop = false,\n keepMounted = false,\n paperSx,\n className,\n dataTestId,\n ...rest\n}) => {\n const theme = useTheme();\n const drawerAnchor = resolveAnchor(anchor, variant);\n\n return (\n <MuiDrawer\n anchor={drawerAnchor}\n open={open}\n onClose={onClose}\n variant={persistent ? 'persistent' : 'temporary'}\n ModalProps={{\n keepMounted,\n hideBackdrop,\n BackdropProps: {\n invisible: !backdrop,\n },\n }}\n sx={buildDrawerStyles(theme, drawerAnchor, variant, width ?? 280, height, paperSx)}\n className={className}\n data-testid={dataTestId || 'drawer'}\n {...rest}\n >\n {children}\n </MuiDrawer>\n );\n};\n\nexport const DrawerHeader: React.FC<DrawerHeaderProps> = ({\n children,\n onClose,\n showCloseButton = true,\n closeLabel,\n dataTestId,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId || 'drawer-header'}\n sx={{\n display: 'flex',\n alignItems: 'center',\n // 12px above and below: the close button is 40px tall, so the header lands on\n // its own 64px minimum instead of 72 — the height of the page header beside\n // a docked drawer (FUT-3476).\n padding: theme.spacing(1.5, 2),\n borderBottom: `1px solid ${theme.palette.divider}`,\n minHeight: rem(theme, 64),\n justifyContent: 'space-between',\n }}\n >\n <Box sx={{ flex: 1 }} data-testid={dataTestId ? `${dataTestId}-title` : 'drawer-title'}>\n {typeof children === 'string' ? <Typography variant=\"h6\">{children}</Typography> : children}\n </Box>\n {showCloseButton && onClose && (\n <IconButton\n onClick={onClose}\n edge=\"end\"\n aria-label={closeLabel ?? 'Close drawer'}\n data-testid={dataTestId ? `${dataTestId}-close` : 'drawer-close'}\n >\n <Close />\n </IconButton>\n )}\n </Box>\n );\n};\n\nexport const DrawerContent: React.FC<DrawerContentProps> = ({ children, padding = true, dataTestId }) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId || 'drawer-content'}\n sx={{\n flex: 1,\n overflow: 'auto',\n padding: padding ? theme.spacing(2) : 0,\n }}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;AAAA,OAAO,WAAW;AAElB,OAAO,SAAS;AAChB,OAAO,eAAe;AACtB,OAAO,gBAAgB;AACvB,OAAO,gBAAgB;AACvB,SAAS,OAAO,gBAAgB;AA6G5B,cAgCA,YAhCA;AA/FJ,IAAM,eAAe,CAAC,OAAc,UAA2D;AAC7F,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO,SAAS,KAAK,UAAU,IAAI,GAAG,QAAQ,GAAG,MAAM,IAAI,OAAO,KAAK;AACzE;AAGA,IAAM,gBAAgB,CACpB,QACA,YACiB;AACjB,MAAI,OAAQ,QAAO;AAGnB,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,oBAAoB,CACxB,OACA,QACA,SACA,OACA,QAKA,YACG;AACH,QAAM,WAAW,aAAa,OAAO,KAAK;AAC1C,QAAM,YAAY,aAAa,OAAO,MAAM;AAC5C,QAAM,aAAa;AAAA,IACjB,OAAO,CAAC,QAAQ,OAAO,EAAE,SAAS,MAAM,IAAI,WAAW;AAAA,IACvD,QAAQ,CAAC,OAAO,QAAQ,EAAE,SAAS,MAAM,IAAI,YAAY;AAAA,IACzD,YAAY;AAAA,EACd;AAEA,MAAI,YAAY,SAAS;AACvB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,sBAAsB;AAAA,QACpB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,QAC1D,gBAAgB,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,QACtC,QAAQ,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAAA,QAC3D,WAAW,GAAG,KAAK,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,QAC5D,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,sBAAsB;AAAA,MACpB,OAAO,CAAC,QAAQ,OAAO,EAAE,SAAS,MAAM,IAAI,WAAW;AAAA,MACvD,QAAQ,CAAC,OAAO,QAAQ,EAAE,SAAS,MAAM,IAAI,YAAY;AAAA,MACzD,WAAW;AAAA,MACX,GAAG;AAAA,IACL;AAAA,EACF;AACF;AAEO,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,aAAa;AAAA,EACb,WAAW;AAAA,EACX,eAAe;AAAA,EACf,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,eAAe,cAAc,QAAQ,OAAO;AAElD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,SAAS,aAAa,eAAe;AAAA,MACrC,YAAY;AAAA,QACV;AAAA,QACA;AAAA,QACA,eAAe;AAAA,UACb,WAAW,CAAC;AAAA,QACd;AAAA,MACF;AAAA,MACA,IAAI,kBAAkB,OAAO,cAAc,SAAS,SAAS,KAAK,QAAQ,OAAO;AAAA,MACjF;AAAA,MACA,eAAa,cAAc;AAAA,MAC1B,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;AAEO,IAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,cAAc;AAAA,MAC3B,IAAI;AAAA,QACF,SAAS;AAAA,QACT,YAAY;AAAA;AAAA;AAAA;AAAA,QAIZ,SAAS,MAAM,QAAQ,KAAK,CAAC;AAAA,QAC7B,cAAc,aAAa,MAAM,QAAQ,OAAO;AAAA,QAChD,WAAW,IAAI,OAAO,EAAE;AAAA,QACxB,gBAAgB;AAAA,MAClB;AAAA,MAEA;AAAA,4BAAC,OAAI,IAAI,EAAE,MAAM,EAAE,GAAG,eAAa,aAAa,GAAG,UAAU,WAAW,gBACrE,iBAAO,aAAa,WAAW,oBAAC,cAAW,SAAQ,MAAM,UAAS,IAAgB,UACrF;AAAA,QACC,mBAAmB,WAClB;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,MAAK;AAAA,YACL,cAAY,cAAc;AAAA,YAC1B,eAAa,aAAa,GAAG,UAAU,WAAW;AAAA,YAElD,8BAAC,SAAM;AAAA;AAAA,QACT;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEO,IAAM,gBAA8C,CAAC,EAAE,UAAU,UAAU,MAAM,WAAW,MAAM;AACvG,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,cAAc;AAAA,MAC3B,IAAI;AAAA,QACF,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS,UAAU,MAAM,QAAQ,CAAC,IAAI;AAAA,MACxC;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -5,10 +5,10 @@ import {
5
5
  } from "./chunk-AJUSBPWG.js";
6
6
  import {
7
7
  SettingsStatusMarker
8
- } from "./chunk-DBFRCTI5.js";
8
+ } from "./chunk-7Y2VWMGS.js";
9
9
  import {
10
10
  TOUCH_TARGET
11
- } from "./chunk-NYFNF7I5.js";
11
+ } from "./chunk-NK4T624E.js";
12
12
  import {
13
13
  rem,
14
14
  sxRem
@@ -186,4 +186,4 @@ SettingsSectionChips.displayName = "SettingsSectionChips";
186
186
  export {
187
187
  SettingsSectionChips
188
188
  };
189
- //# sourceMappingURL=chunk-F3Q4CMRB.js.map
189
+ //# sourceMappingURL=chunk-GBVNY2LG.js.map
@@ -9,7 +9,7 @@ import {
9
9
  Drawer,
10
10
  DrawerContent,
11
11
  DrawerHeader
12
- } from "./chunk-UALPKKAY.js";
12
+ } from "./chunk-F742IMLQ.js";
13
13
  import {
14
14
  rem
15
15
  } from "./chunk-YKCAJ2TN.js";
@@ -175,4 +175,4 @@ function SectionNavSheet({
175
175
  export {
176
176
  SectionNavSheet
177
177
  };
178
- //# sourceMappingURL=chunk-NM46HQSW.js.map
178
+ //# sourceMappingURL=chunk-J26ZWYQI.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  SettingsSectionChips
3
- } from "./chunk-F3Q4CMRB.js";
3
+ } from "./chunk-GBVNY2LG.js";
4
4
  import {
5
5
  SettingsSectionHeader
6
- } from "./chunk-6KEXHOIF.js";
6
+ } from "./chunk-WOXNVM52.js";
7
7
  import {
8
8
  TOUCH_TARGET,
9
9
  atLeastRail,
10
10
  displayAcrossRail
11
- } from "./chunk-NYFNF7I5.js";
11
+ } from "./chunk-NK4T624E.js";
12
12
  import {
13
13
  rem
14
14
  } from "./chunk-YKCAJ2TN.js";
@@ -167,4 +167,4 @@ function SettingsPanel({
167
167
  export {
168
168
  SettingsPanel
169
169
  };
170
- //# sourceMappingURL=chunk-KKVM723A.js.map
170
+ //# sourceMappingURL=chunk-LY5I3ZSV.js.map
@@ -5,6 +5,7 @@ import {
5
5
 
6
6
  // src/components/layout/SettingsLayout/SettingsLayout.styles.ts
7
7
  var railWidth = (theme) => rem(theme, 300);
8
+ var railCardWidth = (theme) => rem(theme, 200);
8
9
  var SR_ONLY_SX = {
9
10
  position: "absolute",
10
11
  width: sxRem(1),
@@ -31,10 +32,11 @@ var STATUS_COLOR = {
31
32
 
32
33
  export {
33
34
  railWidth,
35
+ railCardWidth,
34
36
  SR_ONLY_SX,
35
37
  atLeastRail,
36
38
  displayAcrossRail,
37
39
  TOUCH_TARGET,
38
40
  STATUS_COLOR
39
41
  };
40
- //# sourceMappingURL=chunk-NYFNF7I5.js.map
42
+ //# sourceMappingURL=chunk-NK4T624E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsLayout.styles.ts"],"sourcesContent":["import type { CSSObject, SxProps, Theme } from '@mui/material/styles/index.js';\n\nimport { rem, sxRem } from '../../../tokens/relative';\n\nimport type { SettingsNavStatus, SettingsRailBreakpoint } from './SettingsLayout.types';\n\n/** Fixed width of the left navigation rail once it has its own column (300 design px). */\nexport const railWidth = (theme: Theme): string => rem(theme, 300);\n\n/** Width of the rail drawn as a card (`railVariant=\"card\"`, 200 design px). */\nexport const railCardWidth = (theme: Theme): string => rem(theme, 200);\n\n/** Visually hidden, still read aloud — for text a marker's colour cannot carry. */\nexport const SR_ONLY_SX: SxProps<Theme> = {\n position: 'absolute',\n width: sxRem(1),\n height: sxRem(1),\n padding: 0,\n margin: sxRem(-1),\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n\n/**\n * The media query for \"the rail has its own column\".\n *\n * `theme.breakpoints.up` takes a NUMBER as happily as a name, which is why\n * `railBreakpoint` accepts one: a settings area whose structural switch is at\n * 1024px has no MUI breakpoint to name (the default `lg` is 1200), and rounding\n * the design to the nearest named breakpoint moves 176px of behaviour to keep a\n * string tidy.\n */\nexport function atLeastRail(theme: Theme, breakpoint: SettingsRailBreakpoint): string {\n return theme.breakpoints.up(breakpoint);\n}\n\n/**\n * A `display` pair across that query: `narrow` below it, `wide` at and above.\n *\n * Everything that changes shape between the two navigation modes goes through\n * this, so \"which width am I?\" is answered once, in CSS, for every part at\n * once — rather than by each part asking a media query in JavaScript and\n * answering slightly differently.\n */\nexport function displayAcrossRail(\n theme: Theme,\n breakpoint: SettingsRailBreakpoint,\n narrow: string,\n wide: string,\n): CSSObject {\n return { display: narrow, [atLeastRail(theme, breakpoint)]: { display: wide } };\n}\n\n/** Minimum touch target, in px. Held down to 320px-wide phones, deliberately. */\nexport const TOUCH_TARGET = 44;\n\n/**\n * Palette role per situation.\n *\n * Returned as theme keys rather than hex so a marker follows the host's theme —\n * and so light and dark do not need two copies of this table.\n */\nexport const STATUS_COLOR: Record<Exclude<SettingsNavStatus, 'locked'>, string> = {\n ok: 'success.main',\n off: 'text.disabled',\n new: 'error.main',\n};\n"],"mappings":";;;;;;AAOO,IAAM,YAAY,CAAC,UAAyB,IAAI,OAAO,GAAG;AAG1D,IAAM,gBAAgB,CAAC,UAAyB,IAAI,OAAO,GAAG;AAG9D,IAAM,aAA6B;AAAA,EACxC,UAAU;AAAA,EACV,OAAO,MAAM,CAAC;AAAA,EACd,QAAQ,MAAM,CAAC;AAAA,EACf,SAAS;AAAA,EACT,QAAQ,MAAM,EAAE;AAAA,EAChB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,QAAQ;AACV;AAWO,SAAS,YAAY,OAAc,YAA4C;AACpF,SAAO,MAAM,YAAY,GAAG,UAAU;AACxC;AAUO,SAAS,kBACd,OACA,YACA,QACA,MACW;AACX,SAAO,EAAE,SAAS,QAAQ,CAAC,YAAY,OAAO,UAAU,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE;AAChF;AAGO,IAAM,eAAe;AAQrB,IAAM,eAAqE;AAAA,EAChF,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AACP;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SectionNavSheet
3
- } from "./chunk-NM46HQSW.js";
3
+ } from "./chunk-J26ZWYQI.js";
4
4
  import {
5
5
  RaisedActionButton,
6
6
  raisedLift
@@ -327,4 +327,4 @@ export {
327
327
  sectionNavSheetOffset,
328
328
  SectionNavBar
329
329
  };
330
- //# sourceMappingURL=chunk-URSYEHPU.js.map
330
+ //# sourceMappingURL=chunk-PMRLFNBT.js.map
@@ -49,11 +49,11 @@ var StyledTextarea = styled(TextareaAutosize, {
49
49
  const colorPalette = getColorFromTheme(theme, customColor);
50
50
  const errorColor = theme.palette.error;
51
51
  const sizeMap = {
52
- xs: { padding: rems(theme, 6, 8), fontSize: rem(theme, 12), minHeight: rem(theme, 60) },
53
- sm: { padding: rems(theme, 8, 10), fontSize: rem(theme, 14), minHeight: rem(theme, 80) },
54
- md: { padding: rems(theme, 10, 12), fontSize: rem(theme, 16), minHeight: rem(theme, 100) },
55
- lg: { padding: rems(theme, 12, 14), fontSize: rem(theme, 18), minHeight: rem(theme, 120) },
56
- xl: { padding: rems(theme, 14, 16), fontSize: rem(theme, 20), minHeight: rem(theme, 140) }
52
+ xs: { padding: rems(theme, 6, 8), fontSize: rem(theme, 12) },
53
+ sm: { padding: rems(theme, 8, 10), fontSize: rem(theme, 14) },
54
+ md: { padding: rems(theme, 10, 12), fontSize: rem(theme, 16) },
55
+ lg: { padding: rems(theme, 12, 14), fontSize: rem(theme, 18) },
56
+ xl: { padding: rems(theme, 14, 16), fontSize: rem(theme, 20) }
57
57
  };
58
58
  const baseStyles = {
59
59
  width: "100%",
@@ -112,7 +112,9 @@ var TEXTAREA_DEFAULTS = {
112
112
  glass: false,
113
113
  gradient: false,
114
114
  iconPosition: "start",
115
- minRows: 3
115
+ // Four lines of its own text, whatever the variant or size (FUT-3534); a
116
+ // screen that wants another height passes `minRows`.
117
+ minRows: 4
116
118
  };
117
119
  var definedProps = (props) => Object.fromEntries(
118
120
  Object.entries(props).filter(([, value]) => value !== void 0)
@@ -210,7 +212,7 @@ var Textarea = (textareaProps) => {
210
212
  glass,
211
213
  gradient,
212
214
  error,
213
- minRows: variant === "autosize" ? minRows : void 0,
215
+ minRows,
214
216
  maxRows: variant === "autosize" ? maxRows : void 0,
215
217
  style: textareaStyle,
216
218
  "aria-label": label || props["aria-label"],
@@ -225,4 +227,4 @@ Textarea.displayName = "Textarea";
225
227
  export {
226
228
  Textarea
227
229
  };
228
- //# sourceMappingURL=chunk-X47MWURD.js.map
230
+ //# sourceMappingURL=chunk-Q6MZHT2F.js.map