@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.
Files changed (39) hide show
  1. package/dist/_internal/components/data-display/Sheet/Sheet.js +1 -1
  2. package/dist/_internal/components/data-display/index.js +1 -1
  3. package/dist/_internal/components/form/PickerSheet/PickerSheet.js +3 -3
  4. package/dist/_internal/components/form/PickerSheet/PickerSheet.parts.js +2 -2
  5. package/dist/_internal/components/form/PickerSheet/PickerSheet.styles.js +1 -1
  6. package/dist/_internal/components/index.js +2 -2
  7. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +2 -2
  8. package/dist/_internal/components/navigation/index.js +2 -2
  9. package/dist/{chunk-642NSD7N.js → chunk-HG7MCNRR.js} +2 -1
  10. package/dist/{chunk-642NSD7N.js.map → chunk-HG7MCNRR.js.map} +1 -1
  11. package/dist/{chunk-OLT6ZXK5.js → chunk-IDRVQVDL.js} +2 -2
  12. package/dist/chunk-IICBAAL7.js +128 -0
  13. package/dist/chunk-IICBAAL7.js.map +1 -0
  14. package/dist/{chunk-WYRDR4T5.js → chunk-LZJHHMOF.js} +8 -6
  15. package/dist/chunk-LZJHHMOF.js.map +1 -0
  16. package/dist/{chunk-GWL5FYPN.js → chunk-OZGKIHAA.js} +2 -2
  17. package/dist/data-display/Sheet.js +1 -1
  18. package/dist/form/PickerSheet.js +3 -3
  19. package/dist/navigation/AppHeader.js +2 -2
  20. package/dist/types/components/data-display/Sheet/Sheet.d.ts.map +1 -1
  21. package/dist/types/components/data-display/Sheet/Sheet.types.d.ts +2 -0
  22. package/dist/types/components/data-display/Sheet/Sheet.types.d.ts.map +1 -1
  23. package/dist/types/components/form/PickerSheet/PickerSheet.d.ts.map +1 -1
  24. package/dist/types/components/form/PickerSheet/PickerSheet.styles.d.ts.map +1 -1
  25. package/dist/types/components/form/PickerSheet/PickerSheet.types.d.ts +2 -0
  26. package/dist/types/components/form/PickerSheet/PickerSheet.types.d.ts.map +1 -1
  27. package/package.json +1 -1
  28. package/src/components/data-display/Sheet/Sheet.md +1 -0
  29. package/src/components/data-display/Sheet/Sheet.tsx +1 -0
  30. package/src/components/data-display/Sheet/Sheet.types.ts +2 -0
  31. package/src/components/form/PickerSheet/PickerSheet.md +1 -0
  32. package/src/components/form/PickerSheet/PickerSheet.styles.ts +12 -5
  33. package/src/components/form/PickerSheet/PickerSheet.tsx +22 -4
  34. package/src/components/form/PickerSheet/PickerSheet.types.ts +2 -0
  35. package/dist/chunk-TX3B7OAA.js +0 -108
  36. package/dist/chunk-TX3B7OAA.js.map +0 -1
  37. package/dist/chunk-WYRDR4T5.js.map +0 -1
  38. /package/dist/{chunk-OLT6ZXK5.js.map → chunk-IDRVQVDL.js.map} +0 -0
  39. /package/dist/{chunk-GWL5FYPN.js.map → chunk-OZGKIHAA.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Sheet
3
- } from "../../../../chunk-642NSD7N.js";
3
+ } from "../../../../chunk-HG7MCNRR.js";
4
4
  import "../../../../chunk-3ROCD7XF.js";
5
5
  import "../../../../chunk-LYVTJLCF.js";
6
6
  import "../../../../chunk-CRN4KKNI.js";
@@ -16,7 +16,7 @@ import "../../../chunk-5JEOLUWJ.js";
16
16
  import "../../../chunk-ITACE45O.js";
17
17
  import {
18
18
  Sheet
19
- } from "../../../chunk-642NSD7N.js";
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-TX3B7OAA.js";
5
- import "../../../../chunk-OLT6ZXK5.js";
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-WYRDR4T5.js";
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-OLT6ZXK5.js";
7
- import "../../../../chunk-WYRDR4T5.js";
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-WYRDR4T5.js";
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-GWL5FYPN.js";
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-642NSD7N.js";
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-GWL5FYPN.js";
5
- import "../../../../chunk-642NSD7N.js";
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-GWL5FYPN.js";
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-642NSD7N.js";
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-642NSD7N.js.map
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,SAqFA,UArFA,KAqFA,YArFA;AAvDJ,IAAM,WAAW;AAAA,EACf,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY,CAAC,MAAM,KAAK,MAAM,CAAC;AAAA,EAC/B,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AACd;AAuBA,IAAM,eAAe,MAAM;AAAA,EACzB,CAAC,EAAE,SAAS,eAAe,OAAO,GAAG,QACnC;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAW;AAAA,MACX;AAAA,MACA,eAAa;AAAA,MACb,OAAO,EAAE,UAAU,SAAS,OAAO,GAAG,iBAAiB,cAAc;AAAA;AAAA,EACvE;AAEJ;AACA,aAAa,cAAc;AAO3B,IAAM,gBAAgB,CAAC,EAAE,UAAU,QAAQ,MAA0B;AACnE,QAAM,gBAAgB,aAAa;AACnC,QAAM,aAAa,aAAa;AAEhC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB,iBAAiB;AAAA,IAClC,oBAAoB,YAAY;AAAA,EAClC;AACF;AAEO,IAAM,QAA8B,CAAC,UAAU;AACpD,QAAM,WAAW,aAAa,OAAO,QAAQ;AAC7C,QAAM,EAAE,UAAU,SAAS,aAAa,WAAW,WAAW,WAAW,IAAI;AAE7E,QAAM,QAAQ,SAAS;AACvB,QAAM,cAAc,cAAc,QAAQ;AAG1C,QAAM,SAAU,SAAwC,aAAa,KAAK;AAE1E,QAAM,EAAE,UAAU,eAAe,YAAY,aAAa,iBAAiB,wBAAwB,IACjG,aAAa,EAAE,GAAG,UAAU,GAAG,YAAY,CAAC;AAE9C,QAAM,EAAE,QAAQ,aAAa,oBAAoB,gBAAgB,IAAI,aAAa;AAAA,IAChF,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AAED,QAAM,cAAc;AAAA,IAClB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,SAAS,CAAC,QAAiB,WACzB,WAAW,kBAAkB,mBAAmB,IAAI,YAAY;AAAA,IAClE,YAAY;AAAA,MACV,KAAK;AAAA,MACL,IAAI,QAAQ,EAAE,GAAG,UAAU,GAAG,aAAa,OAAO,eAAe,YAAY,YAAY,CAAC;AAAA,IAC5F;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,sBAAsB;AAAA,MACtB,mBAAmB;AAAA,MACnB,eAAe,EAAE,eAAe,SAAS,GAAG,MAAM,mBAAmB,OAAU;AAAA,IACjF;AAAA,EACF;AAEA,QAAM,OACJ;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,aAAa;AAAA;AAAA,EACf;AAKF,QAAM,cAAc,aAAa,CAAC,YAAY;AAE9C,SACE,iCACG;AAAA,mBAAe,UACd,oBAAC,gBAAa,MAAM,QAAQ,SAAS,oBAAoB,MAAM,YAAY,SAAS;AAAA,IAGrF,cACC;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,QAAQ;AAAA,QACR,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,QAEf;AAAA;AAAA,IACH,IAEA,oBAAC,UAAQ,GAAG,aAAc,gBAAK;AAAA,KAEnC;AAEJ;","names":[]}
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-WYRDR4T5.js";
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-OLT6ZXK5.js.map
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.6)}`,
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.palette.action.hover },
111
- "&:focus-visible": { outline: `${rem(theme, 2)} solid ${theme.palette.primary.main}`, outlineOffset: rem(theme, 1) }
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.palette.action.hover : "transparent";
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.palette.action.hover }
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-WYRDR4T5.js.map
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-642NSD7N.js";
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-GWL5FYPN.js.map
169
+ //# sourceMappingURL=chunk-OZGKIHAA.js.map
@@ -1,7 +1,7 @@
1
1
  import "../chunk-ITACE45O.js";
2
2
  import {
3
3
  Sheet
4
- } from "../chunk-642NSD7N.js";
4
+ } from "../chunk-HG7MCNRR.js";
5
5
  import "../chunk-3ROCD7XF.js";
6
6
  import "../chunk-LYVTJLCF.js";
7
7
  import "../chunk-CRN4KKNI.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  PickerSheet
3
- } from "../chunk-TX3B7OAA.js";
4
- import "../chunk-OLT6ZXK5.js";
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-WYRDR4T5.js";
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-GWL5FYPN.js";
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-642NSD7N.js";
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,CA4EtC,CAAC"}
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":"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"}
@@ -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;AAmD5D;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAwDtE"}
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;AA+ClF,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,SAe3C,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12-apps/ui",
3
- "version": "6.64.1",
3
+ "version": "6.65.0",
4
4
  "license": "MIT",
5
5
  "packageManager": "pnpm@10.34.5",
6
6
  "type": "module",
@@ -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
@@ -55,6 +55,8 @@ export interface SheetProps {
55
55
  fullHeight?: boolean;
56
56
  rounded?: boolean;
57
57
  elevation?: number;
58
+ /** Slide in and out (default). `false` opens and closes at once. */
59
+ animated?: boolean;
58
60
  dataTestId?: string;
59
61
  }
60
62
 
@@ -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.6)}`,
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.palette.action.hover },
117
- '&:focus-visible': { outline: `${rem(theme, 2)} solid ${theme.palette.primary.main}`, outlineOffset: rem(theme, 1) },
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.palette.action.hover : 'transparent';
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.palette.action.hover },
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({ open, sheet, onClose, titleId, dataTestId, children }: SurfaceProps): React.JSX.Element {
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 open={open} sheet={sheet} onClose={onClose} titleId={titleId} dataTestId={dataTestId}>
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`.
@@ -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":[]}