Satin API reference
Search by Satin export name. Each entry describes its behavior and limits and links to its exact declaration. Plain-language search terms are included where they help find a control or capability.
Generated from package declarations and reviewed behavior metadata. Run pnpm --filter @satinhq/kit api:write after building. Signature, export and source changes invalidate this reference; changes to behavior descriptions require review.
Coverage: 943 named exports across 9 declaration entry points. 151 exports have reviewed behavior metadata. 792 type and integration declarations are identified separately in the behavior review inventory. CSS is a stylesheet, not a named export.
An API description establishes the supported contract. It does not certify pixels, motion, touch or installed-app lifecycle behavior. Experimental entry points remain experimental. An empty Limits cell means there are no limits beyond what the declaration states.
Core API
Module: @satinhq/kit
Components, hooks and types for building the app.
Scroll horizontally to read every column.
| Satin export | Behavior | Limits | Also known as |
|---|---|---|---|
Action | An entry in a menu, context menu or swipe action list: a command, a titled section of entries, or a submenu. | Actions have accessible names, but they do not appear in the VoiceOver Actions rotor. | |
ActionItem | A single command with an id, a label, an optional symbol and role, and an onPress handler. Menus, swipe actions, alerts and confirmation dialogs all use it. | ||
AdaptiveGridItemOptions | Bounds for an adaptive track, which repeats to fit as many columns or rows as the space allows. A grid with an adaptive track can have no other track. | ||
Alert | A centred alert with a title, an optional message, up to three actions and an optional text field. | Alerts and confirmation dialogs start closed after a relaunch, so a destructive confirmation is never restored open. | alert; dialog; popup |
AlertProps | An alert's presentation binding, title, message, actions and optional text field. | ||
AlertTextFieldProps | The text field inside an alert: its label, controlled text, prompt and keyboard intent. | ||
Animation | An opaque spring timing value for withAnimation. Use a named value or Animation.spring. | Other state and style changes do not animate. There is no null animation, easing curve, repeat, delay, completion callback or per-update timing; use one outer synchronous update. Bounce cannot be negative. | |
AppCapability | A capability the app declares so Satin sets up its runtime support: push, badging or background-work. | ||
AppDefinition | A validated app definition, returned by defineApp. Pass it to runApp and to the Vite plugin. | ||
AppDefinitionInput | What an app declares about itself: identity, install metadata and launch appearance. | ||
AppIcon | One generated app icon file: its URL, pixel sizes, image type and purpose. | ||
AppOrientation | An orientation that the app supports. | ||
AsyncImage | Loads an image from a URL. It keeps its placeholder if loading fails, never holds up navigation, and reports progress through onPhaseChange. | Remote images use the browser's HTTP cache. onPhaseChange reports loading state; it does not swap in other content. There is no Photos library access. | remote image; image URL |
AsyncImagePhase | The loading state an AsyncImage reports: empty while loading, then success with the image element or failure with the error. | ||
AsyncImageProps | An ImageProps whose source is a remote URL. | ||
BuildInfo | The framework version, build id, build time and build kind baked into the running bundle. The build id is unique per build. | The build id is not a git revision or a service worker cache hash. Builds made without satinApp report "unavailable". What the server last served says nothing about which cached bundle is running. | |
BuiltInButtonStyle | The built-in button styles, by their buttonStyle names. automatic picks one for the context. | ||
BuiltInLabelStyle | The built-in label styles: the title, the icon or both. automatic picks for the context. | ||
BuiltInToggleStyle | The built-in toggle styles: switch or button. automatic picks for the context. | ||
Button | A pressable control that adapts to where it is: a tinted row in a List, a glass button in a toolbar, otherwise the buttonStyle you choose. role="destructive" carries into every context. | Only the listed button styles exist. There are no circle or container-concentric borders, and plain and list-row buttons draw no border. A custom ButtonStyle draws the content; Satin keeps the press handling and accessibility. | button; tap |
ButtonBorderShape | The outline of a bordered button: automatic, capsule, or a rounded rectangle with a fixed corner radius in points. | ||
ButtonProps | Button's action, label and control properties. An iconOnly button needs an aria-label. | ||
ButtonRole | A button's role. destructive draws it in red; cancel marks the action that backs out. | ||
ButtonStyle | A custom look for Button. makeBody returns noninteractive content; Satin still owns the button's press handling and accessibility. | ||
ButtonStyleConfiguration | What a custom ButtonStyle draws from: the label, the pressed state and the role, plus the shared control values. | ||
Choice | One option of a Picker. | Only the menu, navigationLink, inline and segmented styles exist. | |
collection | Declares a collection of records keyed by one unique string field. The curried form, collection<Note>()({ key, indexes }), infers index names. | Data lives in IndexedDB on this device. The browser may evict it, and writes can fail. | |
Collection | One collection of a database (db.notes). Once loaded, writes publish to memory at once, so useQuery sees them immediately; the returned promise settles after the durable commit. | ||
CollectionDefinition | A collection's record type, key and indexes, made by collection for defineDatabase. | ||
CollectionIndexes | A mapping from declared index names to record properties. | ||
CollectionSchema | The named collections in a database declaration. | ||
CollectionUpdateMethods | A collection's update method: a partial record to merge, or a function that returns the new record. | ||
ColorPicker | A row with a colour well that opens the system colour picker: grid, spectrum, sliders, eyedropper and, with supportsOpacity, opacity. | The system picker is titled "Colors", not with the label. Output is sRGB hex; Display P3 choices are converted to sRGB. See controls.md. | color picker; color well |
ColorPickerProps | ColorPicker's label and controlled colour. | ||
ColorScheme | A light or dark appearance. | ||
ConfirmationDialog | A titled set of actions, such as Delete and Cancel, shown next to the control that opened it. | Alerts and confirmation dialogs start closed after a relaunch, so a destructive confirmation is never restored open. | action sheet; delete confirmation |
ConfirmationDialogProps | A confirmation dialog's presentation binding, title, message, actions and optional anchor. | ||
ContentAlignment | Where content sits inside a larger frame. Used by frame and ZStack. | ||
ContentFrame | A fixed size or size bounds for a view, in points, and how its content aligns inside. 'infinity' fills the available space. | ||
ContentMargins | Sets content margins for every scroll view inside it. A List takes a horizontal margin as its layout margin. The innermost value for each edge wins. | placement="scrollIndicators" has no effect: Satin draws the scroll indicator in the screen frame. | content inset |
ContentMarginsProps | Which edges get a margin, how much, and whether it applies to content or indicators. | ||
ContentPadding | The padding prop. true adds the default 16 pt on every edge, a number pads every edge, and an object pads the edges it names. | ||
ContentProps | The padding, frame and background props shared by text and stacks. Plain HTML attributes, style included, still apply. | ||
ContentUnavailableView | An empty state: an icon, a title, an optional description and optional action children. | Takes an explicit title, icon, description and actions; there is no built-in search variant. | empty state; no results |
ContentUnavailableViewProps | The empty state's title, optional description and icon (a tray by default). | ||
ContextMenu | Opens a menu of actions when the user long-presses its content, with an optional custom preview. Rows in a List take a contextMenu prop instead. | Actions have accessible names, but they do not appear in the VoiceOver Actions rotor. | long press menu |
ContextMenuConfiguration | The contextMenu prop of a row: a list of actions, or actions with a custom preview. | ||
ControlConfiguration | What every custom control style receives: enabled state, control size and tint. | ||
ControlSize | A control's size, from mini to extraLarge. regular is the default. | ||
ControlStyleProvider | Sets control defaults for a subtree through buttonStyle, toggleStyle, labelStyle, controlSize, tint and disabled. A control's own props win over the provider, except that a disabled ancestor cannot be re-enabled by a child. | Only the listed button styles exist. There are no circle or container-concentric borders, and plain and list-row buttons draw no border. A custom ButtonStyle draws the content; Satin keeps the press handling and accessibility. | |
ControlStyleValues | The control environment a ControlStyleProvider sets for its subtree. | ||
CoreSymbolName | Every symbol name in the bundled catalogue. | ||
cornerClipPath | Returns a CSS clip-path for a shape at an explicit width and height. Radii are in points. | You size it yourself outside framework rows. It does not change a glass mask. Continuous corners follow the iOS 27 corner curve. | |
CornerShape | A shape for cornerClipPath and swipe action faces: a capsule, an ellipse, a rounded rectangle or a custom clip path. Choosing one overrides the framework's default shape. | ||
DatabaseMigration | A schema migration. It runs inside one transaction and may be async. | ||
DatabaseRecord | A stored record with named values. | ||
DatePicker | A row for picking a date, a time or both. Its grey value capsules open the system date or time picker. Use a civil string selection ('2026-10-14') for a day that must stay the same day in every time zone, such as a due date; use a Date for a moment in time. | No graphical or wheel style. WebKit adds Reset and Done buttons to the system picker, centres it instead of anchoring it to the capsule, and does not grey out days outside the range. See controls.md. | date picker; time picker; calendar |
DatePickerComponent | A part of the value a DatePicker edits: the date, or the hourAndMinute. | ||
DatePickerProps | DatePicker's label, controlled selection, range and the components it edits. selection is a Date, or a civil string with no time zone: '2026-10-14' for a date, '09:41' for a time, '2026-10-14T09:41' for both. The callback returns the same kind. | ||
DatePickerRange | A DatePicker's selectable range. Omit a bound for a one-sided range (start... or ...end). Bounds use the same kind of value as the selection. | ||
DatePickerStyle | How a DatePicker draws. Only the compact style exists; automatic is compact. | ||
DefaultToolbarItem | Places the screen's search field among its bottom toolbar items. The screen must be searchable. | Only kind="search". Without a ToolbarSpacer the next item is not merged into the search capsule. iPad keeps the drawer. | bottom search bar |
DefaultToolbarItemProps | Which system item to place, and where. Only search exists. | ||
defineApp | Declares app identity, install metadata and capabilities once. Pass the result to runApp and to the @satinhq/kit/vite plugin. Everything not given is defaulted and the whole definition is validated, so a bad id or icon fails at build time rather than after install. | One app root per page, for iPhone and iPad WebKit. There are no multiple windows. | app manifest; app config |
defineDatabase | Opens the app's local database, stored in IndexedDB. Each collection becomes a property of the result. Bump version with a migration whenever the schema changes. Export and import are built in, so offer them to the user. | Data lives in IndexedDB on this device. The browser may evict it, and writes can fail. | local database; offline storage; IndexedDB |
defineNamespace | A namespace declared once at module scope, for views that share no parent component: a MatchedTransitionSource in one route and the screen it zooms into in another. Inside one component, use useNamespace(). | Pushed screens only; sheets and full-screen covers do not zoom. The source must be on screen, or the push slides. A downward dismiss must start within about 27 degrees of vertical. | |
defineNavigation | Declares the app's primary tabs or its single stack before anything renders, so every stack and tab id exists (and is typed) from the first frame. Pass the result to runApp; TabView, Tab and NavigationStack then render it. Components may freely wrap those views. | One app root per page, for iPhone and iPad WebKit. There are no multiple windows. | |
defineRoutes | Declares every destination once. The same schema types useNavigation and NavigationLink, validates restored paths and checks notification deep links, so a route id or param is never a free-form string. | Navigation does not use browser history. Route params must match the declared schema. | router; routes; deep links |
defineWebAuthentication | Sets up an OAuth authorization-code sign-in with PKCE. The transaction is stored durably, so it survives a redirect or a suspended app. Your server redeems the code. | Needs a secure context, local storage, Web Locks, a dedicated uncached callback page and a server exchange. Bridge reads need a private transaction proof. Your server validates tokens and OpenID Connect. Completion in the background is not guaranteed. | OAuth; sign in; PKCE |
Divider | A hairline across its parent stack's axis. It is decorative, so assistive technology skips it. | Default spacing and frame differences are listed in content.md. Props apply in a fixed order, not the order you write them. | separator; hairline |
Edge | A logical edge. leading and trailing follow the layout direction. | ||
EdgeInsets | Insets on each edge in points. leading and trailing follow the layout direction. | ||
EdgeLengths | Optional lengths per logical edge, in points. | ||
EdgeSet | One edge group or a list of them. | ||
EdgeSetMember | A logical edge, an axis pair or all edges. | ||
EditButton | Toggles the screen's edit mode. In a toolbar it reads Edit, then becomes a prominent checkmark (Done) while editing. | Rows are identified by their ForEach ids. Edit mode belongs to each screen and cannot be set from outside it. Outside edit mode, plain rows cannot be selected with the keyboard. | edit mode; Edit and Done |
EditMode | Whether a screen's lists show their editing controls: active or inactive. | ||
ExportDocument | The JSON document exportJSON writes and importJSON reads. | ||
FileImporter | A button that opens the system file chooser and returns the chosen files. Cancelling keeps the current selection. | MIME types are hints, not validation. There is no photo library identifier and no lasting file access, and overlapping choosers cannot always be told apart. Not yet verified in an installed app. | file upload; document picker |
FileImporterProps | The importer's label, the selected files and the content types it accepts, as MIME types or extensions. | MIME types are hints, not validation. There is no photo library identifier and no lasting file access, and overlapping choosers cannot always be told apart. Not yet verified in an installed app. | |
FixedGridItemOptions | A fixed track's size in points. | ||
FlexibleGridItemOptions | Bounds for a flexible track; the minimum defaults to 10 points. | ||
FocusChainField | The parts of a field element that useFocusChain uses to move focus. | ||
FontWeight | A font weight, from ultraLight to black. | ||
ForEach | Makes one row per element of data, identified by its id (or an id function). In a List, onDelete adds swipe-to-delete and the editing delete control; onMove adds the reorder handle. Both receive offsets into data; apply them with removing and moving. Put ForEach directly in a List or Section: the list reads it to know each row's identity. | ForEach must sit directly in a List or Section. Moving a selected group, two-finger selection and VoiceOver move actions are not available. | swipe to delete; reorder rows |
ForEachProps | The collection, how to identify each element, the row each element becomes and its editing actions. id may be omitted when the elements have an id field. | ||
Form | An inset grouped List for settings and data entry. Scrolling it dismisses the keyboard at once. | A ListRow is always one row: its children sit side by side. Use one ListRow per row. A numeric gap changes the space between sections; header and footer space stays. visible keeps the default background; it does not make a sheet opaque. | settings screen; form |
FormProps | The scroll, search and section options Form and List share. style is inline CSS. | ||
FullScreenCover | An opaque presentation that slides up over the whole screen. It has no interactive dismissal; close it through its binding or useDismiss(). | Covers cannot be swiped away. They start closed after a relaunch. | full screen presentation; modal |
FullScreenCoverProps | A full-screen cover's presentation binding and accessible title. | ||
GeometryFrame | A rectangle in points: origin x and y plus a size. | ||
GeometryProxy | What a GeometryReader passes to its children: its size and a way to read its frame. | ||
GeometryReader | Fills the space it is offered and calls its children with that size. Its content renders once the first measurement is in. | Inside a scroll view, give it a definite height. The proxy reports no safe-area insets. | measure size |
GeometryReaderProps | A GeometryReader's render function, plus plain div attributes. | ||
GeometrySize | A width and height in points. | ||
Glass | The glass material for a GlassEffect. Start from Glass.regular or Glass.clear and refine it with a tint or interactive(); each call returns a new value. | If WebGPU fails for good, release builds fall back to a blur-and-tint material unless strict glass is on; development builds report the failure. | |
GlassEffect | Draws glass behind its content in the given shape, a capsule by default. Inside a GlassEffectContainer, effects with ids morph into one another. | If WebGPU fails for good, release builds fall back to a blur-and-tint material unless strict glass is on; development builds report the failure. | glass; refraction |
GlassEffectContainer | Groups nearby glass effects so they render together and blend or morph into one another. spacing, 20 pt by default, sets how close effects must be to merge. | If WebGPU fails for good, release builds fall back to a blur-and-tint material unless strict glass is on; development builds report the failure. | glass morph; glass group |
GlassEffectProps | The glass material and shape, plus the namespace and id that let effects morph into each other. Plain div attributes also apply. | ||
GlassError | One glass renderer failure: its code, message, the stage it happened in and when. | ||
GlassErrorCode | Why the glass renderer failed, such as gpu-unavailable or device-lost. In a release build a failure can switch glass to the fallback material. | ||
GlassShape | The outline of a glass effect: capsule, circle or a rounded rectangle with a corner radius in points. | ||
GlassTint | A glass tint as red, green, blue and alpha channels from 0 to 1. Glass.tintRGBA rejects values outside that range. | ||
GridItem | Makes grid tracks for LazyVGrid and LazyHGrid: fixed, flexible or adaptive. Each call validates its options and throws a RangeError for bad bounds or spacing. | Every child renders at once; there is no virtualization. An adaptive track must be the only track, and there is no Grid or GridRow. | |
GridItemOptions | Options every grid track takes. spacing is the gap after this track; alignment places content within each cell. | ||
GridItemValue | A validated grid track. Make one with GridItem.fixed, .flexible or .adaptive. | ||
HorizontalTextFieldProps | Horizontal TextField's controlled text and keyboard intent. | ||
HStack | Arranges its children in a row. Add a Spacer to push content to the edges. | Default spacing and frame differences are listed in content.md. Props apply in a fixed order, not the order you write them. | row; horizontal layout |
HStackProps | HStack's vertical alignment and spacing in points. | ||
IgnoresSafeArea | Lets content extend through the safe area on the chosen edges, for full-bleed backgrounds and media. The container edges and keyboard avoidance can be ignored separately. | Only a view at the start of the screen content extends upward. Content that does not scroll does not extend through the bottom edge. | full bleed; edge to edge |
IgnoresSafeAreaProps | Which safe-area regions and edges the content ignores. | ||
Image | Shows a bundled or local image. It reserves its size so layout never jumps, and priority loads it ahead of other images. Use alt="" for decoration. | Remote images use the browser's HTTP cache. onPhaseChange reports loading state; it does not swap in other content. There is no Photos library access. | image; picture |
ImageAsset | A responsive image with its size, srcSet and a tiny placeholder. The Vite plugin produces one for each import ending in ?satin-image. | ||
ImageProps | An image's source, required alt text and aspect-ratio content mode. | ||
IndexesOfCollection | The index names declared by a collection. | ||
JustUpdated | The previous and current build identifiers after an app update. | ||
KeyboardGeometry | How much the keyboard covers, whether it shows, and the viewport size, in points. | ||
KeyboardMetrics | The keyboard's current geometry in points, plus the software keyboard height to plan for at this window size. | ||
Label | A title with an icon. In a toolbar a label with an icon shows the icon alone; a hidden title stays available to assistive technology. | Labels are not interactive, and a custom LabelStyle must return noninteractive content. | |
LabeledContent | A row with a label and a trailing value in secondary text. | Labels are not interactive, and a custom LabelStyle must return noninteractive content. | value row; detail row |
LabeledContentProps | The row's label and the trailing value it shows. | ||
LabelProps | A label's title (children) and its icon: a symbol name or any icon node. | ||
LabelStyle | A custom arrangement of a label's title and icon. | ||
LabelStyleConfiguration | What a custom LabelStyle draws from: the label's title and icon. | ||
LaunchScreenSlot | The launch screen's icon and optional label. The inline environment paints it before application JavaScript loads, so both must be plain strings. | ||
LayoutModifierProps | The children and plain div attributes every layout wrapper takes. | ||
LazyHGrid | A grid with fixed rows that grows sideways. Every child renders at once; use List for long data. | Every child renders at once; there is no virtualization. An adaptive track must be the only track, and there is no Grid or GridRow. | horizontal grid |
LazyHGridProps | The grid's rows and the spacing between columns. Each row sets the gap after itself. | ||
LazyHStack | Lays out its children like HStack. Every child mounts at once and keeps its state. | Every child renders at once; there is no virtualization. | |
LazyHStackProps | LazyHStack's layout props. Every child mounts eagerly; use List for long data. | ||
LazyVGrid | A grid with fixed columns that grows downward. Every child renders at once; use List for long data. | Every child renders at once; there is no virtualization. An adaptive track must be the only track, and there is no Grid or GridRow. | grid; columns |
LazyVGridProps | The grid's columns and the spacing between rows. Each column sets the gap after itself. | ||
LazyVStack | Lays out its children like VStack. Every child mounts at once and keeps its state, so use List for long data. | Every child renders at once; there is no virtualization. | |
LazyVStackProps | LazyVStack's layout props. Every child mounts eagerly; use List for long data. | ||
LineLimit | A number caps growth; a range also reserves its minimum number of lines. | ||
Link | Opens a URL when pressed, like useOpenURL. A press that turns into a scroll does not open it. | You cannot force the external browser. A dispatched URL is not a loaded page. Cross-origin or blocked frames report unverified, and only same-origin frames can be reloaded or stopped. | link; open URL |
LinkProps | The link's destination URL, its content and an optional result callback. | ||
List | A scrolling column of rows, inset grouped by default. Controls inside it render as rows. Its id keys scroll restoration, so keep it stable. With selection, rows from a ForEach become selectable; with an EditButton in the screen's toolbar, ForEach's onDelete and onMove add the editing controls. | The refresh indicator holds a 60 pt inset while the action runs. A ListRow is always one row: its children sit side by side. Use one ListRow per row. A numeric gap changes the space between sections; header and footer space stays. visible keeps the default background; it does not make a sheet opaque. Rows are identified by their ForEach ids. Edit mode belongs to each screen and cannot be set from outside it. Outside edit mode, plain rows cannot be selected with the keyboard. | list; rows; pull to refresh; swipe actions |
ListItemID | A row's identity in List selection: the ForEach id. | ||
ListProps | A List takes a Form's options, its listStyle and an optional selection. | A numeric gap changes the space between sections; header and footer space stays. visible keeps the default background; it does not make a sheet opaque. | |
ListRow | One row with custom content or per-row overrides. A ListRow is always one row. Several children share it side by side, laid out as an HStack would (centred, 8 pt apart, a NavigationLink filling the rest); each separate row needs its own ListRow. | A ListRow is always one row: its children sit side by side. Use one ListRow per row. Satin still owns row geometry. Do not use raw viewport or safe-area CSS in rows. ForEach must sit directly in a List or Section. Moving a selected group, two-finger selection and VoiceOver move actions are not available. Rows are identified by their ForEach ids. Edit mode belongs to each screen and cannot be set from outside it. Outside edit mode, plain rows cannot be selected with the keyboard. | swipe actions; row insets |
ListRowProps | One row's content and its overrides: insets in points, background, separator, swipe actions, context menu and editing opt-outs. | ||
ListSelectionProps | Row selection for a List. An optional id selects one row: tapping a row selects it. A Set selects many: while editing, rows show selection circles and taps toggle them. Rows are identified by their ForEach ids. | ||
ListStyle | How a List draws its rows and sections. insetGrouped is the default. | ||
LocalReachabilityState | The reachability state of an app that needs no app server. Its status is always local. | ||
MatchedTransitionSource | Marks the view a zoom transition starts from and returns to. A push zooms only while its source is on screen; otherwise it slides as usual. | Pushed screens only; sheets and full-screen covers do not zoom. The source must be on screen, or the push slides. A downward dismiss must start within about 27 degrees of vertical. | zoom transition |
MatchedTransitionSourceProps | The source's id and namespace, and the one element the screen zooms out of. | ||
MediaCommandResult | How a media command ended. needs-user-activation means WebKit wants a tap first. | ||
MediaController | The audio player's commands: queue editing, transport, seek, repeat and shuffle. Queue commands resolve once the change is made; play and seek resolve once playback is seen to respond. | ||
MediaPlayer | useMediaPlayer's result: the commands and the live state. | Audio only, with no video player and no background playback beyond what WebKit allows. Playback depends on WebKit codec support and a server that serves byte ranges. | |
MediaQueueEntry | One item in the audio queue: its source URL, media id and display metadata. Each occurrence has its own entryId, so a repeated song appears twice. | ||
MediaQueueOptions | Where a replaced queue starts, and whether it plays. | ||
MediaRepeat | The queue's repeat mode: off, one or all. | ||
MediaSnapshot | Everything the player shows: the queue, the current entry, status, position and modes. | ||
Menu | A button that opens a menu of actions. In a toolbar a symbol label draws an icon button and a text label draws a capsule. | Actions have accessible names, but they do not appear in the VoiceOver Actions rotor. | dropdown menu; more button |
MenuProps | A menu's label and its actions. | ||
MenuTriggerProps | The props a custom Menu trigger receives. Forward all of them to the element that opens the menu. | ||
moving | Returns a new array: the elements at fromOffsets move, in their original order, to just before the element that was at toOffset. Pass it exactly what ForEach's onMove reports. toOffset counts positions in the original array: moving the first of three rows below the second reports toOffset 2, not 1. Use items.length to move to the end. | Each returns a new array; store the result in state to update the rows. | reorder rows |
NamespaceID | A scope for matched-geometry ids. Two views match only if they share an id and a namespace. | ||
Navigation | The actions useNavigation returns: push, replace, pop, popToRoot and showAcknowledgements, typed against the routes. | ||
NavigationArguments | The typed parameter tuple accepted by push and replace. | ||
NavigationBackButtonBehavior | Whether a pushed screen shows its back button. automatic shows it; hidden removes it. | ||
NavigationDeclaration | An app's primary navigation: either tabs, each owning a stack, or one stack. | ||
NavigationLink | Pushes a declared route. In a List it draws a disclosure row; elsewhere it is a plain pressable. | Navigation does not use browser history. Route params must match the declared schema. | push; disclosure row |
NavigationLinkProps | A destination route and its params (typed against the registered routes), plus the row's label and accessories. | ||
NavigationSplitView | Shows the declared root as a sidebar and pushes into a retained detail column. At compact width it collapses to a plain stack. A NavigationStack never splits by itself. | It renders an existing declared stack; it takes no modal or ad hoc root. | sidebar and detail; split view |
NavigationSplitViewProps | Selects which declared primary stack the split view renders; inside a Tab, its own. | ||
NavigationStack | Renders an in-memory navigation stack. A primary stack's root comes from defineNavigation, never from JSX. Inside a Sheet, modal with a root makes a stack the sheet owns. | Navigation does not use browser history. Route params must match the declared schema. | navigation stack; push; back button |
NavigationStackProps | Either a declared primary stack (optionally naming its tab), or a modal stack inside a Sheet that declares its own root. | ||
NavigationTransition | How a pushed screen arrives and leaves: automatic (a slide) or zoom. Give one to Screen's navigationTransition. | Pushed screens only; sheets and full-screen covers do not zoom. The source must be on screen, or the push slides. A downward dismiss must start within about 27 degrees of vertical. | zoom transition |
newId | A new unique record id that sorts by creation time. | Data lives in IndexedDB on this device. The browser may evict it, and writes can fail. | |
NotificationAuthorizationStatus | Notification permission, independent of subscription setup and token rotation. | ||
NotificationPermissionExplainer | Explains what notifications are for before the user asks for them; its button requests authorization from that gesture. | Permission requires the app to be installed on the Home Screen. Local scheduled notifications are unavailable; schedule them from your own authenticated server. | notification permission prompt |
NotificationPermissionExplainerProps | The notification permission explanation's title and app-authored content. | ||
OfflinePresentationProps | What the offline view shows: why the server is unavailable, how it is presented, and the recheck and back actions. | ||
OpenURLAction | The function useOpenURL returns. It opens a URL and reports the result at once. | ||
OpenURLOptions | How to open a web page. prefersInApp is a preference; the browser decides how the page is presented. | ||
OpenURLResult | What happened to an open request: handled in the app, dispatched to the browser, or unavailable with a reason. dispatched does not mean the page loaded. | ||
OrientationFallback | What the app shows when the device is in an orientation it does not support: a rotation prompt, a letterboxed layout, a responsive layout, or nothing. | ||
Overlay | Layers content over its children without changing their frame. Inside a SafeAreaInset, the overlay keeps to the reduced safe area and moves with the keyboard, like the composer. | Only views can be overlaid; there is no shape or style overlay. | |
OverlayProps | The layered content and its alignment. The children set the frame. | ||
param | Route parameter types: string, int, number (finite), boolean and enum, each with .optional(). The same schema validates navigation, restoration and notification deep links. | Navigation does not use browser history. Route params must match the declared schema. | |
Parameter | One route parameter's validator, made by param. | ||
ParameterSchema | A route's parameters by name. | ||
PasteButton | A button that pastes plain text from the clipboard when pressed. It never reads the clipboard before the press. The browser may ask the user to confirm. | Plain text only. Dismissal and denial look the same. WebKit may show an extra Paste confirmation. Not yet verified in an installed app. | paste; clipboard |
PasteButtonProps | The button content and the callbacks that receive the pasted text or the error. | Plain text only. Dismissal and denial look the same. WebKit may show an extra Paste confirmation. Not yet verified in an installed app. | |
PhotosPicker | A button that opens the system photo chooser and returns one photo or video as a File. | MIME types are hints, not validation. There is no photo library identifier and no lasting file access, and overlapping choosers cannot always be told apart. Not yet verified in an installed app. | photo picker; image upload |
PhotosPickerProps | The picker's label, the selected file and the kind of media it accepts. | MIME types are hints, not validation. There is no photo library identifier and no lasting file access, and overlapping choosers cannot always be told apart. Not yet verified in an installed app. | |
Picker | Chooses one option. menu (the default) opens a menu from the row, navigationLink pushes a list of options, inline lists them in place and segmented draws a segmented control. An option can carry a symbol (or icon) and a color. Icons draw in colour in an inline or navigationLink list, in the label colour inside the open menu, and not at all when segmented. | Only the menu, navigationLink, inline and segmented styles exist. | dropdown; select; segmented control |
PickerProps | Picker's options, controlled value and pickerStyle. | ||
preferredColorScheme | Forces the whole app into light or dark. system or null follows the system again. The override lasts until the page reloads, so store the user's choice with useAppStorage and apply it at launch. | The override covers the whole app, presentations included; one view or sheet cannot differ. Persist the choice with useAppStorage and apply it at launch. | dark mode; light mode |
PreferredColorScheme | An appearance override for the whole app: light, dark, or system (or null) to follow the system. | The override covers the whole app, presentations included; one view or sheet cannot differ. Persist the choice with useAppStorage and apply it at launch. | |
PresentationDetent | A height a sheet can rest at: medium, large, a fixed height in points or a fraction of the available height. | ||
PresentationProps | The presentation binding, accessible title and dismissal callback shared by presentations. | ||
Pressable | A plain tap target with no button chrome. It dims while pressed, and a touch that turns into a scroll does not fire onPress. Use it for custom tappable content. | An icon-only Pressable needs an aria-label. | |
PressableOwnedHandlers | The DOM event handlers Pressable owns. Use onPress and onPressStateChange instead. | ||
PressableProps | A pressable's onPress action, content and press feedback. An iconOnly pressable needs an aria-label. | ||
PressState | Whether a press is idle, held down (pressed) or cancelled (deactivated). | ||
ProgressView | A spinning activity indicator, or a linear bar showing value out of total (1 by default). | Circular progress always spins; it does not show a value. Indeterminate linear progress draws an empty track. See controls.md. | spinner; activity indicator; progress bar; loading |
ProgressViewProps | ProgressView's optional label and progress; without value it is indeterminate. | ||
ProgressViewStyle | How a ProgressView draws: linear, circular or automatic, which is linear with a value and circular without. | ||
Query | An immutable query over a collection: index, keyRange, reverse, limit and filter each return a new query. useQuery hands one to its configure callback. | Data lives in IndexedDB on this device. The browser may evict it, and writes can fail. | |
ReachabilityPresentation | The connectivity presentation currently shown to the user. | ||
ReachabilityProbeConfig | The endpoint and deadlines used to probe the app server. | ||
ReachabilityRoutePolicy | Whether a destination remains usable without the app server. | ||
ReachabilityState | The full reachability state: local for apps without a server, or the server probe state. | ||
ReachabilityStateStatus | The server probe result, including an unknown initial state. | ||
ReachabilityStatus | Whether the app server answered: reachable, server-unreachable or device-offline. | ||
ReachabilitySurface | How Satin shows a failed probe: a banner, a full-screen offline view, or none. | ||
RecordOfCollection | The record type stored by a collection declaration. | ||
Register | Augment once in the app to type bare NavigationLink, NavigationStack, TabView and useNavigation without generics. | ||
RegisteredNavigation | The navigation declared through Register, which types bare TabView, Tab and NavigationStack; never when the app has not registered one. | ||
RegisteredRoutes | The routes declared through Register; an empty route set when the app has not registered. | ||
removing | Returns a new array without the elements at offsets. Pass it exactly what ForEach's onDelete reports. | Each returns a new array; store the result in state to update the rows. | delete rows |
route | Binds a screen component to its parameter schema and static chrome. Declare the params first, then type the component with RouteParameters<typeof params>; this order avoids inference cycles. | Navigation does not use browser history. Route params must match the declared schema. | |
RouteDefinition | A screen bound to its parameter schema; made by route, collected by defineRoutes. | ||
RouteOptions | A destination's static chrome: what its bar shows from the first frame of the push. Screen overrides any of these once the screen has its data. | ||
RouteParameters | The props a route component receives for a parameter schema; optional params are optional. | ||
RouteParameterValue | The value described by a route parameter declaration. | ||
RouteProps | The params of one route, as its component receives them. | ||
Routes | Every destination of an app, made by defineRoutes. | ||
RowActionsProps | Row swipe actions and context-menu commands. | ||
RowIcon | A Settings-style icon: a white symbol on a rounded colour tile, for a row's leading edge. | Labels are not interactive, and a custom LabelStyle must return noninteractive content. | settings icon |
RowIconProps | The symbol and its tile colour: a system colour name or any CSS colour. | ||
RowInteractionProps | The swipeActions and contextMenu props of a row in a List. | ||
RowLabel | A row title with a secondary detail line under it. The framework owns its layout. | Labels are not interactive, and a custom LabelStyle must return noninteractive content. | |
RowLabelProps | A row title and its secondary line. | ||
runApp | Mounts the app into #root. Satin creates every primary stack and restores the scene and its launch route before React's first commit, then owns navigation, restoration, notifications and the app shell. Call it once. Content replaces the default root, usually to add app-wide providers; it renders TabView or NavigationStack itself. Without it Satin renders the declaration directly. | One app root per page, for iPhone and iPad WebKit. There are no multiple windows. | mount app; entry point |
RunAppConfiguration | The app, routes, navigation and optional root content mounted by runApp. | ||
RunAppOptions | App-wide runtime options for runApp. Every one is optional. | ||
SafeAreaBar | A bar on the top or bottom edge that content scrolls under. It is a SafeAreaInset with no spacing and its own scroll-edge blur. | The bar uses a CSS backdrop blur, not the navigation bar edge effect, and does not extend the navigation bar. | bottom bar; top bar |
SafeAreaBarProps | A SafeAreaInset limited to the top or bottom edge, with no spacing. | ||
SafeAreaInset | Pins an accessory, such as a composer or a filter bar, to one edge of its content. The accessory takes room from the content's safe area on its edge; a scroll view inside still spans the whole frame and scrolls under it. At the bottom, content scrolls under the accessory and its last item stays clear of it. When the accessory resizes, the scroll inset changes in the same frame (through --satin-inset-accessory-height), so a composer that grows by a line keeps the newest message in view. | A top inset under a large title stays at the expanded title edge while the title collapses. On an installed iPhone the status bar area is a flat fill (see top-edge-limitation.md). | safe area; accessory; composer bar |
SafeAreaInsetEdge | The edge a SafeAreaInset accessory sits on. leading and trailing follow the layout direction. | ||
SafeAreaInsetProps | The edge, the accessory (content) and its spacing; children is the content it insets. | ||
SafeAreaPadding | Grows the safe area of the content inside it. Scroll views keep their frame and inset their content; other content is padded. Nested padding adds up. | On a scroll view, bottom padding is a spacer at the end of the content. Nested padding adds up. | |
SafeAreaPaddingProps | Which edges to pad, and by how much. | ||
ScenePhase | Whether the app is in the foreground with focus (active), without focus (inactive) or hidden (background). | ||
Screen | A route component's navigation chrome: title, toolbar, search and related options, declared by the screen that owns them. Use it when the title or toolbar depends on the screen's data; static chrome belongs in the route's options. | Title fonts and sizes follow the system; there is no custom title style. Navigation bar minimization is opt-in; never keeps the bar expanded. | navigation bar; title; toolbar |
ScreenLifecycle | Whether a screen is covered by another, and the phase of its current transition. | ||
ScreenLifecycleCallbacks | The appear and disappear callbacks for useScreenLifecycle. | ||
ScreenProps | A screen's own chrome, overriding its route's static options. | ||
ScrollAnchor | Where a scroll target lines up in the viewport: top, center or bottom. | ||
ScrollAxis | The axis along which a scroll surface accepts scrolling. | ||
ScrollDismissesKeyboardMode | When scrolling dismisses the keyboard: never; immediately, as soon as a drag on the surface starts; or interactively, when a drag reaches the keyboard. WebKit's keyboard cannot follow the finger, so it then slides away on its own curve and the bottom inset follows it. | ||
ScrollEdge | A logical edge of a scroll view. | ||
ScrollEdgeEffectHidden | Whether to hide scroll edge material, optionally for specific edges. | The hard style throws an unsupported error. Only the top edge draws material; other edges draw none. | |
ScrollEdgeEffectStyle | The material under bars at a scroll view's edge: soft, hard or automatic. | The hard style throws an unsupported error. Only the top edge draws material; other edges draw none. | |
ScrollEdgeEffectStyleSelection | The scroll edge treatment and the edges to which it applies. | ||
ScrollEdgeSelection | One or more scroll edges, or all edges. | The hard style throws an unsupported error. Only the top edge draws material; other edges draw none. | |
ScrollOffset | The scroll position in points along the physical x and y axes. | ||
ScrollPositionBinding | A controlled scroll position: the id of the target in view, its anchor and the callback that receives changes. | ||
ScrollPositionOptions | The scroll view's position options: where it starts, whether it keeps visible content in place, a controlled position and a geometry callback. | ||
ScrollTarget | Marks content a vertical ScrollView can scroll to by id. | Scroll targets, pull to refresh and scroll geometry work only on the vertical axis. | |
ScrollToTopOptions | Options for scrollToTop: whether to animate. | ||
ScrollView | A scrolling region, vertical by default. Inside a screen its id keys scroll restoration, so keep it stable. refreshable adds pull to refresh, and a ref handle scrolls to a ScrollTarget. | The refresh indicator holds a 60 pt inset while the action runs. Scroll targets, pull to refresh and scroll geometry work only on the vertical axis. The hard style throws an unsupported error. Only the top edge draws material; other edges draw none. | scrolling; pull to refresh; scroll to |
ScrollViewHandle | A scroll view's ref handle: its current offset, scrollTo a target and scrollToTop. | ||
ScrollViewProps | A scroll view's id, axis, refresh action, keyboard dismissal, edge material and position options. Targets, refresh and geometry work only on the vertical axis. | ||
Searchable | A search field for a screen or list: its controlled text, prompt, placement, scopes and suggestions. The bar owns the field: its capsule, magnifier, clear button, close button, scope bar and collapse on scroll. In the bottom toolbar, the presented field rides above the keyboard with a close button, and the bar and title give way. Place <DefaultToolbarItem kind="search" placement="bottomBar" /> to put it beside other bottom bar items. | The bottom toolbar field does not animate in yet and draws no scope bar, so scoped fields stay in the drawer. A search tab draws no bottom field; role="search" is metadata only. Do not build your own search bar. | search bar; search field |
SearchFieldPlacement | Where the search field goes. On iPhone, 'automatic' uses the bottom toolbar outside a TabView when the screen has no other bottom bar items or scopes; otherwise it uses a drawer that scrolls away with the content. On iPad, automatic search belongs to the trailing navigation toolbar, or below the sidebar toolbar in a split view. Explicit toolbar placement stays trailing on iPad, including narrow windows. | The bottom toolbar field does not animate in yet and draws no scope bar, so scoped fields stay in the drawer. A search tab draws no bottom field; role="search" is metadata only. Do not build your own search bar. | |
SearchScopes | A controlled scope bar, shown under the search field while search is presented. | The bottom toolbar field does not animate in yet and draws no scope bar, so scoped fields stay in the drawer. A search tab draws no bottom field; role="search" is metadata only. Do not build your own search bar. | |
SearchSuggestion | A suggestion shown under the search field. Choosing one replaces the search text; it does not submit. | The bottom toolbar field does not animate in yet and draws no scope bar, so scoped fields stay in the drawer. A search tab draws no bottom field; role="search" is metadata only. Do not build your own search bar. | |
Section | A group of rows in a List or Form, with an optional header and footer. | A ListRow is always one row: its children sit side by side. Use one ListRow per row. | |
SectionProps | A section's rows and its optional header and footer. | ||
SecureField | Password entry through secure system input. In a List or Form it becomes the row. | Password manager support is limited to autofill. | password field |
SecureFieldProps | SecureField's controlled text, label and prompt. | ||
Selectable | Lets the user select and copy the text inside it. App chrome turns text selection off everywhere else, so wrap user-authored content such as notes or messages. | Zoomable is the only region that zooms; the page itself never does. There is no general gesture composition. | text selection; copy text |
SelectableProps | The wrapped content and plain div attributes. | ||
semanticColor | Returns a semantic colour, such as label or systemGroupedBackground, as a CSS colour that follows light and dark appearance. It also resolves inside portals. | Values match iOS 27 at normal contrast. Increased contrast and Display P3 are not supported. Semantic label colours and layered secondary or tertiary text can differ slightly from iOS. | |
SemanticColorName | The names of the iOS semantic colours for text, fills, backgrounds, separators and tint (label, secondarySystemBackground, …). | ||
SensoryButton | A tap target that plays the system selection tick where the browser supports it. There is no other way to trigger haptics. Use plain content only: links, buttons and other form controls cannot be nested. | Only selection or false. Keyboard and assistive activation may not tick. | haptics; vibration |
SensoryButtonProps | A tap target's action, content and the feedback it plays. | ||
SensoryFeedback | The feedback a SensoryButton plays. Only selection, the switch tick, exists. | ||
ServerReachabilityConfig | The server probe and presentation policy for an app that requires connectivity. | ||
ServerReachabilityState | The last server probe, retry and connectivity presentation state. | ||
ShareLink | A button that opens the system share sheet. Prepare file bytes before rendering, because the sheet must open during the press. | No drag and drop or file provider integration. Completion means the system took the share, not that anyone received it; AbortError also covers having no suitable target. Not yet verified in an installed app. | share sheet; share button |
ShareLinkProps | The text, URL or files to share, the button content and the completion and error callbacks. | No drag and drop or file provider integration. Completion means the system took the share, not that anyone received it; AbortError also covers having no suitable target. Not yet verified in an installed app. | |
Sheet | A card that slides up over the current screen and can rest at several heights. It can host its own NavigationStack modal. Keep isPresented in plain React state: presentations start closed after a relaunch. | Sheets start closed after a relaunch. Persist drafts separately, never the presentation flag. | sheet; modal presentation; bottom sheet |
SheetProps | A sheet's presentation binding, title, detents and drag behaviour. Supplying selection requires onSelectionChange. | ||
Slider | Drags a controlled number between min and max, continuously or in steps. In a List or Form it fills its own 60 pt row. | No minimum or maximum value labels and no custom tick marks. The label is for accessibility only, and only the thumb can be dragged. | slider; range input |
SliderProps | Slider's controlled value, range, step and accessibility label. | ||
Spacer | Takes up the free space along its parent stack's axis. | Default spacing and frame differences are listed in content.md. Props apply in a fixed order, not the order you write them. | flexible space |
SpacerProps | Spacer's minimum length in points. | ||
SpringOptions | A spring's duration in milliseconds and its bounce, for Animation.spring. | Other state and style changes do not animate. There is no null animation, easing curve, repeat, delay, completion callback or per-update timing; use one outer synchronous update. Bounce cannot be negative. | |
StackDeclaration | A primary stack: its root route and, when that route requires them, the root's params. | ||
Stepper | Increments or decrements a controlled number within its bounds. It draws a row in a List and the bare control elsewhere. | Controlled only: pass value and onChange. | stepper; plus and minus buttons |
StepperProps | Stepper's controlled value, bounds and step. | ||
storageQuota | The app's storage quota: estimate() reports usage, and requestPersistence() asks WebKit not to evict the app's data. Request persistence after the user saves something meaningful. | Data lives in IndexedDB on this device. The browser may evict it, and writes can fail. | |
StringPropertyKey | The property keys whose values are strings. | ||
SubmitLabel | The return key's title: done, go, next, search or send. | ||
SwipeAction | An entry in a row's swipe actions: any menu entry, or a swipe command that shows only a symbol. | ||
SwipeActionItem | A swipe action command. It may drop its visible label if it has a symbol or icon and an accessibilityLabel. | ||
SwipeActions | The swipeActions prop of a row: actions for one edge, or a list with one entry per edge. | swipe actions; swipe to delete | |
SwipeActionsConfiguration | The swipe actions on one row edge, trailing by default. A full swipe runs the first action unless allowsFullSwipe is false. | ||
SymbolGlyph | A symbol's artwork: filled SVG paths on a 56-unit grid, with optional layers for hierarchical and palette rendering, and its provenance. No font, HTML or external resource. | ||
SymbolImage | Draws a named vector symbol that sizes with the surrounding font and takes its colour. A .fill variant is chosen automatically where the context calls for it, such as a selected tab. | The bundled symbols are Framework7 Icons 5.0.5 (MIT) plus clean-room glyphs drawn for Satin, not Apple SF Symbols. Keep their copyright and license notices. Provider glyphs need their own provenance. Only shipped or registered names draw. | icon; glyph |
SymbolImageProps | The symbol's name, symbol properties and an optional accessible label. | ||
SymbolName | A symbol name, such as 'plus' or 'trash.fill'. The bundled names autocomplete; any string is accepted for glyphs added through SymbolProvider. | ||
SymbolProvider | Adds or replaces symbol glyphs for everything inside it. Paths must be original, or redistributable with their provenance recorded. | The bundled symbols are Framework7 Icons 5.0.5 (MIT) plus clean-room glyphs drawn for Satin, not Apple SF Symbols. Keep their copyright and license notices. Provider glyphs need their own provenance. Only shipped or registered names draw. | |
SymbolRenderingMode | How a symbol's layers are coloured: monochrome in one colour, hierarchical in shades of one colour, or palette with a colour per layer. | ||
SymbolScale | A symbol's size relative to the text around it: small, medium or large. | ||
SymbolSource | Glyphs by symbol name, for SymbolProvider. | ||
SymbolWeight | The weight a symbol is drawn at. It uses the same names as font weights. | ||
systemColor | Returns a system colour as a CSS colour that follows light and dark appearance. | Values match iOS 27 at normal contrast. Increased contrast and Display P3 are not supported. Semantic label colours and layered secondary or tertiary text can differ slightly from iOS. | |
SystemColorName | The names of the iOS system colours. Each has a light and a dark value. Plain CSS colours work too. | ||
Tab | Renders one declared tab inside a TabView. Its id, label and root stack come from defineNavigation. | Only the declared tab styles exist. Desktop browsers are not supported. | |
TabDeclaration | One tab in defineNavigation: its id, label, symbol or icon, and the root of its stack. | ||
TabId | The union of a navigation declaration's tab ids. | ||
TabProps | Names the declared tab to render. | ||
TabSection | Groups Tabs under a collapsible header in the TabView sidebar. It adds no navigator of its own. | Only sidebarOnly placement exists: no automatic sections in the top bar, no tab customization and no section header actions. Expansion lasts while the TabView is mounted. With no sidebar, a sidebar-only selection shows the first primary tab. | |
TabSectionProps | A sidebar group's title, optional id and placement, and its Tab children. | ||
TabView | Renders the tabs from defineNavigation. Each tab keeps its own stack, and the selected tab is restored with the scene. Pass selection and onSelectionChange to control it; a controlled tab press only requests the change. | Only the declared tab styles exist. Desktop browsers are not supported. There is no minimize behavior or placement hook yet, and the collapse into the tab bar is incomplete. | tab bar; tabs |
TabViewProps | TabView's selection binding and bar behaviour; its tabs come from defineNavigation. | ||
TaskAction | The work useTask runs: pass signal to fetches and publish state through commit. | ||
TaskCommit | Publish synchronous state updates only while this invocation is current. | ||
TaskOptions | Options for useTask. A change of id cancels the current run and starts a new one. | ||
TaskRunner | Cancels the current run and starts the task again; resolves when that run ends. | ||
Text | Inline text in a system text style. Nested Text inherits its enclosing style unless it sets its own. A lineLimit truncates with an ellipsis. | Default spacing and frame differences are listed in content.md. Props apply in a fixed order, not the order you write them. | text; font; typography |
TextEditor | Multiline text entry. In a List or Form it becomes the row; elsewhere it shows three lines by default. | Text layout cannot be customized. | multiline text; text area |
TextEditorProps | TextEditor's controlled text, label and prompt. | ||
TextField | Single-line controlled text with a label, an optional prompt and keyboard intent from kind. In a List or Form it becomes the row; elsewhere it draws a standalone field. axis="vertical" grows with its content. | textFieldStyle="plain" removes the field chrome. WebKit owns the system keyboard, and text layout cannot be customized. | text field; text input |
TextFieldKind | What a field holds, setting its keyboard, autofill and autocorrection together. | ||
TextFieldProps | A single-line field, or with axis="vertical" a field that grows to its lineLimit. | ||
TextFieldStyle | How a text field draws. automatic adapts to its container; plain draws no field chrome. | ||
TextProps | Text's font, weight, design, line limit and alignment. | ||
TextStyle | The system text styles, sized as iOS draws them at the default text size. | ||
TitleDisplayMode | How a screen title is drawn: inline in the bar, large below it, inlineLarge large inside the bar row, or none. | ||
Toggle | A controlled on/off value. It draws a switch row in a List or Form and a bare switch elsewhere. toggleStyle can make it a button or a custom ToggleStyle. | Only the switch and button styles are built in; anything else needs a custom ToggleStyle. | switch; checkbox |
ToggleProps | Toggle's controlled value, label and control properties. | ||
ToggleStyle | A custom look for Toggle. Satin applies the declared semantics (switch, checkbox or button) to the element it owns; makeBody draws the appearance. | ||
ToggleStyleConfiguration | What a custom ToggleStyle draws from: the label, the on state and the pressed state, plus the shared control values. | ||
ToolbarItem | Places one item in the navigation bar or the bottom toolbar. Adjacent actions share a glass capsule; a ToolbarSpacer separates groups. | Only the placements in ToolbarItemProps exist. | toolbar button; bar button |
ToolbarItemGroup | Groups several items under one placement. They render as consecutive ToolbarItems and share one glass capsule. | Only the placements in ToolbarItemProps exist. | |
ToolbarItemProps | A toolbar item's placement and content. automatic lets the bar choose; bottomBar puts it in the bottom toolbar. | ||
ToolbarMinimizationBehavior | When the navigation bar minimizes: onScrollDown, onScrollUp or never. | Navigation bar minimization is opt-in; never keeps the bar expanded. | |
ToolbarMinimizationRestoration | What brings back a minimized bar: automatic, or only reaching the scroll edge (atScrollEdge). | Navigation bar minimization is opt-in; never keeps the bar expanded. | |
ToolbarMinimizationSafeAreaAdjustment | Whether the content inset shrinks when the bar minimizes. | Navigation bar minimization is opt-in; never keeps the bar expanded. | |
ToolbarSpacer | Splits toolbar items into separate glass capsules. Consecutive items of one placement share one capsule; a spacer between them splits it. Place it directly in toolbar, next to the items. | Only the placements in ToolbarItemProps exist. | |
ToolbarSpacerProps | The spacer's sizing and placement. | ||
TransactionCollection | A collection as seen inside db.transaction: its writes commit together or not at all. | ||
TransactionCollections | The typed collection handles available inside a database transaction. | ||
TransitionPhase | Where a screen is in a navigation transition: entering, exiting or settled. | ||
UpdateActivation | When a downloaded update may apply: cold-launch, the default, or cold-launch-or-explicit, which also lets it apply on request, as the development menu does. | ||
useAppStorage | A small preference kept in local storage across launches. Every component that reads the same key sees the same value. Values must be JSON-serializable. | Stored in the origin's local storage on this device. It does not sync across devices. | persistent settings; preferences; local storage |
useAppUpdate | Reports whether this launch applied an app update: justUpdated holds the previous and current build ids after an update, null otherwise (and until launch settles). Release updates apply at launch, before first input after foregrounding, or at a clean suspension. | Preview builds may reload on update. Release, the default, applies updates only at safe moments. | |
useBuildInfo | Returns the build that is running, even offline. The values are written by satinApp at build time; it never asks the server for the latest deployment. | The build id is not a git revision or a service worker cache hash. Builds made without satinApp report "unavailable". What the server last served says nothing about which cached bundle is running. | |
useColorScheme | The appearance Satin is drawing right now, light or dark. | Increased contrast is not reported. Size classes are compact or regular only. | dark mode |
useDismiss | Closes the screen or presentation that contains the caller. In a pushed screen it pops that screen; at the root of a Sheet or FullScreenCover it dismisses the presentation, even when interactive dismissal is disabled. Elsewhere it does nothing. | Covers cannot be swiped away. They start closed after a relaunch. | close; go back |
useEditMode | Returns this screen's edit mode and a setter. EditButton toggles the same value, so a toolbar or bottom bar can follow it. | Rows are identified by their ForEach ids. Edit mode belongs to each screen and cannot be set from outside it. Outside edit mode, plain rows cannot be selected with the keyboard. | |
useFocusChain | Moves focus through a form's fields in order. The return key goes to the next field and the last one dismisses the keyboard. Disabled and unmounted fields are skipped. Spread field(key) onto each field. | Focus moves only through the fields you register. A custom keyboard is not possible. | next field; return key |
useGlassErrors | Every glass renderer error so far, re-rendering when one is added. For diagnostics screens; runApp's onGlassError is the way to report them. | Diagnostics show what failed; they do not prove the app looks or behaves right on a device. | |
useHorizontalSizeClass | The horizontal size class: compact or regular. Inside a presentation it is the presentation's own class; elsewhere, the window's. | Increased contrast is not reported. Size classes are compact or regular only. | iPad layout; responsive layout |
useKeyboardMetrics | Returns the keyboard's geometry in points and re-renders as it changes. expectedHeight is the keyboard height to plan for before the keyboard has shown. | It reads the keyboard; it cannot change the keyboard or add a separate keyboard lifecycle. | keyboard height |
useMediaPlayer | Returns the app's audio player: its commands and its live state. The system's Lock Screen media controls drive the same player. Audio only; there is no video playback. | Audio only, with no video player and no background playback beyond what WebKit allows. Playback depends on WebKit codec support and a server that serves byte ranges. | audio player; music player |
useNamespace | Returns a namespace that stays the same for the life of the component. Pass it to MatchedGeometryEffect and MatchedTransitionSource. | Matches frames only, around the centre. Corner radius scales with the frame during the flight instead of staying fixed. A non-source view does not follow its source outside an animation. Glass does not travel with a removed view. | |
useNavigation | Returns the enclosing stack's navigation actions, typed against the registered routes. A wrong route id or a missing param is a compile error. | Navigation does not use browser history. Route params must match the declared schema. | |
useNotifications | The app's notification permission and badge. Call requestAuthorization from a user gesture, after explaining why (see NotificationPermissionExplainer). Without runApp's notifications option the status is unsupported. | Permission requires the app to be installed on the Home Screen. Local scheduled notifications are unavailable; schedule them from your own authenticated server. | push notifications; badge |
useOpenURL | Returns a function that opens a URL from an action. App URLs that match a registered route navigate inside the app; other URLs go to the browser. | You cannot force the external browser. A dispatched URL is not a loaded page. Cross-origin or blocked frames report unverified, and only same-origin frames can be reloaded or stopped. | open link; open URL |
useQuery | Reads a collection's records as { data, loading, error } and keeps them live. Local writes show up synchronously, before they persist. | Data lives in IndexedDB on this device. The browser may evict it, and writes can fail. | live query |
useReachability | The app server's status and the offline view currently shown, with fetch and recheck helpers that feed the status. | It cannot promise that a request will succeed. | offline; network status |
useRecord | One record by key, kept live; data is undefined while loading and when no record exists. | Data lives in IndexedDB on this device. The browser may evict it, and writes can fail. | |
UserInterfaceSizeClass | How much room there is along one axis: compact or regular. | ||
useSafeAreaInsets | The live safe-area insets in CSS pixels. Use them instead of env(safe-area-inset-*). | A top inset under a large title stays at the expanded title edge while the title collapses. On an installed iPhone the status bar area is a flat fill (see top-edge-limitation.md). | safe area insets; notch; home indicator |
useScaledMetric | Scales a dimension with the user's text size, relative to a text style (body by default). Use it for spacing or icon sizes that should grow with text. | largeTitle and callout scale by fixed fallbacks, because WebKit has no system font keyword for them. | text size scaling |
useScenePhase | Whether the app is in use: active in the foreground with focus, inactive without focus, background when hidden. | The browser may stop running the app while it is suspended. A screen's lifecycle is separate from the app's foreground state. | foreground; background; app state |
useSceneStorage | State kept with the current navigation entry, so a draft survives a relaunch. Each pushed entry owns its own value. Values must be JSON-serializable. Keep saved records in a collection, not here. | Do not store presentation visibility here. A checkpoint can be lost if the browser evicts storage or the process crashes. | restorable screen state; draft |
useScreenLifecycle | Runs appear and disappear callbacks as the screen is shown and covered or removed, and returns whether it is covered and its transition phase. | The browser may stop running the app while it is suspended. A screen's lifecycle is separate from the app's foreground state. | |
useTask | Runs async work while its screen is showing. It cancels the run when the screen is covered, its tab is hidden or the component unmounts, and starts again when it shows. Pass signal to fetch and publish results through commit. An error the task throws reaches the nearest error boundary. The returned runner cancels and replaces the current run. | Cancellation is cooperative: state set outside commit cannot be stopped. The work runs in the foreground only; it is not a Web Worker or a background scheduler. | cancellable task; data loading |
useUnsavedChanges | Tells Satin the app has unsaved work while unsaved is true, so a pending app update waits instead of reloading over it. Edits in text fields are detected without this hook. | It only delays app updates; it does not stop the user from dismissing a sheet. | unsaved changes |
useVerticalSizeClass | The vertical size class: compact or regular. Inside a presentation it is the presentation's own class; elsewhere, the window's. | Increased contrast is not reported. Size classes are compact or regular only. | |
useWebAuthentication | Returns a sign-in flow's current state and re-renders when it changes. It checks for a finished sign-in on launch and when the app returns to the foreground. | Needs a secure context, local storage, Web Locks, a dedicated uncached callback page and a server exchange. Bridge reads need a private transaction proof. Your server validates tokens and OpenID Connect. Completion in the background is not guaranteed. | |
useWebFrame | Makes a controller to pass to a WebView, for reading its state and reloading or stopping it. | You cannot force the external browser. A dispatched URL is not a loaded page. Cross-origin or blocked frames report unverified, and only same-origin frames can be reloaded or stopped. | |
VerticalScrollGeometry | Vertical scroll geometry: the current viewport and content offset in points. | ||
VerticalTextFieldProps | Vertical TextField's controlled text, growth limits and keyboard intent. | ||
ViewportFitPolicy | How the app fits the screen around the notch and home indicator. adaptive picks a fit per device before the app renders. | ||
ViewThatFits | Shows the first child whose natural size fits the space, or the last child when none fits. It measures again when the space or a child resizes. | Give it a definite height when it checks the vertical axis. Every child stays mounted: hidden children are inert and pause Satin tasks and activity indicators, but their own effects keep running. | responsive layout; fallback layout |
ViewThatFitsAxis | The axes a ViewThatFits candidate must fit along. | ||
ViewThatFitsProps | The axes to check, both by default, plus plain div attributes. | ||
Visibility | Whether the navigation bar shows. A hidden bar reserves no row. | ||
VStack | Arranges its children in a column. Set spacing where it matters: wrappers and custom controls do not pass their children's preferred spacing up to the stack. | Default spacing and frame differences are listed in content.md. Props apply in a fixed order, not the order you write them. | column; vertical layout |
VStackProps | VStack's horizontal alignment and spacing in points. | ||
WebAuthentication | A sign-in flow made by defineWebAuthentication: prepare, start, complete and resume it, or subscribe to its state. | ||
WebAuthenticationCallbackResult | The outcome of complete on the callback page: the URL to return to, or why it was rejected. | ||
WebAuthenticationConfiguration | The OAuth provider, client, callback and app URLs for defineWebAuthentication, and the exchange function that finishes sign-in on your server. | ||
WebAuthenticationExchange | What exchange receives: the authorization code, the PKCE verifier and the values your server needs to redeem and check it. | ||
WebAuthenticationRequest | A prepared sign-in. Call start from the user's press. | ||
WebAuthenticationStartResult | Whether start opened the provider in a popup or a redirect, or why it could not. | ||
WebAuthenticationState | Where a sign-in stands, from idle through pending and completing to a final status. | ||
WebFrameActionResult | Whether a reload or stop request was sent to the frame, or why not. | ||
WebFrameController | Reads a WebView's state and sends it reload and stop. Only same-origin frames expose their current page or accept these commands. | ||
WebFrameState | The embedded page's load state. A cross-origin page reports unverified, because its contents cannot be read. | ||
WebView | Embeds a web page in a sandboxed frame. The browser decides whether the page may be framed, and the frame's storage is partitioned from the app's. | You cannot force the external browser. A dispatched URL is not a loaded page. Cross-origin or blocked frames report unverified, and only same-origin frames can be reloaded or stopped. | iframe; embedded web page |
WebViewProps | The page URL, its accessible title, an optional controller, and what the page may run. Scripts and forms are off by default. | ||
withAnimation | Applies the state changes in update, then animates the MatchedGeometryEffect views they move, insert or remove. Call it from an event handler. Keyed List rows also move to their new positions. Other views take their new layout at once. Returns the callback result and passes errors through. Only synchronous updates take part, and nested calls join the outer one. | Other state and style changes do not animate. There is no null animation, easing curve, repeat, delay, completion callback or per-update timing; use one outer synchronous update. Bounce cannot be negative. | animated state update |
WriteFailure | A durable write that failed after it was published to memory, reported to db.onError. | ||
Zoomable | A region the user can pinch to zoom and pan, such as a photo or a map. The + and - keys zoom about the centre and 0 resets. Give it an accessible label. | Zoomable is the only region that zooms; the page itself never does. There is no general gesture composition. | pinch to zoom |
ZoomableProps | The maximum zoom (4 by default) and a scale callback. Satin owns the pointer handlers. | ||
ZoomTransitionOptions | The source identity and namespace for NavigationTransition.zoom. | ||
ZStack | Layers its children in one cell, later children on top. Assistive technology reads them in source order. | Default spacing and frame differences are listed in content.md. Props apply in a fixed order, not the order you write them. | layers; overlay |
ZStackProps | How ZStack aligns its layers. |
diagnostics API
Module: @satinhq/kit/diagnostics
Readers for installation and appearance records, for an optional diagnostics screen.
Scroll horizontally to read every column.
| Satin export | Behavior | Limits | Also known as |
|---|---|---|---|
AppearanceEvent | One entry in the appearance diagnostics log: what happened and the appearance seen then. | ||
InstallationDiagnostics | Shows the app's installation receipts, for an optional diagnostics screen in Settings. Pass the app's scope. | ||
InstallationDiagnosticsProps | The app scope whose installation receipts are shown. | ||
InstallationFailure | An installation failure recorded before the app launched: the build, the URL, the reason and whether the network failed. | ||
readAppearanceDiagnostics | Returns a short log of appearance changes and lifecycle events, for diagnosing appearance after a resume. | ||
readInstallationFailure | Reads the last recorded installation failure for an app scope, or null when there is none. |
install API
Module: @satinhq/kit/install
Building blocks for a custom install page. They work only on the install page that satinApp builds.
Scroll horizontally to read every column.
| Satin export | Behavior | Limits | Also known as |
|---|---|---|---|
copyInstallLink | Copies the install page's address. Never throws: a refusal is reported with the address. | ||
CopyLinkResult | Whether copyInstallLink copied the address, and the address itself. | ||
InstallApp | The app being installed: its name, icon, tint and install page address. | ||
InstallBrowser | The browser the install page is open in. in-app is a browser inside another app, which cannot add to the Home Screen. | ||
InstallContext | What a custom install page knows about where it is open: device, browser, Safari version, standalone mode and the app. A Safari tab cannot tell whether the app is already on the Home Screen. | ||
InstallDevice | The device the install page is open on: iphone, ipad or other. | ||
InstallSteps | The three install steps for this device, browser and Safari layout, worded as on Satin's own install page. | ||
InstallTip | The tip at Safari's real control ("Page Menu, then Share" or "Share"), in Satin's glass. Shown only in Safari 27 on an iPhone or iPad, where the control's place was measured; renders nothing anywhere else. Its glass takes the page's background colour. | ||
readInstallContext | Reads the install context from the browser. It throws outside the install page that satinApp builds. | ||
useInstallContext | Returns the install context, read once when the page opens. It throws outside the install page. |
server API
Module: @satinhq/kit/server
Node helpers for serving a built app. Keep them out of the browser bundle.
Scroll horizontally to read every column.
| Satin export | Behavior | Limits | Also known as |
|---|---|---|---|
serveStaticFile | Serves a built app's static files from Node. It streams GET and HEAD requests and supports single byte ranges, with no caching or compression. The fallback file answers only missing extensionless routes; other methods are left to the caller. The root and every file, symlink targets included, must resolve inside the same real directory. |
testing API
Module: @satinhq/kit/testing
Helpers for app tests. They do not prove real touches or notification delivery.
Scroll horizontally to read every column.
| Satin export | Behavior | Limits | Also known as |
|---|---|---|---|
assertNavigation | Throws unless the visible screen in container is the route screen. For app tests. | ||
sendTestNotification | Sends a test notification through a push relay and returns how many devices accepted it. The token is requested when called and never stored. |
unstable API
Module: @satinhq/kit/unstable
Experimental API. Its contract may change between beta releases.
Scroll horizontally to read every column.
| Satin export | Behavior | Limits | Also known as |
|---|---|---|---|
Animation | An opaque spring timing value for withAnimation. Use a named value or Animation.spring. | ||
concentricRadius | The corner radius for a shape inset evenly inside a rounded container, so the two corners stay concentric. The result never goes below 0; a negative or non-finite argument throws. | ||
DetailList | A grouped list of rows for a split view's detail column at regular width. | ||
DragGesture | A drag that starts after the finger moves minimumDistance along the accepted axis. | ||
DragGestureOptions | A drag's callbacks and state, the distance it must travel before it starts (10 by default) and the axis it accepts. | ||
DragGestureValue | A drag's current and start locations, its translation and its velocity. | ||
Gesture | A gesture made by DragGesture, LongPressGesture, TapGesture or MagnifyGesture, for a GestureView. | ||
GesturePoint | A point in CSS pixels. | ||
GestureState | The binding useGestureState returns. A gesture updates it while active and resets it when it ends. | ||
GestureView | A region that recognizes custom gestures on its children. Scrolling and the back swipe still win the touches they own. | ||
GestureViewProps | The gestures a GestureView recognizes: a normal, a simultaneous and a high-priority gesture. | ||
LongPressGesture | A press held for minimumDurationMs without moving more than maximumDistance. | ||
LongPressGestureOptions | A long press's callbacks and state, how long it must be held (500 ms by default) and how far the finger may move (10 by default). | ||
MagnifyGesture | A two-finger pinch that starts once the scale changes by minimumScaleDelta. | ||
MagnifyGestureOptions | A pinch's callbacks and state, and how far the scale must change before it starts (0.01 by default). | ||
MagnifyGestureValue | A pinch's scale relative to its start, and the point it started around. | ||
MatchedGeometryEffect | When a withAnimation change removes this view and inserts another with the same id, the new one moves from the old one's frame to its own while the two cross-fade. A view that only moves or resizes animates from where it was. A matched view with no partner fades in or out. Wrap one element that has no transform of its own. Changes made outside withAnimation apply at once. | ||
MatchedGeometryEffectProps | The effect's id and namespace, whether it is the source, and the one element it wraps. | ||
Sidebar | A list of sidebar destinations. Selecting one shows it in the split view's detail column. | ||
SidebarEntry | One sidebar destination: its id, label, optional icon and disabled state. | ||
SidebarProps | The sidebar's entries, the selection callback and which entry starts selected. | ||
SidebarSymbol | Draws the sidebar's gearshape or sidebar.left icon with SymbolImage. The artwork is from Framework7 Icons (MIT). | ||
SpringOptions | A spring's duration in milliseconds and its bounce, for Animation.spring. | ||
TapGesture | A tap, or count taps, that ends without moving more than maximumDistance. It reports where the finger lifted. | ||
TapGestureOptions | A tap's callbacks and state, the number of taps (1 by default) and how far the finger may move (10 by default). | ||
Transition | How a view enters and leaves: opacity, scale and move effects. withAnimation sets the timing. | ||
TransitionEdge | The edge a view moves through, resolved against its own layout direction. | ||
TransitionView | Shows or hides its content with a transition when visible changes inside withAnimation. Keep the view itself mounted. Hidden content stays mounted and inert until its exit finishes, and the first render does not animate. | ||
TransitionViewProps | Whether the content is visible, the transition to use and the content. | ||
useDisplayCornerRadius | The corner radius of the device screen in points, or 0 when the model is unknown. It updates after rotation, window moves and pixel-ratio changes that fire a resize. | ||
useGestureState | Returns a value that a gesture drives, and the binding to pass as the gesture's state. The value goes back to initialValue when the gesture ends or is cancelled. | ||
useSplitSelection | Returns the split view's mode and the entry shown in its detail column. It throws outside a split view. | ||
withAnimation | Applies the state changes in update, then animates the MatchedGeometryEffect views they move, insert or remove. Call it from an event handler. Keyed List rows also move to their new positions. Other views take their new layout at once. Returns the callback result and passes errors through. Only synchronous updates take part, and nested calls join the outer one. | animated state update |
vite API
Module: @satinhq/kit/vite
The Vite plugin that builds the app, its install page and its service worker.
Scroll horizontally to read every column.
| Satin export | Behavior | Limits | Also known as |
|---|---|---|---|
defineApp | Declares app identity, install metadata and capabilities once. Pass the result to runApp and to the @satinhq/kit/vite plugin. Everything not given is defaulted and the whole definition is validated, so a bad id or icon fails at build time rather than after install. | app manifest; app config | |
satinApp | Generates the app shell and loads framework CSS once, before app styles. The stylesheet participates in Vite CSS HMR and builds; pre-launch paints independently. | ||
SatinAppOptions | Build options for satinApp: a custom install page, strict glass, the development menu and a media probe. |
Unsupported capabilities
These capabilities have no public export. The listed alternatives describe supported compositions, not additional props or controls.
Scroll horizontally to read every column.
| Capability | Supported alternative | Limits |
|---|---|---|
| custom hit shapes | Use Pressable, which responds across its rectangle. | Unsupported. Hit areas are rectangles. |
| custom toolbar backgrounds | Navigation bars keep their standard background. | Unsupported. There is no toolbar background or material override. |
| custom container backgrounds | Navigation stacks and sheets keep their standard backgrounds. | Unsupported. Their backgrounds belong to the containers. |
| multiple-date selection | No multiple-date selection control is shipped. | DatePicker selects one date. |
| collapsible disclosure groups | Keep sections visible until the framework expander is implemented. | Unsupported. No disclosure expander is exported. |
| video playback and audio route selection | Use MediaPlayer only for the supported audio queue. | No video, AirPlay route picker, fullscreen or Picture-in-Picture support yet. |
| gauge indicators | Use ProgressView for linear or circular progress. | No gauge styles are shipped. |
| custom title sizing | Use the Screen title and subtitle and the toolbar title placements. | Title sizes are fixed; there is no custom title font. |
| background work and scheduled local notifications | Use an authenticated server scheduler and Web Push for scheduled reminders. | A suspended web app cannot run timers or background work. |
| additional reactive state primitives | Use React state, props and the exported framework providers and hooks. | Arbitrary environment keys are unsupported; use React context. |
| arbitrary transitions and gesture modifiers | Use withAnimation with MatchedGeometryEffect, or the motion already built into navigation, controls and presentations. | No general transition, implicit animation or gesture modifier. Framework springs keep their measured values. |
See application recipes, local data, geometry tokens and messaging scroll for supported compositions.
Entry draft and editor visibility
Render this component within a retained navigation screen. The draft checkpoints independently; the editor starts closed after relaunch.
import { useState } from 'react'
import { Button, Sheet, TextField, useSceneStorage } from '@satinhq/kit'
export function DraftEditor() {
const [draft, setDraft] = useSceneStorage('draft', '')
const [open, setOpen] = useState(false)
return (
<>
<Button onPress={() => setOpen(true)}>Edit draft</Button>
<Sheet title="Draft" isPresented={open} onPresentedChange={setOpen}>
<TextField label="Draft" value={draft} onChange={setDraft} />
</Sheet>
</>
)
}Behavior review inventory
The declarations below have no dedicated reviewed behavior metadata. Type-only declarations are compile-time contracts; integration exports should be used with their module documentation. Adding a stable root value requires a reviewed behavior and limitation before generation can pass.
@satinhq/kit:ActionItem(Type)@satinhq/kit:AdaptiveGridItemOptions(Type)@satinhq/kit:AlertProps(Type)@satinhq/kit:AlertTextFieldProps(Type)@satinhq/kit:AppCapability(Type)@satinhq/kit:AppDefinition(Type)@satinhq/kit:AppDefinitionInput(Type)@satinhq/kit:AppIcon(Type)@satinhq/kit:AppOrientation(Type)@satinhq/kit:AsyncImagePhase(Type)@satinhq/kit:AsyncImageProps(Type)@satinhq/kit:BuiltInButtonStyle(Type)@satinhq/kit:BuiltInLabelStyle(Type)@satinhq/kit:BuiltInToggleStyle(Type)@satinhq/kit:ButtonBorderShape(Type)@satinhq/kit:ButtonProps(Type)@satinhq/kit:ButtonRole(Type)@satinhq/kit:ButtonStyle(Type)@satinhq/kit:ButtonStyleConfiguration(Type)@satinhq/kit:Collection(Type)@satinhq/kit:CollectionDefinition(Type)@satinhq/kit:CollectionIndexes(Type)@satinhq/kit:CollectionSchema(Type)@satinhq/kit:CollectionUpdateMethods(Type)@satinhq/kit:ColorPickerProps(Type)@satinhq/kit:ColorScheme(Type)@satinhq/kit:ConfirmationDialogProps(Type)@satinhq/kit:ContentAlignment(Type)@satinhq/kit:ContentFrame(Type)@satinhq/kit:ContentMarginsProps(Type)@satinhq/kit:ContentPadding(Type)@satinhq/kit:ContentProps(Type)@satinhq/kit:ContentUnavailableViewProps(Type)@satinhq/kit:ContextMenuConfiguration(Type)@satinhq/kit:ControlConfiguration(Type)@satinhq/kit:ControlSize(Type)@satinhq/kit:ControlStyleValues(Type)@satinhq/kit:CoreSymbolName(Type)@satinhq/kit:CornerShape(Type)@satinhq/kit:DatabaseMigration(Type)@satinhq/kit:DatabaseRecord(Type)@satinhq/kit:DatePickerComponent(Type)@satinhq/kit:DatePickerProps(Type)@satinhq/kit:DatePickerRange(Type)@satinhq/kit:DatePickerStyle(Type)@satinhq/kit:DefaultToolbarItemProps(Type)@satinhq/kit:Edge(Type)@satinhq/kit:EdgeInsets(Type)@satinhq/kit:EdgeLengths(Type)@satinhq/kit:EdgeSet(Type)@satinhq/kit:EdgeSetMember(Type)@satinhq/kit:EditMode(Type)@satinhq/kit:ExportDocument(Type)@satinhq/kit:FixedGridItemOptions(Type)@satinhq/kit:FlexibleGridItemOptions(Type)@satinhq/kit:FocusChainField(Type)@satinhq/kit:FontWeight(Type)@satinhq/kit:ForEachProps(Type)@satinhq/kit:FormProps(Type)@satinhq/kit:FullScreenCoverProps(Type)@satinhq/kit:GeometryFrame(Type)@satinhq/kit:GeometryProxy(Type)@satinhq/kit:GeometryReaderProps(Type)@satinhq/kit:GeometrySize(Type)@satinhq/kit:GlassEffectProps(Type)@satinhq/kit:GlassError(Type)@satinhq/kit:GlassErrorCode(Type)@satinhq/kit:GlassShape(Type)@satinhq/kit:GlassTint(Type)@satinhq/kit:GridItemOptions(Type)@satinhq/kit:GridItemValue(Type)@satinhq/kit:HorizontalTextFieldProps(Type)@satinhq/kit:HStackProps(Type)@satinhq/kit:IgnoresSafeAreaProps(Type)@satinhq/kit:ImageAsset(Type)@satinhq/kit:ImageProps(Type)@satinhq/kit:IndexesOfCollection(Type)@satinhq/kit:JustUpdated(Type)@satinhq/kit:KeyboardGeometry(Type)@satinhq/kit:KeyboardMetrics(Type)@satinhq/kit:LabeledContentProps(Type)@satinhq/kit:LabelProps(Type)@satinhq/kit:LabelStyle(Type)@satinhq/kit:LabelStyleConfiguration(Type)@satinhq/kit:LaunchScreenSlot(Type)@satinhq/kit:LayoutModifierProps(Type)@satinhq/kit:LazyHGridProps(Type)@satinhq/kit:LazyHStackProps(Type)@satinhq/kit:LazyVGridProps(Type)@satinhq/kit:LazyVStackProps(Type)@satinhq/kit:LineLimit(Type)@satinhq/kit:LinkProps(Type)@satinhq/kit:ListItemID(Type)@satinhq/kit:ListRowProps(Type)@satinhq/kit:ListSelectionProps(Type)@satinhq/kit:ListStyle(Type)@satinhq/kit:LocalReachabilityState(Type)@satinhq/kit:MatchedTransitionSourceProps(Type)@satinhq/kit:MediaCommandResult(Type)@satinhq/kit:MediaController(Type)@satinhq/kit:MediaQueueEntry(Type)@satinhq/kit:MediaQueueOptions(Type)@satinhq/kit:MediaRepeat(Type)@satinhq/kit:MediaSnapshot(Type)@satinhq/kit:MenuProps(Type)@satinhq/kit:MenuTriggerProps(Type)@satinhq/kit:NamespaceID(Type)@satinhq/kit:Navigation(Type)@satinhq/kit:NavigationArguments(Type)@satinhq/kit:NavigationBackButtonBehavior(Type)@satinhq/kit:NavigationDeclaration(Type)@satinhq/kit:NavigationLinkProps(Type)@satinhq/kit:NavigationSplitViewProps(Type)@satinhq/kit:NavigationStackProps(Type)@satinhq/kit:NotificationAuthorizationStatus(Type)@satinhq/kit:NotificationPermissionExplainerProps(Type)@satinhq/kit:OfflinePresentationProps(Type)@satinhq/kit:OpenURLAction(Type)@satinhq/kit:OpenURLOptions(Type)@satinhq/kit:OpenURLResult(Type)@satinhq/kit:OrientationFallback(Type)@satinhq/kit:OverlayProps(Type)@satinhq/kit:Parameter(Type)@satinhq/kit:ParameterSchema(Type)@satinhq/kit:PickerProps(Type)@satinhq/kit:PresentationDetent(Type)@satinhq/kit:PresentationProps(Type)@satinhq/kit:PressableOwnedHandlers(Type)@satinhq/kit:PressableProps(Type)@satinhq/kit:PressState(Type)@satinhq/kit:ProgressViewProps(Type)@satinhq/kit:ProgressViewStyle(Type)@satinhq/kit:ReachabilityPresentation(Type)@satinhq/kit:ReachabilityProbeConfig(Type)@satinhq/kit:ReachabilityRoutePolicy(Type)@satinhq/kit:ReachabilityState(Type)@satinhq/kit:ReachabilityStateStatus(Type)@satinhq/kit:ReachabilityStatus(Type)@satinhq/kit:ReachabilitySurface(Type)@satinhq/kit:RecordOfCollection(Type)@satinhq/kit:Register(Type)@satinhq/kit:RegisteredNavigation(Type)@satinhq/kit:RegisteredRoutes(Type)@satinhq/kit:RouteDefinition(Type)@satinhq/kit:RouteOptions(Type)@satinhq/kit:RouteParameters(Type)@satinhq/kit:RouteParameterValue(Type)@satinhq/kit:RouteProps(Type)@satinhq/kit:Routes(Type)@satinhq/kit:RowActionsProps(Type)@satinhq/kit:RowIconProps(Type)@satinhq/kit:RowInteractionProps(Type)@satinhq/kit:RowLabelProps(Type)@satinhq/kit:RunAppConfiguration(Type)@satinhq/kit:RunAppOptions(Type)@satinhq/kit:SafeAreaBarProps(Type)@satinhq/kit:SafeAreaInsetEdge(Type)@satinhq/kit:SafeAreaInsetProps(Type)@satinhq/kit:SafeAreaPaddingProps(Type)@satinhq/kit:ScenePhase(Type)@satinhq/kit:ScreenLifecycle(Type)@satinhq/kit:ScreenLifecycleCallbacks(Type)@satinhq/kit:ScreenProps(Type)@satinhq/kit:ScrollAnchor(Type)@satinhq/kit:ScrollAxis(Type)@satinhq/kit:ScrollDismissesKeyboardMode(Type)@satinhq/kit:ScrollEdge(Type)@satinhq/kit:ScrollEdgeEffectStyleSelection(Type)@satinhq/kit:ScrollOffset(Type)@satinhq/kit:ScrollPositionBinding(Type)@satinhq/kit:ScrollPositionOptions(Type)@satinhq/kit:ScrollToTopOptions(Type)@satinhq/kit:ScrollViewHandle(Type)@satinhq/kit:ScrollViewProps(Type)@satinhq/kit:SectionProps(Type)@satinhq/kit:SecureFieldProps(Type)@satinhq/kit:SelectableProps(Type)@satinhq/kit:SemanticColorName(Type)@satinhq/kit:SensoryButtonProps(Type)@satinhq/kit:SensoryFeedback(Type)@satinhq/kit:ServerReachabilityConfig(Type)@satinhq/kit:ServerReachabilityState(Type)@satinhq/kit:SheetProps(Type)@satinhq/kit:SliderProps(Type)@satinhq/kit:SpacerProps(Type)@satinhq/kit:StackDeclaration(Type)@satinhq/kit:StepperProps(Type)@satinhq/kit:StringPropertyKey(Type)@satinhq/kit:SubmitLabel(Type)@satinhq/kit:SwipeAction(Type)@satinhq/kit:SwipeActionItem(Type)@satinhq/kit:SwipeActions(Type)@satinhq/kit:SwipeActionsConfiguration(Type)@satinhq/kit:SymbolGlyph(Type)@satinhq/kit:SymbolImageProps(Type)@satinhq/kit:SymbolName(Type)@satinhq/kit:SymbolRenderingMode(Type)@satinhq/kit:SymbolScale(Type)@satinhq/kit:SymbolSource(Type)@satinhq/kit:SymbolWeight(Type)@satinhq/kit:SystemColorName(Type)@satinhq/kit:TabDeclaration(Type)@satinhq/kit:TabId(Type)@satinhq/kit:TabProps(Type)@satinhq/kit:TabSectionProps(Type)@satinhq/kit:TabViewProps(Type)@satinhq/kit:TaskAction(Type)@satinhq/kit:TaskCommit(Type)@satinhq/kit:TaskOptions(Type)@satinhq/kit:TaskRunner(Type)@satinhq/kit:TextEditorProps(Type)@satinhq/kit:TextFieldKind(Type)@satinhq/kit:TextFieldProps(Type)@satinhq/kit:TextFieldStyle(Type)@satinhq/kit:TextProps(Type)@satinhq/kit:TextStyle(Type)@satinhq/kit:TitleDisplayMode(Type)@satinhq/kit:ToggleProps(Type)@satinhq/kit:ToggleStyle(Type)@satinhq/kit:ToggleStyleConfiguration(Type)@satinhq/kit:ToolbarItemProps(Type)@satinhq/kit:ToolbarSpacerProps(Type)@satinhq/kit:TransactionCollection(Type)@satinhq/kit:TransactionCollections(Type)@satinhq/kit:TransitionPhase(Type)@satinhq/kit:UpdateActivation(Type)@satinhq/kit:UserInterfaceSizeClass(Type)@satinhq/kit:VerticalScrollGeometry(Type)@satinhq/kit:VerticalTextFieldProps(Type)@satinhq/kit:ViewportFitPolicy(Type)@satinhq/kit:ViewThatFitsAxis(Type)@satinhq/kit:ViewThatFitsProps(Type)@satinhq/kit:Visibility(Type)@satinhq/kit:VStackProps(Type)@satinhq/kit:WebAuthentication(Type)@satinhq/kit:WebAuthenticationCallbackResult(Type)@satinhq/kit:WebAuthenticationConfiguration(Type)@satinhq/kit:WebAuthenticationExchange(Type)@satinhq/kit:WebAuthenticationRequest(Type)@satinhq/kit:WebAuthenticationStartResult(Type)@satinhq/kit:WebAuthenticationState(Type)@satinhq/kit:WebFrameActionResult(Type)@satinhq/kit:WebFrameController(Type)@satinhq/kit:WebFrameState(Type)@satinhq/kit:WebViewProps(Type)@satinhq/kit:WriteFailure(Type)@satinhq/kit:ZoomableProps(Type)@satinhq/kit:ZoomTransitionOptions(Type)@satinhq/kit:ZStackProps(Type)@satinhq/kit/diagnostics:AppearanceEvent(Type)@satinhq/kit/diagnostics:InstallationDiagnostics(Value)@satinhq/kit/diagnostics:InstallationDiagnosticsProps(Type)@satinhq/kit/diagnostics:InstallationFailure(Type)@satinhq/kit/diagnostics:readAppearanceDiagnostics(Value)@satinhq/kit/diagnostics:readInstallationFailure(Value)@satinhq/kit/install:copyInstallLink(Value)@satinhq/kit/install:CopyLinkResult(Type)@satinhq/kit/install:InstallApp(Type)@satinhq/kit/install:InstallBrowser(Type)@satinhq/kit/install:InstallContext(Type)@satinhq/kit/install:InstallDevice(Type)@satinhq/kit/install:InstallSteps(Value)@satinhq/kit/install:InstallTip(Value)@satinhq/kit/install:readInstallContext(Value)@satinhq/kit/install:useInstallContext(Value)@satinhq/kit/internal/vite:AppFixture(Type)@satinhq/kit/internal/vite:defineApp(Value)@satinhq/kit/internal/vite:defineAppFixture(Value)@satinhq/kit/internal/vite:satinApp(Value)@satinhq/kit/internal/vite:satinAppFixtures(Value)@satinhq/kit/internal/vite:SatinAppOptions(Type)@satinhq/kit/internal/vite:satinAppShell(Value)@satinhq/kit/internal/vite:SatinAppShellPluginOptions(Type)@satinhq/kit/server:serveStaticFile(Value)@satinhq/kit/testing:assertNavigation(Value)@satinhq/kit/testing:sendTestNotification(Value)@satinhq/kit/unstable:Animation(Value)@satinhq/kit/unstable:concentricRadius(Value)@satinhq/kit/unstable:DetailList(Value)@satinhq/kit/unstable:DragGesture(Value)@satinhq/kit/unstable:DragGestureOptions(Type)@satinhq/kit/unstable:DragGestureValue(Type)@satinhq/kit/unstable:Gesture(Type)@satinhq/kit/unstable:GesturePoint(Type)@satinhq/kit/unstable:GestureState(Type)@satinhq/kit/unstable:GestureView(Value)@satinhq/kit/unstable:GestureViewProps(Type)@satinhq/kit/unstable:LongPressGesture(Value)@satinhq/kit/unstable:LongPressGestureOptions(Type)@satinhq/kit/unstable:MagnifyGesture(Value)@satinhq/kit/unstable:MagnifyGestureOptions(Type)@satinhq/kit/unstable:MagnifyGestureValue(Type)@satinhq/kit/unstable:MatchedGeometryEffect(Value)@satinhq/kit/unstable:MatchedGeometryEffectProps(Type)@satinhq/kit/unstable:Sidebar(Value)@satinhq/kit/unstable:SidebarEntry(Type)@satinhq/kit/unstable:SidebarProps(Type)@satinhq/kit/unstable:SidebarSymbol(Value)@satinhq/kit/unstable:SpringOptions(Type)@satinhq/kit/unstable:TapGesture(Value)@satinhq/kit/unstable:TapGestureOptions(Type)@satinhq/kit/unstable:Transition(Value)@satinhq/kit/unstable:TransitionEdge(Type)@satinhq/kit/unstable:TransitionView(Value)@satinhq/kit/unstable:TransitionViewProps(Type)@satinhq/kit/unstable:useDisplayCornerRadius(Value)@satinhq/kit/unstable:useGestureState(Value)@satinhq/kit/unstable:useSplitSelection(Value)@satinhq/kit/unstable:withAnimation(Value)@satinhq/kit/vite:defineApp(Value)@satinhq/kit/vite:satinApp(Value)@satinhq/kit/vite:SatinAppOptions(Type)
Declaration graph fingerprints
@satinhq/kit:d5c16db4336f11629ef6dac166c27e17b2dde108eaeb7fe86f1b383d0ae76c4c@satinhq/kit/vite:aae491af836b19471a7306a4f2fec9e5eb8cd68184ce26ec6aeea033e593a15e@satinhq/kit/install:e080a0874c9490077cf9cbb117e03d5d58252226e9424d84101be7ee4454a422@satinhq/kit/unstable:59f001f3090a2b56ad18df3b0ef8b7d4546c5c7ccbbfc4f793da98d1ad27bf34@satinhq/kit/server:7d2b996d9541bd82fd0936e0482554f3182ffe004be56928e590ad4c4c8c79bd@satinhq/kit/testing:04a86ddf0741e53228777bd599cbd00ff503b9e216a1f86a9791fdbee1bd5e12@satinhq/kit/diagnostics:05327eaa9f5a55ab73834d5abaeaeffd98cfc6294fa5af5d3ba03a8609463eac@satinhq/kit/internal/vite:127e9845619cf9939e4200986696109e5412492394afa432c1ae9c9cde98121b
Framework source fingerprint
SHA-256 of sorted TS/TSX/CSS source paths and bytes, excluding tests: bfe908b1d153b9ef38d049a46fd3934d97e5b9ffe942f4d75c406e5579fc97af