@rezahasani78/sheet-router 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -300,8 +300,10 @@ function BottomSheet({
300
300
  zIndex,
301
301
  onClose,
302
302
  title,
303
- children
303
+ children,
304
+ height
304
305
  }) {
306
+ const isFullScreen = !height || height === "100%";
305
307
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
306
308
  /* @__PURE__ */ jsxRuntime.jsx(
307
309
  "div",
@@ -319,7 +321,11 @@ function BottomSheet({
319
321
  className: "sr-sheet",
320
322
  "data-open": open,
321
323
  "data-behind": behind,
322
- style: { zIndex: zIndex + 1 },
324
+ "data-full": isFullScreen,
325
+ style: {
326
+ zIndex: zIndex + 1,
327
+ ...height ? { height } : {}
328
+ },
323
329
  role: "dialog",
324
330
  "aria-modal": "true",
325
331
  "aria-label": title,
@@ -350,6 +356,7 @@ function SheetOutlet() {
350
356
  zIndex,
351
357
  onClose: () => mediator.back(),
352
358
  title: route.title ?? route.path,
359
+ height: route.height,
353
360
  children: /* @__PURE__ */ jsxRuntime.jsx(
354
361
  SheetParamsContext.Provider,
355
362
  {
@@ -370,8 +377,8 @@ function collectRoutes(children) {
370
377
  const routes = /* @__PURE__ */ new Map();
371
378
  react.Children.forEach(children, (child) => {
372
379
  if (isSheetRouteElement(child)) {
373
- const { path, component, title } = child.props;
374
- routes.set(path, { path, component, title });
380
+ const { path, component, title, height } = child.props;
381
+ routes.set(path, { path, component, title, height });
375
382
  }
376
383
  });
377
384
  return routes;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/sheet-stack-manager.ts","../src/lib/history-manager.ts","../src/lib/back-navigation-mediator.ts","../src/lib/session-storage.ts","../src/context/sheet-router-context.ts","../src/context/sheet-params-context.ts","../src/components/bottom-sheet/index.tsx","../src/components/sheet-outlet.tsx","../src/components/sheet-router.tsx","../src/components/sheet-route.tsx","../src/hooks/use-sheet-navigate.ts","../src/hooks/use-sheet-params.ts","../src/hooks/use-before-unload.ts"],"names":["isBrowser","createContext","useContext","jsxs","Fragment","jsx","createElement","isValidElement","Children","useMemo","stack","useEffect","useSyncExternalStore","useCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { StackEntry, Listener, StorageProvider } from \"../types\";\n\nclass SheetStackManager {\n private stack: StackEntry[] = [];\n private listeners = new Set<Listener>();\n private snapshot: readonly StackEntry[] = [];\n private storage: StorageProvider | null;\n\n constructor(storage: StorageProvider | null) {\n this.storage = storage;\n\n if (this.storage) {\n const restored = this.storage.load();\n if (restored.length > 0) {\n this.stack = restored.map((entry) => ({ ...entry }));\n this.updateSnapshot();\n }\n }\n }\n\n push(entry: StackEntry): void {\n this.stack.push(entry);\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n\n pop(): StackEntry | undefined {\n const entry = this.stack.pop();\n if (entry) {\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n return entry;\n }\n\n popAll(): void {\n if (this.stack.length === 0) {\n return;\n }\n this.stack.length = 0;\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n\n peek(): StackEntry | undefined {\n return this.stack[this.stack.length - 1];\n }\n\n getSnapshot(): readonly StackEntry[] {\n return this.snapshot;\n }\n\n get size(): number {\n return this.stack.length;\n }\n\n get isEmpty(): boolean {\n return this.stack.length === 0;\n }\n\n hasPath(path: string): boolean {\n return this.stack.some((entry) => entry.path === path);\n }\n\n subscribe(listener: Listener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private persist(): void {\n this.storage?.save(this.stack);\n }\n\n private updateSnapshot(): void {\n this.snapshot = [...this.stack];\n }\n\n private notify(): void {\n this.listeners.forEach((listener) => listener());\n }\n}\n\nexport { SheetStackManager };\n","import type { BackHandler } from \"../types\";\n\nconst isBrowser = typeof window !== \"undefined\";\n\ninterface SheetHistoryState {\n __sheetRouter: true;\n entryId: string;\n depth: number;\n}\n\nfunction isSheetHistoryState(state: unknown): state is SheetHistoryState {\n return (\n typeof state === \"object\" &&\n state !== null &&\n \"__sheetRouter\" in state &&\n (state as SheetHistoryState).__sheetRouter === true\n );\n}\n\nclass HistoryManager {\n private subscribers = new Set<BackHandler>();\n private handlePopState: ((event: PopStateEvent) => void) | null = null;\n private depth = 0;\n\n constructor() {\n if (!isBrowser) {\n return;\n }\n\n this.handlePopState = (event: PopStateEvent) => {\n const targetDepth = isSheetHistoryState(event.state)\n ? event.state.depth\n : 0;\n\n if (targetDepth < this.depth) {\n this.depth = targetDepth;\n this.notifyBack();\n } else {\n this.depth = targetDepth;\n }\n };\n window.addEventListener(\"popstate\", this.handlePopState);\n }\n\n restoreEntries(entryIds: string[]): void {\n if (!isBrowser) {\n return;\n }\n if (isSheetHistoryState(window.history.state)) {\n window.history.replaceState(null, \"\", window.location.href);\n }\n for (const entryId of entryIds) {\n this.depth += 1;\n const state: SheetHistoryState = {\n __sheetRouter: true,\n entryId,\n depth: this.depth,\n };\n window.history.pushState(state, \"\", window.location.href);\n }\n }\n\n pushState(entryId: string): void {\n if (!isBrowser) {\n return;\n }\n this.depth += 1;\n const state: SheetHistoryState = {\n __sheetRouter: true,\n entryId,\n depth: this.depth,\n };\n window.history.pushState(state, \"\", window.location.href);\n }\n\n goBack(count: number = 1): void {\n if (!isBrowser) {\n return;\n }\n if (count > 0) {\n this.depth = Math.max(0, this.depth - count);\n window.history.go(-count);\n }\n }\n\n subscribe(onBack: BackHandler): () => void {\n this.subscribers.add(onBack);\n return () => {\n this.subscribers.delete(onBack);\n };\n }\n\n destroy(): void {\n if (isBrowser && this.handlePopState) {\n window.removeEventListener(\"popstate\", this.handlePopState);\n }\n this.subscribers.clear();\n }\n\n private notifyBack(): void {\n this.subscribers.forEach((handler) => handler());\n }\n}\n\nexport { HistoryManager };\n","import type { StackEntry } from \"../types\";\nimport { SheetStackManager } from \"./sheet-stack-manager\";\nimport { HistoryManager } from \"./history-manager\";\n\nlet idCounter = 0;\n\nfunction generateEntryId(): string {\n idCounter += 1;\n return `sheet-${idCounter}-${Date.now()}`;\n}\n\nclass BackNavigationMediator {\n private sheetStack: SheetStackManager;\n private historyManager: HistoryManager;\n private unsubscribeHistory: () => void;\n private programmaticNavigation = 0;\n\n constructor(\n sheetStack: SheetStackManager,\n historyManager: HistoryManager,\n ) {\n this.sheetStack = sheetStack;\n this.historyManager = historyManager;\n\n this.unsubscribeHistory = this.historyManager.subscribe(() => {\n this.handleBack();\n });\n\n const restoredEntries = this.sheetStack.getSnapshot();\n if (restoredEntries.length > 0) {\n this.historyManager.restoreEntries(\n restoredEntries.map((entry) => entry.id),\n );\n }\n }\n\n open(path: string, params: Record<string, unknown> = {}): void {\n const entry: StackEntry = {\n id: generateEntryId(),\n path,\n params,\n };\n this.sheetStack.push(entry);\n this.historyManager.pushState(entry.id);\n }\n\n back(): void {\n if (this.sheetStack.isEmpty) {\n return;\n }\n this.sheetStack.pop();\n this.programmaticNavigation += 1;\n this.historyManager.goBack(1);\n }\n\n backAll(): void {\n const count = this.sheetStack.size;\n if (count === 0) {\n return;\n }\n this.sheetStack.popAll();\n this.programmaticNavigation += 1;\n this.historyManager.goBack(count);\n }\n\n isOpen(path: string): boolean {\n return this.sheetStack.hasPath(path);\n }\n\n get stack(): SheetStackManager {\n return this.sheetStack;\n }\n\n destroy(): void {\n this.unsubscribeHistory();\n this.historyManager.destroy();\n }\n\n private handleBack(): void {\n if (this.programmaticNavigation > 0) {\n this.programmaticNavigation -= 1;\n return;\n }\n this.sheetStack.pop();\n }\n}\n\nexport { BackNavigationMediator };\n","import type { StackEntry, StorageProvider } from \"../types\";\n\nconst STORAGE_KEY = \"__sheetRouter_stack\";\nconst isBrowser = typeof window !== \"undefined\";\n\nfunction validateEntries(parsed: unknown): StackEntry[] {\n if (!Array.isArray(parsed)) {\n return [];\n }\n return parsed.filter(\n (entry): entry is StackEntry =>\n typeof entry === \"object\" &&\n entry !== null &&\n typeof entry.id === \"string\" &&\n typeof entry.path === \"string\" &&\n typeof entry.params === \"object\",\n );\n}\n\nfunction createSessionStorageProvider(): StorageProvider {\n return {\n save(stack: readonly StackEntry[]): void {\n if (!isBrowser) {\n return;\n }\n try {\n sessionStorage.setItem(STORAGE_KEY, JSON.stringify(stack));\n } catch {\n // quota exceeded or private browsing\n }\n },\n\n load(): StackEntry[] {\n if (!isBrowser) {\n return [];\n }\n try {\n const raw = sessionStorage.getItem(STORAGE_KEY);\n if (!raw) {\n return [];\n }\n return validateEntries(JSON.parse(raw));\n } catch {\n return [];\n }\n },\n\n clear(): void {\n if (!isBrowser) {\n return;\n }\n try {\n sessionStorage.removeItem(STORAGE_KEY);\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport { createSessionStorageProvider };\n","import { createContext, useContext } from \"react\";\nimport type { RouteDefinition, StackEntry } from \"../types\";\nimport type { BackNavigationMediator } from \"../lib/back-navigation-mediator\";\n\ninterface SheetRouterContextValue {\n mediator: BackNavigationMediator;\n routes: Map<string, RouteDefinition>;\n stack: readonly StackEntry[];\n}\n\nconst SheetRouterContext = createContext<SheetRouterContextValue | null>(null);\n\nfunction useSheetRouterContext(): SheetRouterContextValue {\n const context = useContext(SheetRouterContext);\n if (!context) {\n throw new Error(\n \"Sheet router hooks must be used within a <SheetRouter> provider.\",\n );\n }\n return context;\n}\n\nexport { SheetRouterContext, useSheetRouterContext };\nexport type { SheetRouterContextValue };\n","import { createContext, useContext } from \"react\";\n\ninterface SheetParamsContextValue {\n path: string;\n params: Record<string, unknown>;\n}\n\nconst SheetParamsContext = createContext<SheetParamsContextValue | null>(null);\n\nfunction useSheetParamsContext(): SheetParamsContextValue {\n const context = useContext(SheetParamsContext);\n if (!context) {\n throw new Error(\n \"useSheetParams must be used inside a sheet rendered by <SheetRouter>.\",\n );\n }\n return context;\n}\n\nexport { SheetParamsContext, useSheetParamsContext };\nexport type { SheetParamsContextValue };\n","import type { ReactNode } from \"react\";\n\ninterface BottomSheetProps {\n open: boolean;\n behind: boolean;\n zIndex: number;\n onClose: () => void;\n title: string;\n children: ReactNode;\n}\n\nfunction BottomSheet({\n open,\n behind,\n zIndex,\n onClose,\n title,\n children,\n}: BottomSheetProps) {\n return (\n <>\n <div\n className=\"sr-backdrop\"\n data-open={open}\n style={{ zIndex }}\n onClick={onClose}\n role=\"presentation\"\n />\n <div\n className=\"sr-sheet\"\n data-open={open}\n data-behind={behind}\n style={{ zIndex: zIndex + 1 }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n >\n <div className=\"sr-handle\">\n <div className=\"sr-handle-bar\" />\n </div>\n <div className=\"sr-content\">{children}</div>\n </div>\n </>\n );\n}\n\nexport { BottomSheet };\nexport type { BottomSheetProps };\n","import { createElement } from \"react\";\nimport { useSheetRouterContext } from \"../context/sheet-router-context\";\nimport { SheetParamsContext } from \"../context/sheet-params-context\";\nimport { BottomSheet } from \"./bottom-sheet\";\n\nconst BASE_Z_INDEX = 1000;\n\nfunction SheetOutlet() {\n const { stack, routes, mediator } = useSheetRouterContext();\n\n return (\n <>\n {stack.map((entry, index) => {\n const route = routes.get(entry.path);\n if (!route) {\n return null;\n }\n\n const isTop = index === stack.length - 1;\n const isBehind = !isTop;\n const zIndex = BASE_Z_INDEX + index * 2;\n\n return (\n <BottomSheet\n key={entry.id}\n open={true}\n behind={isBehind}\n zIndex={zIndex}\n onClose={() => mediator.back()}\n title={route.title ?? route.path}\n >\n <SheetParamsContext.Provider\n value={{ path: entry.path, params: entry.params }}\n >\n {createElement(route.component)}\n </SheetParamsContext.Provider>\n </BottomSheet>\n );\n })}\n </>\n );\n}\n\nexport { SheetOutlet };\n","import {\n Children,\n isValidElement,\n useEffect,\n useMemo,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport type { RouteDefinition, SheetRouteProps, StackEntry, StorageProvider } from \"../types\";\nimport { SheetStackManager } from \"../lib/sheet-stack-manager\";\nimport { HistoryManager } from \"../lib/history-manager\";\nimport { BackNavigationMediator } from \"../lib/back-navigation-mediator\";\nimport { createSessionStorageProvider } from \"../lib/session-storage\";\nimport { SheetRouterContext } from \"../context/sheet-router-context\";\nimport { SheetOutlet } from \"./sheet-outlet\";\n\ninterface SheetRouterProps {\n children: ReactNode;\n persist?: boolean;\n storageProvider?: StorageProvider;\n}\n\nconst EMPTY_STACK: readonly StackEntry[] = [];\n\nfunction isSheetRouteElement(\n child: ReactNode,\n): child is React.ReactElement<SheetRouteProps> {\n return (\n isValidElement(child) &&\n typeof child.type === \"function\" &&\n \"__isSheetRoute\" in child.type\n );\n}\n\nfunction collectRoutes(children: ReactNode): Map<string, RouteDefinition> {\n const routes = new Map<string, RouteDefinition>();\n\n Children.forEach(children, (child) => {\n if (isSheetRouteElement(child)) {\n const { path, component, title } = child.props;\n routes.set(path, { path, component, title });\n }\n });\n\n return routes;\n}\n\nfunction collectBaseContent(children: ReactNode): ReactNode[] {\n const base: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (!isSheetRouteElement(child)) {\n base.push(child);\n }\n });\n\n return base;\n}\n\nfunction SheetRouter({ children, persist = true, storageProvider }: SheetRouterProps) {\n const mediator = useMemo(() => {\n const storage = persist\n ? (storageProvider ?? createSessionStorageProvider())\n : null;\n const stack = new SheetStackManager(storage);\n const history = new HistoryManager();\n return new BackNavigationMediator(stack, history);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n return () => {\n mediator.destroy();\n };\n }, [mediator]);\n\n const routes = useMemo(() => collectRoutes(children), [children]);\n const baseContent = useMemo(() => collectBaseContent(children), [children]);\n\n const stack: readonly StackEntry[] = useSyncExternalStore(\n (callback) => mediator.stack.subscribe(callback),\n () => mediator.stack.getSnapshot(),\n () => EMPTY_STACK,\n );\n\n const contextValue = useMemo(\n () => ({ mediator, routes, stack }),\n [mediator, routes, stack],\n );\n\n return (\n <SheetRouterContext.Provider value={contextValue}>\n {baseContent}\n <SheetOutlet />\n </SheetRouterContext.Provider>\n );\n}\n\nexport { SheetRouter };\n","import type { SheetRouteProps } from \"../types\";\n\nfunction SheetRoute(_props: SheetRouteProps): null {\n return null;\n}\n\nSheetRoute.__isSheetRoute = true;\n\nexport { SheetRoute };\n","import { useCallback, useMemo } from \"react\";\nimport type { SheetNavigator } from \"../types\";\nimport { useSheetRouterContext } from \"../context/sheet-router-context\";\n\nfunction useSheetNavigate(): SheetNavigator {\n const { mediator } = useSheetRouterContext();\n\n const open = useCallback(\n (path: string, params?: Record<string, unknown>) => {\n mediator.open(path, params);\n },\n [mediator],\n );\n\n const back = useCallback(() => {\n mediator.back();\n }, [mediator]);\n\n const backAll = useCallback(() => {\n mediator.backAll();\n }, [mediator]);\n\n const isOpen = useCallback(\n (path: string) => mediator.isOpen(path),\n [mediator],\n );\n\n return useMemo(\n () => ({ open, back, backAll, isOpen }),\n [open, back, backAll, isOpen],\n );\n}\n\nexport { useSheetNavigate };\n","import { useSheetParamsContext } from \"../context/sheet-params-context\";\n\nfunction useSheetParams<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(): { path: string; params: T } {\n const context = useSheetParamsContext();\n return {\n path: context.path,\n params: context.params as T,\n };\n}\n\nexport { useSheetParams };\n","import { useEffect } from \"react\";\n\nfunction useBeforeUnload(enabled: boolean) {\n useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const handler = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n };\n\n window.addEventListener(\"beforeunload\", handler);\n return () => {\n window.removeEventListener(\"beforeunload\", handler);\n };\n }, [enabled]);\n}\n\nexport { useBeforeUnload };\n"]}
1
+ {"version":3,"sources":["../src/lib/sheet-stack-manager.ts","../src/lib/history-manager.ts","../src/lib/back-navigation-mediator.ts","../src/lib/session-storage.ts","../src/context/sheet-router-context.ts","../src/context/sheet-params-context.ts","../src/components/bottom-sheet/index.tsx","../src/components/sheet-outlet.tsx","../src/components/sheet-router.tsx","../src/components/sheet-route.tsx","../src/hooks/use-sheet-navigate.ts","../src/hooks/use-sheet-params.ts","../src/hooks/use-before-unload.ts"],"names":["isBrowser","createContext","useContext","jsxs","Fragment","jsx","createElement","isValidElement","Children","useMemo","stack","useEffect","useSyncExternalStore","useCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { StackEntry, Listener, StorageProvider } from \"../types\";\n\nclass SheetStackManager {\n private stack: StackEntry[] = [];\n private listeners = new Set<Listener>();\n private snapshot: readonly StackEntry[] = [];\n private storage: StorageProvider | null;\n\n constructor(storage: StorageProvider | null) {\n this.storage = storage;\n\n if (this.storage) {\n const restored = this.storage.load();\n if (restored.length > 0) {\n this.stack = restored.map((entry) => ({ ...entry }));\n this.updateSnapshot();\n }\n }\n }\n\n push(entry: StackEntry): void {\n this.stack.push(entry);\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n\n pop(): StackEntry | undefined {\n const entry = this.stack.pop();\n if (entry) {\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n return entry;\n }\n\n popAll(): void {\n if (this.stack.length === 0) {\n return;\n }\n this.stack.length = 0;\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n\n peek(): StackEntry | undefined {\n return this.stack[this.stack.length - 1];\n }\n\n getSnapshot(): readonly StackEntry[] {\n return this.snapshot;\n }\n\n get size(): number {\n return this.stack.length;\n }\n\n get isEmpty(): boolean {\n return this.stack.length === 0;\n }\n\n hasPath(path: string): boolean {\n return this.stack.some((entry) => entry.path === path);\n }\n\n subscribe(listener: Listener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private persist(): void {\n this.storage?.save(this.stack);\n }\n\n private updateSnapshot(): void {\n this.snapshot = [...this.stack];\n }\n\n private notify(): void {\n this.listeners.forEach((listener) => listener());\n }\n}\n\nexport { SheetStackManager };\n","import type { BackHandler } from \"../types\";\n\nconst isBrowser = typeof window !== \"undefined\";\n\ninterface SheetHistoryState {\n __sheetRouter: true;\n entryId: string;\n depth: number;\n}\n\nfunction isSheetHistoryState(state: unknown): state is SheetHistoryState {\n return (\n typeof state === \"object\" &&\n state !== null &&\n \"__sheetRouter\" in state &&\n (state as SheetHistoryState).__sheetRouter === true\n );\n}\n\nclass HistoryManager {\n private subscribers = new Set<BackHandler>();\n private handlePopState: ((event: PopStateEvent) => void) | null = null;\n private depth = 0;\n\n constructor() {\n if (!isBrowser) {\n return;\n }\n\n this.handlePopState = (event: PopStateEvent) => {\n const targetDepth = isSheetHistoryState(event.state)\n ? event.state.depth\n : 0;\n\n if (targetDepth < this.depth) {\n this.depth = targetDepth;\n this.notifyBack();\n } else {\n this.depth = targetDepth;\n }\n };\n window.addEventListener(\"popstate\", this.handlePopState);\n }\n\n restoreEntries(entryIds: string[]): void {\n if (!isBrowser) {\n return;\n }\n if (isSheetHistoryState(window.history.state)) {\n window.history.replaceState(null, \"\", window.location.href);\n }\n for (const entryId of entryIds) {\n this.depth += 1;\n const state: SheetHistoryState = {\n __sheetRouter: true,\n entryId,\n depth: this.depth,\n };\n window.history.pushState(state, \"\", window.location.href);\n }\n }\n\n pushState(entryId: string): void {\n if (!isBrowser) {\n return;\n }\n this.depth += 1;\n const state: SheetHistoryState = {\n __sheetRouter: true,\n entryId,\n depth: this.depth,\n };\n window.history.pushState(state, \"\", window.location.href);\n }\n\n goBack(count: number = 1): void {\n if (!isBrowser) {\n return;\n }\n if (count > 0) {\n this.depth = Math.max(0, this.depth - count);\n window.history.go(-count);\n }\n }\n\n subscribe(onBack: BackHandler): () => void {\n this.subscribers.add(onBack);\n return () => {\n this.subscribers.delete(onBack);\n };\n }\n\n destroy(): void {\n if (isBrowser && this.handlePopState) {\n window.removeEventListener(\"popstate\", this.handlePopState);\n }\n this.subscribers.clear();\n }\n\n private notifyBack(): void {\n this.subscribers.forEach((handler) => handler());\n }\n}\n\nexport { HistoryManager };\n","import type { StackEntry } from \"../types\";\nimport { SheetStackManager } from \"./sheet-stack-manager\";\nimport { HistoryManager } from \"./history-manager\";\n\nlet idCounter = 0;\n\nfunction generateEntryId(): string {\n idCounter += 1;\n return `sheet-${idCounter}-${Date.now()}`;\n}\n\nclass BackNavigationMediator {\n private sheetStack: SheetStackManager;\n private historyManager: HistoryManager;\n private unsubscribeHistory: () => void;\n private programmaticNavigation = 0;\n\n constructor(\n sheetStack: SheetStackManager,\n historyManager: HistoryManager,\n ) {\n this.sheetStack = sheetStack;\n this.historyManager = historyManager;\n\n this.unsubscribeHistory = this.historyManager.subscribe(() => {\n this.handleBack();\n });\n\n const restoredEntries = this.sheetStack.getSnapshot();\n if (restoredEntries.length > 0) {\n this.historyManager.restoreEntries(\n restoredEntries.map((entry) => entry.id),\n );\n }\n }\n\n open(path: string, params: Record<string, unknown> = {}): void {\n const entry: StackEntry = {\n id: generateEntryId(),\n path,\n params,\n };\n this.sheetStack.push(entry);\n this.historyManager.pushState(entry.id);\n }\n\n back(): void {\n if (this.sheetStack.isEmpty) {\n return;\n }\n this.sheetStack.pop();\n this.programmaticNavigation += 1;\n this.historyManager.goBack(1);\n }\n\n backAll(): void {\n const count = this.sheetStack.size;\n if (count === 0) {\n return;\n }\n this.sheetStack.popAll();\n this.programmaticNavigation += 1;\n this.historyManager.goBack(count);\n }\n\n isOpen(path: string): boolean {\n return this.sheetStack.hasPath(path);\n }\n\n get stack(): SheetStackManager {\n return this.sheetStack;\n }\n\n destroy(): void {\n this.unsubscribeHistory();\n this.historyManager.destroy();\n }\n\n private handleBack(): void {\n if (this.programmaticNavigation > 0) {\n this.programmaticNavigation -= 1;\n return;\n }\n this.sheetStack.pop();\n }\n}\n\nexport { BackNavigationMediator };\n","import type { StackEntry, StorageProvider } from \"../types\";\n\nconst STORAGE_KEY = \"__sheetRouter_stack\";\nconst isBrowser = typeof window !== \"undefined\";\n\nfunction validateEntries(parsed: unknown): StackEntry[] {\n if (!Array.isArray(parsed)) {\n return [];\n }\n return parsed.filter(\n (entry): entry is StackEntry =>\n typeof entry === \"object\" &&\n entry !== null &&\n typeof entry.id === \"string\" &&\n typeof entry.path === \"string\" &&\n typeof entry.params === \"object\",\n );\n}\n\nfunction createSessionStorageProvider(): StorageProvider {\n return {\n save(stack: readonly StackEntry[]): void {\n if (!isBrowser) {\n return;\n }\n try {\n sessionStorage.setItem(STORAGE_KEY, JSON.stringify(stack));\n } catch {\n // quota exceeded or private browsing\n }\n },\n\n load(): StackEntry[] {\n if (!isBrowser) {\n return [];\n }\n try {\n const raw = sessionStorage.getItem(STORAGE_KEY);\n if (!raw) {\n return [];\n }\n return validateEntries(JSON.parse(raw));\n } catch {\n return [];\n }\n },\n\n clear(): void {\n if (!isBrowser) {\n return;\n }\n try {\n sessionStorage.removeItem(STORAGE_KEY);\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport { createSessionStorageProvider };\n","import { createContext, useContext } from \"react\";\nimport type { RouteDefinition, StackEntry } from \"../types\";\nimport type { BackNavigationMediator } from \"../lib/back-navigation-mediator\";\n\ninterface SheetRouterContextValue {\n mediator: BackNavigationMediator;\n routes: Map<string, RouteDefinition>;\n stack: readonly StackEntry[];\n}\n\nconst SheetRouterContext = createContext<SheetRouterContextValue | null>(null);\n\nfunction useSheetRouterContext(): SheetRouterContextValue {\n const context = useContext(SheetRouterContext);\n if (!context) {\n throw new Error(\n \"Sheet router hooks must be used within a <SheetRouter> provider.\",\n );\n }\n return context;\n}\n\nexport { SheetRouterContext, useSheetRouterContext };\nexport type { SheetRouterContextValue };\n","import { createContext, useContext } from \"react\";\n\ninterface SheetParamsContextValue {\n path: string;\n params: Record<string, unknown>;\n}\n\nconst SheetParamsContext = createContext<SheetParamsContextValue | null>(null);\n\nfunction useSheetParamsContext(): SheetParamsContextValue {\n const context = useContext(SheetParamsContext);\n if (!context) {\n throw new Error(\n \"useSheetParams must be used inside a sheet rendered by <SheetRouter>.\",\n );\n }\n return context;\n}\n\nexport { SheetParamsContext, useSheetParamsContext };\nexport type { SheetParamsContextValue };\n","import type { ReactNode } from \"react\";\n\ninterface BottomSheetProps {\n open: boolean;\n behind: boolean;\n zIndex: number;\n onClose: () => void;\n title: string;\n children: ReactNode;\n height?: string;\n}\n\nfunction BottomSheet({\n open,\n behind,\n zIndex,\n onClose,\n title,\n children,\n height,\n}: BottomSheetProps) {\n const isFullScreen = !height || height === \"100%\";\n\n return (\n <>\n <div\n className=\"sr-backdrop\"\n data-open={open}\n style={{ zIndex }}\n onClick={onClose}\n role=\"presentation\"\n />\n <div\n className=\"sr-sheet\"\n data-open={open}\n data-behind={behind}\n data-full={isFullScreen}\n style={{\n zIndex: zIndex + 1,\n ...(height ? { height } : {}),\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n >\n <div className=\"sr-handle\">\n <div className=\"sr-handle-bar\" />\n </div>\n <div className=\"sr-content\">{children}</div>\n </div>\n </>\n );\n}\n\nexport { BottomSheet };\nexport type { BottomSheetProps };\n","import { createElement } from \"react\";\nimport { useSheetRouterContext } from \"../context/sheet-router-context\";\nimport { SheetParamsContext } from \"../context/sheet-params-context\";\nimport { BottomSheet } from \"./bottom-sheet\";\n\nconst BASE_Z_INDEX = 1000;\n\nfunction SheetOutlet() {\n const { stack, routes, mediator } = useSheetRouterContext();\n\n return (\n <>\n {stack.map((entry, index) => {\n const route = routes.get(entry.path);\n if (!route) {\n return null;\n }\n\n const isTop = index === stack.length - 1;\n const isBehind = !isTop;\n const zIndex = BASE_Z_INDEX + index * 2;\n\n return (\n <BottomSheet\n key={entry.id}\n open={true}\n behind={isBehind}\n zIndex={zIndex}\n onClose={() => mediator.back()}\n title={route.title ?? route.path}\n height={route.height}\n >\n <SheetParamsContext.Provider\n value={{ path: entry.path, params: entry.params }}\n >\n {createElement(route.component)}\n </SheetParamsContext.Provider>\n </BottomSheet>\n );\n })}\n </>\n );\n}\n\nexport { SheetOutlet };\n","import {\n Children,\n isValidElement,\n useEffect,\n useMemo,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport type { RouteDefinition, SheetRouteProps, StackEntry, StorageProvider } from \"../types\";\nimport { SheetStackManager } from \"../lib/sheet-stack-manager\";\nimport { HistoryManager } from \"../lib/history-manager\";\nimport { BackNavigationMediator } from \"../lib/back-navigation-mediator\";\nimport { createSessionStorageProvider } from \"../lib/session-storage\";\nimport { SheetRouterContext } from \"../context/sheet-router-context\";\nimport { SheetOutlet } from \"./sheet-outlet\";\n\ninterface SheetRouterProps {\n children: ReactNode;\n persist?: boolean;\n storageProvider?: StorageProvider;\n}\n\nconst EMPTY_STACK: readonly StackEntry[] = [];\n\nfunction isSheetRouteElement(\n child: ReactNode,\n): child is React.ReactElement<SheetRouteProps> {\n return (\n isValidElement(child) &&\n typeof child.type === \"function\" &&\n \"__isSheetRoute\" in child.type\n );\n}\n\nfunction collectRoutes(children: ReactNode): Map<string, RouteDefinition> {\n const routes = new Map<string, RouteDefinition>();\n\n Children.forEach(children, (child) => {\n if (isSheetRouteElement(child)) {\n const { path, component, title, height } = child.props;\n routes.set(path, { path, component, title, height });\n }\n });\n\n return routes;\n}\n\nfunction collectBaseContent(children: ReactNode): ReactNode[] {\n const base: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (!isSheetRouteElement(child)) {\n base.push(child);\n }\n });\n\n return base;\n}\n\nfunction SheetRouter({ children, persist = true, storageProvider }: SheetRouterProps) {\n const mediator = useMemo(() => {\n const storage = persist\n ? (storageProvider ?? createSessionStorageProvider())\n : null;\n const stack = new SheetStackManager(storage);\n const history = new HistoryManager();\n return new BackNavigationMediator(stack, history);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n return () => {\n mediator.destroy();\n };\n }, [mediator]);\n\n const routes = useMemo(() => collectRoutes(children), [children]);\n const baseContent = useMemo(() => collectBaseContent(children), [children]);\n\n const stack: readonly StackEntry[] = useSyncExternalStore(\n (callback) => mediator.stack.subscribe(callback),\n () => mediator.stack.getSnapshot(),\n () => EMPTY_STACK,\n );\n\n const contextValue = useMemo(\n () => ({ mediator, routes, stack }),\n [mediator, routes, stack],\n );\n\n return (\n <SheetRouterContext.Provider value={contextValue}>\n {baseContent}\n <SheetOutlet />\n </SheetRouterContext.Provider>\n );\n}\n\nexport { SheetRouter };\n","import type { SheetRouteProps } from \"../types\";\n\nfunction SheetRoute(_props: SheetRouteProps): null {\n return null;\n}\n\nSheetRoute.__isSheetRoute = true;\n\nexport { SheetRoute };\n","import { useCallback, useMemo } from \"react\";\nimport type { SheetNavigator } from \"../types\";\nimport { useSheetRouterContext } from \"../context/sheet-router-context\";\n\nfunction useSheetNavigate(): SheetNavigator {\n const { mediator } = useSheetRouterContext();\n\n const open = useCallback(\n (path: string, params?: Record<string, unknown>) => {\n mediator.open(path, params);\n },\n [mediator],\n );\n\n const back = useCallback(() => {\n mediator.back();\n }, [mediator]);\n\n const backAll = useCallback(() => {\n mediator.backAll();\n }, [mediator]);\n\n const isOpen = useCallback(\n (path: string) => mediator.isOpen(path),\n [mediator],\n );\n\n return useMemo(\n () => ({ open, back, backAll, isOpen }),\n [open, back, backAll, isOpen],\n );\n}\n\nexport { useSheetNavigate };\n","import { useSheetParamsContext } from \"../context/sheet-params-context\";\n\nfunction useSheetParams<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(): { path: string; params: T } {\n const context = useSheetParamsContext();\n return {\n path: context.path,\n params: context.params as T,\n };\n}\n\nexport { useSheetParams };\n","import { useEffect } from \"react\";\n\nfunction useBeforeUnload(enabled: boolean) {\n useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const handler = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n };\n\n window.addEventListener(\"beforeunload\", handler);\n return () => {\n window.removeEventListener(\"beforeunload\", handler);\n };\n }, [enabled]);\n}\n\nexport { useBeforeUnload };\n"]}
package/dist/index.d.cts CHANGED
@@ -10,6 +10,7 @@ interface RouteDefinition {
10
10
  path: string;
11
11
  component: ComponentType;
12
12
  title?: string;
13
+ height?: string;
13
14
  }
14
15
  interface SheetNavigator {
15
16
  open: (path: string, params?: Record<string, unknown>) => void;
@@ -21,6 +22,7 @@ interface SheetRouteProps {
21
22
  path: string;
22
23
  component: ComponentType;
23
24
  title?: string;
25
+ height?: string;
24
26
  }
25
27
  interface StorageProvider {
26
28
  save: (stack: readonly StackEntry[]) => void;
package/dist/index.d.ts CHANGED
@@ -10,6 +10,7 @@ interface RouteDefinition {
10
10
  path: string;
11
11
  component: ComponentType;
12
12
  title?: string;
13
+ height?: string;
13
14
  }
14
15
  interface SheetNavigator {
15
16
  open: (path: string, params?: Record<string, unknown>) => void;
@@ -21,6 +22,7 @@ interface SheetRouteProps {
21
22
  path: string;
22
23
  component: ComponentType;
23
24
  title?: string;
25
+ height?: string;
24
26
  }
25
27
  interface StorageProvider {
26
28
  save: (stack: readonly StackEntry[]) => void;
package/dist/index.js CHANGED
@@ -298,8 +298,10 @@ function BottomSheet({
298
298
  zIndex,
299
299
  onClose,
300
300
  title,
301
- children
301
+ children,
302
+ height
302
303
  }) {
304
+ const isFullScreen = !height || height === "100%";
303
305
  return /* @__PURE__ */ jsxs(Fragment, { children: [
304
306
  /* @__PURE__ */ jsx(
305
307
  "div",
@@ -317,7 +319,11 @@ function BottomSheet({
317
319
  className: "sr-sheet",
318
320
  "data-open": open,
319
321
  "data-behind": behind,
320
- style: { zIndex: zIndex + 1 },
322
+ "data-full": isFullScreen,
323
+ style: {
324
+ zIndex: zIndex + 1,
325
+ ...height ? { height } : {}
326
+ },
321
327
  role: "dialog",
322
328
  "aria-modal": "true",
323
329
  "aria-label": title,
@@ -348,6 +354,7 @@ function SheetOutlet() {
348
354
  zIndex,
349
355
  onClose: () => mediator.back(),
350
356
  title: route.title ?? route.path,
357
+ height: route.height,
351
358
  children: /* @__PURE__ */ jsx(
352
359
  SheetParamsContext.Provider,
353
360
  {
@@ -368,8 +375,8 @@ function collectRoutes(children) {
368
375
  const routes = /* @__PURE__ */ new Map();
369
376
  Children.forEach(children, (child) => {
370
377
  if (isSheetRouteElement(child)) {
371
- const { path, component, title } = child.props;
372
- routes.set(path, { path, component, title });
378
+ const { path, component, title, height } = child.props;
379
+ routes.set(path, { path, component, title, height });
373
380
  }
374
381
  });
375
382
  return routes;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/sheet-stack-manager.ts","../src/lib/history-manager.ts","../src/lib/back-navigation-mediator.ts","../src/lib/session-storage.ts","../src/context/sheet-router-context.ts","../src/context/sheet-params-context.ts","../src/components/bottom-sheet/index.tsx","../src/components/sheet-outlet.tsx","../src/components/sheet-router.tsx","../src/components/sheet-route.tsx","../src/hooks/use-sheet-navigate.ts","../src/hooks/use-sheet-params.ts","../src/hooks/use-before-unload.ts"],"names":["isBrowser","createContext","useContext","jsx","Fragment","stack","jsxs","useMemo","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import type { StackEntry, Listener, StorageProvider } from \"../types\";\n\nclass SheetStackManager {\n private stack: StackEntry[] = [];\n private listeners = new Set<Listener>();\n private snapshot: readonly StackEntry[] = [];\n private storage: StorageProvider | null;\n\n constructor(storage: StorageProvider | null) {\n this.storage = storage;\n\n if (this.storage) {\n const restored = this.storage.load();\n if (restored.length > 0) {\n this.stack = restored.map((entry) => ({ ...entry }));\n this.updateSnapshot();\n }\n }\n }\n\n push(entry: StackEntry): void {\n this.stack.push(entry);\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n\n pop(): StackEntry | undefined {\n const entry = this.stack.pop();\n if (entry) {\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n return entry;\n }\n\n popAll(): void {\n if (this.stack.length === 0) {\n return;\n }\n this.stack.length = 0;\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n\n peek(): StackEntry | undefined {\n return this.stack[this.stack.length - 1];\n }\n\n getSnapshot(): readonly StackEntry[] {\n return this.snapshot;\n }\n\n get size(): number {\n return this.stack.length;\n }\n\n get isEmpty(): boolean {\n return this.stack.length === 0;\n }\n\n hasPath(path: string): boolean {\n return this.stack.some((entry) => entry.path === path);\n }\n\n subscribe(listener: Listener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private persist(): void {\n this.storage?.save(this.stack);\n }\n\n private updateSnapshot(): void {\n this.snapshot = [...this.stack];\n }\n\n private notify(): void {\n this.listeners.forEach((listener) => listener());\n }\n}\n\nexport { SheetStackManager };\n","import type { BackHandler } from \"../types\";\n\nconst isBrowser = typeof window !== \"undefined\";\n\ninterface SheetHistoryState {\n __sheetRouter: true;\n entryId: string;\n depth: number;\n}\n\nfunction isSheetHistoryState(state: unknown): state is SheetHistoryState {\n return (\n typeof state === \"object\" &&\n state !== null &&\n \"__sheetRouter\" in state &&\n (state as SheetHistoryState).__sheetRouter === true\n );\n}\n\nclass HistoryManager {\n private subscribers = new Set<BackHandler>();\n private handlePopState: ((event: PopStateEvent) => void) | null = null;\n private depth = 0;\n\n constructor() {\n if (!isBrowser) {\n return;\n }\n\n this.handlePopState = (event: PopStateEvent) => {\n const targetDepth = isSheetHistoryState(event.state)\n ? event.state.depth\n : 0;\n\n if (targetDepth < this.depth) {\n this.depth = targetDepth;\n this.notifyBack();\n } else {\n this.depth = targetDepth;\n }\n };\n window.addEventListener(\"popstate\", this.handlePopState);\n }\n\n restoreEntries(entryIds: string[]): void {\n if (!isBrowser) {\n return;\n }\n if (isSheetHistoryState(window.history.state)) {\n window.history.replaceState(null, \"\", window.location.href);\n }\n for (const entryId of entryIds) {\n this.depth += 1;\n const state: SheetHistoryState = {\n __sheetRouter: true,\n entryId,\n depth: this.depth,\n };\n window.history.pushState(state, \"\", window.location.href);\n }\n }\n\n pushState(entryId: string): void {\n if (!isBrowser) {\n return;\n }\n this.depth += 1;\n const state: SheetHistoryState = {\n __sheetRouter: true,\n entryId,\n depth: this.depth,\n };\n window.history.pushState(state, \"\", window.location.href);\n }\n\n goBack(count: number = 1): void {\n if (!isBrowser) {\n return;\n }\n if (count > 0) {\n this.depth = Math.max(0, this.depth - count);\n window.history.go(-count);\n }\n }\n\n subscribe(onBack: BackHandler): () => void {\n this.subscribers.add(onBack);\n return () => {\n this.subscribers.delete(onBack);\n };\n }\n\n destroy(): void {\n if (isBrowser && this.handlePopState) {\n window.removeEventListener(\"popstate\", this.handlePopState);\n }\n this.subscribers.clear();\n }\n\n private notifyBack(): void {\n this.subscribers.forEach((handler) => handler());\n }\n}\n\nexport { HistoryManager };\n","import type { StackEntry } from \"../types\";\nimport { SheetStackManager } from \"./sheet-stack-manager\";\nimport { HistoryManager } from \"./history-manager\";\n\nlet idCounter = 0;\n\nfunction generateEntryId(): string {\n idCounter += 1;\n return `sheet-${idCounter}-${Date.now()}`;\n}\n\nclass BackNavigationMediator {\n private sheetStack: SheetStackManager;\n private historyManager: HistoryManager;\n private unsubscribeHistory: () => void;\n private programmaticNavigation = 0;\n\n constructor(\n sheetStack: SheetStackManager,\n historyManager: HistoryManager,\n ) {\n this.sheetStack = sheetStack;\n this.historyManager = historyManager;\n\n this.unsubscribeHistory = this.historyManager.subscribe(() => {\n this.handleBack();\n });\n\n const restoredEntries = this.sheetStack.getSnapshot();\n if (restoredEntries.length > 0) {\n this.historyManager.restoreEntries(\n restoredEntries.map((entry) => entry.id),\n );\n }\n }\n\n open(path: string, params: Record<string, unknown> = {}): void {\n const entry: StackEntry = {\n id: generateEntryId(),\n path,\n params,\n };\n this.sheetStack.push(entry);\n this.historyManager.pushState(entry.id);\n }\n\n back(): void {\n if (this.sheetStack.isEmpty) {\n return;\n }\n this.sheetStack.pop();\n this.programmaticNavigation += 1;\n this.historyManager.goBack(1);\n }\n\n backAll(): void {\n const count = this.sheetStack.size;\n if (count === 0) {\n return;\n }\n this.sheetStack.popAll();\n this.programmaticNavigation += 1;\n this.historyManager.goBack(count);\n }\n\n isOpen(path: string): boolean {\n return this.sheetStack.hasPath(path);\n }\n\n get stack(): SheetStackManager {\n return this.sheetStack;\n }\n\n destroy(): void {\n this.unsubscribeHistory();\n this.historyManager.destroy();\n }\n\n private handleBack(): void {\n if (this.programmaticNavigation > 0) {\n this.programmaticNavigation -= 1;\n return;\n }\n this.sheetStack.pop();\n }\n}\n\nexport { BackNavigationMediator };\n","import type { StackEntry, StorageProvider } from \"../types\";\n\nconst STORAGE_KEY = \"__sheetRouter_stack\";\nconst isBrowser = typeof window !== \"undefined\";\n\nfunction validateEntries(parsed: unknown): StackEntry[] {\n if (!Array.isArray(parsed)) {\n return [];\n }\n return parsed.filter(\n (entry): entry is StackEntry =>\n typeof entry === \"object\" &&\n entry !== null &&\n typeof entry.id === \"string\" &&\n typeof entry.path === \"string\" &&\n typeof entry.params === \"object\",\n );\n}\n\nfunction createSessionStorageProvider(): StorageProvider {\n return {\n save(stack: readonly StackEntry[]): void {\n if (!isBrowser) {\n return;\n }\n try {\n sessionStorage.setItem(STORAGE_KEY, JSON.stringify(stack));\n } catch {\n // quota exceeded or private browsing\n }\n },\n\n load(): StackEntry[] {\n if (!isBrowser) {\n return [];\n }\n try {\n const raw = sessionStorage.getItem(STORAGE_KEY);\n if (!raw) {\n return [];\n }\n return validateEntries(JSON.parse(raw));\n } catch {\n return [];\n }\n },\n\n clear(): void {\n if (!isBrowser) {\n return;\n }\n try {\n sessionStorage.removeItem(STORAGE_KEY);\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport { createSessionStorageProvider };\n","import { createContext, useContext } from \"react\";\nimport type { RouteDefinition, StackEntry } from \"../types\";\nimport type { BackNavigationMediator } from \"../lib/back-navigation-mediator\";\n\ninterface SheetRouterContextValue {\n mediator: BackNavigationMediator;\n routes: Map<string, RouteDefinition>;\n stack: readonly StackEntry[];\n}\n\nconst SheetRouterContext = createContext<SheetRouterContextValue | null>(null);\n\nfunction useSheetRouterContext(): SheetRouterContextValue {\n const context = useContext(SheetRouterContext);\n if (!context) {\n throw new Error(\n \"Sheet router hooks must be used within a <SheetRouter> provider.\",\n );\n }\n return context;\n}\n\nexport { SheetRouterContext, useSheetRouterContext };\nexport type { SheetRouterContextValue };\n","import { createContext, useContext } from \"react\";\n\ninterface SheetParamsContextValue {\n path: string;\n params: Record<string, unknown>;\n}\n\nconst SheetParamsContext = createContext<SheetParamsContextValue | null>(null);\n\nfunction useSheetParamsContext(): SheetParamsContextValue {\n const context = useContext(SheetParamsContext);\n if (!context) {\n throw new Error(\n \"useSheetParams must be used inside a sheet rendered by <SheetRouter>.\",\n );\n }\n return context;\n}\n\nexport { SheetParamsContext, useSheetParamsContext };\nexport type { SheetParamsContextValue };\n","import type { ReactNode } from \"react\";\n\ninterface BottomSheetProps {\n open: boolean;\n behind: boolean;\n zIndex: number;\n onClose: () => void;\n title: string;\n children: ReactNode;\n}\n\nfunction BottomSheet({\n open,\n behind,\n zIndex,\n onClose,\n title,\n children,\n}: BottomSheetProps) {\n return (\n <>\n <div\n className=\"sr-backdrop\"\n data-open={open}\n style={{ zIndex }}\n onClick={onClose}\n role=\"presentation\"\n />\n <div\n className=\"sr-sheet\"\n data-open={open}\n data-behind={behind}\n style={{ zIndex: zIndex + 1 }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n >\n <div className=\"sr-handle\">\n <div className=\"sr-handle-bar\" />\n </div>\n <div className=\"sr-content\">{children}</div>\n </div>\n </>\n );\n}\n\nexport { BottomSheet };\nexport type { BottomSheetProps };\n","import { createElement } from \"react\";\nimport { useSheetRouterContext } from \"../context/sheet-router-context\";\nimport { SheetParamsContext } from \"../context/sheet-params-context\";\nimport { BottomSheet } from \"./bottom-sheet\";\n\nconst BASE_Z_INDEX = 1000;\n\nfunction SheetOutlet() {\n const { stack, routes, mediator } = useSheetRouterContext();\n\n return (\n <>\n {stack.map((entry, index) => {\n const route = routes.get(entry.path);\n if (!route) {\n return null;\n }\n\n const isTop = index === stack.length - 1;\n const isBehind = !isTop;\n const zIndex = BASE_Z_INDEX + index * 2;\n\n return (\n <BottomSheet\n key={entry.id}\n open={true}\n behind={isBehind}\n zIndex={zIndex}\n onClose={() => mediator.back()}\n title={route.title ?? route.path}\n >\n <SheetParamsContext.Provider\n value={{ path: entry.path, params: entry.params }}\n >\n {createElement(route.component)}\n </SheetParamsContext.Provider>\n </BottomSheet>\n );\n })}\n </>\n );\n}\n\nexport { SheetOutlet };\n","import {\n Children,\n isValidElement,\n useEffect,\n useMemo,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport type { RouteDefinition, SheetRouteProps, StackEntry, StorageProvider } from \"../types\";\nimport { SheetStackManager } from \"../lib/sheet-stack-manager\";\nimport { HistoryManager } from \"../lib/history-manager\";\nimport { BackNavigationMediator } from \"../lib/back-navigation-mediator\";\nimport { createSessionStorageProvider } from \"../lib/session-storage\";\nimport { SheetRouterContext } from \"../context/sheet-router-context\";\nimport { SheetOutlet } from \"./sheet-outlet\";\n\ninterface SheetRouterProps {\n children: ReactNode;\n persist?: boolean;\n storageProvider?: StorageProvider;\n}\n\nconst EMPTY_STACK: readonly StackEntry[] = [];\n\nfunction isSheetRouteElement(\n child: ReactNode,\n): child is React.ReactElement<SheetRouteProps> {\n return (\n isValidElement(child) &&\n typeof child.type === \"function\" &&\n \"__isSheetRoute\" in child.type\n );\n}\n\nfunction collectRoutes(children: ReactNode): Map<string, RouteDefinition> {\n const routes = new Map<string, RouteDefinition>();\n\n Children.forEach(children, (child) => {\n if (isSheetRouteElement(child)) {\n const { path, component, title } = child.props;\n routes.set(path, { path, component, title });\n }\n });\n\n return routes;\n}\n\nfunction collectBaseContent(children: ReactNode): ReactNode[] {\n const base: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (!isSheetRouteElement(child)) {\n base.push(child);\n }\n });\n\n return base;\n}\n\nfunction SheetRouter({ children, persist = true, storageProvider }: SheetRouterProps) {\n const mediator = useMemo(() => {\n const storage = persist\n ? (storageProvider ?? createSessionStorageProvider())\n : null;\n const stack = new SheetStackManager(storage);\n const history = new HistoryManager();\n return new BackNavigationMediator(stack, history);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n return () => {\n mediator.destroy();\n };\n }, [mediator]);\n\n const routes = useMemo(() => collectRoutes(children), [children]);\n const baseContent = useMemo(() => collectBaseContent(children), [children]);\n\n const stack: readonly StackEntry[] = useSyncExternalStore(\n (callback) => mediator.stack.subscribe(callback),\n () => mediator.stack.getSnapshot(),\n () => EMPTY_STACK,\n );\n\n const contextValue = useMemo(\n () => ({ mediator, routes, stack }),\n [mediator, routes, stack],\n );\n\n return (\n <SheetRouterContext.Provider value={contextValue}>\n {baseContent}\n <SheetOutlet />\n </SheetRouterContext.Provider>\n );\n}\n\nexport { SheetRouter };\n","import type { SheetRouteProps } from \"../types\";\n\nfunction SheetRoute(_props: SheetRouteProps): null {\n return null;\n}\n\nSheetRoute.__isSheetRoute = true;\n\nexport { SheetRoute };\n","import { useCallback, useMemo } from \"react\";\nimport type { SheetNavigator } from \"../types\";\nimport { useSheetRouterContext } from \"../context/sheet-router-context\";\n\nfunction useSheetNavigate(): SheetNavigator {\n const { mediator } = useSheetRouterContext();\n\n const open = useCallback(\n (path: string, params?: Record<string, unknown>) => {\n mediator.open(path, params);\n },\n [mediator],\n );\n\n const back = useCallback(() => {\n mediator.back();\n }, [mediator]);\n\n const backAll = useCallback(() => {\n mediator.backAll();\n }, [mediator]);\n\n const isOpen = useCallback(\n (path: string) => mediator.isOpen(path),\n [mediator],\n );\n\n return useMemo(\n () => ({ open, back, backAll, isOpen }),\n [open, back, backAll, isOpen],\n );\n}\n\nexport { useSheetNavigate };\n","import { useSheetParamsContext } from \"../context/sheet-params-context\";\n\nfunction useSheetParams<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(): { path: string; params: T } {\n const context = useSheetParamsContext();\n return {\n path: context.path,\n params: context.params as T,\n };\n}\n\nexport { useSheetParams };\n","import { useEffect } from \"react\";\n\nfunction useBeforeUnload(enabled: boolean) {\n useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const handler = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n };\n\n window.addEventListener(\"beforeunload\", handler);\n return () => {\n window.removeEventListener(\"beforeunload\", handler);\n };\n }, [enabled]);\n}\n\nexport { useBeforeUnload };\n"]}
1
+ {"version":3,"sources":["../src/lib/sheet-stack-manager.ts","../src/lib/history-manager.ts","../src/lib/back-navigation-mediator.ts","../src/lib/session-storage.ts","../src/context/sheet-router-context.ts","../src/context/sheet-params-context.ts","../src/components/bottom-sheet/index.tsx","../src/components/sheet-outlet.tsx","../src/components/sheet-router.tsx","../src/components/sheet-route.tsx","../src/hooks/use-sheet-navigate.ts","../src/hooks/use-sheet-params.ts","../src/hooks/use-before-unload.ts"],"names":["isBrowser","createContext","useContext","jsx","Fragment","stack","jsxs","useMemo","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import type { StackEntry, Listener, StorageProvider } from \"../types\";\n\nclass SheetStackManager {\n private stack: StackEntry[] = [];\n private listeners = new Set<Listener>();\n private snapshot: readonly StackEntry[] = [];\n private storage: StorageProvider | null;\n\n constructor(storage: StorageProvider | null) {\n this.storage = storage;\n\n if (this.storage) {\n const restored = this.storage.load();\n if (restored.length > 0) {\n this.stack = restored.map((entry) => ({ ...entry }));\n this.updateSnapshot();\n }\n }\n }\n\n push(entry: StackEntry): void {\n this.stack.push(entry);\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n\n pop(): StackEntry | undefined {\n const entry = this.stack.pop();\n if (entry) {\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n return entry;\n }\n\n popAll(): void {\n if (this.stack.length === 0) {\n return;\n }\n this.stack.length = 0;\n this.persist();\n this.updateSnapshot();\n this.notify();\n }\n\n peek(): StackEntry | undefined {\n return this.stack[this.stack.length - 1];\n }\n\n getSnapshot(): readonly StackEntry[] {\n return this.snapshot;\n }\n\n get size(): number {\n return this.stack.length;\n }\n\n get isEmpty(): boolean {\n return this.stack.length === 0;\n }\n\n hasPath(path: string): boolean {\n return this.stack.some((entry) => entry.path === path);\n }\n\n subscribe(listener: Listener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private persist(): void {\n this.storage?.save(this.stack);\n }\n\n private updateSnapshot(): void {\n this.snapshot = [...this.stack];\n }\n\n private notify(): void {\n this.listeners.forEach((listener) => listener());\n }\n}\n\nexport { SheetStackManager };\n","import type { BackHandler } from \"../types\";\n\nconst isBrowser = typeof window !== \"undefined\";\n\ninterface SheetHistoryState {\n __sheetRouter: true;\n entryId: string;\n depth: number;\n}\n\nfunction isSheetHistoryState(state: unknown): state is SheetHistoryState {\n return (\n typeof state === \"object\" &&\n state !== null &&\n \"__sheetRouter\" in state &&\n (state as SheetHistoryState).__sheetRouter === true\n );\n}\n\nclass HistoryManager {\n private subscribers = new Set<BackHandler>();\n private handlePopState: ((event: PopStateEvent) => void) | null = null;\n private depth = 0;\n\n constructor() {\n if (!isBrowser) {\n return;\n }\n\n this.handlePopState = (event: PopStateEvent) => {\n const targetDepth = isSheetHistoryState(event.state)\n ? event.state.depth\n : 0;\n\n if (targetDepth < this.depth) {\n this.depth = targetDepth;\n this.notifyBack();\n } else {\n this.depth = targetDepth;\n }\n };\n window.addEventListener(\"popstate\", this.handlePopState);\n }\n\n restoreEntries(entryIds: string[]): void {\n if (!isBrowser) {\n return;\n }\n if (isSheetHistoryState(window.history.state)) {\n window.history.replaceState(null, \"\", window.location.href);\n }\n for (const entryId of entryIds) {\n this.depth += 1;\n const state: SheetHistoryState = {\n __sheetRouter: true,\n entryId,\n depth: this.depth,\n };\n window.history.pushState(state, \"\", window.location.href);\n }\n }\n\n pushState(entryId: string): void {\n if (!isBrowser) {\n return;\n }\n this.depth += 1;\n const state: SheetHistoryState = {\n __sheetRouter: true,\n entryId,\n depth: this.depth,\n };\n window.history.pushState(state, \"\", window.location.href);\n }\n\n goBack(count: number = 1): void {\n if (!isBrowser) {\n return;\n }\n if (count > 0) {\n this.depth = Math.max(0, this.depth - count);\n window.history.go(-count);\n }\n }\n\n subscribe(onBack: BackHandler): () => void {\n this.subscribers.add(onBack);\n return () => {\n this.subscribers.delete(onBack);\n };\n }\n\n destroy(): void {\n if (isBrowser && this.handlePopState) {\n window.removeEventListener(\"popstate\", this.handlePopState);\n }\n this.subscribers.clear();\n }\n\n private notifyBack(): void {\n this.subscribers.forEach((handler) => handler());\n }\n}\n\nexport { HistoryManager };\n","import type { StackEntry } from \"../types\";\nimport { SheetStackManager } from \"./sheet-stack-manager\";\nimport { HistoryManager } from \"./history-manager\";\n\nlet idCounter = 0;\n\nfunction generateEntryId(): string {\n idCounter += 1;\n return `sheet-${idCounter}-${Date.now()}`;\n}\n\nclass BackNavigationMediator {\n private sheetStack: SheetStackManager;\n private historyManager: HistoryManager;\n private unsubscribeHistory: () => void;\n private programmaticNavigation = 0;\n\n constructor(\n sheetStack: SheetStackManager,\n historyManager: HistoryManager,\n ) {\n this.sheetStack = sheetStack;\n this.historyManager = historyManager;\n\n this.unsubscribeHistory = this.historyManager.subscribe(() => {\n this.handleBack();\n });\n\n const restoredEntries = this.sheetStack.getSnapshot();\n if (restoredEntries.length > 0) {\n this.historyManager.restoreEntries(\n restoredEntries.map((entry) => entry.id),\n );\n }\n }\n\n open(path: string, params: Record<string, unknown> = {}): void {\n const entry: StackEntry = {\n id: generateEntryId(),\n path,\n params,\n };\n this.sheetStack.push(entry);\n this.historyManager.pushState(entry.id);\n }\n\n back(): void {\n if (this.sheetStack.isEmpty) {\n return;\n }\n this.sheetStack.pop();\n this.programmaticNavigation += 1;\n this.historyManager.goBack(1);\n }\n\n backAll(): void {\n const count = this.sheetStack.size;\n if (count === 0) {\n return;\n }\n this.sheetStack.popAll();\n this.programmaticNavigation += 1;\n this.historyManager.goBack(count);\n }\n\n isOpen(path: string): boolean {\n return this.sheetStack.hasPath(path);\n }\n\n get stack(): SheetStackManager {\n return this.sheetStack;\n }\n\n destroy(): void {\n this.unsubscribeHistory();\n this.historyManager.destroy();\n }\n\n private handleBack(): void {\n if (this.programmaticNavigation > 0) {\n this.programmaticNavigation -= 1;\n return;\n }\n this.sheetStack.pop();\n }\n}\n\nexport { BackNavigationMediator };\n","import type { StackEntry, StorageProvider } from \"../types\";\n\nconst STORAGE_KEY = \"__sheetRouter_stack\";\nconst isBrowser = typeof window !== \"undefined\";\n\nfunction validateEntries(parsed: unknown): StackEntry[] {\n if (!Array.isArray(parsed)) {\n return [];\n }\n return parsed.filter(\n (entry): entry is StackEntry =>\n typeof entry === \"object\" &&\n entry !== null &&\n typeof entry.id === \"string\" &&\n typeof entry.path === \"string\" &&\n typeof entry.params === \"object\",\n );\n}\n\nfunction createSessionStorageProvider(): StorageProvider {\n return {\n save(stack: readonly StackEntry[]): void {\n if (!isBrowser) {\n return;\n }\n try {\n sessionStorage.setItem(STORAGE_KEY, JSON.stringify(stack));\n } catch {\n // quota exceeded or private browsing\n }\n },\n\n load(): StackEntry[] {\n if (!isBrowser) {\n return [];\n }\n try {\n const raw = sessionStorage.getItem(STORAGE_KEY);\n if (!raw) {\n return [];\n }\n return validateEntries(JSON.parse(raw));\n } catch {\n return [];\n }\n },\n\n clear(): void {\n if (!isBrowser) {\n return;\n }\n try {\n sessionStorage.removeItem(STORAGE_KEY);\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport { createSessionStorageProvider };\n","import { createContext, useContext } from \"react\";\nimport type { RouteDefinition, StackEntry } from \"../types\";\nimport type { BackNavigationMediator } from \"../lib/back-navigation-mediator\";\n\ninterface SheetRouterContextValue {\n mediator: BackNavigationMediator;\n routes: Map<string, RouteDefinition>;\n stack: readonly StackEntry[];\n}\n\nconst SheetRouterContext = createContext<SheetRouterContextValue | null>(null);\n\nfunction useSheetRouterContext(): SheetRouterContextValue {\n const context = useContext(SheetRouterContext);\n if (!context) {\n throw new Error(\n \"Sheet router hooks must be used within a <SheetRouter> provider.\",\n );\n }\n return context;\n}\n\nexport { SheetRouterContext, useSheetRouterContext };\nexport type { SheetRouterContextValue };\n","import { createContext, useContext } from \"react\";\n\ninterface SheetParamsContextValue {\n path: string;\n params: Record<string, unknown>;\n}\n\nconst SheetParamsContext = createContext<SheetParamsContextValue | null>(null);\n\nfunction useSheetParamsContext(): SheetParamsContextValue {\n const context = useContext(SheetParamsContext);\n if (!context) {\n throw new Error(\n \"useSheetParams must be used inside a sheet rendered by <SheetRouter>.\",\n );\n }\n return context;\n}\n\nexport { SheetParamsContext, useSheetParamsContext };\nexport type { SheetParamsContextValue };\n","import type { ReactNode } from \"react\";\n\ninterface BottomSheetProps {\n open: boolean;\n behind: boolean;\n zIndex: number;\n onClose: () => void;\n title: string;\n children: ReactNode;\n height?: string;\n}\n\nfunction BottomSheet({\n open,\n behind,\n zIndex,\n onClose,\n title,\n children,\n height,\n}: BottomSheetProps) {\n const isFullScreen = !height || height === \"100%\";\n\n return (\n <>\n <div\n className=\"sr-backdrop\"\n data-open={open}\n style={{ zIndex }}\n onClick={onClose}\n role=\"presentation\"\n />\n <div\n className=\"sr-sheet\"\n data-open={open}\n data-behind={behind}\n data-full={isFullScreen}\n style={{\n zIndex: zIndex + 1,\n ...(height ? { height } : {}),\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n >\n <div className=\"sr-handle\">\n <div className=\"sr-handle-bar\" />\n </div>\n <div className=\"sr-content\">{children}</div>\n </div>\n </>\n );\n}\n\nexport { BottomSheet };\nexport type { BottomSheetProps };\n","import { createElement } from \"react\";\nimport { useSheetRouterContext } from \"../context/sheet-router-context\";\nimport { SheetParamsContext } from \"../context/sheet-params-context\";\nimport { BottomSheet } from \"./bottom-sheet\";\n\nconst BASE_Z_INDEX = 1000;\n\nfunction SheetOutlet() {\n const { stack, routes, mediator } = useSheetRouterContext();\n\n return (\n <>\n {stack.map((entry, index) => {\n const route = routes.get(entry.path);\n if (!route) {\n return null;\n }\n\n const isTop = index === stack.length - 1;\n const isBehind = !isTop;\n const zIndex = BASE_Z_INDEX + index * 2;\n\n return (\n <BottomSheet\n key={entry.id}\n open={true}\n behind={isBehind}\n zIndex={zIndex}\n onClose={() => mediator.back()}\n title={route.title ?? route.path}\n height={route.height}\n >\n <SheetParamsContext.Provider\n value={{ path: entry.path, params: entry.params }}\n >\n {createElement(route.component)}\n </SheetParamsContext.Provider>\n </BottomSheet>\n );\n })}\n </>\n );\n}\n\nexport { SheetOutlet };\n","import {\n Children,\n isValidElement,\n useEffect,\n useMemo,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport type { RouteDefinition, SheetRouteProps, StackEntry, StorageProvider } from \"../types\";\nimport { SheetStackManager } from \"../lib/sheet-stack-manager\";\nimport { HistoryManager } from \"../lib/history-manager\";\nimport { BackNavigationMediator } from \"../lib/back-navigation-mediator\";\nimport { createSessionStorageProvider } from \"../lib/session-storage\";\nimport { SheetRouterContext } from \"../context/sheet-router-context\";\nimport { SheetOutlet } from \"./sheet-outlet\";\n\ninterface SheetRouterProps {\n children: ReactNode;\n persist?: boolean;\n storageProvider?: StorageProvider;\n}\n\nconst EMPTY_STACK: readonly StackEntry[] = [];\n\nfunction isSheetRouteElement(\n child: ReactNode,\n): child is React.ReactElement<SheetRouteProps> {\n return (\n isValidElement(child) &&\n typeof child.type === \"function\" &&\n \"__isSheetRoute\" in child.type\n );\n}\n\nfunction collectRoutes(children: ReactNode): Map<string, RouteDefinition> {\n const routes = new Map<string, RouteDefinition>();\n\n Children.forEach(children, (child) => {\n if (isSheetRouteElement(child)) {\n const { path, component, title, height } = child.props;\n routes.set(path, { path, component, title, height });\n }\n });\n\n return routes;\n}\n\nfunction collectBaseContent(children: ReactNode): ReactNode[] {\n const base: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (!isSheetRouteElement(child)) {\n base.push(child);\n }\n });\n\n return base;\n}\n\nfunction SheetRouter({ children, persist = true, storageProvider }: SheetRouterProps) {\n const mediator = useMemo(() => {\n const storage = persist\n ? (storageProvider ?? createSessionStorageProvider())\n : null;\n const stack = new SheetStackManager(storage);\n const history = new HistoryManager();\n return new BackNavigationMediator(stack, history);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n return () => {\n mediator.destroy();\n };\n }, [mediator]);\n\n const routes = useMemo(() => collectRoutes(children), [children]);\n const baseContent = useMemo(() => collectBaseContent(children), [children]);\n\n const stack: readonly StackEntry[] = useSyncExternalStore(\n (callback) => mediator.stack.subscribe(callback),\n () => mediator.stack.getSnapshot(),\n () => EMPTY_STACK,\n );\n\n const contextValue = useMemo(\n () => ({ mediator, routes, stack }),\n [mediator, routes, stack],\n );\n\n return (\n <SheetRouterContext.Provider value={contextValue}>\n {baseContent}\n <SheetOutlet />\n </SheetRouterContext.Provider>\n );\n}\n\nexport { SheetRouter };\n","import type { SheetRouteProps } from \"../types\";\n\nfunction SheetRoute(_props: SheetRouteProps): null {\n return null;\n}\n\nSheetRoute.__isSheetRoute = true;\n\nexport { SheetRoute };\n","import { useCallback, useMemo } from \"react\";\nimport type { SheetNavigator } from \"../types\";\nimport { useSheetRouterContext } from \"../context/sheet-router-context\";\n\nfunction useSheetNavigate(): SheetNavigator {\n const { mediator } = useSheetRouterContext();\n\n const open = useCallback(\n (path: string, params?: Record<string, unknown>) => {\n mediator.open(path, params);\n },\n [mediator],\n );\n\n const back = useCallback(() => {\n mediator.back();\n }, [mediator]);\n\n const backAll = useCallback(() => {\n mediator.backAll();\n }, [mediator]);\n\n const isOpen = useCallback(\n (path: string) => mediator.isOpen(path),\n [mediator],\n );\n\n return useMemo(\n () => ({ open, back, backAll, isOpen }),\n [open, back, backAll, isOpen],\n );\n}\n\nexport { useSheetNavigate };\n","import { useSheetParamsContext } from \"../context/sheet-params-context\";\n\nfunction useSheetParams<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(): { path: string; params: T } {\n const context = useSheetParamsContext();\n return {\n path: context.path,\n params: context.params as T,\n };\n}\n\nexport { useSheetParams };\n","import { useEffect } from \"react\";\n\nfunction useBeforeUnload(enabled: boolean) {\n useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const handler = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n };\n\n window.addEventListener(\"beforeunload\", handler);\n return () => {\n window.removeEventListener(\"beforeunload\", handler);\n };\n }, [enabled]);\n}\n\nexport { useBeforeUnload };\n"]}
package/dist/styles.css CHANGED
@@ -4,6 +4,7 @@
4
4
  background: rgba(0, 0, 0, 0.5);
5
5
  opacity: 0;
6
6
  pointer-events: none;
7
+ transition: opacity 0.3s ease;
7
8
  }
8
9
 
9
10
  .sr-backdrop[data-open="true"] {
@@ -13,7 +14,10 @@
13
14
 
14
15
  .sr-sheet {
15
16
  position: fixed;
16
- inset: 0;
17
+ left: 0;
18
+ right: 0;
19
+ bottom: 0;
20
+ height: 100%;
17
21
  background: #ffffff;
18
22
  border-radius: 0;
19
23
  overflow-y: auto;
@@ -26,6 +30,10 @@
26
30
  animation: sr-slide-up 0.35s cubic-bezier(0.32, 0.72, 0, 1);
27
31
  }
28
32
 
33
+ .sr-sheet[data-open="true"]:not([data-full="true"]) {
34
+ border-radius: 16px 16px 0 0;
35
+ }
36
+
29
37
  .sr-sheet[data-behind="true"] {
30
38
  transform: translateY(0);
31
39
  scale: 0.95;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rezahasani78/sheet-router",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "A declarative, router-like bottom sheet stack for React. Handles Android/browser back button with unlimited stacked sheets.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",