@patternmode/stacksheet 1.3.3

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 (94) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +191 -0
  3. package/dist/Drag/DragConstants.d.ts +9 -0
  4. package/dist/Drag/DragConstants.d.ts.map +1 -0
  5. package/dist/Drag/DragGeometry.d.ts +34 -0
  6. package/dist/Drag/DragGeometry.d.ts.map +1 -0
  7. package/dist/Drag/DragTypes.d.ts +34 -0
  8. package/dist/Drag/DragTypes.d.ts.map +1 -0
  9. package/dist/Drag/index.d.ts +3 -0
  10. package/dist/Drag/index.d.ts.map +1 -0
  11. package/dist/Drag/useDrag.d.ts +20 -0
  12. package/dist/Drag/useDrag.d.ts.map +1 -0
  13. package/dist/SheetPanel/DefaultHeader.d.ts +5 -0
  14. package/dist/SheetPanel/DefaultHeader.d.ts.map +1 -0
  15. package/dist/SheetPanel/SheetPanel.d.ts +3 -0
  16. package/dist/SheetPanel/SheetPanel.d.ts.map +1 -0
  17. package/dist/SheetPanel/SheetPanelContent.d.ts +13 -0
  18. package/dist/SheetPanel/SheetPanelContent.d.ts.map +1 -0
  19. package/dist/SheetPanel/SheetPanelFocus.d.ts +8 -0
  20. package/dist/SheetPanel/SheetPanelFocus.d.ts.map +1 -0
  21. package/dist/SheetPanel/SheetPanelHandles.d.ts +10 -0
  22. package/dist/SheetPanel/SheetPanelHandles.d.ts.map +1 -0
  23. package/dist/SheetPanel/SheetPanelTypes.d.ts +31 -0
  24. package/dist/SheetPanel/SheetPanelTypes.d.ts.map +1 -0
  25. package/dist/SheetPanel/index.d.ts +3 -0
  26. package/dist/SheetPanel/index.d.ts.map +1 -0
  27. package/dist/SheetParts/SheetBack.d.ts +3 -0
  28. package/dist/SheetParts/SheetBack.d.ts.map +1 -0
  29. package/dist/SheetParts/SheetBody.d.ts +3 -0
  30. package/dist/SheetParts/SheetBody.d.ts.map +1 -0
  31. package/dist/SheetParts/SheetClose.d.ts +3 -0
  32. package/dist/SheetParts/SheetClose.d.ts.map +1 -0
  33. package/dist/SheetParts/SheetDescription.d.ts +3 -0
  34. package/dist/SheetParts/SheetDescription.d.ts.map +1 -0
  35. package/dist/SheetParts/SheetFooter.d.ts +3 -0
  36. package/dist/SheetParts/SheetFooter.d.ts.map +1 -0
  37. package/dist/SheetParts/SheetHandle.d.ts +3 -0
  38. package/dist/SheetParts/SheetHandle.d.ts.map +1 -0
  39. package/dist/SheetParts/SheetHeader.d.ts +3 -0
  40. package/dist/SheetParts/SheetHeader.d.ts.map +1 -0
  41. package/dist/SheetParts/SheetPartTypes.d.ts +22 -0
  42. package/dist/SheetParts/SheetPartTypes.d.ts.map +1 -0
  43. package/dist/SheetParts/SheetParts.d.ts +28 -0
  44. package/dist/SheetParts/SheetParts.d.ts.map +1 -0
  45. package/dist/SheetParts/SheetTitle.d.ts +3 -0
  46. package/dist/SheetParts/SheetTitle.d.ts.map +1 -0
  47. package/dist/SheetParts/index.d.ts +11 -0
  48. package/dist/SheetParts/index.d.ts.map +1 -0
  49. package/dist/Store/StoreArgs.d.ts +15 -0
  50. package/dist/Store/StoreArgs.d.ts.map +1 -0
  51. package/dist/Store/StoreTypes.d.ts +21 -0
  52. package/dist/Store/StoreTypes.d.ts.map +1 -0
  53. package/dist/Store/createSheetStore.d.ts +15 -0
  54. package/dist/Store/createSheetStore.d.ts.map +1 -0
  55. package/dist/Store/index.d.ts +3 -0
  56. package/dist/Store/index.d.ts.map +1 -0
  57. package/dist/config.d.ts +4 -0
  58. package/dist/config.d.ts.map +1 -0
  59. package/dist/create.d.ts +33 -0
  60. package/dist/create.d.ts.map +1 -0
  61. package/dist/icons.d.ts +4 -0
  62. package/dist/icons.d.ts.map +1 -0
  63. package/dist/index.d.ts +10 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.mjs +1732 -0
  66. package/dist/index.mjs.map +1 -0
  67. package/dist/media.d.ts +9 -0
  68. package/dist/media.d.ts.map +1 -0
  69. package/dist/panel-context.d.ts +26 -0
  70. package/dist/panel-context.d.ts.map +1 -0
  71. package/dist/parts.d.ts +11 -0
  72. package/dist/parts.d.ts.map +1 -0
  73. package/dist/renderer-effects.d.ts +6 -0
  74. package/dist/renderer-effects.d.ts.map +1 -0
  75. package/dist/renderer-helpers.d.ts +53 -0
  76. package/dist/renderer-helpers.d.ts.map +1 -0
  77. package/dist/renderer.d.ts +29 -0
  78. package/dist/renderer.d.ts.map +1 -0
  79. package/dist/sheet-panel.d.ts +3 -0
  80. package/dist/sheet-panel.d.ts.map +1 -0
  81. package/dist/snap-points.d.ts +22 -0
  82. package/dist/snap-points.d.ts.map +1 -0
  83. package/dist/springs.d.ts +26 -0
  84. package/dist/springs.d.ts.map +1 -0
  85. package/dist/stacking.d.ts +38 -0
  86. package/dist/stacking.d.ts.map +1 -0
  87. package/dist/store.d.ts +3 -0
  88. package/dist/store.d.ts.map +1 -0
  89. package/dist/styles.css +2 -0
  90. package/dist/types.d.ts +232 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/use-drag.d.ts +3 -0
  93. package/dist/use-drag.d.ts.map +1 -0
  94. package/package.json +90 -0
@@ -0,0 +1,232 @@
1
+ import type { ComponentType, ReactNode } from "react";
2
+ /** Why the sheet stack was closed or popped */
3
+ export type CloseReason = "escape" | "backdrop" | "swipe" | "programmatic";
4
+ /**
5
+ * A snap point for bottom sheets.
6
+ * - `number` 0-1: fraction of viewport height (e.g. 0.5 = 50vh)
7
+ * - `number` > 1: pixel value (e.g. 300 = 300px)
8
+ * - `string`: CSS length (e.g. "148px", "30rem")
9
+ */
10
+ export type SnapPoint = number | string;
11
+ export interface StacksheetClassNames {
12
+ /** Applied to backdrop overlay */
13
+ backdrop?: string;
14
+ /** Applied to the header bar */
15
+ header?: string;
16
+ /** Applied to each panel container */
17
+ panel?: string;
18
+ }
19
+ export interface HeaderRenderProps {
20
+ /** `true` when the stack has more than one sheet */
21
+ isNested: boolean;
22
+ /** Pop the top sheet (go back one level) */
23
+ onBack: () => void;
24
+ /** Close the entire sheet stack */
25
+ onClose: () => void;
26
+ /** Current resolved side (left/right/bottom) */
27
+ side: import("./types").Side;
28
+ }
29
+ export interface SheetPresentationOptions {
30
+ /** Override the dialog aria-label for this specific sheet instance. */
31
+ ariaLabel?: string;
32
+ }
33
+ export interface SheetItem<TType extends string = string> {
34
+ /** Optional per-sheet presentation metadata */
35
+ ariaLabel?: string;
36
+ /** Data payload passed when opening the sheet */
37
+ data: Record<string, unknown>;
38
+ /** Unique identifier for this sheet instance */
39
+ id: string;
40
+ /** Sheet type key from the TMap */
41
+ type: TType;
42
+ }
43
+ export type Side = "left" | "right" | "bottom";
44
+ export type StacksheetLayout = "classic" | "composable";
45
+ export interface ResponsiveSide {
46
+ desktop: Side;
47
+ mobile: Side;
48
+ }
49
+ export type SideConfig = Side | ResponsiveSide;
50
+ export interface StackingConfig {
51
+ /** Pixel offset per depth level — shifts panels away from the stack edge (default: 16) */
52
+ offsetStep: number;
53
+ /** Opacity reduction per depth level (default: 0) */
54
+ opacityStep: number;
55
+ /** Border radius applied to stacked panels in px (default: 12) */
56
+ radius: number;
57
+ /** Max depth before content stops rendering (default: 3) */
58
+ renderThreshold: number;
59
+ /** Scale reduction per depth level (default: 0.04) */
60
+ scaleStep: number;
61
+ }
62
+ export interface SpringConfig {
63
+ /** Damping — higher = less oscillation (default: 30) */
64
+ damping: number;
65
+ /** Mass — higher = more momentum (default: 0.8) */
66
+ mass: number;
67
+ /** Stiffness — higher = snappier (default: 170) */
68
+ stiffness: number;
69
+ }
70
+ export interface StacksheetConfig {
71
+ /** Default aria-label for dialog panels. Default: "Sheet dialog" */
72
+ ariaLabel?: string;
73
+ /** Mobile breakpoint in px. Default: 768 */
74
+ breakpoint?: number;
75
+ /** Close on backdrop click. Default: true */
76
+ closeOnBackdrop?: boolean;
77
+ /** Close on ESC key. Default: true */
78
+ closeOnEscape?: boolean;
79
+ /** Fraction of panel dimension to trigger close (0-1). Default: 0.25 */
80
+ closeThreshold?: number;
81
+ /** Allow any form of dismissal (drag, backdrop, escape). Default: true */
82
+ dismissible?: boolean;
83
+ /** Enable drag-driven dismissal. Default: true */
84
+ drag?: boolean;
85
+ /** Lock body scroll when open. Default: true */
86
+ lockScroll?: boolean;
87
+ /** Maximum stack depth. Default: Infinity (unlimited) */
88
+ maxDepth?: number;
89
+ /** Maximum panel width as CSS value. Default: "90vw" */
90
+ maxWidth?: string;
91
+ /** Modal mode — overlay + scroll lock + focus trap. Default: true */
92
+ modal?: boolean;
93
+ /** Called when the last panel's exit animation completes (stack fully closed) */
94
+ onCloseComplete?: (reason: CloseReason) => void;
95
+ /** Called when the top panel's entrance animation completes */
96
+ onOpenComplete?: () => void;
97
+ /** Called when the active snap point changes. */
98
+ onSnapPointChange?: (index: number) => void;
99
+ /** Scale factor applied to background (0-1). Default: 0.97 */
100
+ scaleBackgroundAmount?: number;
101
+ /** Scale down [data-stacksheet-wrapper] when sheets open. Default: false */
102
+ shouldScaleBackground?: boolean;
103
+ /** Show backdrop overlay when open. Default: true */
104
+ showOverlay?: boolean;
105
+ /** Sheet slide-from side. Default: { desktop: "right", mobile: "bottom" } */
106
+ side?: SideConfig;
107
+ /** Currently active snap point index (controlled). */
108
+ snapPointIndex?: number;
109
+ /** Snap positions for bottom sheets. Numbers 0-1 = viewport fraction, >1 = px, strings = CSS lengths. */
110
+ snapPoints?: SnapPoint[];
111
+ /** When true, velocity can't skip intermediate snap points. Default: false */
112
+ snapToSequentialPoints?: boolean;
113
+ /** Spring animation parameters — preset name or custom config */
114
+ spring?: import("./springs").SpringPreset | Partial<SpringConfig>;
115
+ /** Stacking visual parameters */
116
+ stacking?: Partial<StackingConfig>;
117
+ /** Velocity threshold (px/ms) to trigger close. Default: 0.5 */
118
+ velocityThreshold?: number;
119
+ /** Panel width in px. Default: 420 */
120
+ width?: number;
121
+ /** Base z-index. Default: 100 */
122
+ zIndex?: number;
123
+ }
124
+ /** Fully resolved config — all fields required */
125
+ export interface ResolvedConfig {
126
+ ariaLabel: string;
127
+ breakpoint: number;
128
+ closeOnBackdrop: boolean;
129
+ closeOnEscape: boolean;
130
+ closeThreshold: number;
131
+ dismissible: boolean;
132
+ drag: boolean;
133
+ lockScroll: boolean;
134
+ maxDepth: number;
135
+ maxWidth: string;
136
+ modal: boolean;
137
+ onCloseComplete?: (reason: CloseReason) => void;
138
+ onOpenComplete?: () => void;
139
+ onSnapPointChange?: (index: number) => void;
140
+ scaleBackgroundAmount: number;
141
+ shouldScaleBackground: boolean;
142
+ showOverlay: boolean;
143
+ side: ResponsiveSide;
144
+ snapPointIndex?: number;
145
+ snapPoints: SnapPoint[];
146
+ snapToSequentialPoints: boolean;
147
+ spring: SpringConfig;
148
+ stacking: StackingConfig;
149
+ velocityThreshold: number;
150
+ width: number;
151
+ zIndex: number;
152
+ }
153
+ /** Component rendered inside a sheet panel — receives data as spread props */
154
+ export type SheetContentComponent<TData = unknown> = ComponentType<TData extends Record<string, unknown> ? TData : Record<string, unknown>>;
155
+ /** Map of sheet type → content component */
156
+ export type ContentMap<TMap extends object> = {
157
+ [K in keyof TMap]: SheetContentComponent<TMap[K]>;
158
+ };
159
+ export interface StacksheetSnapshot<TMap extends object> {
160
+ /** Whether any sheets are currently visible */
161
+ isOpen: boolean;
162
+ /** Current sheet stack, ordered bottom to top */
163
+ stack: SheetItem<Extract<keyof TMap, string>>[];
164
+ }
165
+ export interface SheetActions<TMap extends object> {
166
+ /** Clear entire stack */
167
+ close(): void;
168
+ /** Smart: empty→open, same type on top→replace, different→push */
169
+ navigate<K extends Extract<keyof TMap, string>>(type: K, id: string, data: TMap[K], options?: SheetPresentationOptions): void;
170
+ /** Smart navigate with an ad-hoc component */
171
+ navigate<TData extends Record<string, unknown>>(component: ComponentType<TData>, data: TData, options?: SheetPresentationOptions): void;
172
+ /** Smart navigate with an ad-hoc component (explicit id) */
173
+ navigate<TData extends Record<string, unknown>>(component: ComponentType<TData>, id: string, data: TData, options?: SheetPresentationOptions): void;
174
+ /** Replace stack with a single item */
175
+ open<K extends Extract<keyof TMap, string>>(type: K, id: string, data: TMap[K], options?: SheetPresentationOptions): void;
176
+ /** Replace stack with an ad-hoc component */
177
+ open<TData extends Record<string, unknown>>(component: ComponentType<TData>, data: TData, options?: SheetPresentationOptions): void;
178
+ /** Replace stack with an ad-hoc component (explicit id) */
179
+ open<TData extends Record<string, unknown>>(component: ComponentType<TData>, id: string, data: TData, options?: SheetPresentationOptions): void;
180
+ /** Pop top item; close if last */
181
+ pop(): void;
182
+ /** Push onto stack (replaces top at maxDepth) */
183
+ push<K extends Extract<keyof TMap, string>>(type: K, id: string, data: TMap[K], options?: SheetPresentationOptions): void;
184
+ /** Push an ad-hoc component onto the stack */
185
+ push<TData extends Record<string, unknown>>(component: ComponentType<TData>, data: TData, options?: SheetPresentationOptions): void;
186
+ /** Push an ad-hoc component onto the stack (explicit id) */
187
+ push<TData extends Record<string, unknown>>(component: ComponentType<TData>, id: string, data: TData, options?: SheetPresentationOptions): void;
188
+ /** Remove a specific sheet by id; close if last */
189
+ remove(id: string): void;
190
+ /** Swap the top item */
191
+ replace<K extends Extract<keyof TMap, string>>(type: K, id: string, data: TMap[K], options?: SheetPresentationOptions): void;
192
+ /** Swap the top item with an ad-hoc component */
193
+ replace<TData extends Record<string, unknown>>(component: ComponentType<TData>, data: TData, options?: SheetPresentationOptions): void;
194
+ /** Swap the top item with an ad-hoc component (explicit id) */
195
+ replace<TData extends Record<string, unknown>>(component: ComponentType<TData>, id: string, data: TData, options?: SheetPresentationOptions): void;
196
+ /** Update data on a sheet by id (no animation) */
197
+ setData<K extends Extract<keyof TMap, string>>(type: K, id: string, data: TMap[K]): void;
198
+ /** Update data on an ad-hoc sheet by id */
199
+ setData<TData extends Record<string, unknown>>(component: ComponentType<TData>, id: string, data: TData): void;
200
+ /** Swap the top item's content in place (no animation) */
201
+ swap<K extends Extract<keyof TMap, string>>(type: K, data: TMap[K], options?: SheetPresentationOptions): void;
202
+ /** Swap the top item's content with an ad-hoc component (no animation) */
203
+ swap<TData extends Record<string, unknown>>(component: ComponentType<TData>, data: TData, options?: SheetPresentationOptions): void;
204
+ }
205
+ export interface StacksheetProviderProps<TMap extends object> {
206
+ /** Your application content */
207
+ children: ReactNode;
208
+ /** CSS class overrides for backdrop, panel, and header */
209
+ classNames?: StacksheetClassNames;
210
+ /** Panel layout mode. `composable` disables the auto header and scroll wrapper. */
211
+ layout?: StacksheetLayout;
212
+ /**
213
+ * Controls the classic-mode header rendering.
214
+ * - `undefined` — renders the default close/back header (classic mode)
215
+ * - `function` — custom header renderer (classic mode with custom header)
216
+ * - `false` — legacy alias for composable mode. Prefer `layout="composable"`.
217
+ */
218
+ renderHeader?: false | ((props: HeaderRenderProps) => ReactNode);
219
+ /** Map of sheet type keys to content components (optional — only needed for type registry pattern) */
220
+ sheets?: ContentMap<TMap>;
221
+ }
222
+ export interface StacksheetInstance<TMap extends object> {
223
+ /** Provider component — wrap your app, pass sheets map */
224
+ StacksheetProvider: ComponentType<StacksheetProviderProps<TMap>>;
225
+ /** Raw Zustand store for advanced use */
226
+ store: import("zustand").StoreApi<StacksheetSnapshot<TMap> & SheetActions<TMap>>;
227
+ /** Hook returning sheet actions */
228
+ useSheet: () => SheetActions<TMap>;
229
+ /** Hook returning sheet state (stack, isOpen) */
230
+ useStacksheetState: () => StacksheetSnapshot<TMap>;
231
+ }
232
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type { DragAxis, DragConfig, DragSign, DragState, } from "./Drag/DragTypes";
2
+ export { useDrag } from "./Drag/useDrag";
3
+ //# sourceMappingURL=use-drag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-drag.d.ts","sourceRoot":"","sources":["../src/use-drag.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,GACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@patternmode/stacksheet",
3
+ "version": "1.3.3",
4
+ "private": false,
5
+ "description": "Typed, animated sheet stack system. Zustand store + Motion animations with Apple-style depth stacking.",
6
+ "type": "module",
7
+ "sideEffects": [
8
+ "**/*.css"
9
+ ],
10
+ "license": "MIT",
11
+ "author": "Daniel Howells",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+ssh://git@github.com/howells/patternmode.git",
15
+ "directory": "packages/stacksheet"
16
+ },
17
+ "bugs": {
18
+ "url": "https://github.com/howells/patternmode/issues"
19
+ },
20
+ "homepage": "https://github.com/howells/patternmode/tree/main/packages/stacksheet#readme",
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "default": "./dist/index.mjs"
28
+ },
29
+ "./styles.css": "./dist/styles.css",
30
+ "./package.json": "./package.json"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "engines": {
36
+ "node": ">=20"
37
+ },
38
+ "keywords": [
39
+ "sheet",
40
+ "drawer",
41
+ "modal",
42
+ "stack",
43
+ "zustand",
44
+ "motion",
45
+ "react",
46
+ "animation"
47
+ ],
48
+ "dependencies": {
49
+ "@radix-ui/react-portal": "^1.1.10",
50
+ "@radix-ui/react-scroll-area": "^1.2.10",
51
+ "@radix-ui/react-slot": "^1.2.4",
52
+ "focus-trap-react": "^12.0.1",
53
+ "motion": "^12.38.0",
54
+ "react-remove-scroll": "^2.7.2",
55
+ "zustand": "^5.0.13",
56
+ "@patternmode/system": "0.2.0"
57
+ },
58
+ "peerDependencies": {
59
+ "react": "^18.0.0 || ^19.0.0",
60
+ "react-dom": "^18.0.0 || ^19.0.0"
61
+ },
62
+ "devDependencies": {
63
+ "@howells/lint": "^0.1.7",
64
+ "@howells/typescript-config": "^0.1.2",
65
+ "@tailwindcss/cli": "^4.3.0",
66
+ "@testing-library/jest-dom": "^6.9.1",
67
+ "@testing-library/react": "^16.3.2",
68
+ "@testing-library/user-event": "^14.6.1",
69
+ "@types/react": "^19.2.14",
70
+ "@types/react-dom": "^19.2.3",
71
+ "concurrently": "^9.2.1",
72
+ "jsdom": "^29.1.1",
73
+ "tailwindcss": "^4.3.0",
74
+ "tsdown": "^0.22.0",
75
+ "typescript": "^6.0.3",
76
+ "vitest": "^4.1.6"
77
+ },
78
+ "scripts": {
79
+ "build": "tsdown && tsc --emitDeclarationOnly --declaration --declarationMap --outDir dist --noEmit false && pnpm build:styles",
80
+ "build:styles": "tailwindcss -i ./src/styles.css -o ./dist/styles.css --minify",
81
+ "clean": "rm -rf dist .turbo",
82
+ "dev": "concurrently \"pnpm dev:js\" \"pnpm dev:types\" \"pnpm dev:styles\"",
83
+ "dev:js": "tsdown --watch",
84
+ "dev:styles": "tailwindcss -i ./src/styles.css -o ./dist/styles.css --watch",
85
+ "dev:types": "tsc --emitDeclarationOnly --declaration --declarationMap --outDir dist --noEmit false --watch --preserveWatchOutput",
86
+ "lint:check": "find src -type f \\( -name '*.ts' -o -name '*.tsx' \\) -print0 | xargs -0 howells-biome check",
87
+ "test": "vitest run",
88
+ "typecheck": "tsc --noEmit"
89
+ }
90
+ }