@12-apps/ui 6.75.0 → 6.76.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/components/form/Textarea/Textarea.js +1 -1
- package/dist/_internal/components/form/index.js +1 -1
- package/dist/_internal/components/index.js +1 -1
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.items.js +3 -3
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +8 -8
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.rail.js +4 -4
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.styles.js +3 -1
- package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +5 -5
- package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +3 -3
- package/dist/_internal/components/layout/SettingsLayout/SettingsSectionHeader.js +2 -2
- package/dist/_internal/components/layout/SettingsLayout/SettingsStatusMarker.js +2 -2
- package/dist/{chunk-DBFRCTI5.js → chunk-7Y2VWMGS.js} +2 -2
- package/dist/{chunk-F3Q4CMRB.js → chunk-GBVNY2LG.js} +3 -3
- package/dist/{chunk-KKVM723A.js → chunk-LY5I3ZSV.js} +4 -4
- package/dist/{chunk-NYFNF7I5.js → chunk-NK4T624E.js} +3 -1
- package/dist/chunk-NK4T624E.js.map +1 -0
- package/dist/{chunk-X47MWURD.js → chunk-Q6MZHT2F.js} +10 -8
- package/dist/chunk-Q6MZHT2F.js.map +1 -0
- package/dist/{chunk-V5EWCJBT.js → chunk-SL56MOKE.js} +29 -8
- package/dist/chunk-SL56MOKE.js.map +1 -0
- package/dist/{chunk-OKYYHBGS.js → chunk-SO5OU2ZV.js} +16 -7
- package/dist/chunk-SO5OU2ZV.js.map +1 -0
- package/dist/{chunk-TNYKM4UU.js → chunk-TJO4CBYT.js} +64 -22
- package/dist/chunk-TJO4CBYT.js.map +1 -0
- package/dist/{chunk-6KEXHOIF.js → chunk-WOXNVM52.js} +2 -2
- package/dist/form/Textarea.js +1 -1
- package/dist/layout/SettingsLayout.js +8 -8
- package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/Textarea.types.d.ts +4 -2
- package/dist/types/components/form/Textarea/Textarea.types.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.items.d.ts +3 -1
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.items.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.rail.d.ts +6 -2
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.rail.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts +2 -0
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.types.d.ts +19 -0
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.types.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/index.d.ts +1 -1
- package/dist/types/components/layout/SettingsLayout/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/form/Textarea/Textarea.tsx +14 -7
- package/src/components/form/Textarea/Textarea.types.ts +4 -2
- package/src/components/layout/SettingsLayout/SettingsLayout.items.tsx +38 -3
- package/src/components/layout/SettingsLayout/SettingsLayout.md +19 -0
- package/src/components/layout/SettingsLayout/SettingsLayout.rail.tsx +73 -24
- package/src/components/layout/SettingsLayout/SettingsLayout.styles.ts +3 -0
- package/src/components/layout/SettingsLayout/SettingsLayout.tsx +21 -3
- package/src/components/layout/SettingsLayout/SettingsLayout.types.ts +20 -0
- package/src/components/layout/SettingsLayout/index.ts +1 -0
- package/dist/chunk-NYFNF7I5.js.map +0 -1
- package/dist/chunk-OKYYHBGS.js.map +0 -1
- package/dist/chunk-TNYKM4UU.js.map +0 -1
- package/dist/chunk-V5EWCJBT.js.map +0 -1
- package/dist/chunk-X47MWURD.js.map +0 -1
- /package/dist/{chunk-DBFRCTI5.js.map → chunk-7Y2VWMGS.js.map} +0 -0
- /package/dist/{chunk-F3Q4CMRB.js.map → chunk-GBVNY2LG.js.map} +0 -0
- /package/dist/{chunk-KKVM723A.js.map → chunk-LY5I3ZSV.js.map} +0 -0
- /package/dist/{chunk-6KEXHOIF.js.map → chunk-WOXNVM52.js.map} +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SettingsRailGroup
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SL56MOKE.js";
|
|
4
4
|
import {
|
|
5
5
|
TOUCH_TARGET,
|
|
6
6
|
atLeastRail,
|
|
7
7
|
displayAcrossRail,
|
|
8
|
+
railCardWidth,
|
|
8
9
|
railWidth
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-NK4T624E.js";
|
|
10
11
|
import {
|
|
11
12
|
rem,
|
|
12
13
|
sxRem
|
|
@@ -101,6 +102,29 @@ function SettingsSearchEmpty({
|
|
|
101
102
|
) : null
|
|
102
103
|
] });
|
|
103
104
|
}
|
|
105
|
+
function RailSearch({
|
|
106
|
+
query,
|
|
107
|
+
onQueryChange,
|
|
108
|
+
searchPlaceholder,
|
|
109
|
+
testIdPrefix
|
|
110
|
+
}) {
|
|
111
|
+
return /* @__PURE__ */ jsx(
|
|
112
|
+
TextField,
|
|
113
|
+
{
|
|
114
|
+
value: query,
|
|
115
|
+
onChange: (event) => onQueryChange(event.target.value),
|
|
116
|
+
placeholder: searchPlaceholder,
|
|
117
|
+
size: "small",
|
|
118
|
+
fullWidth: true,
|
|
119
|
+
"aria-label": searchPlaceholder,
|
|
120
|
+
"data-testid": `${testIdPrefix}-search`,
|
|
121
|
+
InputProps: {
|
|
122
|
+
startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(SearchIcon, { fontSize: "small", sx: { color: "text.secondary" } }) })
|
|
123
|
+
},
|
|
124
|
+
sx: { mb: 2 }
|
|
125
|
+
}
|
|
126
|
+
);
|
|
127
|
+
}
|
|
104
128
|
function SettingsRailBody({
|
|
105
129
|
navOpen,
|
|
106
130
|
query,
|
|
@@ -114,6 +138,7 @@ function SettingsRailBody({
|
|
|
114
138
|
onSelectItem,
|
|
115
139
|
onNavigate,
|
|
116
140
|
testIdPrefix,
|
|
141
|
+
searchable,
|
|
117
142
|
...shape
|
|
118
143
|
}) {
|
|
119
144
|
const hidden = navOpen ? "block" : "none";
|
|
@@ -123,22 +148,15 @@ function SettingsRailBody({
|
|
|
123
148
|
"data-testid": `${testIdPrefix}-rail-body`,
|
|
124
149
|
sx: (theme) => shape.variant === "drilldown" ? { display: "block" } : displayAcrossRail(theme, shape.breakpoint, hidden, "block"),
|
|
125
150
|
children: [
|
|
126
|
-
/* @__PURE__ */ jsx(
|
|
127
|
-
|
|
151
|
+
searchable ? /* @__PURE__ */ jsx(
|
|
152
|
+
RailSearch,
|
|
128
153
|
{
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
fullWidth: true,
|
|
134
|
-
"aria-label": searchPlaceholder,
|
|
135
|
-
"data-testid": `${testIdPrefix}-search`,
|
|
136
|
-
InputProps: {
|
|
137
|
-
startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(SearchIcon, { fontSize: "small", sx: { color: "text.secondary" } }) })
|
|
138
|
-
},
|
|
139
|
-
sx: { mb: 2 }
|
|
154
|
+
query,
|
|
155
|
+
onQueryChange,
|
|
156
|
+
searchPlaceholder,
|
|
157
|
+
testIdPrefix
|
|
140
158
|
}
|
|
141
|
-
),
|
|
159
|
+
) : null,
|
|
142
160
|
filteredGroups.length === 0 ? /* @__PURE__ */ jsx(
|
|
143
161
|
SettingsSearchEmpty,
|
|
144
162
|
{
|
|
@@ -164,6 +182,23 @@ function SettingsRailBody({
|
|
|
164
182
|
}
|
|
165
183
|
);
|
|
166
184
|
}
|
|
185
|
+
function railColumnSx(theme, railVariant) {
|
|
186
|
+
if (railVariant === "card") {
|
|
187
|
+
const width2 = railCardWidth(theme);
|
|
188
|
+
return {
|
|
189
|
+
flex: `0 0 ${width2}`,
|
|
190
|
+
width: width2,
|
|
191
|
+
alignSelf: "flex-start",
|
|
192
|
+
border: `1px solid ${theme.palette.divider}`,
|
|
193
|
+
borderRadius: sxRem(14),
|
|
194
|
+
bgcolor: "background.paper",
|
|
195
|
+
px: sxRem(12),
|
|
196
|
+
py: sxRem(16)
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const width = railWidth(theme);
|
|
200
|
+
return { flex: `0 0 ${width}`, width, borderRight: `1px solid ${theme.palette.divider}`, pr: sxRem(16) };
|
|
201
|
+
}
|
|
167
202
|
function SettingsRail({
|
|
168
203
|
title,
|
|
169
204
|
activeLabel,
|
|
@@ -171,6 +206,7 @@ function SettingsRail({
|
|
|
171
206
|
onToggleNav,
|
|
172
207
|
testIdPrefix,
|
|
173
208
|
fillHeight = false,
|
|
209
|
+
railVariant = "divided",
|
|
174
210
|
...bodyProps
|
|
175
211
|
}) {
|
|
176
212
|
const { variant, breakpoint, atIndex } = bodyProps;
|
|
@@ -181,16 +217,14 @@ function SettingsRail({
|
|
|
181
217
|
component: "nav",
|
|
182
218
|
"aria-label": typeof title === "string" ? title : "Settings",
|
|
183
219
|
"data-testid": `${testIdPrefix}-rail`,
|
|
220
|
+
"data-rail-variant": railVariant,
|
|
184
221
|
sx: (theme) => ({
|
|
185
222
|
display: hiddenWhileInSection ? "none" : "block",
|
|
186
223
|
flex: "0 0 auto",
|
|
187
224
|
width: "100%",
|
|
188
225
|
[atLeastRail(theme, breakpoint)]: {
|
|
189
226
|
display: "block",
|
|
190
|
-
|
|
191
|
-
width: railWidth(theme),
|
|
192
|
-
borderRight: `1px solid ${theme.palette.divider}`,
|
|
193
|
-
pr: 2,
|
|
227
|
+
...railColumnSx(theme, railVariant),
|
|
194
228
|
// Its own scrollbar, so a settings area with twenty categories does
|
|
195
229
|
// not make the thing you NAVIGATE with scroll away while you read the
|
|
196
230
|
// panel. `minHeight: 0` is the load-bearing half: without it a flex
|
|
@@ -224,7 +258,15 @@ function SettingsRail({
|
|
|
224
258
|
testIdPrefix
|
|
225
259
|
}
|
|
226
260
|
) : null,
|
|
227
|
-
/* @__PURE__ */ jsx(
|
|
261
|
+
/* @__PURE__ */ jsx(
|
|
262
|
+
SettingsRailBody,
|
|
263
|
+
{
|
|
264
|
+
navOpen,
|
|
265
|
+
testIdPrefix,
|
|
266
|
+
card: railVariant === "card",
|
|
267
|
+
...bodyProps
|
|
268
|
+
}
|
|
269
|
+
)
|
|
228
270
|
]
|
|
229
271
|
}
|
|
230
272
|
);
|
|
@@ -233,4 +275,4 @@ function SettingsRail({
|
|
|
233
275
|
export {
|
|
234
276
|
SettingsRail
|
|
235
277
|
};
|
|
236
|
-
//# sourceMappingURL=chunk-
|
|
278
|
+
//# sourceMappingURL=chunk-TJO4CBYT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsLayout.rail.tsx"],"sourcesContent":["'use client';\n\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React from 'react';\n\nimport { SettingsRailGroup, type RailShape } from './SettingsLayout.items';\nimport { atLeastRail, displayAcrossRail, railCardWidth, railWidth, TOUCH_TARGET } from './SettingsLayout.styles';\nimport { rem, sxRem } from '../../../tokens/relative';\nimport type {\n SettingsEmptySearchAction,\n SettingsLayoutProps,\n SettingsNavGroup,\n SettingsRailBreakpoint,\n SettingsRailVariant,\n} from './SettingsLayout.types';\n\ninterface RailToggleProps {\n title?: React.ReactNode;\n activeLabel?: string;\n open: boolean;\n onToggle: () => void;\n breakpoint: SettingsRailBreakpoint;\n testIdPrefix: string;\n}\n\n/**\n * `switcher`-only collapse control: shows the current section (a compact\n * switcher) so the panel content stays at the top of the screen. Hidden once the\n * rail has its own column.\n */\nfunction SettingsRailToggle({\n title,\n activeLabel,\n open,\n onToggle,\n breakpoint,\n testIdPrefix,\n}: RailToggleProps): React.JSX.Element {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onToggle}\n aria-expanded={open}\n aria-label={typeof title === 'string' ? title : 'Settings'}\n data-testid={`${testIdPrefix}-toggle`}\n sx={(theme) => ({\n ...displayAcrossRail(theme, breakpoint, 'flex', 'none'),\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1,\n width: '100%',\n minHeight: rem(theme, TOUCH_TARGET),\n px: 1.5,\n py: 1,\n mb: 1,\n textAlign: 'left',\n cursor: 'pointer',\n color: 'text.primary',\n background: 'transparent',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: 1.5,\n })}\n >\n <Box sx={{ minWidth: 0 }}>\n {title ? (\n <Typography variant=\"caption\" sx={{ display: 'block', color: 'text.secondary' }}>\n {title}\n </Typography>\n ) : null}\n <Typography variant=\"body2\" noWrap sx={{ fontWeight: 600 }}>\n {activeLabel ?? ''}\n </Typography>\n </Box>\n <ExpandMoreIcon\n fontSize=\"small\"\n sx={{\n flex: '0 0 auto',\n color: 'text.secondary',\n transition: 'transform 150ms ease',\n transform: open ? 'rotate(180deg)' : 'none',\n '@media (prefers-reduced-motion: reduce)': { transition: 'none' },\n }}\n />\n </Box>\n );\n}\n\n/** The empty-search state, with the way out of it rendered inside. */\nfunction SettingsSearchEmpty({\n label,\n action,\n onClear,\n testIdPrefix,\n}: {\n label: React.ReactNode;\n action?: SettingsEmptySearchAction;\n onClear: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <Box data-testid={`${testIdPrefix}-empty`} sx={{ px: 1, py: 2 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n {action ? (\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => {\n onClear();\n action.onClear?.();\n }}\n data-testid={`${testIdPrefix}-empty-action`}\n sx={{ mt: 1.5, minHeight: sxRem(TOUCH_TARGET) }}\n >\n {action.label}\n </Button>\n ) : null}\n </Box>\n );\n}\n\nexport interface RailBodyProps extends RailShape {\n navOpen: boolean;\n query: string;\n onQueryChange: (value: string) => void;\n searchPlaceholder: string;\n emptySearchLabel: React.ReactNode;\n emptySearchAction?: SettingsEmptySearchAction;\n filteredGroups: SettingsNavGroup[];\n activeItemId?: string;\n linkComponent?: SettingsLayoutProps['linkComponent'];\n onSelectItem?: (id: string) => void;\n onNavigate?: () => void;\n testIdPrefix: string;\n /** Whether the search field is drawn (`SettingsLayoutProps.searchable`). */\n searchable: boolean;\n}\n\n/** The rail's search field. */\nfunction RailSearch({\n query,\n onQueryChange,\n searchPlaceholder,\n testIdPrefix,\n}: Pick<RailBodyProps, 'query' | 'onQueryChange' | 'searchPlaceholder' | 'testIdPrefix'>): React.JSX.Element {\n return (\n <TextField\n value={query}\n onChange={(event) => onQueryChange(event.target.value)}\n placeholder={searchPlaceholder}\n size=\"small\"\n fullWidth\n aria-label={searchPlaceholder}\n data-testid={`${testIdPrefix}-search`}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" sx={{ color: 'text.secondary' }} />\n </InputAdornment>\n ),\n }}\n sx={{ mb: 2 }}\n />\n );\n}\n\n/** The rail body: the search field when the area has one, then the groups. */\nfunction SettingsRailBody({\n navOpen,\n query,\n onQueryChange,\n searchPlaceholder,\n emptySearchLabel,\n emptySearchAction,\n filteredGroups,\n activeItemId,\n linkComponent,\n onSelectItem,\n onNavigate,\n testIdPrefix,\n searchable,\n ...shape\n}: RailBodyProps): React.JSX.Element {\n // `drilldown` has no disclosure to be closed behind: below the breakpoint the\n // body is the page, above it the rail. Only `switcher` hides it.\n const hidden = navOpen ? 'block' : 'none';\n return (\n <Box\n data-testid={`${testIdPrefix}-rail-body`}\n sx={(theme) =>\n shape.variant === 'drilldown'\n ? { display: 'block' }\n : displayAcrossRail(theme, shape.breakpoint, hidden, 'block')\n }\n >\n {searchable ? (\n <RailSearch\n query={query}\n onQueryChange={onQueryChange}\n searchPlaceholder={searchPlaceholder}\n testIdPrefix={testIdPrefix}\n />\n ) : null}\n {filteredGroups.length === 0 ? (\n <SettingsSearchEmpty\n label={emptySearchLabel}\n action={emptySearchAction}\n onClear={() => onQueryChange('')}\n testIdPrefix={testIdPrefix}\n />\n ) : (\n filteredGroups.map((group) => (\n <SettingsRailGroup\n key={group.id}\n group={group}\n activeItemId={activeItemId}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n onNavigate={onNavigate}\n testIdPrefix={testIdPrefix}\n {...shape}\n />\n ))\n )}\n </Box>\n );\n}\n\n/** Props for {@link SettingsRail}: the rail body's inputs plus the mobile chrome. */\nexport type SettingsRailProps = RailBodyProps & {\n title?: React.ReactNode;\n activeLabel?: string;\n onToggleNav: () => void;\n /** Scroll inside the rail rather than with the page. See `fillHeight`. */\n fillHeight?: boolean;\n /** How the rail's own column is drawn. See `SettingsLayoutProps.railVariant`. */\n railVariant?: SettingsRailVariant;\n};\n\n/** The rail's own column, as the variant draws it: ruled off, or a card. */\nfunction railColumnSx(theme: Theme, railVariant: SettingsRailVariant): Record<string, unknown> {\n if (railVariant === 'card') {\n const width = railCardWidth(theme);\n return {\n flex: `0 0 ${width}`,\n width,\n alignSelf: 'flex-start',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: sxRem(14),\n bgcolor: 'background.paper',\n px: sxRem(12),\n py: sxRem(16),\n };\n }\n const width = railWidth(theme);\n return { flex: `0 0 ${width}`, width, borderRight: `1px solid ${theme.palette.divider}`, pr: sxRem(16) };\n}\n\n/** The navigation column: title, the `switcher`'s disclosure, and the body. */\nexport function SettingsRail({\n title,\n activeLabel,\n navOpen,\n onToggleNav,\n testIdPrefix,\n fillHeight = false,\n railVariant = 'divided',\n ...bodyProps\n}: SettingsRailProps): React.JSX.Element {\n const { variant, breakpoint, atIndex } = bodyProps;\n // In `drilldown` the rail is the index's list below the breakpoint and the\n // left column above it — so inside a section it steps aside for the chip\n // strip. It is `display: none`, never unmounted: the two navigation forms\n // both stay in the DOM at every width, which is what makes \"the narrow width\n // offers what the wide one offers\" true by construction instead of by review.\n const hiddenWhileInSection = variant === 'drilldown' && !atIndex;\n\n return (\n <Box\n component=\"nav\"\n aria-label={typeof title === 'string' ? title : 'Settings'}\n data-testid={`${testIdPrefix}-rail`}\n data-rail-variant={railVariant}\n sx={(theme) => ({\n display: hiddenWhileInSection ? 'none' : 'block',\n flex: '0 0 auto',\n width: '100%',\n [atLeastRail(theme, breakpoint)]: {\n display: 'block',\n ...railColumnSx(theme, railVariant),\n // Its own scrollbar, so a settings area with twenty categories does\n // not make the thing you NAVIGATE with scroll away while you read the\n // panel. `minHeight: 0` is the load-bearing half: without it a flex\n // child refuses to shrink below its content and `overflow` never\n // engages.\n ...(fillHeight\n ? { height: '100%', minHeight: 0, overflowY: 'auto' as const, overscrollBehavior: 'contain' as const }\n : {}),\n },\n })}\n >\n {title ? (\n <Typography\n variant=\"h6\"\n data-testid={`${testIdPrefix}-title`}\n sx={(theme) => ({\n ...(variant === 'drilldown'\n ? { display: 'block' }\n : displayAcrossRail(theme, breakpoint, 'none', 'block')),\n fontWeight: 700,\n mb: 1.5,\n })}\n >\n {title}\n </Typography>\n ) : null}\n {variant === 'switcher' ? (\n <SettingsRailToggle\n title={title}\n activeLabel={activeLabel}\n open={navOpen}\n onToggle={onToggleNav}\n breakpoint={breakpoint}\n testIdPrefix={testIdPrefix}\n />\n ) : null}\n <SettingsRailBody\n navOpen={navOpen}\n testIdPrefix={testIdPrefix}\n card={railVariant === 'card'}\n {...bodyProps}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":["width"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TOUCH_TARGET,
|
|
3
3
|
displayAcrossRail
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-NK4T624E.js";
|
|
5
5
|
import {
|
|
6
6
|
rem,
|
|
7
7
|
sxRem
|
|
@@ -122,4 +122,4 @@ function SettingsSectionHeader({
|
|
|
122
122
|
export {
|
|
123
123
|
SettingsSectionHeader
|
|
124
124
|
};
|
|
125
|
-
//# sourceMappingURL=chunk-
|
|
125
|
+
//# sourceMappingURL=chunk-WOXNVM52.js.map
|
package/dist/form/Textarea.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SettingsLayout
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-SO5OU2ZV.js";
|
|
4
4
|
import "../chunk-BXC6GRLE.js";
|
|
5
|
-
import "../chunk-
|
|
5
|
+
import "../chunk-LY5I3ZSV.js";
|
|
6
6
|
import {
|
|
7
7
|
SettingsSectionChips
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-GBVNY2LG.js";
|
|
9
9
|
import "../chunk-AJUSBPWG.js";
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-TJO4CBYT.js";
|
|
11
|
+
import "../chunk-SL56MOKE.js";
|
|
12
12
|
import {
|
|
13
13
|
SettingsStatusMarker
|
|
14
|
-
} from "../chunk-
|
|
15
|
-
import "../chunk-
|
|
16
|
-
import "../chunk-
|
|
14
|
+
} from "../chunk-7Y2VWMGS.js";
|
|
15
|
+
import "../chunk-WOXNVM52.js";
|
|
16
|
+
import "../chunk-NK4T624E.js";
|
|
17
17
|
import "../chunk-HPK33ACY.js";
|
|
18
18
|
import "../chunk-YKCAJ2TN.js";
|
|
19
19
|
import "../chunk-PZ5AY32C.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/Textarea/Textarea.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAwBxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/Textarea/Textarea.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAwBxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA2NtD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA0E5C,CAAC"}
|
|
@@ -65,11 +65,13 @@ export interface TextareaBaseProps extends Omit<TextareaAutosizeProps, 'variant'
|
|
|
65
65
|
*/
|
|
66
66
|
gradient?: boolean;
|
|
67
67
|
/**
|
|
68
|
-
*
|
|
68
|
+
* How many lines of its own text the box opens at, in every variant.
|
|
69
|
+
* Defaults to 4; pass it to override.
|
|
69
70
|
*/
|
|
70
71
|
minRows?: number;
|
|
71
72
|
/**
|
|
72
|
-
*
|
|
73
|
+
* The most lines the `autosize` variant grows to before it scrolls.
|
|
74
|
+
* The other variants ignore it.
|
|
73
75
|
*/
|
|
74
76
|
maxRows?: number;
|
|
75
77
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/Textarea/Textarea.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;GAIG;AACH,KAAK,gBAAgB,GACjB;IAAE,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAAC,cAAc,CAAC,EAAE,KAAK,CAAA;CAAE,GAC1E;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAEjE,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,qBAAqB,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACjE;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IAExD;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAE/B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB
|
|
1
|
+
{"version":3,"file":"Textarea.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/Textarea/Textarea.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;GAIG;AACH,KAAK,gBAAgB,GACjB;IAAE,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAAC,cAAc,CAAC,EAAE,KAAK,CAAA;CAAE,GAC1E;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAEjE,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,qBAAqB,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACjE;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IAExD;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAE/B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsLayout.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAOjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"SettingsLayout.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAOjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AA0ElE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA+ExD,CAAC"}
|
|
@@ -5,6 +5,8 @@ export interface RailShape {
|
|
|
5
5
|
variant: SettingsNavVariant;
|
|
6
6
|
breakpoint: SettingsRailBreakpoint;
|
|
7
7
|
atIndex: boolean;
|
|
8
|
+
/** The rail is drawn as a card (`railVariant="card"`): denser rows, darker text. */
|
|
9
|
+
card?: boolean;
|
|
8
10
|
}
|
|
9
11
|
interface RailItemProps extends RailShape {
|
|
10
12
|
item: SettingsNavItem;
|
|
@@ -16,7 +18,7 @@ interface RailItemProps extends RailShape {
|
|
|
16
18
|
testIdPrefix: string;
|
|
17
19
|
}
|
|
18
20
|
/** One rail entry — a link when it has `href`, inert text when it says so, else a button. */
|
|
19
|
-
export declare function SettingsRailItem({ item, active, linkComponent, onSelectItem, onNavigate, testIdPrefix, variant, breakpoint, }: RailItemProps): React.JSX.Element;
|
|
21
|
+
export declare function SettingsRailItem({ item, active, linkComponent, onSelectItem, onNavigate, testIdPrefix, variant, breakpoint, card, }: RailItemProps): React.JSX.Element;
|
|
20
22
|
interface RailGroupProps extends RailShape {
|
|
21
23
|
group: SettingsNavGroup;
|
|
22
24
|
activeItemId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsLayout.items.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.items.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,sBAAsB,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SettingsLayout.items.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.items.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,sBAAsB,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,oFAAoF;IACpF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,aAAc,SAAQ,SAAS;IACvC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AA4DD,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,MAAM,EACN,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,OAAO,EACP,UAAU,EACV,IAAY,GACb,EAAE,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAoEnC;AAED,UAAU,cAAe,SAAQ,SAAS;IACxC,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAwBD,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAyCpC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { type RailShape } from './SettingsLayout.items';
|
|
3
|
-
import type { SettingsEmptySearchAction, SettingsLayoutProps, SettingsNavGroup } from './SettingsLayout.types';
|
|
3
|
+
import type { SettingsEmptySearchAction, SettingsLayoutProps, SettingsNavGroup, SettingsRailVariant } from './SettingsLayout.types';
|
|
4
4
|
export interface RailBodyProps extends RailShape {
|
|
5
5
|
navOpen: boolean;
|
|
6
6
|
query: string;
|
|
@@ -14,6 +14,8 @@ export interface RailBodyProps extends RailShape {
|
|
|
14
14
|
onSelectItem?: (id: string) => void;
|
|
15
15
|
onNavigate?: () => void;
|
|
16
16
|
testIdPrefix: string;
|
|
17
|
+
/** Whether the search field is drawn (`SettingsLayoutProps.searchable`). */
|
|
18
|
+
searchable: boolean;
|
|
17
19
|
}
|
|
18
20
|
/** Props for {@link SettingsRail}: the rail body's inputs plus the mobile chrome. */
|
|
19
21
|
export type SettingsRailProps = RailBodyProps & {
|
|
@@ -22,7 +24,9 @@ export type SettingsRailProps = RailBodyProps & {
|
|
|
22
24
|
onToggleNav: () => void;
|
|
23
25
|
/** Scroll inside the rail rather than with the page. See `fillHeight`. */
|
|
24
26
|
fillHeight?: boolean;
|
|
27
|
+
/** How the rail's own column is drawn. See `SettingsLayoutProps.railVariant`. */
|
|
28
|
+
railVariant?: SettingsRailVariant;
|
|
25
29
|
};
|
|
26
30
|
/** The navigation column: title, the `switcher`'s disclosure, and the body. */
|
|
27
|
-
export declare function SettingsRail({ title, activeLabel, navOpen, onToggleNav, testIdPrefix, fillHeight, ...bodyProps }: SettingsRailProps): React.JSX.Element;
|
|
31
|
+
export declare function SettingsRail({ title, activeLabel, navOpen, onToggleNav, testIdPrefix, fillHeight, railVariant, ...bodyProps }: SettingsRailProps): React.JSX.Element;
|
|
28
32
|
//# sourceMappingURL=SettingsLayout.rail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsLayout.rail.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.rail.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SettingsLayout.rail.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.rail.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG3E,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,gBAAgB,EAEhB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AA6GhC,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAC9C,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,UAAU,EAAE,OAAO,CAAC;CACrB;AA4FD,qFAAqF;AACrF,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG;IAC9C,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iFAAiF;IACjF,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC,CAAC;AAqBF,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAkB,EAClB,WAAuB,EACvB,GAAG,SAAS,EACb,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkEvC"}
|
|
@@ -2,6 +2,8 @@ import type { CSSObject, SxProps, Theme } from '@mui/material/styles/index.js';
|
|
|
2
2
|
import type { SettingsNavStatus, SettingsRailBreakpoint } from './SettingsLayout.types';
|
|
3
3
|
/** Fixed width of the left navigation rail once it has its own column (300 design px). */
|
|
4
4
|
export declare const railWidth: (theme: Theme) => string;
|
|
5
|
+
/** Width of the rail drawn as a card (`railVariant="card"`, 200 design px). */
|
|
6
|
+
export declare const railCardWidth: (theme: Theme) => string;
|
|
5
7
|
/** Visually hidden, still read aloud — for text a marker's colour cannot carry. */
|
|
6
8
|
export declare const SR_ONLY_SX: SxProps<Theme>;
|
|
7
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsLayout.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAExF,0FAA0F;AAC1F,eAAO,MAAM,SAAS,GAAI,OAAO,KAAK,KAAG,MAAyB,CAAC;AAEnE,mFAAmF;AACnF,eAAO,MAAM,UAAU,EAAE,OAAO,CAAC,KAAK,CAUrC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,sBAAsB,GAAG,MAAM,CAEpF;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,sBAAsB,EAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,SAAS,CAEX;AAED,iFAAiF;AACjF,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,MAAM,CAI7E,CAAC"}
|
|
1
|
+
{"version":3,"file":"SettingsLayout.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAExF,0FAA0F;AAC1F,eAAO,MAAM,SAAS,GAAI,OAAO,KAAK,KAAG,MAAyB,CAAC;AAEnE,+EAA+E;AAC/E,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,MAAyB,CAAC;AAEvE,mFAAmF;AACnF,eAAO,MAAM,UAAU,EAAE,OAAO,CAAC,KAAK,CAUrC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,sBAAsB,GAAG,MAAM,CAEpF;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,sBAAsB,EAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,SAAS,CAEX;AAED,iFAAiF;AACjF,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,MAAM,CAI7E,CAAC"}
|
|
@@ -83,6 +83,11 @@ export type SettingsRailBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | number;
|
|
|
83
83
|
* does, and what fits at 375px, where a 300px rail would leave 75px of content.
|
|
84
84
|
*/
|
|
85
85
|
export type SettingsNavVariant = 'switcher' | 'drilldown';
|
|
86
|
+
/**
|
|
87
|
+
* How the rail is drawn once it has its own column: `divided` — a 300px column
|
|
88
|
+
* ruled off from the panel; `card` — a 200px bordered card beside it.
|
|
89
|
+
*/
|
|
90
|
+
export type SettingsRailVariant = 'divided' | 'card';
|
|
86
91
|
/** The exit offered inside the empty-search state, so the dead end has a door. */
|
|
87
92
|
export interface SettingsEmptySearchAction {
|
|
88
93
|
/** Button label, e.g. `"Limpar a busca"`. */
|
|
@@ -160,6 +165,20 @@ export interface SettingsLayoutProps {
|
|
|
160
165
|
railBreakpoint?: SettingsRailBreakpoint;
|
|
161
166
|
/** Narrow-width navigation shape. Defaults to `"switcher"`. */
|
|
162
167
|
navVariant?: SettingsNavVariant;
|
|
168
|
+
/**
|
|
169
|
+
* Whether the rail carries its search field. Defaults to `true`.
|
|
170
|
+
*
|
|
171
|
+
* A settings area with twenty categories needs the field; an area of eight
|
|
172
|
+
* rows a reader takes in at a glance is better without one, which is how a
|
|
173
|
+
* storefront's own account area draws it. Off, the rail shows every group.
|
|
174
|
+
*/
|
|
175
|
+
searchable?: boolean;
|
|
176
|
+
/**
|
|
177
|
+
* How the rail is drawn from `railBreakpoint` up. Defaults to `"divided"`
|
|
178
|
+
* (a 300px column ruled off from the panel); `"card"` draws it as a 200px
|
|
179
|
+
* bordered card. Below the breakpoint both look the same.
|
|
180
|
+
*/
|
|
181
|
+
railVariant?: SettingsRailVariant;
|
|
163
182
|
/**
|
|
164
183
|
* True when the router is at the area's index rather than inside a section.
|
|
165
184
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsLayout.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,uEAAuE;IACvE,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAExE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,WAAW,CAAC;AAE1D,kFAAkF;AAClF,MAAM,WAAW,yBAAyB;IACxC,6CAA6C;IAC7C,KAAK,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,4CAA4C;IAC5C,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAC9C;;;;OAIG;IACH,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,qEAAqE;IACrE,QAAQ,EAAE,SAAS,CAAC;IACpB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,+DAA+D;IAC/D,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;CAClC"}
|
|
1
|
+
{"version":3,"file":"SettingsLayout.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/SettingsLayout.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,5 @@ export { SettingsSectionChips } from './SettingsSectionChips';
|
|
|
3
3
|
export type { SettingsSectionChipsProps } from './SettingsSectionChips';
|
|
4
4
|
export { SettingsStatusMarker } from './SettingsStatusMarker';
|
|
5
5
|
export type { SettingsStatusMarkerProps } from './SettingsStatusMarker';
|
|
6
|
-
export type { SettingsEmptySearchAction, SettingsLayoutProps, SettingsNavGroup, SettingsNavItem, SettingsNavStatus, SettingsNavVariant, SettingsRailBreakpoint, } from './SettingsLayout.types';
|
|
6
|
+
export type { SettingsEmptySearchAction, SettingsLayoutProps, SettingsNavGroup, SettingsNavItem, SettingsNavStatus, SettingsNavVariant, SettingsRailVariant, SettingsRailBreakpoint, } from './SettingsLayout.types';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,YAAY,EACV,yBAAyB,EACzB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingsLayout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,YAAY,EACV,yBAAyB,EACzB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
|
package/package.json
CHANGED
|
@@ -65,12 +65,17 @@ const StyledTextarea = styled(TextareaAutosize, {
|
|
|
65
65
|
const colorPalette = getColorFromTheme(theme, customColor);
|
|
66
66
|
const errorColor = theme.palette.error;
|
|
67
67
|
|
|
68
|
+
// No min-height here: the box's height is counted in LINES of its own text
|
|
69
|
+
// (`minRows`). A pixel floor broke that twice over — it ignored the font, and
|
|
70
|
+
// `TextareaAutosize` measures one row on a hidden copy carrying this same
|
|
71
|
+
// class, so a "row" came out as the whole floor and `minRows={2}` drew about
|
|
72
|
+
// 200px (FUT-3504, FUT-3534).
|
|
68
73
|
const sizeMap = {
|
|
69
|
-
xs: { padding: rems(theme, 6, 8), fontSize: rem(theme, 12)
|
|
70
|
-
sm: { padding: rems(theme, 8, 10), fontSize: rem(theme, 14)
|
|
71
|
-
md: { padding: rems(theme, 10, 12), fontSize: rem(theme, 16)
|
|
72
|
-
lg: { padding: rems(theme, 12, 14), fontSize: rem(theme, 18)
|
|
73
|
-
xl: { padding: rems(theme, 14, 16), fontSize: rem(theme, 20)
|
|
74
|
+
xs: { padding: rems(theme, 6, 8), fontSize: rem(theme, 12) },
|
|
75
|
+
sm: { padding: rems(theme, 8, 10), fontSize: rem(theme, 14) },
|
|
76
|
+
md: { padding: rems(theme, 10, 12), fontSize: rem(theme, 16) },
|
|
77
|
+
lg: { padding: rems(theme, 12, 14), fontSize: rem(theme, 18) },
|
|
78
|
+
xl: { padding: rems(theme, 14, 16), fontSize: rem(theme, 20) } };
|
|
74
79
|
|
|
75
80
|
const baseStyles = {
|
|
76
81
|
width: '100%',
|
|
@@ -143,7 +148,9 @@ const TEXTAREA_DEFAULTS = {
|
|
|
143
148
|
glass: false,
|
|
144
149
|
gradient: false,
|
|
145
150
|
iconPosition: 'start',
|
|
146
|
-
|
|
151
|
+
// Four lines of its own text, whatever the variant or size (FUT-3534); a
|
|
152
|
+
// screen that wants another height passes `minRows`.
|
|
153
|
+
minRows: 4 } satisfies Partial<TextareaProps>;
|
|
147
154
|
|
|
148
155
|
// Strips explicitly-undefined props before the merge, so `prop={undefined}`
|
|
149
156
|
// still falls back to the default as a destructuring default would.
|
|
@@ -304,7 +311,7 @@ export const Textarea: React.FC<TextareaProps> = (textareaProps) => {
|
|
|
304
311
|
glass={glass}
|
|
305
312
|
gradient={gradient}
|
|
306
313
|
error={error}
|
|
307
|
-
minRows={
|
|
314
|
+
minRows={minRows}
|
|
308
315
|
maxRows={variant === 'autosize' ? maxRows : undefined}
|
|
309
316
|
style={textareaStyle}
|
|
310
317
|
aria-label={label || props['aria-label']}
|
|
@@ -77,12 +77,14 @@ export interface TextareaBaseProps
|
|
|
77
77
|
gradient?: boolean;
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
|
-
*
|
|
80
|
+
* How many lines of its own text the box opens at, in every variant.
|
|
81
|
+
* Defaults to 4; pass it to override.
|
|
81
82
|
*/
|
|
82
83
|
minRows?: number;
|
|
83
84
|
|
|
84
85
|
/**
|
|
85
|
-
*
|
|
86
|
+
* The most lines the `autosize` variant grows to before it scrolls.
|
|
87
|
+
* The other variants ignore it.
|
|
86
88
|
*/
|
|
87
89
|
maxRows?: number;
|
|
88
90
|
|
|
@@ -12,7 +12,7 @@ import type { SxProps, Theme } from '@mui/material/styles/index.js';
|
|
|
12
12
|
import React from 'react';
|
|
13
13
|
|
|
14
14
|
import { atLeastRail, TOUCH_TARGET } from './SettingsLayout.styles';
|
|
15
|
-
import { rem } from '../../../tokens/relative';
|
|
15
|
+
import { rem, sxRem } from '../../../tokens/relative';
|
|
16
16
|
import { SettingsStatusMarker } from './SettingsStatusMarker';
|
|
17
17
|
import type {
|
|
18
18
|
SettingsLayoutProps,
|
|
@@ -27,6 +27,8 @@ export interface RailShape {
|
|
|
27
27
|
variant: SettingsNavVariant;
|
|
28
28
|
breakpoint: SettingsRailBreakpoint;
|
|
29
29
|
atIndex: boolean;
|
|
30
|
+
/** The rail is drawn as a card (`railVariant="card"`): denser rows, darker text. */
|
|
31
|
+
card?: boolean;
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
interface RailItemProps extends RailShape {
|
|
@@ -69,6 +71,34 @@ function RailItemContent({
|
|
|
69
71
|
);
|
|
70
72
|
}
|
|
71
73
|
|
|
74
|
+
/**
|
|
75
|
+
* The row's text colour. On the card the active row's red is the darker one,
|
|
76
|
+
* since `primary.main` on its 12% wash measured 4.19:1 — under AA at 16px —
|
|
77
|
+
* and the rest read in the body colour, as the card's prototype draws them.
|
|
78
|
+
*/
|
|
79
|
+
function railItemColor(active: boolean, card: boolean): string {
|
|
80
|
+
if (active) return card ? 'primary.dark' : 'primary.main';
|
|
81
|
+
return card ? 'text.primary' : 'text.secondary';
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Keyboard focus as a ring, not MUI's grey fill: the fill measured 1.3:1
|
|
86
|
+
* against the rail, under the 3:1 a focus indicator needs.
|
|
87
|
+
*/
|
|
88
|
+
const FOCUS_RING_SX = {
|
|
89
|
+
'&.Mui-focusVisible': {
|
|
90
|
+
outlineStyle: 'solid',
|
|
91
|
+
outlineWidth: sxRem(2),
|
|
92
|
+
outlineColor: 'primary.main',
|
|
93
|
+
outlineOffset: sxRem(-2),
|
|
94
|
+
},
|
|
95
|
+
} as const;
|
|
96
|
+
|
|
97
|
+
/** The card's rows from the breakpoint up: 36px, the prototype's rail density. */
|
|
98
|
+
function cardRowSx(theme: Theme, breakpoint: SettingsRailBreakpoint): Record<string, unknown> {
|
|
99
|
+
return { [atLeastRail(theme, breakpoint)]: { minHeight: rem(theme, 36), py: sxRem(6) } };
|
|
100
|
+
}
|
|
101
|
+
|
|
72
102
|
/** One rail entry — a link when it has `href`, inert text when it says so, else a button. */
|
|
73
103
|
export function SettingsRailItem({
|
|
74
104
|
item,
|
|
@@ -79,6 +109,7 @@ export function SettingsRailItem({
|
|
|
79
109
|
testIdPrefix,
|
|
80
110
|
variant,
|
|
81
111
|
breakpoint,
|
|
112
|
+
card = false,
|
|
82
113
|
}: RailItemProps): React.JSX.Element {
|
|
83
114
|
const theme = useTheme();
|
|
84
115
|
// In `drilldown` the narrow rail IS the page's list, so its rows are the
|
|
@@ -95,11 +126,13 @@ export function SettingsRailItem({
|
|
|
95
126
|
mb: 0.25,
|
|
96
127
|
gap: 1.5,
|
|
97
128
|
...touchFloor,
|
|
98
|
-
|
|
129
|
+
...(card ? cardRowSx(theme, breakpoint) : null),
|
|
130
|
+
color: railItemColor(active, card),
|
|
99
131
|
'&.Mui-selected': {
|
|
100
132
|
bgcolor: alpha(theme.palette.primary.main, 0.12),
|
|
101
133
|
'&:hover': { bgcolor: alpha(theme.palette.primary.main, 0.18) },
|
|
102
134
|
},
|
|
135
|
+
...FOCUS_RING_SX,
|
|
103
136
|
},
|
|
104
137
|
};
|
|
105
138
|
const content = <RailItemContent item={item} active={active} testIdPrefix={testIdPrefix} />;
|
|
@@ -171,7 +204,9 @@ function indexListSx(shape: RailShape): Extract<SxProps<Theme>, (theme: Theme) =
|
|
|
171
204
|
// One spacing unit (8px). This is an `sx` callback, where a bare 8 is
|
|
172
205
|
// EIGHT units — it drew a 64px gutter between the two columns.
|
|
173
206
|
columnGap: 1,
|
|
174
|
-
|
|
207
|
+
// From `md`, not `sm`: at 600 two columns of bare text rows read as one
|
|
208
|
+
// list with a hole in it, and a row's status dot sat nearer the next column.
|
|
209
|
+
[theme.breakpoints.up('md')]: { gridTemplateColumns: '1fr 1fr' },
|
|
175
210
|
[atLeastRail(theme, shape.breakpoint)]: { gridTemplateColumns: '1fr' },
|
|
176
211
|
});
|
|
177
212
|
}
|
|
@@ -165,6 +165,23 @@ it: a `position: sticky` toolbar inside `children` pins to the top of the
|
|
|
165
165
|
the scroll container.
|
|
166
166
|
|
|
167
167
|
|
|
168
|
+
## A small area: no search, a card rail (`searchable`, `railVariant`)
|
|
169
|
+
|
|
170
|
+
The search field earns its place in an area of twenty categories. In one of
|
|
171
|
+
eight rows a reader takes in at a glance it is a control nobody needs, so
|
|
172
|
+
`searchable={false}` leaves it out and the rail shows every group.
|
|
173
|
+
|
|
174
|
+
`railVariant="card"` draws the rail, from `railBreakpoint` up, as a 200px
|
|
175
|
+
bordered card beside the panel instead of the default 300px column ruled off
|
|
176
|
+
from it. Below the breakpoint both variants look the same.
|
|
177
|
+
|
|
178
|
+
```tsx
|
|
179
|
+
<SettingsLayout searchable={false} railVariant="card" …>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Both default to today's shape, so an upgrade changes nothing for an area that
|
|
183
|
+
does not ask.
|
|
184
|
+
|
|
168
185
|
## Props
|
|
169
186
|
|
|
170
187
|
### SettingsLayoutProps
|
|
@@ -184,6 +201,8 @@ the scroll container.
|
|
|
184
201
|
| railBreakpoint | `'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Width at which the rail takes its own column |
|
|
185
202
|
| fillHeight | boolean | `false` | Rail and panel each scroll themselves (needs a definite height) |
|
|
186
203
|
| navVariant | `'switcher' \| 'drilldown'` | `'switcher'` | Narrow-width navigation shape |
|
|
204
|
+
| searchable | boolean | `true` | Whether the rail carries its search field |
|
|
205
|
+
| railVariant | `'divided' \| 'card'` | `'divided'` | From the breakpoint up: a 300px ruled column, or a 200px card |
|
|
187
206
|
| atIndex | boolean | `false` | `drilldown`: the router is at the area's index, not in a section |
|
|
188
207
|
| indexHref | string | - | `drilldown`: where the back link goes |
|
|
189
208
|
| backLabel | string | `'Back'` | Label on the back control |
|