npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@octane-xplat/sheet

v0.14.0

Published

Platform-specific modal bottom sheet controls for Octane xplat

Readme

@octane-xplat/sheet

Platform-native modal bottom sheets: a SwiftUI .sheet presentation on iOS, a Material 3 ModalBottomSheet on Android, a native modal <dialog> on web, and a real NSWindow sheet (beginSheet) on macOS. Use it when you want the OS-authentic sheet rather than a shared look.

pnpm add @octane-xplat/sheet

There is no shared sheet API at the package root. Each platform entry exports its own component and types; import it from the platform subpath in a matching platform-suffixed file:

| File suffix | Import | Component | | --- | --- | --- | | *.ios.tsx | @octane-xplat/sheet/ios | SwiftUIBottomSheet | | *.android.tsx | @octane-xplat/sheet/android | MaterialBottomSheet | | *.web.tsx | @octane-xplat/sheet/web | BottomSheet | | *.macos.tsx | @octane-xplat/sheet/macos | AppKitSheet |

All four share the same core shape — open to control visibility, onDismissed, and a content render function:

/** @jsxImportSource @nativescript-community/octane */
// Details.ios.tsx
import { useState } from 'octane'
import { Button, Text } from '@octane-xplat/ui'
import { SwiftUIBottomSheet } from '@octane-xplat/sheet/ios'

export function Details() {
	const [open, setOpen] = useState(false)
	return (
		<>
			<Button onPress={() => setOpen(true)}>Trip details</Button>
			<SwiftUIBottomSheet
				open={open}
				detents={['medium', 'large']}
				showDragIndicator
				onDismissed={() => setOpen(false)}
				content={() => <Text>Two bags packed</Text>}
			/>
		</>
	)
}

Sheet content mounts into a detached root — the same embedding mechanism as @octane-xplat/context-menu's trigger. On iOS the registered view resolves through NativeScriptViewFactory; on Android through the leaf's XplatViewRegistry + AndroidView inside the sheet's dialog window.

Web apps must also import the sheet stylesheet from their app entry:

import '@octane-xplat/sheet/web/styles.css'

Per-platform props

  • iOS: open (controlled isPresented), onDismissed, onPresentedChange, fitToContents (ported size-reader → .presentationDetents([.height])), detents (medium/large/fraction/height), showDragIndicator, interactiveDismissDisabled.
  • Android: open + onDismissed, skipPartiallyExpanded (the M3 detent model: partial vs fully expanded), showDragHandle, sheetGesturesEnabled, shouldDismissOnBackPress, shouldDismissOnClickOutside, and containerColor/contentColor/ scrimColor hex strings. Activity-owned key events are forwarded while the sheet's dialog is open (ported from Expo).
  • Web: native modal <dialog> with a named panel, focus entry/Tab containment, trigger restoration (finalFocusRef), Escape and scrim dismissal controls, and drag-handle dismissal. label supplies the dialog name; pass finalFocusRef when pointer-opening so focus returns to the invoking control across browsers.

The native implementations are adapted from @expo/ui (MIT, packages/expo-ui sdk-57): ios/BottomSheetView.swift and android/.../ui/ModalBottomSheetView.kt. Attribution headers sit on the ported files.