@12-apps/ui 6.64.1 → 6.65.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.
- package/dist/_internal/components/data-display/Sheet/Sheet.js +1 -1
- package/dist/_internal/components/data-display/index.js +1 -1
- package/dist/_internal/components/form/PickerSheet/PickerSheet.js +3 -3
- package/dist/_internal/components/form/PickerSheet/PickerSheet.parts.js +2 -2
- package/dist/_internal/components/form/PickerSheet/PickerSheet.styles.js +1 -1
- package/dist/_internal/components/index.js +2 -2
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +2 -2
- package/dist/_internal/components/navigation/index.js +2 -2
- package/dist/{chunk-642NSD7N.js → chunk-HG7MCNRR.js} +2 -1
- package/dist/{chunk-642NSD7N.js.map → chunk-HG7MCNRR.js.map} +1 -1
- package/dist/{chunk-OLT6ZXK5.js → chunk-IDRVQVDL.js} +2 -2
- package/dist/chunk-IICBAAL7.js +128 -0
- package/dist/chunk-IICBAAL7.js.map +1 -0
- package/dist/{chunk-WYRDR4T5.js → chunk-LZJHHMOF.js} +8 -6
- package/dist/chunk-LZJHHMOF.js.map +1 -0
- package/dist/{chunk-GWL5FYPN.js → chunk-OZGKIHAA.js} +2 -2
- package/dist/data-display/Sheet.js +1 -1
- package/dist/form/PickerSheet.js +3 -3
- package/dist/navigation/AppHeader.js +2 -2
- package/dist/types/components/data-display/Sheet/Sheet.d.ts.map +1 -1
- package/dist/types/components/data-display/Sheet/Sheet.types.d.ts +2 -0
- package/dist/types/components/data-display/Sheet/Sheet.types.d.ts.map +1 -1
- package/dist/types/components/form/PickerSheet/PickerSheet.d.ts.map +1 -1
- package/dist/types/components/form/PickerSheet/PickerSheet.styles.d.ts.map +1 -1
- package/dist/types/components/form/PickerSheet/PickerSheet.types.d.ts +2 -0
- package/dist/types/components/form/PickerSheet/PickerSheet.types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/data-display/Sheet/Sheet.md +1 -0
- package/src/components/data-display/Sheet/Sheet.tsx +1 -0
- package/src/components/data-display/Sheet/Sheet.types.ts +2 -0
- package/src/components/form/PickerSheet/PickerSheet.md +1 -0
- package/src/components/form/PickerSheet/PickerSheet.styles.ts +12 -5
- package/src/components/form/PickerSheet/PickerSheet.tsx +22 -4
- package/src/components/form/PickerSheet/PickerSheet.types.ts +2 -0
- package/dist/chunk-TX3B7OAA.js +0 -108
- package/dist/chunk-TX3B7OAA.js.map +0 -1
- package/dist/chunk-WYRDR4T5.js.map +0 -1
- /package/dist/{chunk-OLT6ZXK5.js.map → chunk-IDRVQVDL.js.map} +0 -0
- /package/dist/{chunk-GWL5FYPN.js.map → chunk-OZGKIHAA.js.map} +0 -0
|
@@ -16,7 +16,7 @@ import "../../../chunk-5JEOLUWJ.js";
|
|
|
16
16
|
import "../../../chunk-ITACE45O.js";
|
|
17
17
|
import {
|
|
18
18
|
Sheet
|
|
19
|
-
} from "../../../chunk-
|
|
19
|
+
} from "../../../chunk-HG7MCNRR.js";
|
|
20
20
|
import "../../../chunk-3ROCD7XF.js";
|
|
21
21
|
import "../../../chunk-LYVTJLCF.js";
|
|
22
22
|
import "../../../chunk-CRN4KKNI.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
PickerSheet
|
|
4
|
-
} from "../../../../chunk-
|
|
5
|
-
import "../../../../chunk-
|
|
4
|
+
} from "../../../../chunk-IICBAAL7.js";
|
|
5
|
+
import "../../../../chunk-IDRVQVDL.js";
|
|
6
6
|
import "../../../../chunk-WSMUOFWF.js";
|
|
7
7
|
import "../../../../chunk-QZOXMH7X.js";
|
|
8
|
-
import "../../../../chunk-
|
|
8
|
+
import "../../../../chunk-LZJHHMOF.js";
|
|
9
9
|
import "../../../../chunk-VPGDYI63.js";
|
|
10
10
|
import "../../../../chunk-DMNZD3Q7.js";
|
|
11
11
|
import "../../../../chunk-PN4HVM43.js";
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
PickerSheetHead,
|
|
4
4
|
PickerSheetList,
|
|
5
5
|
PickerSheetSearch
|
|
6
|
-
} from "../../../../chunk-
|
|
7
|
-
import "../../../../chunk-
|
|
6
|
+
} from "../../../../chunk-IDRVQVDL.js";
|
|
7
|
+
import "../../../../chunk-LZJHHMOF.js";
|
|
8
8
|
import "../../../../chunk-DMNZD3Q7.js";
|
|
9
9
|
import "../../../../chunk-TZ23DNKY.js";
|
|
10
10
|
import "../../../../chunk-RGVNXES5.js";
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
searchFieldSx,
|
|
18
18
|
sheetPaperSx,
|
|
19
19
|
titleSx
|
|
20
|
-
} from "../../../../chunk-
|
|
20
|
+
} from "../../../../chunk-LZJHHMOF.js";
|
|
21
21
|
import "../../../../chunk-TZ23DNKY.js";
|
|
22
22
|
import "../../../../chunk-RGVNXES5.js";
|
|
23
23
|
import "../../../../chunk-GDN2LUTZ.js";
|
|
@@ -168,7 +168,7 @@ import {
|
|
|
168
168
|
} from "../../chunk-GWFAINQ7.js";
|
|
169
169
|
import {
|
|
170
170
|
AppHeaderDetails
|
|
171
|
-
} from "../../chunk-
|
|
171
|
+
} from "../../chunk-OZGKIHAA.js";
|
|
172
172
|
import {
|
|
173
173
|
brandGradient,
|
|
174
174
|
highlightOf,
|
|
@@ -451,7 +451,7 @@ import "../../chunk-5JEOLUWJ.js";
|
|
|
451
451
|
import "../../chunk-ITACE45O.js";
|
|
452
452
|
import {
|
|
453
453
|
Sheet
|
|
454
|
-
} from "../../chunk-
|
|
454
|
+
} from "../../chunk-HG7MCNRR.js";
|
|
455
455
|
import "../../chunk-3ROCD7XF.js";
|
|
456
456
|
import "../../chunk-LYVTJLCF.js";
|
|
457
457
|
import "../../chunk-CRN4KKNI.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
AppHeaderDetails
|
|
4
|
-
} from "../../../../chunk-
|
|
5
|
-
import "../../../../chunk-
|
|
4
|
+
} from "../../../../chunk-OZGKIHAA.js";
|
|
5
|
+
import "../../../../chunk-HG7MCNRR.js";
|
|
6
6
|
import "../../../../chunk-3ROCD7XF.js";
|
|
7
7
|
import "../../../../chunk-LYVTJLCF.js";
|
|
8
8
|
import "../../../../chunk-CRN4KKNI.js";
|
|
@@ -60,7 +60,7 @@ import {
|
|
|
60
60
|
} from "../../../chunk-GWFAINQ7.js";
|
|
61
61
|
import {
|
|
62
62
|
AppHeaderDetails
|
|
63
|
-
} from "../../../chunk-
|
|
63
|
+
} from "../../../chunk-OZGKIHAA.js";
|
|
64
64
|
import {
|
|
65
65
|
brandGradient,
|
|
66
66
|
highlightOf,
|
|
@@ -68,7 +68,7 @@ import {
|
|
|
68
68
|
} from "../../../chunk-IQU4HKND.js";
|
|
69
69
|
import "../../../chunk-TMSWLFL4.js";
|
|
70
70
|
import "../../../chunk-UALPKKAY.js";
|
|
71
|
-
import "../../../chunk-
|
|
71
|
+
import "../../../chunk-HG7MCNRR.js";
|
|
72
72
|
import "../../../chunk-3ROCD7XF.js";
|
|
73
73
|
import "../../../chunk-LYVTJLCF.js";
|
|
74
74
|
import "../../../chunk-CRN4KKNI.js";
|
|
@@ -96,6 +96,7 @@ var Sheet = (props) => {
|
|
|
96
96
|
anchor: position,
|
|
97
97
|
open: isOpen,
|
|
98
98
|
className,
|
|
99
|
+
...resolved.animated === false ? { transitionDuration: 0 } : {},
|
|
99
100
|
// A tap outside obeys `closeOnOverlayClick`. A swipe-to-dismiss (no
|
|
100
101
|
// reason: SwipeableDrawer calls `onClose()` bare) closes. Escape is the
|
|
101
102
|
// hook's own listener alone, which honours `closeOnEscape` — the modal's
|
|
@@ -142,4 +143,4 @@ var Sheet = (props) => {
|
|
|
142
143
|
export {
|
|
143
144
|
Sheet
|
|
144
145
|
};
|
|
145
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-HG7MCNRR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Sheet/Sheet.tsx"],"sourcesContent":["import Drawer from '@mui/material/Drawer/index.js';\nimport SwipeableDrawer from '@mui/material/SwipeableDrawer/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type { BackdropProps } from '@mui/material/Backdrop/index.js';\nimport React from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport {\n DEFAULT_DRAG_RESISTANCE,\n DEFAULT_VELOCITY_THRESHOLD,\n SPRING_CONFIG,\n} from './Sheet.animations';\nimport { SheetBody } from './Sheet.body';\nimport { useSheetDrag, useSheetOpen } from './Sheet.hooks';\nimport { SheetOverlay } from './Sheet.parts';\nimport { panelSx } from './Sheet.styles';\nimport type { SheetProps } from './Sheet.types';\n\nexport { SheetContent, SheetFooter, SheetHeader, SheetOverlay } from './Sheet.parts';\n\nconst DEFAULTS = {\n open: false,\n position: 'bottom',\n variant: 'default',\n size: 'md',\n color: 'primary',\n glow: false,\n pulse: false,\n glass: false,\n gradient: false,\n loading: false,\n disabled: false,\n showOverlay: true,\n closeOnOverlayClick: true,\n closeOnEscape: true,\n showCloseButton: true,\n showHandle: true,\n swipeable: true,\n snapPoints: [0.25, 0.5, 0.75, 1],\n defaultSnapPoint: 0.5,\n minSnapPoint: 0,\n maxSnapPoint: 1,\n velocityThreshold: DEFAULT_VELOCITY_THRESHOLD,\n dragResistance: DEFAULT_DRAG_RESISTANCE,\n animationConfig: SPRING_CONFIG,\n persistent: false,\n fullHeight: false,\n rounded: true,\n elevation: 16,\n dataTestId: 'sheet',\n} satisfies Partial<SheetProps>;\n\n/**\n * The props with every defaulted key now guaranteed present. Without this the\n * component would need a `?? fallback` at each use site, and each of those is a\n * branch the complexity gate counts.\n */\ntype ResolvedSheetProps = SheetProps & Required<Pick<SheetProps, keyof typeof DEFAULTS>>;\n\n/**\n * The drawer's own backdrop, made invisible: it only CATCHES the tap.\n *\n * The visible veil is {@link SheetOverlay}, which knows about the `glass`\n * blur. But the drawer's modal root covers the whole viewport above that veil,\n * so with no backdrop at all a tap on the veil landed on the bare root, which\n * handles nothing — and no sheet ever closed on an outside tap. This one sits\n * under the panel, paints nothing, and hands the tap to the drawer's\n * `onClose('backdropClick')`, which the sheet routes through its own\n * `closeOnOverlayClick` / `persistent` rules.\n *\n * Defined at module scope: a component built inside a render is a new type on\n * every pass, which remounts the subtree it belongs to.\n */\nconst ClickCatcher = React.forwardRef<HTMLDivElement, BackdropProps & { 'data-testid'?: string }>(\n ({ onClick, 'data-testid': testId }, ref) => (\n <div\n ref={ref}\n aria-hidden\n onClick={onClick}\n data-testid={testId}\n style={{ position: 'fixed', inset: 0, backgroundColor: 'transparent' }}\n />\n ),\n) as React.ComponentType<BackdropProps>;\nClickCatcher.displayName = 'SheetClickCatcher';\n\n/**\n * Which way the sheet is anchored. Four flags rather than four repeated\n * comparisons, and the only thing the hooks and styles need to know about\n * `position` and `variant`.\n */\nconst orientationOf = ({ position, variant }: ResolvedSheetProps) => {\n const isBottomSheet = position === 'bottom';\n const isTopSheet = position === 'top';\n\n return {\n isBottomSheet,\n isTopSheet,\n isVerticalSheet: isBottomSheet || isTopSheet,\n isDraggableVariant: variant === 'draggable',\n };\n};\n\nexport const Sheet: React.FC<SheetProps> = (props) => {\n const resolved = withDefaults(props, DEFAULTS) as ResolvedSheetProps;\n const { position, variant, showOverlay, swipeable, className, dataTestId } = resolved;\n\n const theme = useTheme();\n const orientation = orientationOf(resolved);\n\n // Support both the dataTestId prop and a plain data-testid attribute.\n const testId = (resolved as { 'data-testid'?: string })['data-testid'] || dataTestId;\n\n const { sheetRef, currentHeight, isDragging, isAnimating, handleDragStart, resetToDefaultSnapPoint } =\n useSheetDrag({ ...resolved, ...orientation });\n\n const { isOpen, handleClose, handleOverlayClick, handleSwipeOpen } = useSheetOpen({\n ...resolved,\n ...orientation,\n resetToDefaultSnapPoint,\n });\n\n const drawerProps = {\n anchor: position,\n open: isOpen,\n className,\n // A tap outside obeys `closeOnOverlayClick`. A swipe-to-dismiss (no\n // reason: SwipeableDrawer calls `onClose()` bare) closes. Escape is the\n // hook's own listener alone, which honours `closeOnEscape` — the modal's\n // is switched off below so the key never closes twice or past the flag.\n onClose: (_event?: object, reason?: 'backdropClick' | 'escapeKeyDown') =>\n reason === 'backdropClick' ? handleOverlayClick() : handleClose(),\n PaperProps: {\n ref: sheetRef,\n sx: panelSx({ ...resolved, ...orientation, theme, currentHeight, isDragging, isAnimating }),\n },\n ModalProps: {\n keepMounted: true,\n disableEscapeKeyDown: true,\n BackdropComponent: ClickCatcher,\n BackdropProps: { 'data-testid': testId ? `${testId}-click-catcher` : undefined } as Partial<BackdropProps>,\n },\n };\n\n const body = (\n <SheetBody\n {...resolved}\n {...orientation}\n testId={testId}\n isDragging={isDragging}\n onClose={handleClose}\n onDragStart={handleDragStart}\n />\n );\n\n // The draggable variant drives the panel's height itself; MUI's swipe handling\n // would be a second thing moving it.\n const isSwipeable = swipeable && !orientation.isDraggableVariant;\n\n return (\n <>\n {showOverlay && isOpen && (\n <SheetOverlay open={isOpen} onClick={handleOverlayClick} blur={variant === 'glass'} />\n )}\n\n {isSwipeable ? (\n <SwipeableDrawer\n {...drawerProps}\n onOpen={handleSwipeOpen}\n disableSwipeToOpen={false}\n swipeAreaWidth={20}\n >\n {body}\n </SwipeableDrawer>\n ) : (\n <Drawer {...drawerProps}>{body}</Drawer>\n )}\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,YAAY;AACnB,OAAO,qBAAqB;AAC5B,SAAS,gBAAgB;AAEzB,OAAO,WAAW;AAwEd,
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/Sheet/Sheet.tsx"],"sourcesContent":["import Drawer from '@mui/material/Drawer/index.js';\nimport SwipeableDrawer from '@mui/material/SwipeableDrawer/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type { BackdropProps } from '@mui/material/Backdrop/index.js';\nimport React from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport {\n DEFAULT_DRAG_RESISTANCE,\n DEFAULT_VELOCITY_THRESHOLD,\n SPRING_CONFIG,\n} from './Sheet.animations';\nimport { SheetBody } from './Sheet.body';\nimport { useSheetDrag, useSheetOpen } from './Sheet.hooks';\nimport { SheetOverlay } from './Sheet.parts';\nimport { panelSx } from './Sheet.styles';\nimport type { SheetProps } from './Sheet.types';\n\nexport { SheetContent, SheetFooter, SheetHeader, SheetOverlay } from './Sheet.parts';\n\nconst DEFAULTS = {\n open: false,\n position: 'bottom',\n variant: 'default',\n size: 'md',\n color: 'primary',\n glow: false,\n pulse: false,\n glass: false,\n gradient: false,\n loading: false,\n disabled: false,\n showOverlay: true,\n closeOnOverlayClick: true,\n closeOnEscape: true,\n showCloseButton: true,\n showHandle: true,\n swipeable: true,\n snapPoints: [0.25, 0.5, 0.75, 1],\n defaultSnapPoint: 0.5,\n minSnapPoint: 0,\n maxSnapPoint: 1,\n velocityThreshold: DEFAULT_VELOCITY_THRESHOLD,\n dragResistance: DEFAULT_DRAG_RESISTANCE,\n animationConfig: SPRING_CONFIG,\n persistent: false,\n fullHeight: false,\n rounded: true,\n elevation: 16,\n dataTestId: 'sheet',\n} satisfies Partial<SheetProps>;\n\n/**\n * The props with every defaulted key now guaranteed present. Without this the\n * component would need a `?? fallback` at each use site, and each of those is a\n * branch the complexity gate counts.\n */\ntype ResolvedSheetProps = SheetProps & Required<Pick<SheetProps, keyof typeof DEFAULTS>>;\n\n/**\n * The drawer's own backdrop, made invisible: it only CATCHES the tap.\n *\n * The visible veil is {@link SheetOverlay}, which knows about the `glass`\n * blur. But the drawer's modal root covers the whole viewport above that veil,\n * so with no backdrop at all a tap on the veil landed on the bare root, which\n * handles nothing — and no sheet ever closed on an outside tap. This one sits\n * under the panel, paints nothing, and hands the tap to the drawer's\n * `onClose('backdropClick')`, which the sheet routes through its own\n * `closeOnOverlayClick` / `persistent` rules.\n *\n * Defined at module scope: a component built inside a render is a new type on\n * every pass, which remounts the subtree it belongs to.\n */\nconst ClickCatcher = React.forwardRef<HTMLDivElement, BackdropProps & { 'data-testid'?: string }>(\n ({ onClick, 'data-testid': testId }, ref) => (\n <div\n ref={ref}\n aria-hidden\n onClick={onClick}\n data-testid={testId}\n style={{ position: 'fixed', inset: 0, backgroundColor: 'transparent' }}\n />\n ),\n) as React.ComponentType<BackdropProps>;\nClickCatcher.displayName = 'SheetClickCatcher';\n\n/**\n * Which way the sheet is anchored. Four flags rather than four repeated\n * comparisons, and the only thing the hooks and styles need to know about\n * `position` and `variant`.\n */\nconst orientationOf = ({ position, variant }: ResolvedSheetProps) => {\n const isBottomSheet = position === 'bottom';\n const isTopSheet = position === 'top';\n\n return {\n isBottomSheet,\n isTopSheet,\n isVerticalSheet: isBottomSheet || isTopSheet,\n isDraggableVariant: variant === 'draggable',\n };\n};\n\nexport const Sheet: React.FC<SheetProps> = (props) => {\n const resolved = withDefaults(props, DEFAULTS) as ResolvedSheetProps;\n const { position, variant, showOverlay, swipeable, className, dataTestId } = resolved;\n\n const theme = useTheme();\n const orientation = orientationOf(resolved);\n\n // Support both the dataTestId prop and a plain data-testid attribute.\n const testId = (resolved as { 'data-testid'?: string })['data-testid'] || dataTestId;\n\n const { sheetRef, currentHeight, isDragging, isAnimating, handleDragStart, resetToDefaultSnapPoint } =\n useSheetDrag({ ...resolved, ...orientation });\n\n const { isOpen, handleClose, handleOverlayClick, handleSwipeOpen } = useSheetOpen({\n ...resolved,\n ...orientation,\n resetToDefaultSnapPoint,\n });\n\n const drawerProps = {\n anchor: position,\n open: isOpen,\n className,\n ...(resolved.animated === false ? { transitionDuration: 0 } : {}),\n // A tap outside obeys `closeOnOverlayClick`. A swipe-to-dismiss (no\n // reason: SwipeableDrawer calls `onClose()` bare) closes. Escape is the\n // hook's own listener alone, which honours `closeOnEscape` — the modal's\n // is switched off below so the key never closes twice or past the flag.\n onClose: (_event?: object, reason?: 'backdropClick' | 'escapeKeyDown') =>\n reason === 'backdropClick' ? handleOverlayClick() : handleClose(),\n PaperProps: {\n ref: sheetRef,\n sx: panelSx({ ...resolved, ...orientation, theme, currentHeight, isDragging, isAnimating }),\n },\n ModalProps: {\n keepMounted: true,\n disableEscapeKeyDown: true,\n BackdropComponent: ClickCatcher,\n BackdropProps: { 'data-testid': testId ? `${testId}-click-catcher` : undefined } as Partial<BackdropProps>,\n },\n };\n\n const body = (\n <SheetBody\n {...resolved}\n {...orientation}\n testId={testId}\n isDragging={isDragging}\n onClose={handleClose}\n onDragStart={handleDragStart}\n />\n );\n\n // The draggable variant drives the panel's height itself; MUI's swipe handling\n // would be a second thing moving it.\n const isSwipeable = swipeable && !orientation.isDraggableVariant;\n\n return (\n <>\n {showOverlay && isOpen && (\n <SheetOverlay open={isOpen} onClick={handleOverlayClick} blur={variant === 'glass'} />\n )}\n\n {isSwipeable ? (\n <SwipeableDrawer\n {...drawerProps}\n onOpen={handleSwipeOpen}\n disableSwipeToOpen={false}\n swipeAreaWidth={20}\n >\n {body}\n </SwipeableDrawer>\n ) : (\n <Drawer {...drawerProps}>{body}</Drawer>\n )}\n </>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
rowTextSx,
|
|
14
14
|
searchFieldSx,
|
|
15
15
|
titleSx
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-LZJHHMOF.js";
|
|
17
17
|
import {
|
|
18
18
|
CheckGlyph,
|
|
19
19
|
SearchGlyph
|
|
@@ -152,4 +152,4 @@ export {
|
|
|
152
152
|
PickerSheetSearch,
|
|
153
153
|
PickerSheetList
|
|
154
154
|
};
|
|
155
|
-
//# sourceMappingURL=chunk-
|
|
155
|
+
//# sourceMappingURL=chunk-IDRVQVDL.js.map
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PickerSheetHead,
|
|
3
|
+
PickerSheetList,
|
|
4
|
+
PickerSheetSearch
|
|
5
|
+
} from "./chunk-IDRVQVDL.js";
|
|
6
|
+
import {
|
|
7
|
+
usePickerSheet
|
|
8
|
+
} from "./chunk-WSMUOFWF.js";
|
|
9
|
+
import {
|
|
10
|
+
bodySx,
|
|
11
|
+
dialogPaperSx,
|
|
12
|
+
footSx,
|
|
13
|
+
sheetPaperSx
|
|
14
|
+
} from "./chunk-LZJHHMOF.js";
|
|
15
|
+
import {
|
|
16
|
+
METRICS
|
|
17
|
+
} from "./chunk-VPGDYI63.js";
|
|
18
|
+
import {
|
|
19
|
+
stackedOverlayZIndex
|
|
20
|
+
} from "./chunk-MFU4Y25U.js";
|
|
21
|
+
|
|
22
|
+
// src/components/form/PickerSheet/PickerSheet.tsx
|
|
23
|
+
import { useId } from "react";
|
|
24
|
+
import Box from "@mui/material/Box/index.js";
|
|
25
|
+
import Dialog from "@mui/material/Dialog/index.js";
|
|
26
|
+
import Drawer from "@mui/material/Drawer/index.js";
|
|
27
|
+
import { useTheme } from "@mui/material/styles/index.js";
|
|
28
|
+
import useMediaQuery from "@mui/material/useMediaQuery/index.js";
|
|
29
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
30
|
+
var ABOVE_SHEETS = { zIndex: stackedOverlayZIndex };
|
|
31
|
+
function PickerSheetSurface({
|
|
32
|
+
open,
|
|
33
|
+
sheet,
|
|
34
|
+
onClose,
|
|
35
|
+
titleId,
|
|
36
|
+
dataTestId,
|
|
37
|
+
animated,
|
|
38
|
+
children
|
|
39
|
+
}) {
|
|
40
|
+
const close = () => onClose();
|
|
41
|
+
const motion = animated ? {} : { transitionDuration: 0 };
|
|
42
|
+
if (sheet) {
|
|
43
|
+
const paper2 = {
|
|
44
|
+
sx: sheetPaperSx,
|
|
45
|
+
role: "dialog",
|
|
46
|
+
"aria-modal": true,
|
|
47
|
+
"aria-labelledby": titleId,
|
|
48
|
+
"data-testid": dataTestId
|
|
49
|
+
};
|
|
50
|
+
return /* @__PURE__ */ jsx(Drawer, { anchor: "bottom", open, onClose: close, sx: ABOVE_SHEETS, slotProps: { paper: paper2 }, ...motion, children });
|
|
51
|
+
}
|
|
52
|
+
const paper = { sx: dialogPaperSx, "data-testid": dataTestId };
|
|
53
|
+
return /* @__PURE__ */ jsx(Dialog, { open, onClose: close, "aria-labelledby": titleId, sx: ABOVE_SHEETS, slotProps: { paper }, ...motion, children });
|
|
54
|
+
}
|
|
55
|
+
function PickerSheet(props) {
|
|
56
|
+
const { open, onClose, kicker, title, searchPlaceholder, searchLabel, closeLabel, createLabel, createMeta, emptyText, foot } = props;
|
|
57
|
+
const dataTestId = props.dataTestId ?? "picker-sheet";
|
|
58
|
+
const theme = useTheme();
|
|
59
|
+
const sheet = useMediaQuery(theme.breakpoints.down(METRICS.sheetBreakpoint));
|
|
60
|
+
const baseId = useId();
|
|
61
|
+
const titleId = `${baseId}-title`;
|
|
62
|
+
const listId = `${baseId}-list`;
|
|
63
|
+
const rowId = (index) => `${baseId}-row-${index}`;
|
|
64
|
+
const state = usePickerSheet(props);
|
|
65
|
+
return /* @__PURE__ */ jsxs(
|
|
66
|
+
PickerSheetSurface,
|
|
67
|
+
{
|
|
68
|
+
open,
|
|
69
|
+
sheet,
|
|
70
|
+
onClose,
|
|
71
|
+
titleId,
|
|
72
|
+
dataTestId,
|
|
73
|
+
animated: props.animated ?? true,
|
|
74
|
+
children: [
|
|
75
|
+
/* @__PURE__ */ jsx(
|
|
76
|
+
PickerSheetHead,
|
|
77
|
+
{
|
|
78
|
+
kicker,
|
|
79
|
+
title,
|
|
80
|
+
titleId,
|
|
81
|
+
closeLabel,
|
|
82
|
+
onClose,
|
|
83
|
+
dataTestId
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
/* @__PURE__ */ jsxs(Box, { sx: bodySx, children: [
|
|
87
|
+
/* @__PURE__ */ jsx(
|
|
88
|
+
PickerSheetSearch,
|
|
89
|
+
{
|
|
90
|
+
query: state.query,
|
|
91
|
+
placeholder: searchPlaceholder,
|
|
92
|
+
label: searchLabel,
|
|
93
|
+
listId,
|
|
94
|
+
activeId: state.activeIndex >= 0 ? rowId(state.activeIndex) : void 0,
|
|
95
|
+
expanded: state.view.rowCount > 0,
|
|
96
|
+
inputRef: state.searchInputRef,
|
|
97
|
+
onQueryChange: state.setQuery,
|
|
98
|
+
onKeyDown: state.onSearchKeyDown,
|
|
99
|
+
dataTestId
|
|
100
|
+
}
|
|
101
|
+
),
|
|
102
|
+
/* @__PURE__ */ jsx(
|
|
103
|
+
PickerSheetList,
|
|
104
|
+
{
|
|
105
|
+
view: state.view,
|
|
106
|
+
activeIndex: state.activeIndex,
|
|
107
|
+
cursorShown: state.cursorShown,
|
|
108
|
+
listId,
|
|
109
|
+
rowId,
|
|
110
|
+
listRef: state.listRef,
|
|
111
|
+
createLabel,
|
|
112
|
+
createMeta,
|
|
113
|
+
emptyText,
|
|
114
|
+
onChoose: state.choose,
|
|
115
|
+
dataTestId
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
foot ? /* @__PURE__ */ jsx(Box, { component: "p", sx: footSx, "data-testid": `${dataTestId}-foot`, children: foot }) : null
|
|
119
|
+
] })
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export {
|
|
126
|
+
PickerSheet
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=chunk-IICBAAL7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/form/PickerSheet/PickerSheet.tsx"],"sourcesContent":["'use client';\n\nimport { useId } from 'react';\nimport Box from '@mui/material/Box/index.js';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport Drawer from '@mui/material/Drawer/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport useMediaQuery from '@mui/material/useMediaQuery/index.js';\n\nimport { METRICS as CATEGORY_SELECT_METRICS } from '../CategorySelect/CategorySelect.styles';\nimport { stackedOverlayZIndex } from '../../../tokens/layers';\nimport { PickerSheetHead, PickerSheetList, PickerSheetSearch } from './PickerSheet.parts';\nimport { bodySx, dialogPaperSx, footSx, sheetPaperSx } from './PickerSheet.styles';\nimport type { PickerSheetProps } from './PickerSheet.types';\nimport { usePickerSheet } from './usePickerSheet';\n\n/**\n * Both surfaces clear the sheet ladder rather than taking MUI's default — the\n * same rule as `CategoryPanelSurface`. A `Dialog` sits at `zIndex.modal` and a\n * temporary `Drawer` a step lower, while `StackedModal` puts its second panel\n * at 1310: a picker opened from a stacked editor painted UNDER it (FUT-806).\n * See `tokens/layers`.\n */\nconst ABOVE_SHEETS = { zIndex: stackedOverlayZIndex } as const;\n\ninterface SurfaceProps {\n open: boolean;\n /** True below the sheet breakpoint — a bottom sheet instead of a centred dialog. */\n sheet: boolean;\n onClose: () => void;\n titleId: string;\n dataTestId: string;\n /** False: open and close at once, with no slide or fade. */\n animated: boolean;\n children: React.ReactNode;\n}\n\n/**\n * Where the sheet lives. Both surfaces are modal, which gives Esc, the\n * tap-outside dismissal and focus containment for free.\n */\nfunction PickerSheetSurface({\n open,\n sheet,\n onClose,\n titleId,\n dataTestId,\n animated,\n children,\n}: SurfaceProps): React.JSX.Element {\n const close = (): void => onClose();\n const motion = animated ? {} : { transitionDuration: 0 };\n if (sheet) {\n // A Drawer's paper carries no dialog semantics of its own, so it is given them.\n const paper = {\n sx: sheetPaperSx,\n role: 'dialog',\n 'aria-modal': true,\n 'aria-labelledby': titleId,\n 'data-testid': dataTestId,\n };\n return (\n <Drawer anchor=\"bottom\" open={open} onClose={close} sx={ABOVE_SHEETS} slotProps={{ paper }} {...motion}>\n {children}\n </Drawer>\n );\n }\n const paper = { sx: dialogPaperSx, 'data-testid': dataTestId };\n return (\n <Dialog open={open} onClose={close} aria-labelledby={titleId} sx={ABOVE_SHEETS} slotProps={{ paper }} {...motion}>\n {children}\n </Dialog>\n );\n}\n\n/**\n * A searchable pick-or-create sheet: a title, a search box, a list of rows\n * (optionally a tree), and a create row when the query names nothing yet.\n *\n * A centred dialog on a pointer and a bottom sheet under `CategorySelect`'s\n * sheet breakpoint. Typing filters (case-insensitive substring over each\n * item's label and `searchText`, accents aside) and flattens the tree; ↑↓ move\n * the cursor, Enter picks,\n * Esc or a tap outside closes. Picking calls `onPick` and nothing else — the\n * caller decides when to close. All copy comes from the caller.\n */\nexport function PickerSheet(props: PickerSheetProps): React.JSX.Element {\n const { open, onClose, kicker, title, searchPlaceholder, searchLabel, closeLabel, createLabel, createMeta, emptyText, foot } =\n props;\n const dataTestId = props.dataTestId ?? 'picker-sheet';\n const theme = useTheme();\n const sheet = useMediaQuery(theme.breakpoints.down(CATEGORY_SELECT_METRICS.sheetBreakpoint));\n const baseId = useId();\n const titleId = `${baseId}-title`;\n const listId = `${baseId}-list`;\n const rowId = (index: number): string => `${baseId}-row-${index}`;\n const state = usePickerSheet(props);\n\n return (\n <PickerSheetSurface\n open={open}\n sheet={sheet}\n onClose={onClose}\n titleId={titleId}\n dataTestId={dataTestId}\n animated={props.animated ?? true}\n >\n <PickerSheetHead\n kicker={kicker}\n title={title}\n titleId={titleId}\n closeLabel={closeLabel}\n onClose={onClose}\n dataTestId={dataTestId}\n />\n <Box sx={bodySx}>\n <PickerSheetSearch\n query={state.query}\n placeholder={searchPlaceholder}\n label={searchLabel}\n listId={listId}\n activeId={state.activeIndex >= 0 ? rowId(state.activeIndex) : undefined}\n expanded={state.view.rowCount > 0}\n inputRef={state.searchInputRef}\n onQueryChange={state.setQuery}\n onKeyDown={state.onSearchKeyDown}\n dataTestId={dataTestId}\n />\n <PickerSheetList\n view={state.view}\n activeIndex={state.activeIndex}\n cursorShown={state.cursorShown}\n listId={listId}\n rowId={rowId}\n listRef={state.listRef}\n createLabel={createLabel}\n createMeta={createMeta}\n emptyText={emptyText}\n onChoose={state.choose}\n dataTestId={dataTestId}\n />\n {foot ? (\n <Box component=\"p\" sx={footSx} data-testid={`${dataTestId}-foot`}>\n {foot}\n </Box>\n ) : null}\n </Box>\n </PickerSheetSurface>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAEA,SAAS,aAAa;AACtB,OAAO,SAAS;AAChB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,SAAS,gBAAgB;AACzB,OAAO,mBAAmB;AAuDpB,cAqDA,YArDA;AAvCN,IAAM,eAAe,EAAE,QAAQ,qBAAqB;AAkBpD,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,QAAM,QAAQ,MAAY,QAAQ;AAClC,QAAM,SAAS,WAAW,CAAC,IAAI,EAAE,oBAAoB,EAAE;AACvD,MAAI,OAAO;AAET,UAAMA,SAAQ;AAAA,MACZ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,eAAe;AAAA,IACjB;AACA,WACE,oBAAC,UAAO,QAAO,UAAS,MAAY,SAAS,OAAO,IAAI,cAAc,WAAW,EAAE,OAAAA,OAAM,GAAI,GAAG,QAC7F,UACH;AAAA,EAEJ;AACA,QAAM,QAAQ,EAAE,IAAI,eAAe,eAAe,WAAW;AAC7D,SACE,oBAAC,UAAO,MAAY,SAAS,OAAO,mBAAiB,SAAS,IAAI,cAAc,WAAW,EAAE,MAAM,GAAI,GAAG,QACvG,UACH;AAEJ;AAaO,SAAS,YAAY,OAA4C;AACtE,QAAM,EAAE,MAAM,SAAS,QAAQ,OAAO,mBAAmB,aAAa,YAAY,aAAa,YAAY,WAAW,KAAK,IACzH;AACF,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,QAAQ,SAAS;AACvB,QAAM,QAAQ,cAAc,MAAM,YAAY,KAAK,QAAwB,eAAe,CAAC;AAC3F,QAAM,SAAS,MAAM;AACrB,QAAM,UAAU,GAAG,MAAM;AACzB,QAAM,SAAS,GAAG,MAAM;AACxB,QAAM,QAAQ,CAAC,UAA0B,GAAG,MAAM,QAAQ,KAAK;AAC/D,QAAM,QAAQ,eAAe,KAAK;AAElC,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,MAAM,YAAY;AAAA,MAE5B;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QACA,qBAAC,OAAI,IAAI,QACP;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,MAAM;AAAA,cACb,aAAa;AAAA,cACb,OAAO;AAAA,cACP;AAAA,cACA,UAAU,MAAM,eAAe,IAAI,MAAM,MAAM,WAAW,IAAI;AAAA,cAC9D,UAAU,MAAM,KAAK,WAAW;AAAA,cAChC,UAAU,MAAM;AAAA,cAChB,eAAe,MAAM;AAAA,cACrB,WAAW,MAAM;AAAA,cACjB;AAAA;AAAA,UACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,MAAM;AAAA,cACZ,aAAa,MAAM;AAAA,cACnB,aAAa,MAAM;AAAA,cACnB;AAAA,cACA;AAAA,cACA,SAAS,MAAM;AAAA,cACf;AAAA,cACA;AAAA,cACA;AAAA,cACA,UAAU,MAAM;AAAA,cAChB;AAAA;AAAA,UACF;AAAA,UACC,OACC,oBAAC,OAAI,WAAU,KAAI,IAAI,QAAQ,eAAa,GAAG,UAAU,SACtD,gBACH,IACE;AAAA,WACN;AAAA;AAAA;AAAA,EACF;AAEJ;","names":["paper"]}
|
|
@@ -46,6 +46,7 @@ var METRICS = {
|
|
|
46
46
|
/** The prototype's body line-height; the sheet sets it rather than inheriting a host's. */
|
|
47
47
|
lineHeight: 1.4
|
|
48
48
|
};
|
|
49
|
+
var hoverWash = (theme) => alpha(theme.palette.divider, 0.5);
|
|
49
50
|
var panelShadow = (theme) => `${rems(theme, 0, 16, 48)} ${alpha(uiInk(theme).panelShadowInk, 0.28)}`;
|
|
50
51
|
var dialogPaperSx = (theme) => ({
|
|
51
52
|
width: rem(theme, METRICS.dialogWidthPx),
|
|
@@ -79,7 +80,7 @@ var headSx = (theme) => ({
|
|
|
79
80
|
gap: rem(theme, METRICS.headGapPx),
|
|
80
81
|
padding: rems(theme, 14, 16),
|
|
81
82
|
// A shade under the controls' own border: the rule separates, it does not frame.
|
|
82
|
-
borderBottom: `1px solid ${alpha(theme.palette.divider, 0.
|
|
83
|
+
borderBottom: `1px solid ${alpha(theme.palette.divider, 0.66)}`,
|
|
83
84
|
flex: "0 0 auto"
|
|
84
85
|
});
|
|
85
86
|
var kickerSx = (theme) => ({
|
|
@@ -107,8 +108,9 @@ var closeButtonSx = (theme) => ({
|
|
|
107
108
|
color: theme.palette.text.primary,
|
|
108
109
|
cursor: "pointer",
|
|
109
110
|
"& svg": { width: rem(theme, METRICS.closeGlyphPx), height: rem(theme, METRICS.closeGlyphPx) },
|
|
110
|
-
"&:hover": { background: theme
|
|
111
|
-
|
|
111
|
+
"&:hover": { background: hoverWash(theme) },
|
|
112
|
+
// The browser's own ring, as on every control the design draws.
|
|
113
|
+
"&:focus-visible": { outlineStyle: "auto", outlineWidth: "1px" }
|
|
112
114
|
});
|
|
113
115
|
var bodySx = (theme) => ({
|
|
114
116
|
display: "flex",
|
|
@@ -166,7 +168,7 @@ var listSx = (theme) => ({
|
|
|
166
168
|
var rowPaddingLeft = (theme, depth) => rem(theme, depth > 0 ? METRICS.rowIndentStepPx * depth : METRICS.rowPaddingPx);
|
|
167
169
|
function rowBackground(theme, selected, active) {
|
|
168
170
|
if (selected) return alpha(theme.palette.primary.main, 0.1);
|
|
169
|
-
return active ? theme
|
|
171
|
+
return active ? hoverWash(theme) : "transparent";
|
|
170
172
|
}
|
|
171
173
|
var rowSx = (theme, selected, active) => ({
|
|
172
174
|
display: "flex",
|
|
@@ -185,7 +187,7 @@ var rowSx = (theme, selected, active) => ({
|
|
|
185
187
|
color: theme.palette.text.primary,
|
|
186
188
|
background: rowBackground(theme, selected, active),
|
|
187
189
|
boxShadow: active ? `inset 0 0 0 ${rem(theme, 1)} ${alpha(theme.palette.primary.main, 0.3)}` : "none",
|
|
188
|
-
"&:hover": { background: selected ? alpha(theme.palette.primary.main, 0.1) : theme
|
|
190
|
+
"&:hover": { background: selected ? alpha(theme.palette.primary.main, 0.1) : hoverWash(theme) }
|
|
189
191
|
});
|
|
190
192
|
var rowTextSx = { flex: "1 1 auto", minWidth: 0 };
|
|
191
193
|
var rowLabelSx = (theme) => ({
|
|
@@ -243,4 +245,4 @@ export {
|
|
|
243
245
|
emptySx,
|
|
244
246
|
footSx
|
|
245
247
|
};
|
|
246
|
-
//# sourceMappingURL=chunk-
|
|
248
|
+
//# sourceMappingURL=chunk-LZJHHMOF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/form/PickerSheet/PickerSheet.styles.ts"],"sourcesContent":["import { alpha, type CSSObject, type Theme } from '@mui/material/styles/index.js';\n\nimport { fieldBorder, fieldHeight } from '../../../tokens/field-height';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { fieldWell, uiInk } from '../../../tokens/ink';\nimport { rem, rems } from '../../../tokens/relative';\nimport { surfaces } from '../../../tokens/surfaces';\n\n/**\n * The prototype's measurements, verbatim, in the design's px.\n *\n * Each is drawn through `rem()` where it is read, so the sheet follows a\n * density mode the way every other surface in the package does. Colours come\n * from the palette (a white-labelled tenant and dark mode carry through).\n */\nconst METRICS = {\n dialogWidthPx: 520,\n dialogMaxHeightPx: 780,\n dialogRadiusPx: 14,\n /** The gap a centred dialog keeps from the viewport edge. */\n dialogMarginPx: 32,\n sheetRadiusPx: 16,\n headGapPx: 10,\n closeButtonPx: 36,\n controlRadiusPx: 8,\n bodyPaddingPx: 16,\n bodyGapPx: 12,\n listMaxHeightPx: 380,\n listGapPx: 2,\n rowPaddingPx: 10,\n rowMinHeightPx: 44,\n /** Left padding per level of `indent` (`.pitem.ind{padding-left:28px}` at depth 1). */\n rowIndentStepPx: 28,\n checkGlyphPx: 16,\n closeGlyphPx: 18,\n searchGlyphPx: 16,\n /** The magnifier's inset from the field's inner edge, and the gap before the text. */\n searchGlyphInsetPx: 10,\n searchGlyphGapPx: 6,\n /** The prototype's body line-height; the sheet sets it rather than inheriting a host's. */\n lineHeight: 1.4,\n} as const;\n\n/**\n * A quiet control's hover: the hairline at half strength, a green-grey step\n * (#E9EDE7 on one adopter's raised surface) rather than MUI's black wash.\n */\nconst hoverWash = (theme: Theme): string => alpha(theme.palette.divider, 0.5);\n\n/** The panel's shadow: `0 16px 48px` of ink at 0.28. */\nconst panelShadow = (theme: Theme): string =>\n `${rems(theme, 0, 16, 48)} ${alpha(uiInk(theme).panelShadowInk, 0.28)}`;\n\n/** The centred dialog's paper, on a pointer. */\nexport const dialogPaperSx = (theme: Theme): CSSObject => ({\n width: rem(theme, METRICS.dialogWidthPx),\n maxWidth: `calc(100% - ${rem(theme, METRICS.dialogMarginPx)})`,\n maxHeight: `min(${rem(theme, METRICS.dialogMaxHeightPx)}, calc(100% - ${rem(theme, METRICS.dialogMarginPx * 2)}))`,\n margin: 0,\n borderRadius: rem(theme, METRICS.dialogRadiusPx),\n boxShadow: panelShadow(theme),\n // The raised step (`uiSurfaces.raised`): a sheet is nearer than the page.\n background: surfaces(theme).raised,\n backgroundImage: 'none',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n});\n\n/** The bottom sheet's paper, on a phone: full width, no grab handle. */\nexport const sheetPaperSx = (theme: Theme): CSSObject => ({\n width: '100%',\n maxHeight: '88%',\n borderRadius: rems(theme, METRICS.sheetRadiusPx, METRICS.sheetRadiusPx, 0, 0),\n boxShadow: panelShadow(theme),\n // The raised step (`uiSurfaces.raised`): a sheet is nearer than the page.\n background: surfaces(theme).raised,\n backgroundImage: 'none',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n});\n\n/** `.sh` — kicker and title on the left, the close button on the right. */\nexport const headSx = (theme: Theme): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n gap: rem(theme, METRICS.headGapPx),\n padding: rems(theme, 14, 16),\n // A shade under the controls' own border: the rule separates, it does not frame.\n borderBottom: `1px solid ${alpha(theme.palette.divider, 0.66)}`,\n flex: '0 0 auto',\n});\n\nexport const kickerSx = (theme: Theme): CSSObject => ({\n fontSize: rem(theme, 11.5),\n color: theme.palette.text.secondary,\n lineHeight: METRICS.lineHeight,\n});\n\nexport const titleSx = (theme: Theme): CSSObject => ({\n margin: 0,\n fontSize: rem(theme, 14),\n fontWeight: 700,\n lineHeight: METRICS.lineHeight,\n color: theme.palette.text.primary,\n});\n\nexport const closeButtonSx = (theme: Theme): CSSObject => ({\n flex: '0 0 auto',\n width: rem(theme, METRICS.closeButtonPx),\n height: rem(theme, METRICS.closeButtonPx),\n display: 'grid',\n placeItems: 'center',\n padding: 0,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: rem(theme, METRICS.controlRadiusPx),\n background: 'transparent',\n color: theme.palette.text.primary,\n cursor: 'pointer',\n '& svg': { width: rem(theme, METRICS.closeGlyphPx), height: rem(theme, METRICS.closeGlyphPx) },\n '&:hover': { background: hoverWash(theme) },\n // The browser's own ring, as on every control the design draws.\n '&:focus-visible': { outlineStyle: 'auto', outlineWidth: '1px' },\n});\n\n/** `.sb` — the scrolling body: search, list, foot. */\nexport const bodySx = (theme: Theme): CSSObject => ({\n display: 'flex',\n flexDirection: 'column',\n gap: rem(theme, METRICS.bodyGapPx),\n padding: rem(theme, METRICS.bodyPaddingPx),\n overflow: 'auto',\n minHeight: 0,\n flex: '1 1 auto',\n});\n\n/**\n * The search field: the library's field height, border and corner, with a\n * leading magnifier. White on the light sheet, so the field reads as a field\n * against the paper behind it.\n */\nexport const searchFieldSx = (theme: Theme): CSSObject => ({\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n flex: '0 0 auto',\n '& > svg': {\n position: 'absolute',\n // + 1 for the input's own border, which the glyph sits inside of.\n left: rem(theme, METRICS.searchGlyphInsetPx + 1),\n width: rem(theme, METRICS.searchGlyphPx),\n height: rem(theme, METRICS.searchGlyphPx),\n color: theme.palette.text.secondary,\n pointerEvents: 'none',\n zIndex: 1,\n },\n '& input': {\n width: '100%',\n height: fieldHeight(theme),\n boxSizing: 'border-box',\n padding: rems(theme, 0, 10, 0, METRICS.searchGlyphInsetPx + METRICS.searchGlyphPx + METRICS.searchGlyphGapPx),\n fontSize: rem(theme, 14),\n border: fieldBorder(theme),\n borderRadius: fieldRadiusPx(theme),\n background: fieldWell(theme),\n color: theme.palette.text.primary,\n '&:focus': {\n outline: 'none',\n borderColor: theme.palette.primary.main,\n boxShadow: `0 0 0 ${rem(theme, 3)} ${alpha(theme.palette.primary.main, 0.15)}`,\n },\n },\n});\n\n/** The list: a column, scrolling on its own past 380px. */\nexport const listSx = (theme: Theme): CSSObject => ({\n display: 'flex',\n flexDirection: 'column',\n gap: rem(theme, METRICS.listGapPx),\n maxHeight: rem(theme, METRICS.listMaxHeightPx),\n overflow: 'auto',\n overscrollBehavior: 'contain',\n margin: 0,\n padding: 0,\n listStyle: 'none',\n flex: '0 1 auto',\n});\n\n/** Left padding for a row at `depth` — the row's own 10px at depth 0, 28px per level below it. */\nexport const rowPaddingLeft = (theme: Theme, depth: number): string =>\n rem(theme, depth > 0 ? METRICS.rowIndentStepPx * depth : METRICS.rowPaddingPx);\n\n/** Background of a row: selected wins over the keyboard cursor, which wins over rest. */\nfunction rowBackground(theme: Theme, selected: boolean, active: boolean): string {\n if (selected) return alpha(theme.palette.primary.main, 0.1);\n return active ? hoverWash(theme) : 'transparent';\n}\n\n/** `.pitem` — a row. `active` is the keyboard cursor, drawn as a ring so it reads apart from `selected`. */\nexport const rowSx = (theme: Theme, selected: boolean, active: boolean): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n gap: rem(theme, 10),\n padding: rem(theme, METRICS.rowPaddingPx),\n minHeight: rem(theme, METRICS.rowMinHeightPx),\n // The list is a capped flex column: without this a row with a meta line\n // shrinks to the 44px floor and the two lines overprint.\n flexShrink: 0,\n boxSizing: 'border-box',\n borderRadius: rem(theme, METRICS.controlRadiusPx),\n textAlign: 'left',\n cursor: 'pointer',\n userSelect: 'none',\n color: theme.palette.text.primary,\n background: rowBackground(theme, selected, active),\n boxShadow: active ? `inset 0 0 0 ${rem(theme, 1)} ${alpha(theme.palette.primary.main, 0.3)}` : 'none',\n '&:hover': { background: selected ? alpha(theme.palette.primary.main, 0.1) : hoverWash(theme) },\n});\n\nexport const rowTextSx: CSSObject = { flex: '1 1 auto', minWidth: 0 };\n\nexport const rowLabelSx = (theme: Theme): CSSObject => ({\n display: 'block',\n fontSize: rem(theme, 14),\n lineHeight: METRICS.lineHeight,\n});\n\nexport const rowMetaSx = (theme: Theme): CSSObject => ({\n display: 'block',\n fontSize: rem(theme, 12),\n lineHeight: METRICS.lineHeight,\n color: theme.palette.text.secondary,\n});\n\nexport const checkSx = (theme: Theme): CSSObject => ({\n flex: '0 0 auto',\n display: 'grid',\n color: theme.palette.primary.main,\n '& svg': { width: rem(theme, METRICS.checkGlyphPx), height: rem(theme, METRICS.checkGlyphPx) },\n});\n\n/** The create row's text: the accent, at 600. */\nexport const createLabelSx = (theme: Theme): CSSObject => ({\n ...rowLabelSx(theme),\n color: theme.palette.primary.main,\n fontWeight: 600,\n});\n\nexport const emptySx = (theme: Theme): CSSObject => ({\n fontSize: rem(theme, 12),\n lineHeight: METRICS.lineHeight,\n color: theme.palette.text.secondary,\n padding: rem(theme, 10),\n});\n\nexport const footSx = (theme: Theme): CSSObject => ({\n margin: 0,\n fontSize: rem(theme, 12),\n lineHeight: METRICS.lineHeight,\n color: theme.palette.text.secondary,\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Sheet
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HG7MCNRR.js";
|
|
4
4
|
import {
|
|
5
5
|
Dialog
|
|
6
6
|
} from "./chunk-GMJBWOIU.js";
|
|
@@ -166,4 +166,4 @@ AppHeaderDetails.displayName = "AppHeaderDetails";
|
|
|
166
166
|
export {
|
|
167
167
|
AppHeaderDetails
|
|
168
168
|
};
|
|
169
|
-
//# sourceMappingURL=chunk-
|
|
169
|
+
//# sourceMappingURL=chunk-OZGKIHAA.js.map
|
package/dist/form/PickerSheet.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PickerSheet
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-IICBAAL7.js";
|
|
4
|
+
import "../chunk-IDRVQVDL.js";
|
|
5
5
|
import "../chunk-WSMUOFWF.js";
|
|
6
6
|
import "../chunk-QZOXMH7X.js";
|
|
7
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-LZJHHMOF.js";
|
|
8
8
|
import "../chunk-VPGDYI63.js";
|
|
9
9
|
import "../chunk-DMNZD3Q7.js";
|
|
10
10
|
import "../chunk-PN4HVM43.js";
|
|
@@ -12,13 +12,13 @@ import {
|
|
|
12
12
|
} from "../chunk-GWFAINQ7.js";
|
|
13
13
|
import {
|
|
14
14
|
AppHeaderDetails
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-OZGKIHAA.js";
|
|
16
16
|
import {
|
|
17
17
|
brandGradient,
|
|
18
18
|
highlightOf,
|
|
19
19
|
initialsOf
|
|
20
20
|
} from "../chunk-IQU4HKND.js";
|
|
21
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-HG7MCNRR.js";
|
|
22
22
|
import "../chunk-3ROCD7XF.js";
|
|
23
23
|
import "../chunk-LYVTJLCF.js";
|
|
24
24
|
import "../chunk-CRN4KKNI.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sheet.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Sheet/Sheet.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAqFrF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"Sheet.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Sheet/Sheet.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAqFrF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA6EtC,CAAC"}
|
|
@@ -54,6 +54,8 @@ export interface SheetProps {
|
|
|
54
54
|
fullHeight?: boolean;
|
|
55
55
|
rounded?: boolean;
|
|
56
56
|
elevation?: number;
|
|
57
|
+
/** Slide in and out (default). `false` opens and closes at once. */
|
|
58
|
+
animated?: boolean;
|
|
57
59
|
dataTestId?: string;
|
|
58
60
|
}
|
|
59
61
|
export interface SheetHeaderProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sheet.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Sheet/Sheet.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Sheet.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Sheet/Sheet.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAC,SAAS,EAAE,MAAM,OAAO,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;IAClF;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickerSheet.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/PickerSheet/PickerSheet.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"PickerSheet.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/PickerSheet/PickerSheet.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA8D5D;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA+DtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickerSheet.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/PickerSheet/PickerSheet.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"PickerSheet.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/PickerSheet/PickerSheet.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAqDlF,gDAAgD;AAChD,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,SAa3C,CAAC;AAEH,wEAAwE;AACxE,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,KAAG,SAW1C,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,KAAG,SAQpC,CAAC;AAEH,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,KAAG,SAItC,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,KAAG,SAMrC,CAAC;AAEH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,SAgB3C,CAAC;AAEH,sDAAsD;AACtD,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,KAAG,SAQpC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,SA+B3C,CAAC;AAEH,2DAA2D;AAC3D,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,KAAG,SAWpC,CAAC;AAEH,kGAAkG;AAClG,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,EAAE,OAAO,MAAM,KAAG,MACmB,CAAC;AAQjF,4GAA4G;AAC5G,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,UAAU,OAAO,EAAE,QAAQ,OAAO,KAAG,SAkBvE,CAAC;AAEH,eAAO,MAAM,SAAS,EAAE,SAA6C,CAAC;AAEtE,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,SAIxC,CAAC;AAEH,eAAO,MAAM,SAAS,GAAI,OAAO,KAAK,KAAG,SAKvC,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,KAAG,SAKrC,CAAC;AAEH,iDAAiD;AACjD,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,SAI3C,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,KAAG,SAKrC,CAAC;AAEH,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,KAAG,SAKpC,CAAC"}
|
|
@@ -55,6 +55,8 @@ export interface PickerSheetProps {
|
|
|
55
55
|
emptyText?: (query: string) => string;
|
|
56
56
|
/** The note under the list. */
|
|
57
57
|
foot?: string;
|
|
58
|
+
/** Slide or fade in and out (default). `false` opens and closes at once. */
|
|
59
|
+
animated?: boolean;
|
|
58
60
|
/**
|
|
59
61
|
* Base test id (default `picker-sheet`). Sub-elements get `${id}-search`,
|
|
60
62
|
* `${id}-item-${item.id}`, `${id}-create`, `${id}-close`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickerSheet.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/PickerSheet/PickerSheet.types.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,4FAA4F;IAC5F,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,kEAAkE;IAClE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,8FAA8F;IAC9F,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,iFAAiF;IACjF,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"PickerSheet.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/PickerSheet/PickerSheet.types.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,4FAA4F;IAC5F,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,kEAAkE;IAClE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,8FAA8F;IAC9F,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,iFAAiF;IACjF,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
package/package.json
CHANGED
|
@@ -41,6 +41,7 @@ A vertical sheet's **width** is one rule rather than one per preset: `min(100%,
|
|
|
41
41
|
- **pulse** (boolean): Enable pulse animation effect
|
|
42
42
|
- **rounded** (boolean): Apply rounded corners to the sheet
|
|
43
43
|
- **elevation** (number): Shadow depth level (0-24)
|
|
44
|
+
- **animated** (boolean, default true): `false` opens and closes the panel at once, with no slide
|
|
44
45
|
|
|
45
46
|
### Interactive Behavior
|
|
46
47
|
|
|
@@ -125,6 +125,7 @@ export const Sheet: React.FC<SheetProps> = (props) => {
|
|
|
125
125
|
anchor: position,
|
|
126
126
|
open: isOpen,
|
|
127
127
|
className,
|
|
128
|
+
...(resolved.animated === false ? { transitionDuration: 0 } : {}),
|
|
128
129
|
// A tap outside obeys `closeOnOverlayClick`. A swipe-to-dismiss (no
|
|
129
130
|
// reason: SwipeableDrawer calls `onClose()` bare) closes. Escape is the
|
|
130
131
|
// hook's own listener alone, which honours `closeOnEscape` — the modal's
|
|
@@ -40,6 +40,7 @@ Every word it shows comes from the caller: the package ships no copy for it.
|
|
|
40
40
|
- **onCreate** (`(query: string) => void`): called with the TRIMMED query. The create row is offered last when both `createLabel` and `onCreate` are given and the trimmed query matches no item label exactly (case and accents aside).
|
|
41
41
|
- **emptyText** (`(query: string) => string`): shown instead of the list when nothing matches and there is no create row.
|
|
42
42
|
- **foot** (`string`): the note under the list.
|
|
43
|
+
- **animated** (`boolean`, default `true`): `false` opens and closes the sheet at once, with no fade or slide — for a host whose design draws its overlays without motion.
|
|
43
44
|
- **dataTestId** (`string`, default `picker-sheet`): on the sheet's paper. Sub-elements: `${id}-search`, `${id}-item-${item.id}`, `${id}-create`, `${id}-close`, plus `${id}-check-${item.id}`, `${id}-create-meta`, `${id}-empty`, `${id}-foot`, `${id}-list`.
|
|
44
45
|
|
|
45
46
|
## Behaviour
|
|
@@ -41,6 +41,12 @@ const METRICS = {
|
|
|
41
41
|
lineHeight: 1.4,
|
|
42
42
|
} as const;
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* A quiet control's hover: the hairline at half strength, a green-grey step
|
|
46
|
+
* (#E9EDE7 on one adopter's raised surface) rather than MUI's black wash.
|
|
47
|
+
*/
|
|
48
|
+
const hoverWash = (theme: Theme): string => alpha(theme.palette.divider, 0.5);
|
|
49
|
+
|
|
44
50
|
/** The panel's shadow: `0 16px 48px` of ink at 0.28. */
|
|
45
51
|
const panelShadow = (theme: Theme): string =>
|
|
46
52
|
`${rems(theme, 0, 16, 48)} ${alpha(uiInk(theme).panelShadowInk, 0.28)}`;
|
|
@@ -82,7 +88,7 @@ export const headSx = (theme: Theme): CSSObject => ({
|
|
|
82
88
|
gap: rem(theme, METRICS.headGapPx),
|
|
83
89
|
padding: rems(theme, 14, 16),
|
|
84
90
|
// A shade under the controls' own border: the rule separates, it does not frame.
|
|
85
|
-
borderBottom: `1px solid ${alpha(theme.palette.divider, 0.
|
|
91
|
+
borderBottom: `1px solid ${alpha(theme.palette.divider, 0.66)}`,
|
|
86
92
|
flex: '0 0 auto',
|
|
87
93
|
});
|
|
88
94
|
|
|
@@ -113,8 +119,9 @@ export const closeButtonSx = (theme: Theme): CSSObject => ({
|
|
|
113
119
|
color: theme.palette.text.primary,
|
|
114
120
|
cursor: 'pointer',
|
|
115
121
|
'& svg': { width: rem(theme, METRICS.closeGlyphPx), height: rem(theme, METRICS.closeGlyphPx) },
|
|
116
|
-
'&:hover': { background: theme
|
|
117
|
-
'
|
|
122
|
+
'&:hover': { background: hoverWash(theme) },
|
|
123
|
+
// The browser's own ring, as on every control the design draws.
|
|
124
|
+
'&:focus-visible': { outlineStyle: 'auto', outlineWidth: '1px' },
|
|
118
125
|
});
|
|
119
126
|
|
|
120
127
|
/** `.sb` — the scrolling body: search, list, foot. */
|
|
@@ -187,7 +194,7 @@ export const rowPaddingLeft = (theme: Theme, depth: number): string =>
|
|
|
187
194
|
/** Background of a row: selected wins over the keyboard cursor, which wins over rest. */
|
|
188
195
|
function rowBackground(theme: Theme, selected: boolean, active: boolean): string {
|
|
189
196
|
if (selected) return alpha(theme.palette.primary.main, 0.1);
|
|
190
|
-
return active ? theme
|
|
197
|
+
return active ? hoverWash(theme) : 'transparent';
|
|
191
198
|
}
|
|
192
199
|
|
|
193
200
|
/** `.pitem` — a row. `active` is the keyboard cursor, drawn as a ring so it reads apart from `selected`. */
|
|
@@ -208,7 +215,7 @@ export const rowSx = (theme: Theme, selected: boolean, active: boolean): CSSObje
|
|
|
208
215
|
color: theme.palette.text.primary,
|
|
209
216
|
background: rowBackground(theme, selected, active),
|
|
210
217
|
boxShadow: active ? `inset 0 0 0 ${rem(theme, 1)} ${alpha(theme.palette.primary.main, 0.3)}` : 'none',
|
|
211
|
-
'&:hover': { background: selected ? alpha(theme.palette.primary.main, 0.1) : theme
|
|
218
|
+
'&:hover': { background: selected ? alpha(theme.palette.primary.main, 0.1) : hoverWash(theme) },
|
|
212
219
|
});
|
|
213
220
|
|
|
214
221
|
export const rowTextSx: CSSObject = { flex: '1 1 auto', minWidth: 0 };
|
|
@@ -30,6 +30,8 @@ interface SurfaceProps {
|
|
|
30
30
|
onClose: () => void;
|
|
31
31
|
titleId: string;
|
|
32
32
|
dataTestId: string;
|
|
33
|
+
/** False: open and close at once, with no slide or fade. */
|
|
34
|
+
animated: boolean;
|
|
33
35
|
children: React.ReactNode;
|
|
34
36
|
}
|
|
35
37
|
|
|
@@ -37,8 +39,17 @@ interface SurfaceProps {
|
|
|
37
39
|
* Where the sheet lives. Both surfaces are modal, which gives Esc, the
|
|
38
40
|
* tap-outside dismissal and focus containment for free.
|
|
39
41
|
*/
|
|
40
|
-
function PickerSheetSurface({
|
|
42
|
+
function PickerSheetSurface({
|
|
43
|
+
open,
|
|
44
|
+
sheet,
|
|
45
|
+
onClose,
|
|
46
|
+
titleId,
|
|
47
|
+
dataTestId,
|
|
48
|
+
animated,
|
|
49
|
+
children,
|
|
50
|
+
}: SurfaceProps): React.JSX.Element {
|
|
41
51
|
const close = (): void => onClose();
|
|
52
|
+
const motion = animated ? {} : { transitionDuration: 0 };
|
|
42
53
|
if (sheet) {
|
|
43
54
|
// A Drawer's paper carries no dialog semantics of its own, so it is given them.
|
|
44
55
|
const paper = {
|
|
@@ -49,14 +60,14 @@ function PickerSheetSurface({ open, sheet, onClose, titleId, dataTestId, childre
|
|
|
49
60
|
'data-testid': dataTestId,
|
|
50
61
|
};
|
|
51
62
|
return (
|
|
52
|
-
<Drawer anchor="bottom" open={open} onClose={close} sx={ABOVE_SHEETS} slotProps={{ paper }}>
|
|
63
|
+
<Drawer anchor="bottom" open={open} onClose={close} sx={ABOVE_SHEETS} slotProps={{ paper }} {...motion}>
|
|
53
64
|
{children}
|
|
54
65
|
</Drawer>
|
|
55
66
|
);
|
|
56
67
|
}
|
|
57
68
|
const paper = { sx: dialogPaperSx, 'data-testid': dataTestId };
|
|
58
69
|
return (
|
|
59
|
-
<Dialog open={open} onClose={close} aria-labelledby={titleId} sx={ABOVE_SHEETS} slotProps={{ paper }}>
|
|
70
|
+
<Dialog open={open} onClose={close} aria-labelledby={titleId} sx={ABOVE_SHEETS} slotProps={{ paper }} {...motion}>
|
|
60
71
|
{children}
|
|
61
72
|
</Dialog>
|
|
62
73
|
);
|
|
@@ -86,7 +97,14 @@ export function PickerSheet(props: PickerSheetProps): React.JSX.Element {
|
|
|
86
97
|
const state = usePickerSheet(props);
|
|
87
98
|
|
|
88
99
|
return (
|
|
89
|
-
<PickerSheetSurface
|
|
100
|
+
<PickerSheetSurface
|
|
101
|
+
open={open}
|
|
102
|
+
sheet={sheet}
|
|
103
|
+
onClose={onClose}
|
|
104
|
+
titleId={titleId}
|
|
105
|
+
dataTestId={dataTestId}
|
|
106
|
+
animated={props.animated ?? true}
|
|
107
|
+
>
|
|
90
108
|
<PickerSheetHead
|
|
91
109
|
kicker={kicker}
|
|
92
110
|
title={title}
|
|
@@ -56,6 +56,8 @@ export interface PickerSheetProps {
|
|
|
56
56
|
emptyText?: (query: string) => string;
|
|
57
57
|
/** The note under the list. */
|
|
58
58
|
foot?: string;
|
|
59
|
+
/** Slide or fade in and out (default). `false` opens and closes at once. */
|
|
60
|
+
animated?: boolean;
|
|
59
61
|
/**
|
|
60
62
|
* Base test id (default `picker-sheet`). Sub-elements get `${id}-search`,
|
|
61
63
|
* `${id}-item-${item.id}`, `${id}-create`, `${id}-close`.
|
package/dist/chunk-TX3B7OAA.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PickerSheetHead,
|
|
3
|
-
PickerSheetList,
|
|
4
|
-
PickerSheetSearch
|
|
5
|
-
} from "./chunk-OLT6ZXK5.js";
|
|
6
|
-
import {
|
|
7
|
-
usePickerSheet
|
|
8
|
-
} from "./chunk-WSMUOFWF.js";
|
|
9
|
-
import {
|
|
10
|
-
bodySx,
|
|
11
|
-
dialogPaperSx,
|
|
12
|
-
footSx,
|
|
13
|
-
sheetPaperSx
|
|
14
|
-
} from "./chunk-WYRDR4T5.js";
|
|
15
|
-
import {
|
|
16
|
-
METRICS
|
|
17
|
-
} from "./chunk-VPGDYI63.js";
|
|
18
|
-
import {
|
|
19
|
-
stackedOverlayZIndex
|
|
20
|
-
} from "./chunk-MFU4Y25U.js";
|
|
21
|
-
|
|
22
|
-
// src/components/form/PickerSheet/PickerSheet.tsx
|
|
23
|
-
import { useId } from "react";
|
|
24
|
-
import Box from "@mui/material/Box/index.js";
|
|
25
|
-
import Dialog from "@mui/material/Dialog/index.js";
|
|
26
|
-
import Drawer from "@mui/material/Drawer/index.js";
|
|
27
|
-
import { useTheme } from "@mui/material/styles/index.js";
|
|
28
|
-
import useMediaQuery from "@mui/material/useMediaQuery/index.js";
|
|
29
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
30
|
-
var ABOVE_SHEETS = { zIndex: stackedOverlayZIndex };
|
|
31
|
-
function PickerSheetSurface({ open, sheet, onClose, titleId, dataTestId, children }) {
|
|
32
|
-
const close = () => onClose();
|
|
33
|
-
if (sheet) {
|
|
34
|
-
const paper2 = {
|
|
35
|
-
sx: sheetPaperSx,
|
|
36
|
-
role: "dialog",
|
|
37
|
-
"aria-modal": true,
|
|
38
|
-
"aria-labelledby": titleId,
|
|
39
|
-
"data-testid": dataTestId
|
|
40
|
-
};
|
|
41
|
-
return /* @__PURE__ */ jsx(Drawer, { anchor: "bottom", open, onClose: close, sx: ABOVE_SHEETS, slotProps: { paper: paper2 }, children });
|
|
42
|
-
}
|
|
43
|
-
const paper = { sx: dialogPaperSx, "data-testid": dataTestId };
|
|
44
|
-
return /* @__PURE__ */ jsx(Dialog, { open, onClose: close, "aria-labelledby": titleId, sx: ABOVE_SHEETS, slotProps: { paper }, children });
|
|
45
|
-
}
|
|
46
|
-
function PickerSheet(props) {
|
|
47
|
-
const { open, onClose, kicker, title, searchPlaceholder, searchLabel, closeLabel, createLabel, createMeta, emptyText, foot } = props;
|
|
48
|
-
const dataTestId = props.dataTestId ?? "picker-sheet";
|
|
49
|
-
const theme = useTheme();
|
|
50
|
-
const sheet = useMediaQuery(theme.breakpoints.down(METRICS.sheetBreakpoint));
|
|
51
|
-
const baseId = useId();
|
|
52
|
-
const titleId = `${baseId}-title`;
|
|
53
|
-
const listId = `${baseId}-list`;
|
|
54
|
-
const rowId = (index) => `${baseId}-row-${index}`;
|
|
55
|
-
const state = usePickerSheet(props);
|
|
56
|
-
return /* @__PURE__ */ jsxs(PickerSheetSurface, { open, sheet, onClose, titleId, dataTestId, children: [
|
|
57
|
-
/* @__PURE__ */ jsx(
|
|
58
|
-
PickerSheetHead,
|
|
59
|
-
{
|
|
60
|
-
kicker,
|
|
61
|
-
title,
|
|
62
|
-
titleId,
|
|
63
|
-
closeLabel,
|
|
64
|
-
onClose,
|
|
65
|
-
dataTestId
|
|
66
|
-
}
|
|
67
|
-
),
|
|
68
|
-
/* @__PURE__ */ jsxs(Box, { sx: bodySx, children: [
|
|
69
|
-
/* @__PURE__ */ jsx(
|
|
70
|
-
PickerSheetSearch,
|
|
71
|
-
{
|
|
72
|
-
query: state.query,
|
|
73
|
-
placeholder: searchPlaceholder,
|
|
74
|
-
label: searchLabel,
|
|
75
|
-
listId,
|
|
76
|
-
activeId: state.activeIndex >= 0 ? rowId(state.activeIndex) : void 0,
|
|
77
|
-
expanded: state.view.rowCount > 0,
|
|
78
|
-
inputRef: state.searchInputRef,
|
|
79
|
-
onQueryChange: state.setQuery,
|
|
80
|
-
onKeyDown: state.onSearchKeyDown,
|
|
81
|
-
dataTestId
|
|
82
|
-
}
|
|
83
|
-
),
|
|
84
|
-
/* @__PURE__ */ jsx(
|
|
85
|
-
PickerSheetList,
|
|
86
|
-
{
|
|
87
|
-
view: state.view,
|
|
88
|
-
activeIndex: state.activeIndex,
|
|
89
|
-
cursorShown: state.cursorShown,
|
|
90
|
-
listId,
|
|
91
|
-
rowId,
|
|
92
|
-
listRef: state.listRef,
|
|
93
|
-
createLabel,
|
|
94
|
-
createMeta,
|
|
95
|
-
emptyText,
|
|
96
|
-
onChoose: state.choose,
|
|
97
|
-
dataTestId
|
|
98
|
-
}
|
|
99
|
-
),
|
|
100
|
-
foot ? /* @__PURE__ */ jsx(Box, { component: "p", sx: footSx, "data-testid": `${dataTestId}-foot`, children: foot }) : null
|
|
101
|
-
] })
|
|
102
|
-
] });
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export {
|
|
106
|
-
PickerSheet
|
|
107
|
-
};
|
|
108
|
-
//# sourceMappingURL=chunk-TX3B7OAA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/PickerSheet/PickerSheet.tsx"],"sourcesContent":["'use client';\n\nimport { useId } from 'react';\nimport Box from '@mui/material/Box/index.js';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport Drawer from '@mui/material/Drawer/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport useMediaQuery from '@mui/material/useMediaQuery/index.js';\n\nimport { METRICS as CATEGORY_SELECT_METRICS } from '../CategorySelect/CategorySelect.styles';\nimport { stackedOverlayZIndex } from '../../../tokens/layers';\nimport { PickerSheetHead, PickerSheetList, PickerSheetSearch } from './PickerSheet.parts';\nimport { bodySx, dialogPaperSx, footSx, sheetPaperSx } from './PickerSheet.styles';\nimport type { PickerSheetProps } from './PickerSheet.types';\nimport { usePickerSheet } from './usePickerSheet';\n\n/**\n * Both surfaces clear the sheet ladder rather than taking MUI's default — the\n * same rule as `CategoryPanelSurface`. A `Dialog` sits at `zIndex.modal` and a\n * temporary `Drawer` a step lower, while `StackedModal` puts its second panel\n * at 1310: a picker opened from a stacked editor painted UNDER it (FUT-806).\n * See `tokens/layers`.\n */\nconst ABOVE_SHEETS = { zIndex: stackedOverlayZIndex } as const;\n\ninterface SurfaceProps {\n open: boolean;\n /** True below the sheet breakpoint — a bottom sheet instead of a centred dialog. */\n sheet: boolean;\n onClose: () => void;\n titleId: string;\n dataTestId: string;\n children: React.ReactNode;\n}\n\n/**\n * Where the sheet lives. Both surfaces are modal, which gives Esc, the\n * tap-outside dismissal and focus containment for free.\n */\nfunction PickerSheetSurface({ open, sheet, onClose, titleId, dataTestId, children }: SurfaceProps): React.JSX.Element {\n const close = (): void => onClose();\n if (sheet) {\n // A Drawer's paper carries no dialog semantics of its own, so it is given them.\n const paper = {\n sx: sheetPaperSx,\n role: 'dialog',\n 'aria-modal': true,\n 'aria-labelledby': titleId,\n 'data-testid': dataTestId,\n };\n return (\n <Drawer anchor=\"bottom\" open={open} onClose={close} sx={ABOVE_SHEETS} slotProps={{ paper }}>\n {children}\n </Drawer>\n );\n }\n const paper = { sx: dialogPaperSx, 'data-testid': dataTestId };\n return (\n <Dialog open={open} onClose={close} aria-labelledby={titleId} sx={ABOVE_SHEETS} slotProps={{ paper }}>\n {children}\n </Dialog>\n );\n}\n\n/**\n * A searchable pick-or-create sheet: a title, a search box, a list of rows\n * (optionally a tree), and a create row when the query names nothing yet.\n *\n * A centred dialog on a pointer and a bottom sheet under `CategorySelect`'s\n * sheet breakpoint. Typing filters (case-insensitive substring over each\n * item's label and `searchText`, accents aside) and flattens the tree; ↑↓ move\n * the cursor, Enter picks,\n * Esc or a tap outside closes. Picking calls `onPick` and nothing else — the\n * caller decides when to close. All copy comes from the caller.\n */\nexport function PickerSheet(props: PickerSheetProps): React.JSX.Element {\n const { open, onClose, kicker, title, searchPlaceholder, searchLabel, closeLabel, createLabel, createMeta, emptyText, foot } =\n props;\n const dataTestId = props.dataTestId ?? 'picker-sheet';\n const theme = useTheme();\n const sheet = useMediaQuery(theme.breakpoints.down(CATEGORY_SELECT_METRICS.sheetBreakpoint));\n const baseId = useId();\n const titleId = `${baseId}-title`;\n const listId = `${baseId}-list`;\n const rowId = (index: number): string => `${baseId}-row-${index}`;\n const state = usePickerSheet(props);\n\n return (\n <PickerSheetSurface open={open} sheet={sheet} onClose={onClose} titleId={titleId} dataTestId={dataTestId}>\n <PickerSheetHead\n kicker={kicker}\n title={title}\n titleId={titleId}\n closeLabel={closeLabel}\n onClose={onClose}\n dataTestId={dataTestId}\n />\n <Box sx={bodySx}>\n <PickerSheetSearch\n query={state.query}\n placeholder={searchPlaceholder}\n label={searchLabel}\n listId={listId}\n activeId={state.activeIndex >= 0 ? rowId(state.activeIndex) : undefined}\n expanded={state.view.rowCount > 0}\n inputRef={state.searchInputRef}\n onQueryChange={state.setQuery}\n onKeyDown={state.onSearchKeyDown}\n dataTestId={dataTestId}\n />\n <PickerSheetList\n view={state.view}\n activeIndex={state.activeIndex}\n cursorShown={state.cursorShown}\n listId={listId}\n rowId={rowId}\n listRef={state.listRef}\n createLabel={createLabel}\n createMeta={createMeta}\n emptyText={emptyText}\n onChoose={state.choose}\n dataTestId={dataTestId}\n />\n {foot ? (\n <Box component=\"p\" sx={footSx} data-testid={`${dataTestId}-foot`}>\n {foot}\n </Box>\n ) : null}\n </Box>\n </PickerSheetSurface>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAEA,SAAS,aAAa;AACtB,OAAO,SAAS;AAChB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,SAAS,gBAAgB;AACzB,OAAO,mBAAmB;AA4CpB,cA8CA,YA9CA;AA5BN,IAAM,eAAe,EAAE,QAAQ,qBAAqB;AAgBpD,SAAS,mBAAmB,EAAE,MAAM,OAAO,SAAS,SAAS,YAAY,SAAS,GAAoC;AACpH,QAAM,QAAQ,MAAY,QAAQ;AAClC,MAAI,OAAO;AAET,UAAMA,SAAQ;AAAA,MACZ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,eAAe;AAAA,IACjB;AACA,WACE,oBAAC,UAAO,QAAO,UAAS,MAAY,SAAS,OAAO,IAAI,cAAc,WAAW,EAAE,OAAAA,OAAM,GACtF,UACH;AAAA,EAEJ;AACA,QAAM,QAAQ,EAAE,IAAI,eAAe,eAAe,WAAW;AAC7D,SACE,oBAAC,UAAO,MAAY,SAAS,OAAO,mBAAiB,SAAS,IAAI,cAAc,WAAW,EAAE,MAAM,GAChG,UACH;AAEJ;AAaO,SAAS,YAAY,OAA4C;AACtE,QAAM,EAAE,MAAM,SAAS,QAAQ,OAAO,mBAAmB,aAAa,YAAY,aAAa,YAAY,WAAW,KAAK,IACzH;AACF,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,QAAQ,SAAS;AACvB,QAAM,QAAQ,cAAc,MAAM,YAAY,KAAK,QAAwB,eAAe,CAAC;AAC3F,QAAM,SAAS,MAAM;AACrB,QAAM,UAAU,GAAG,MAAM;AACzB,QAAM,SAAS,GAAG,MAAM;AACxB,QAAM,QAAQ,CAAC,UAA0B,GAAG,MAAM,QAAQ,KAAK;AAC/D,QAAM,QAAQ,eAAe,KAAK;AAElC,SACE,qBAAC,sBAAmB,MAAY,OAAc,SAAkB,SAAkB,YAChF;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,IACA,qBAAC,OAAI,IAAI,QACP;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,MAAM;AAAA,UACb,aAAa;AAAA,UACb,OAAO;AAAA,UACP;AAAA,UACA,UAAU,MAAM,eAAe,IAAI,MAAM,MAAM,WAAW,IAAI;AAAA,UAC9D,UAAU,MAAM,KAAK,WAAW;AAAA,UAChC,UAAU,MAAM;AAAA,UAChB,eAAe,MAAM;AAAA,UACrB,WAAW,MAAM;AAAA,UACjB;AAAA;AAAA,MACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,MAAM;AAAA,UACZ,aAAa,MAAM;AAAA,UACnB,aAAa,MAAM;AAAA,UACnB;AAAA,UACA;AAAA,UACA,SAAS,MAAM;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU,MAAM;AAAA,UAChB;AAAA;AAAA,MACF;AAAA,MACC,OACC,oBAAC,OAAI,WAAU,KAAI,IAAI,QAAQ,eAAa,GAAG,UAAU,SACtD,gBACH,IACE;AAAA,OACN;AAAA,KACF;AAEJ;","names":["paper"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/PickerSheet/PickerSheet.styles.ts"],"sourcesContent":["import { alpha, type CSSObject, type Theme } from '@mui/material/styles/index.js';\n\nimport { fieldBorder, fieldHeight } from '../../../tokens/field-height';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { fieldWell, uiInk } from '../../../tokens/ink';\nimport { rem, rems } from '../../../tokens/relative';\nimport { surfaces } from '../../../tokens/surfaces';\n\n/**\n * The prototype's measurements, verbatim, in the design's px.\n *\n * Each is drawn through `rem()` where it is read, so the sheet follows a\n * density mode the way every other surface in the package does. Colours come\n * from the palette (a white-labelled tenant and dark mode carry through).\n */\nconst METRICS = {\n dialogWidthPx: 520,\n dialogMaxHeightPx: 780,\n dialogRadiusPx: 14,\n /** The gap a centred dialog keeps from the viewport edge. */\n dialogMarginPx: 32,\n sheetRadiusPx: 16,\n headGapPx: 10,\n closeButtonPx: 36,\n controlRadiusPx: 8,\n bodyPaddingPx: 16,\n bodyGapPx: 12,\n listMaxHeightPx: 380,\n listGapPx: 2,\n rowPaddingPx: 10,\n rowMinHeightPx: 44,\n /** Left padding per level of `indent` (`.pitem.ind{padding-left:28px}` at depth 1). */\n rowIndentStepPx: 28,\n checkGlyphPx: 16,\n closeGlyphPx: 18,\n searchGlyphPx: 16,\n /** The magnifier's inset from the field's inner edge, and the gap before the text. */\n searchGlyphInsetPx: 10,\n searchGlyphGapPx: 6,\n /** The prototype's body line-height; the sheet sets it rather than inheriting a host's. */\n lineHeight: 1.4,\n} as const;\n\n/** The panel's shadow: `0 16px 48px` of ink at 0.28. */\nconst panelShadow = (theme: Theme): string =>\n `${rems(theme, 0, 16, 48)} ${alpha(uiInk(theme).panelShadowInk, 0.28)}`;\n\n/** The centred dialog's paper, on a pointer. */\nexport const dialogPaperSx = (theme: Theme): CSSObject => ({\n width: rem(theme, METRICS.dialogWidthPx),\n maxWidth: `calc(100% - ${rem(theme, METRICS.dialogMarginPx)})`,\n maxHeight: `min(${rem(theme, METRICS.dialogMaxHeightPx)}, calc(100% - ${rem(theme, METRICS.dialogMarginPx * 2)}))`,\n margin: 0,\n borderRadius: rem(theme, METRICS.dialogRadiusPx),\n boxShadow: panelShadow(theme),\n // The raised step (`uiSurfaces.raised`): a sheet is nearer than the page.\n background: surfaces(theme).raised,\n backgroundImage: 'none',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n});\n\n/** The bottom sheet's paper, on a phone: full width, no grab handle. */\nexport const sheetPaperSx = (theme: Theme): CSSObject => ({\n width: '100%',\n maxHeight: '88%',\n borderRadius: rems(theme, METRICS.sheetRadiusPx, METRICS.sheetRadiusPx, 0, 0),\n boxShadow: panelShadow(theme),\n // The raised step (`uiSurfaces.raised`): a sheet is nearer than the page.\n background: surfaces(theme).raised,\n backgroundImage: 'none',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n});\n\n/** `.sh` — kicker and title on the left, the close button on the right. */\nexport const headSx = (theme: Theme): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n gap: rem(theme, METRICS.headGapPx),\n padding: rems(theme, 14, 16),\n // A shade under the controls' own border: the rule separates, it does not frame.\n borderBottom: `1px solid ${alpha(theme.palette.divider, 0.6)}`,\n flex: '0 0 auto',\n});\n\nexport const kickerSx = (theme: Theme): CSSObject => ({\n fontSize: rem(theme, 11.5),\n color: theme.palette.text.secondary,\n lineHeight: METRICS.lineHeight,\n});\n\nexport const titleSx = (theme: Theme): CSSObject => ({\n margin: 0,\n fontSize: rem(theme, 14),\n fontWeight: 700,\n lineHeight: METRICS.lineHeight,\n color: theme.palette.text.primary,\n});\n\nexport const closeButtonSx = (theme: Theme): CSSObject => ({\n flex: '0 0 auto',\n width: rem(theme, METRICS.closeButtonPx),\n height: rem(theme, METRICS.closeButtonPx),\n display: 'grid',\n placeItems: 'center',\n padding: 0,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: rem(theme, METRICS.controlRadiusPx),\n background: 'transparent',\n color: theme.palette.text.primary,\n cursor: 'pointer',\n '& svg': { width: rem(theme, METRICS.closeGlyphPx), height: rem(theme, METRICS.closeGlyphPx) },\n '&:hover': { background: theme.palette.action.hover },\n '&:focus-visible': { outline: `${rem(theme, 2)} solid ${theme.palette.primary.main}`, outlineOffset: rem(theme, 1) },\n});\n\n/** `.sb` — the scrolling body: search, list, foot. */\nexport const bodySx = (theme: Theme): CSSObject => ({\n display: 'flex',\n flexDirection: 'column',\n gap: rem(theme, METRICS.bodyGapPx),\n padding: rem(theme, METRICS.bodyPaddingPx),\n overflow: 'auto',\n minHeight: 0,\n flex: '1 1 auto',\n});\n\n/**\n * The search field: the library's field height, border and corner, with a\n * leading magnifier. White on the light sheet, so the field reads as a field\n * against the paper behind it.\n */\nexport const searchFieldSx = (theme: Theme): CSSObject => ({\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n flex: '0 0 auto',\n '& > svg': {\n position: 'absolute',\n // + 1 for the input's own border, which the glyph sits inside of.\n left: rem(theme, METRICS.searchGlyphInsetPx + 1),\n width: rem(theme, METRICS.searchGlyphPx),\n height: rem(theme, METRICS.searchGlyphPx),\n color: theme.palette.text.secondary,\n pointerEvents: 'none',\n zIndex: 1,\n },\n '& input': {\n width: '100%',\n height: fieldHeight(theme),\n boxSizing: 'border-box',\n padding: rems(theme, 0, 10, 0, METRICS.searchGlyphInsetPx + METRICS.searchGlyphPx + METRICS.searchGlyphGapPx),\n fontSize: rem(theme, 14),\n border: fieldBorder(theme),\n borderRadius: fieldRadiusPx(theme),\n background: fieldWell(theme),\n color: theme.palette.text.primary,\n '&:focus': {\n outline: 'none',\n borderColor: theme.palette.primary.main,\n boxShadow: `0 0 0 ${rem(theme, 3)} ${alpha(theme.palette.primary.main, 0.15)}`,\n },\n },\n});\n\n/** The list: a column, scrolling on its own past 380px. */\nexport const listSx = (theme: Theme): CSSObject => ({\n display: 'flex',\n flexDirection: 'column',\n gap: rem(theme, METRICS.listGapPx),\n maxHeight: rem(theme, METRICS.listMaxHeightPx),\n overflow: 'auto',\n overscrollBehavior: 'contain',\n margin: 0,\n padding: 0,\n listStyle: 'none',\n flex: '0 1 auto',\n});\n\n/** Left padding for a row at `depth` — the row's own 10px at depth 0, 28px per level below it. */\nexport const rowPaddingLeft = (theme: Theme, depth: number): string =>\n rem(theme, depth > 0 ? METRICS.rowIndentStepPx * depth : METRICS.rowPaddingPx);\n\n/** Background of a row: selected wins over the keyboard cursor, which wins over rest. */\nfunction rowBackground(theme: Theme, selected: boolean, active: boolean): string {\n if (selected) return alpha(theme.palette.primary.main, 0.1);\n return active ? theme.palette.action.hover : 'transparent';\n}\n\n/** `.pitem` — a row. `active` is the keyboard cursor, drawn as a ring so it reads apart from `selected`. */\nexport const rowSx = (theme: Theme, selected: boolean, active: boolean): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n gap: rem(theme, 10),\n padding: rem(theme, METRICS.rowPaddingPx),\n minHeight: rem(theme, METRICS.rowMinHeightPx),\n // The list is a capped flex column: without this a row with a meta line\n // shrinks to the 44px floor and the two lines overprint.\n flexShrink: 0,\n boxSizing: 'border-box',\n borderRadius: rem(theme, METRICS.controlRadiusPx),\n textAlign: 'left',\n cursor: 'pointer',\n userSelect: 'none',\n color: theme.palette.text.primary,\n background: rowBackground(theme, selected, active),\n boxShadow: active ? `inset 0 0 0 ${rem(theme, 1)} ${alpha(theme.palette.primary.main, 0.3)}` : 'none',\n '&:hover': { background: selected ? alpha(theme.palette.primary.main, 0.1) : theme.palette.action.hover },\n});\n\nexport const rowTextSx: CSSObject = { flex: '1 1 auto', minWidth: 0 };\n\nexport const rowLabelSx = (theme: Theme): CSSObject => ({\n display: 'block',\n fontSize: rem(theme, 14),\n lineHeight: METRICS.lineHeight,\n});\n\nexport const rowMetaSx = (theme: Theme): CSSObject => ({\n display: 'block',\n fontSize: rem(theme, 12),\n lineHeight: METRICS.lineHeight,\n color: theme.palette.text.secondary,\n});\n\nexport const checkSx = (theme: Theme): CSSObject => ({\n flex: '0 0 auto',\n display: 'grid',\n color: theme.palette.primary.main,\n '& svg': { width: rem(theme, METRICS.checkGlyphPx), height: rem(theme, METRICS.checkGlyphPx) },\n});\n\n/** The create row's text: the accent, at 600. */\nexport const createLabelSx = (theme: Theme): CSSObject => ({\n ...rowLabelSx(theme),\n color: theme.palette.primary.main,\n fontWeight: 600,\n});\n\nexport const emptySx = (theme: Theme): CSSObject => ({\n fontSize: rem(theme, 12),\n lineHeight: METRICS.lineHeight,\n color: theme.palette.text.secondary,\n padding: rem(theme, 10),\n});\n\nexport const footSx = (theme: Theme): CSSObject => ({\n margin: 0,\n fontSize: rem(theme, 12),\n lineHeight: METRICS.lineHeight,\n color: theme.palette.text.secondary,\n});\n"],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|