{"id":13496709,"url":"https://github.com/skiptools/skip-ui","last_synced_at":"2026-02-14T17:07:30.953Z","repository":{"id":183485665,"uuid":"669952875","full_name":"skiptools/skip-ui","owner":"skiptools","description":"SwiftUI for Android","archived":false,"fork":false,"pushed_at":"2026-02-06T19:11:12.000Z","size":4466,"stargazers_count":285,"open_issues_count":80,"forks_count":40,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-02-07T05:23:03.155Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://skip.dev/docs/modules/skip-ui/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skiptools.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.LGPL","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://skip.dev/sponsor"]}},"created_at":"2023-07-24T00:45:39.000Z","updated_at":"2026-02-06T19:11:18.000Z","dependencies_parsed_at":"2023-08-13T03:21:15.613Z","dependency_job_id":"8225463a-3772-4329-98a4-5024d3c3621f","html_url":"https://github.com/skiptools/skip-ui","commit_stats":null,"previous_names":["skiptools/skip-ui","skiptools/skip-uix"],"tags_count":358,"template":false,"template_full_name":null,"purl":"pkg:github/skiptools/skip-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skiptools","download_url":"https://codeload.github.com/skiptools/skip-ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29327085,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T03:52:29.695Z","status":"ssl_error","status_checked_at":"2026-02-11T03:52:23.094Z","response_time":97,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T19:01:57.575Z","updated_at":"2026-02-11T04:10:33.639Z","avatar_url":"https://github.com/skiptools.png","language":"Swift","funding_links":["https://skip.dev/sponsor"],"categories":["Swift"],"sub_categories":[],"readme":"# SkipUI\n\nSwiftUI support for [Skip](https://skip.dev) apps.\n\n## Setup\n\nTo include this framework in your project, add the following\ndependency to your `Package.swift` file:\n\n```swift\nlet package = Package(\n    name: \"my-package\",\n    products: [\n        .library(name: \"MyProduct\", targets: [\"MyTarget\"]),\n    ],\n    dependencies: [\n        .package(url: \"https://source.skip.dev/skip-ui.git\", from: \"1.0.0\"),\n    ],\n    targets: [\n        .target(name: \"MyTarget\", dependencies: [\n            .product(name: \"SkipUI\", package: \"skip-ui\")\n        ])\n    ]\n)\n```\n\n## About SkipUI\n\nSkipUI vends the `skip.ui` Kotlin package. It is a reimplementation of SwiftUI for Kotlin on Android using Jetpack Compose. Its goal is to mirror as much of SwiftUI as possible, allowing Skip developers to use SwiftUI with confidence.\n\n![SkipUI Diagram](https://assets.skip.dev/diagrams/skip-diagrams-ui.svg)\n{: .diagram-vector }\n\nSkipUI is used directly by [Skip Lite](https://skip.dev/docs/status/#skip_fuse) transpiled Swift, and it is used indirectly by [Skip Fuse](https://skip.dev/docs/status/#skip_fuse) compiled Swift through the SkipFuseUI native framework.\n\n## Dependencies\n\nSkipUI depends on the [skip](https://source.skip.dev/skip) transpiler plugin. The transpiler must transpile SkipUI's own source code, and SkipUI relies on the transpiler's transformation of SwiftUI code. See [Implementation Strategy](#implementation-strategy) for details. SkipUI also depends on the [SkipFoundation](https://github.com/skiptools/skip-foundation) and [SkipModel](https://github.com/skiptools/skip-model) packages.\n\nSkipUI is part of the core *Core Skip Frameworks* and is not intended to be imported directly.\nThe module is transparently adopted by importing SwiftUI in compiled Swift, and through the translation of `import SwiftUI` into `import skip.ui.*` for transpiled code.\n\n### Android Libraries\n\n- SkipUI adds an Android dependency on [Coil](https://coil-kt.github.io/coil/) to implement `AsyncImage`.\n- SkipUI includes source code from the [ComposeReorderable](https://github.com/aclassen/ComposeReorderable) project to implement drag-to-reorder in `Lists`.\n\n## Status\n\nSkipUI has robust support for the building blocks of SwiftUI, including its state flow and declarative syntax. SkipUI also implements a large percentage of SwiftUI's components and modifiers. It is possible to write an Android app entirely in SwiftUI utilizing SkipUI's current component set.\n\nSome of SwiftUI's vast surface area, however, is not yet implemented. See [Supported SwiftUI](#supported-swiftui) for a full list of supported API.\n\nWhen you want to use a SwiftUI construct that has not been implemented, you have options. You can try to find a workaround using only supported components, [embed Compose code directly](#composeview), or [add support to SkipUI](#implementation-strategy). If you choose to enhance SkipUI itself, please consider [contributing](#contributing) your code back for inclusion in the official release.\n\n## ComposeView\n\n`ComposeView` is an Android-only SwiftUI view that you can use to embed Compose directly into your SwiftUI view tree. Its use differs for Skip Fuse compiled code and Skip Lite transpiled code.\n\n### Skip Fuse\n\nIn the following SkipFuseUI example, we use a SwiftUI `Text` to write \"Hello from SwiftUI\", followed by calling the `androidx.compose.material3.Text()` Compose function to write \"Hello from Compose\" below it. Notice that integrating Compose functions in Skip Fuse has two parts:\n\n1. Define a `ContentComposer` in a transpiled `#if SKIP` block.\n1. Use a `ComposeView` to render the `ContentComposer` in the SwiftUI view tree.\n\n```swift\nimport SwiftUI\n\n...\n\nVStack {\n    Text(\"Hello from SwiftUI\")\n    #if os(Android)\n    ComposeView { MessageComposer(message: \"Hello from Compose\") }\n    #endif\n}\n\n#if SKIP\nstruct MessageComposer : ContentComposer {\n    let message: String\n \n    @Composable func Compose(context: ComposeContext) {\n        androidx.compose.material3.Text(message)\n    }\n}\n#endif\n```\n\nThe `ContentComposer` protocol consists of a single function:\n\n```swift\npublic protocol ContentComposer {\n    @Composable func Compose(context: ComposeContext)\n}\n```\n\n#### Passing State\n\nRemember that any data you pass to your `ContentComposer` must be bridged from your compiled Swift to your `#if SKIP` block's transpiled Kotlin. Simple data types like the `String` used in the example above bridge automatically. \n\nSkip also allows you to pass many built-in SwiftUI types. These types will bridge to their `SkipUI` implementations, which have been enhanced to allow you to use them in Compose. Examples include:\n\n- `Color`: Pass any `Color` value to your `ContentComposer`, then use the `SkipUI.Color.asComposeColor()` function within your Compose code to get an `androidx.compose.ui.graphics.Color` value.\n- `Font`: Similarly, pass any `Font` value and use the `SkipUI.Font.asComposeTextStyle()` function to get an `androidx.compose.ui.text.TextStyle`.\n- `Image`: You can pass a native `Image` to your `ContentComposer` and receive the equivalent `SkipUI.Image`. Images, however, do not have a one-to-one equivalent Compose value type. You can still call `Image.Compose(context:)` to render it in your Compose code.\n- `Text`: Passing a `Text` is a useful way to encapsulate a localizable string value. Call `SkipUI.Text.localizedTextString()` within your Compose code to get the localized value.\n\nHere is sample code using some of these techniques:\n\n```swift\n\n...\n\n#if os(Android)\nComposeView {\n    MessageComposer(message: Text(\"Welcome\"), textColor: .red)\n}\n#endif\n\n...\n\n#if SKIP\nstruct MessageComposer : ContentComposer {\n    let message: Text\n    let textColor: Color\n\n    @Composable override func Compose(context: ComposeContext) {\n        androidx.compose.material3.Text(message.localizedTextString(), color: textColor.asComposeColor())\n    }\n}\n#endif\n\n```\n\nSee the [bridging](https://skip.dev/docs/modes/#bridging) documentation for information on bridging your own data types.\n\n### Skip Lite\n\nIn the following transpiled example, we use a SwiftUI `Text` to write \"Hello from SwiftUI\", followed by calling the `androidx.compose.material3.Text()` Compose function to write \"Hello from Compose\" below it:\n\n```swift\nimport SwiftUI\n\n...\n\nVStack {\n    Text(\"Hello from SwiftUI\")\n    #if SKIP\n    ComposeView { _ in\n        androidx.compose.material3.Text(\"Hello from Compose\")\n    }\n    #endif\n}\n```\n\nUnlike Skip Fuse, Skip Lite transpiled Swift can invoke Compose functions directly within the `ComposeView` body.\n\n### Compose(context:)\n\nSkipUI enhances all SwiftUI views with a `Compose(context:)` method, allowing you to use SwiftUI views from within Compose. The following example again uses a SwiftUI `Text` to write \"Hello from SwiftUI\", but this time from within a `ComposeView`.\n\nSkip Fuse:\n\n```swift\n#if os(Android)\nComposeView { ColumnComposer() }\n#endif\n\n...\n\n#if SKIP\nstruct ColumnComposer : ContentComposer {\n    @Composable func Compose(context: ComposeContext) {\n        androidx.compose.foundation.layout.Column(modifier: context.modifier) {\n            Text(\"Hello from SwiftUI\").Compose(context: context.content())\n            androidx.compose.material3.Text(\"Hello from Compose\")\n        }\n    }\n}\n#endif\n```\n\nSkip Lite:\n\n```swift\n#if SKIP\nComposeView { context in \n    androidx.compose.foundation.layout.Column(modifier: context.modifier) {\n        Text(\"Hello from SwiftUI\").Compose(context: context.content())\n        androidx.compose.material3.Text(\"Hello from Compose\")\n    }\n}\n#endif\n```\n\nWith `ComposeView` and the `Compose(context:)` function, you can move fluidly between SwiftUI and Compose code. These techniques work not only with standard SwiftUI and Compose components, but with your own custom SwiftUI views and Compose functions as well.\n\n### Additional Considerations\n\nThere are additional considerations when integrating SwiftUI into a Compose application that is **not** managed by Skip. SwiftUI relies on its own mechanisms to save and restore `Activity` UI state, such as `@AppStorage` and navigation path bindings. It is not compatible with Android's `Activity` UI state restoration. Use a pattern like the following to exclude SwiftUI from `Activity` state restoration when integrating SwiftUI views:\n\n```kotlin\nval stateHolder = rememberSaveableStateHolder()\nstateHolder.SaveableStateProvider(\"myKey\") {\n    MySwiftUIRootView().Compose()\n    SideEffect { stateHolder.removeState(\"myKey\") }\n}\n```\n\nThis pattern allows SkipUI to take advantage of Compose's UI state mechanisms internally while excluding it from `Activity` state restoration.\n\n## composeModifier\n\nIn addition to `ComposeView` above, SkipUI offers the `composeModifier` SwiftUI modifier. This modifier allows you to apply any Compose modifiers to the underlying Compose view.\n\n### Skip Fuse\n\nUsing `composeModifier` from Skip Fuse is much like using `ComposeView`:\n\n1. Define a `ContentModifier` in a transpiled `#if SKIP` block.\n1. Use `.composeModifier` to apply the `ContentModifier ` to the target SwiftUI view.\n\nWithin your `ContentModifier`, apply any SkipUI modifiers to the given target view. This includes the [Material](#material) modifiers we describe below, or the same-named transpiled `composeModifier`, which takes a block that accepts a single `androidx.compose.ui.Modifier` parameter and returns a `Modifier` as well. The following example applies Compose's `imePadding` modifier our SwiftUI on Android:\n\n```swift\nimport SwiftUI\n\n...\n\nVStack {\n    TextField(\"Enter username:\", text: $username)\n        #if os(Android)\n        .composeModifier { IMEPaddingModifier() }\n        #endif\n}\n\n#if SKIP\nimport androidx.compose.foundation.layout.imePadding\n\nstruct IMEPaddingModifier : ContentModifier {\n    func modify(view: any View) -\u003e any View {\n        view.composeModifier { $0.imePadding() } \n    }\n}\n#endif\n```\n\nThe `ContentModfiier` protocol consists of a single function:\n\n```swift\npublic protocol ContentModifier {\n    func modify(view: any View) -\u003e any View\n}\n```\n\n### Skip Lite\n\nIf you are writing your SwiftUI using Skip Lite, you don't need to define a `ContentModfifier`. You can apply [Material](#material) modifiers or `.composeModifier` directly:\n\n```swift\n#if SKIP\nimport androidx.compose.foundation.layout.imePadding\n#endif\n\n...\n\nTextField(\"Enter username:\", text: $username)\n    #if SKIP\n    .composeModifier { $0.imePadding() }\n    #endif\n```\n\nYou can also apply [scoped modifiers](https://developer.android.com/develop/ui/compose/modifiers#scope-safety). e.g. in a `LazyHStack` you can use modifiers scoped to [`LazyItemScope`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyItemScope), like `animateItem()`.\n\n```swift\n#if SKIP\nimport androidx.compose.foundation.lazy.LazyItemScope\n#endif\n\n...\n\nLazyHStack {\n    ForEach(0..\u003ccount, id: \\.self) { i in\n        Color.red\n            .frame(width: 20, height: 20)\n            .id(i + 1)\n            #if SKIP\n            .composeModifier(scope: LazyItemScope.self) {\n                $0.animateItem()\n            }\n            #endif\n    }\n}\n```\n\n## Material\n\nUnder the hood, SkipUI uses Android's Material 3 colors and components. While we expect you to use SwiftUI's built-in color schemes (`.preferredColorScheme`) and modifiers (`.background`, `.foregroundStyle`, `.tint`, and so on) for most UI styling, there are some Android customizations that have no SwiftUI equivalent. Skip therefore adds additional, Android-only API for manipulating Material colors and components.\n\n### Material Colors\n\nBy default, Skip uses Material 3's dynamic colors on devices that support them, and falls back to Material 3's standard colors otherwise. You can customize these colors in Compose code using the following function: \n\n```kotlin\nMaterial3ColorScheme(scheme: (@Composable (ColorScheme, Boolean) -\u003e ColorScheme)?, content: @Composable () -\u003e Unit)\n```\n\nThe `scheme` argument takes a closure with two arguments: Skip's default `androidx.compose.material3.ColorScheme`, and whether dark mode is being requested. Your closure returns the `androidx.compose.material3.ColorScheme` to use for the supplied content.\n\nFor example, to customize the surface colors for your entire app, you could edit `Main.kt` as follows:\n\n```kotlin\n@Composable\ninternal fun PresentationRootView(context: ComposeContext) {\n    Material3ColorScheme({ colors, isDark -\u003e\n        colors.copy(surface = if (isDark) Color.purple.asComposeColor() else Color.yellow.asComposeColor())\n    }, content = {\n        // ... Original content of this function ...\n    })\n}\n```\n\nSkip also provides the SwiftUI `.material3ColorScheme(_:)` modifier to customize a SwiftUI view hierarchy. The modifier takes the same closure as the `Material3ColorScheme` Kotlin function. Apply this modifier using the `.composeModifier` techniques discussed in the previous section. For example:\n\nSkip Fuse:\n\n```swift\nMyView()\n    #if os(Android)\n    .composeModifier { ColorSchemeModifier() }\n    #endif\n\n...\n\n#if SKIP\nstruct ColorSchemeModifier : ContentModifier {\n    func modify(view: any View) -\u003e any View {\n        view.material3ColorScheme { colors, isDark in\n            colors.copy(surface: isDark ? Color.purple.asComposeColor() : Color.yellow.asComposeColor())\n        } \n    }  \n}\n#endif\n```\n\nSkip Lite: \n\n```swift\nMyView()\n    #if SKIP\n    .material3ColorScheme { colors, isDark in\n        colors.copy(surface: isDark ? Color.purple.asComposeColor() : Color.yellow.asComposeColor())\n    }\n    #endif\n```\n\nSkip's built-in components use the following Material 3 colors, if you'd like to customize them:\n\n- `surface`\n- `primary`\n- `onBackground`\n- `outline`\n- `outlineVariant`\n\n### Material Components\n\nIn addition to the `.material3ColorScheme` modifier detailed above, Skip includes many other `.material3` modifiers for its underlying Material 3 components. This family of modifiers share a common API pattern:\n\n- The modifiers take a closure argument. This closure receives a `Material3\u003cComponent\u003eOptions` struct configured with Skip's defaults, and it returns a struct with any desired modifications.\n- Every `Material3\u003cComponent\u003eOptions` struct implements a conventional Kotlin `copy` method. This allows you to copy and modify the struct in a single call.\n- The modifiers place your closure into the SwiftUI `Environment`. This means that you can apply the modifier on a root view, and it will affect all subviews. While you may be used to placing navigation and tab bar modifiers on the views *within* the `NavigationStack` or `TabView`, the `.material3` family of modifiers always go *on or outside* the views you want to affect.\n- Because they are designed to reach beneath Skip's SwiftUI covers, the modifiers use Compose terminology and types. In fact the properties of the supplied `Material3\u003cComponent\u003eOptions` structs typically exactly match the corresponding `androidx.compose.material3` component function parameters.\n\n\u003e [!NOTE]\n\u003e You can find details on Material 3 component API in [this Android API documentation](https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary).\n\nHere is an example of changing the selected indicator color on your Android tab bar, which is implemented by the Material 3 `NavigationBar` component:\n\nSkip Fuse:\n\n```swift\nTabView {\n    ...\n}\n#if os(Android)\n.composeModifier { NavigationBarModifier() }\n#endif\n\n...\n\n#if SKIP\nstruct NavigationBarModifier : ContentModifier {\n    func modify(view: any View) -\u003e any View {\n        view.material3NavigationBar { options in \n            let updatedColors = options.itemColors.copy(selectedIndicatorColor: Color.green.asComposeColor())\n            return options.copy(itemColors: updatedColors) \n        }\n    } \n} \n#endif\n```\n\nSkip Lite:\n\n```swift\nTabView {\n    ...\n}\n#if SKIP\n.material3NavigationBar { options in \n    let updatedColors = options.itemColors.copy(selectedIndicatorColor: Color.green.asComposeColor())\n    return options.copy(itemColors: updatedColors) \n}\n#endif\n```\n\nSkipUI currently includes the following Material modifiers:\n\n```swift\nextension View {\n    public func material3BottomAppBar(_ options: @Composable (Material3BottomAppBarOptions) -\u003e Material3BottomAppBarOptions) -\u003e some View\n}\n\npublic struct Material3BottomAppBarOptions {\n    public var modifier: androidx.compose.ui.Modifier\n    public var containerColor: androidx.compose.ui.graphics.Color\n    public var contentColor: androidx.compose.ui.graphics.Color\n    public var tonalElevation: androidx.compose.ui.unit.Dp\n    public var contentPadding: androidx.compose.foundation.layout.PaddingValues\n}\n\nextension View {\n    public func material3Button(_ options: @Composable (Material3ButtonOptions) -\u003e Material3ButtonOptions) -\u003e some View\n}\n\npublic struct Material3ButtonOptions {\n    public var onClick: () -\u003e Void\n    public var modifier: androidx.compose.ui.Modifier\n    public var enabled: Bool\n    public var shape: androidx.compose.ui.graphics.Shape\n    public var colors: androidx.compose.material3.ButtonColors\n    public var elevation: androidx.compose.material3.ButtonElevation?\n    public var border: androidx.compose.foundation.BorderStroke?\n    public var contentPadding: androidx.compose.foundation.layout.PaddingValues\n    public var interactionSource: androidx.compose.foundation.interaction.MutableInteractionSource?\n}\n\nextension View {\n    public func material3NavigationBar(_ options: @Composable (Material3NavigationBarOptions) -\u003e Material3NavigationBarOptions) -\u003e some View\n}\n\npublic struct Material3NavigationBarOptions {\n    public var modifier: androidx.compose.ui.Modifier\n    public var containerColor: androidx.compose.ui.graphics.Color\n    public var contentColor: androidx.compose.ui.graphics.Color\n    public var tonalElevation: androidx.compose.ui.unit.Dp\n    public var onItemClick: (Int) -\u003e Void\n    public var itemIcon: @Composable (Int) -\u003e Void\n    public var itemModifier: @Composable (Int) -\u003e androidx.compose.ui.Modifier\n    public var itemEnabled: (Int) -\u003e Boolean\n    public var itemLabel: (@Composable (Int) -\u003e Void)?\n    public var alwaysShowItemLabels: Bool\n    public var itemColors: androidx.compose.material3.NavigationBarItemColors\n    public var itemInteractionSource: androidx.compose.foundation.interaction.MutableInteractionSource?\n}\n\nextension View {\n    public func material3SegmentedButton(_ options: @Composable (Material3SegmentedButtonOptions) -\u003e Material3SegmentedButtonOptions) -\u003e some View\n}\n\npublic struct Material3SegmentedButtonOptions {\n    public let index: Int\n    public let count: Int\n    public var selected: Boolean\n    public var onClick: () -\u003e Void\n    public var modifier: androidx.compose.ui.Modifier\n    public var enabled: Bool\n    public var shape: androidx.compose.ui.graphics.Shape\n    public var colors: androidx.compose.material3.SegmentedButtonColors\n    public var border: androidx.compose.foundation.BorderStroke?\n    public var contentPadding: androidx.compose.foundation.layout.PaddingValues\n    public var interactionSource: androidx.compose.foundation.interaction.MutableInteractionSource?\n    public var icon: @Composable () -\u003e Void\n}\n\nextension View {\n    public func material3Text(_ options: @Composable (Material3TextOptions) -\u003e Material3TextOptions) -\u003e some View\n}\n\npublic struct Material3TextOptions {\n    public var text: String?\n    public var annotatedText: AnnotatedString?\n    public var modifier: androidx.compose.ui.Modifier\n    public var color: androidx.compose.ui.graphics.Color\n    public var fontSize: androidx.compose.ui.unit.TextUnit\n    public var fontStyle: androidx.compose.ui.text.font.FontStyle?\n    public var fontWeight: androidx.compose.ui.text.font.FontWeight?\n    public var fontFamily: androidx.compose.ui.text.font.FontFamily?\n    public var letterSpacing: androidx.compose.ui.unit.TextUnit\n    public var textDecoration: androidx.compose.ui.text.style.TextDecoration?\n    public var textAlign: androidx.compose.ui.text.style.TextAlign?\n    public var lineHeight: androidx.compose.ui.unit.TextUnit\n    public var overflow: androidx.compose.ui.text.style.TextOverflow\n    public var softWrap: Bool\n    public var maxLines: Int\n    public var minLines: Int\n    public var onTextLayout: ((androidx.compose.ui.text.TextLayoutResult) -\u003e Void)?\n    public var style: androidx.compose.ui.text.style.TextStyle\n}\n\nextension View {\n    public func material3TextField(_ options: @Composable (Material3TextFieldOptions) -\u003e Material3TextFieldOptions) -\u003e some View\n}\n\npublic struct Material3TextFieldOptions {\n    public var value: androidx.compose.ui.text.input.TextFieldValue\n    public var onValueChange: (androidx.compose.ui.text.input.TextFieldValue) -\u003e Void\n    public var modifier: androidx.compose.ui.Modifier\n    public var enabled: Bool\n    public var readOnly: Bool\n    public var textStyle: androidx.compose.ui.text.TextStyle\n    public var label: (@Composable () -\u003e Void)?\n    public var placeholder: (@Composable () -\u003e Void)?\n    public var leadingIcon: (@Composable () -\u003e Void)?\n    public var trailingIcon: (@Composable () -\u003e Void)?\n    public var prefix: (@Composable () -\u003e Void)?\n    public var suffix: (@Composable () -\u003e Void)? \n    public var supportingText: (@Composable () -\u003e Void)?\n    public var isError: Bool\n    public var visualTransformation: androidx.compose.ui.text.input.VisualTransformation\n    public var keyboardOptions: androidx.compose.foundation.text.KeyboardOptions\n    public var keyboardActions: androidx.compose.foundation.text.KeyboardActions\n    public var singleLine: Bool\n    public var maxLines: Int\n    public var minLines: Int\n    public var interactionSource: androidx.compose.foundation.interaction.MutableInteractionSource?\n    public var shape: androidx.compose.ui.graphics.Shape\n    public var colors: androidx.compose.material3.TextFieldColors\n}\n\nextension View {\n    public func material3TopAppBar(_ options: @Composable (Material3TopAppBarOptions) -\u003e Material3TopAppBarOptions) -\u003e some View\n}\n\npublic struct Material3TopAppBarOptions {\n    public var title: @Composable () -\u003e Void\n    public var modifier: androidx.compose.ui.Modifier\n    public var navigationIcon: @Composable () -\u003e Void\n    public var colors: androidx.compose.material3.TopAppBarColors\n    public var scrollBehavior: androidx.compose.material3.TopAppBarScrollBehavior?\n    public var preferCenterAlignedStyle: Bool\n    public var preferLargeStyle: Bool\n}\n```\n\nNote that `.material3TopAppBar` involves API that Compose deems experimental, so you must add the following to any Skip Fuse `ContentModfifier` or Skip Lite `View` where you use it:\n\n```swift\n// SKIP INSERT: @OptIn(androidx.compose.material3.ExperimentalMaterial3Api::class)\nstruct MyContentModifier : ContentModifier {\n    ...\n}\n```\n\n### Material Effects\n\nCompose applies an automatic \"ripple\" effect to components on tap. You can customize the color and alpha of this effect with the `material3Ripple` modifier. To disable the effect altogether, return `nil` from your modifier closure.\n\n```swift\nextension View {\n    public func material3Ripple(_ options: @Composable (Material3RippleOptions?) -\u003e Material3RippleOptions?) -\u003e some View\n}\n\npublic struct Material3RippleOptions {\n    public var color: androidx.compose.ui.graphics.Color = androidx.compose.ui.graphics.Color.Unspecified\n    public var rippleAlpha: androidx.compose.material.ripple.RippleAlpha? = nil\n}\n```\n\n## Supported SwiftUI\n\nThe following table summarizes SkipUI's SwiftUI support on Android. Anything not listed here is likely not supported. Note that in your iOS-only code - i.e. code within `#if !os(Android)` blocks - you can use any SwiftUI you want.\n\nSupport levels:\n\n  - ✅ – Full\n  - 🟢 – High\n  - 🟡 – Medium \n  - 🟠 – Low\n\n\u003ctable\u003e\n  \u003cthead\u003e\u003cth\u003eSupport\u003c/th\u003e\u003cth\u003eAPI\u003c/th\u003e\u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n            \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e@AppStorage\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/storage/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eOptional values are not supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e@Bindable\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e@Binding\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/state/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n         \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e@Environment\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/modifier/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#environment-keys\"\u003eEnvironment Keys\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e@EnvironmentObject\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/observable/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n         \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e@FocusState\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003eFocusState.Binding\u003c/code\u003e is not supported, though you can manually create a \u003ccode\u003eBinding(get: { myFocusState.wrappedValue }, set: { myFocusState.wrappedValue = $0 })\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n         \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e@GestureState\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eOnly supported in SkipFuseUI compiled Swift\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e@ObservedObject\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/observable/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e@State\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/state/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e@StateObject\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/state/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eAsyncImage\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/image/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eButton\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/button/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eCapsule\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/shape/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eCircle\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/shape/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eColor\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/color/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(red: Double, green: Double, blue: Double, opacity: Double = 1.0)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(white: Double, opacity: Double = 1.0)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(hue: Double, saturation: Double, brightness: Double, opacity: Double = 1.0)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ color: UIColor)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(uiColor: UIColor)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ name: String, bundle: Bundle? = nil)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let accentColor: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let primary: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let secondary: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let clear: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let white: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let black: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let gray: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let red: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let orange: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let yellow: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let green: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let mint: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let teal: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let cyan: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let blue: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let indigo: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let purple: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let pink: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let brown: Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc opacity(_ opacity: Double) -\u003e Color\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar gradient: AnyGradient\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eSee \u003ca href=\"#colors\"\u003eColors\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eDatePicker\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/datepicker/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(selection: Binding\u0026lt;Date\u003e, displayedComponents: DatePickerComponents = [.hourAndMinute, .date], @ViewBuilder label: () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, selection: Binding\u0026lt;Date\u003e, displayedComponents: DatePickerComponents = [.hourAndMinute, .date])\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eDate range constraints (\u003ccode\u003ein: ClosedRange\u0026lt;Date\u003e\u003c/code\u003e) are supported via Skip Fuse bridging\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eDisclosureGroup\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/disclosuregroup/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(isExpanded: Binding\u0026lt;Bool\u0026gt;, @ViewBuilder content: @escaping () -\u003e any View, @ViewBuilder label: () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ titleKey: LocalizedStringKey, isExpanded: Binding\u0026lt;Bool\u0026gt;, @ViewBuilder content: @escaping () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                    \u003cli\u003e\u003ccode\u003einit(_ titleResource: LocalizedStringResource, isExpanded: Binding\u0026lt;Bool\u0026gt;, @ViewBuilder content: @escaping () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ label: String, isExpanded: Binding\u0026lt;Bool\u0026gt;, @ViewBuilder content: @escaping () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eDoes not animate when used as a \u003ccode\u003eList\u003c/code\u003e or \u003ccode\u003eForm\u003c/code\u003e item\u003c/li\u003e\n                  \u003cli\u003eAlways animates when **not** used as a \u003ccode\u003eList\u003c/code\u003e or \u003ccode\u003eForm\u003c/code\u003e item\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eDivider\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/divider/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eDragGesture\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gesture/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#gestures\"\u003eGestures\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eEllipticalGradient\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gradient/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eFills as a circular gradient instead of elliptical unless the gradient is used as its own \u003ccode\u003eView\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eEmptyModifier\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eEmptyView\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eFont\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let largeTitle: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let title: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let title2: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let title3: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let headline: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let subheadline: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let body: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let callout: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let footnote: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let caption: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic let caption2: Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic func system(_ style: Font.TextStyle, design: Font.Design? = nil, weight: Font.Weight? = nil) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic func system(size: CGFloat, weight: Font.Weight? = nil, design: Font.Design? = nil) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic func custom(_ name: String, size: CGFloat) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic func custom(_ name: String, size: CGFloat, relativeTo textStyle: Font.TextStyle) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic func custom(_ name: String, fixedSize: CGFloat) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc italic(_ isActive: Bool = true) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc weight(_ weight: Font.Weight) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc bold(_ isActive: Bool = true) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc monospaced(_ isActive: Bool = true) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc pointSize(_ size: CGFloat) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc scaledBy(_ factor: CGFloat) -\u003e Font\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eForEach\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#foreach\"\u003eForEach\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eForm\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/form/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eGeometryProxy\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003evar size: CGSize\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc frame(in coordinateSpace: some CoordinateSpaceProtocol) -\u003e CGRect\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar safeAreaInsets: EdgeInsets\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eOnly \u003ccode\u003e.local\u003c/code\u003e and \u003ccode\u003e.global\u003c/code\u003e coordinate spaces are supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eGeometryReader\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ccode\u003eGeometryProxy\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eGroup\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eHStack\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/stack/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eImage\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/image/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ name: String, bundle: Bundle? = Bundle.main)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ name: String, bundle: Bundle? = Bundle.main, label: Text)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(systemName: String)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(uiImage: UIImage)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eSee \u003ca href=\"#images\"\u003eImages\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eLabel\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/label/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(@ViewBuilder title: () -\u003e any View, @ViewBuilder icon: () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, systemImage: String)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, image: String)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eSee \u003ca href=\"#images\"\u003eImages\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eLazyHGrid\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#grids\"\u003eGrids\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eLazyHStack\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eDoes not support pinned headers and footers\u003c/li\u003e\n                  \u003cli\u003eWhen placed in a \u003ccode\u003eScrollView\u003c/code\u003e, it must be the only child of that view\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eLazyVGrid\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#grids\"\u003eGrids\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eLazyVStack\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eDoes not support pinned headers and footers\u003c/li\u003e\n                  \u003cli\u003eWhen placed in a \u003ccode\u003eScrollView\u003c/code\u003e, it must be the only child of that view\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eLinearGradient\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gradient/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eLink\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/link/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eList\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/list/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#lists\"\u003eLists\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eLongPressGesture\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gesture/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#gestures\"\u003eGestures\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eMagnifyGesture\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gesture/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#gestures\"\u003eGestures\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eMenu\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/menu/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eNavigationLink\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/list/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#navigation\"\u003eNavigation\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eNavigationPath\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ elements: any Sequence)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar count: Int\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar isEmpty: Bool\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003emutating func append(_ value: Any)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003emutating func removeLast(_ k: Int = 1)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eDoes not support `codable` property\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eNavigationStack\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/navigationstack/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#navigation\"\u003eNavigation\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eOval\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/shape/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003ePicker\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/picker/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eProgressView\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/progressview/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Double?, total: Double = 1.0)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(@ViewBuilder label: () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ titleKey: LocalizedStringKey)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ titleResource: LocalizedStringResource)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Double?, total: Double = 1.0, @ViewBuilder label: () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ titleKey: LocalizedStringKey, value: Double?, total: Double = 1.0)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ titleResource: LocalizedStringResource, value: Double?, total: Double = 1.0)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, value: Double?, total: Double = 1.0)\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eRadialGradient\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gradient/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eRectangle\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/shape/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eRotateGesture\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gesture/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#gestures\"\u003eGestures\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eRoundedRectangle\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/shape/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eScrollView\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/frame/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eScrollView\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#scrolling\"\u003eScrolling\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eScrollViewProxy\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#scrolling\"\u003eScrolling\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eScrollViewReader\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#scrolling\"\u003eScrolling\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eSection\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/list/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#lists\"\u003eLists\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eSecureField\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/securefield/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eShareLink\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/sharelink/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSupports sharing \u003ccode\u003eString\u003c/code\u003e or \u003ccode\u003eURL\u003c/code\u003e data only\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eSlider\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/slider/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Binding\u0026lt;Double\u003e, in bounds: ClosedRange\u0026lt;Double\u003e = 0.0...1.0, step: Double? = nil)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Binding\u0026lt;Double\u003e, in bounds: ClosedRange\u0026lt;Double\u003e = 0.0...1.0, step: Double? = nil, @ViewBuilder label: () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Binding\u0026lt;Double\u003e, in bounds: ClosedRange\u0026lt;Double\u003e = 0.0...1.0, step: Double? = nil, onEditingChanged: (Bool) -\u003e Void)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Binding\u0026lt;Double\u003e, in bounds: ClosedRange\u0026lt;Double\u003e = 0.0...1.0, step: Double? = nil, @ViewBuilder label: () -\u003e any View, onEditingChanged: (Bool) -\u003e Void)\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eSpacer\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/border/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eIn Compose, when multiple elements want to expand they will share the available space equally\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eStepper\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Binding\u0026lt;Int\u003e, step: Int = 1, @ViewBuilder label: () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Binding\u0026lt;Int\u003e, in bounds: ClosedRange\u0026lt;Int\u003e, step: Int = 1, @ViewBuilder label: () -\u003e any View)\u003c/code\u003e (Fuse bridging)\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Binding\u0026lt;Double\u003e, step: Double = 1.0, @ViewBuilder label: () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(value: Binding\u0026lt;Double\u003e, in bounds: ClosedRange\u0026lt;Double\u003e, step: Double = 1.0, @ViewBuilder label: () -\u003e any View)\u003c/code\u003e (Fuse bridging)\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, value: Binding\u0026lt;Int\u003e, step: Int = 1)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, value: Binding\u0026lt;Int\u003e, in bounds: ClosedRange\u0026lt;Int\u003e, step: Int = 1)\u003c/code\u003e (Fuse bridging)\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, value: Binding\u0026lt;Double\u003e, step: Double = 1.0)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, value: Binding\u0026lt;Double\u003e, in bounds: ClosedRange\u0026lt;Double\u003e, step: Double = 1.0)\u003c/code\u003e (Fuse bridging)\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, onIncrement: (() -\u003e Void)?, onDecrement: (() -\u003e Void)?)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(@ViewBuilder label: () -\u003e any View, onIncrement: (() -\u003e Void)?, onDecrement: (() -\u003e Void)?)\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eTab\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/tabview/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#navigation\"\u003eNavigation\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eTable\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ data: any RandomAccessCollection\u0026lt;ObjectType\u0026gt;, @ViewBuilder content: () -\u003e some View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ data: any RandomAccessCollection\u0026lt;ObjectType\u0026gt;, selection: Binding\u0026lt;ObjectType?\u0026gt;, @ViewBuilder columns: () -\u003e some View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ data: any RandomAccessCollection\u0026lt;ObjectType\u0026gt;, selection: Binding\u0026lt;Set\u0026lt;ObjectType\u0026gt;\u0026gt;, @ViewBuilder columns: () -\u003e some View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eAll \u003ccode\u003eTableColumns\u003c/code\u003e must be directly nested in the parent \u003ccode\u003eTable\u003c/code\u003e content block\u003c/li\u003e\n\t\t  \u003cli\u003eMultiple selection is not supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eTableColumn\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, value: (ObjectType) -\u003e String, comparator: Comparator? = nil)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, value: Value? = nil, comparator: Comparator? = nil, @ViewBuilder content: @escaping (ObjectType) -\u003e some View)\u003c/code\u003e\u003c/li\u003e\n                 \u003cli\u003e\u003ccode\u003einit(_ title: Text, value: (ObjectType) -\u003e String, comparator: Comparator? = nil)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: Text, value: Value? = nil, comparator: Comparator? = nil, @ViewBuilder content: @escaping (ObjectType) -\u003e some View)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc width(_ value: CGFloat? = nil)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc width(min: CGFloat? = nil, ideal: CGFloat? = nil, max: CGFloat? = nil)\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eTabSection\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#navigation\"\u003eNavigation\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eTabView\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/tabview/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#navigation\"\u003eNavigation\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eTapGesture\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gesture/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#gestures\"\u003eGestures\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eText\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/text/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003eText(...) + Text(...)\u003c/code\u003e is not supported\u003c/li\u003e\n                  \u003cli\u003eFor formatters, only \u003ccode\u003eText.DateStyle.date\u003c/code\u003e and \u003ccode\u003eText.DateStyle.time\u003c/code\u003e are supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eTextEditor\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003e.font\u003c/code\u003e, \u003ccode\u003e.lineSpacing\u003c/code\u003e, etc modifiers have no effect\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eTextField\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/textfield/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(_ title: String, text: Binding\u0026lt;String\u003e, selection: Binding\u0026lt;TextSelection?\u003e? = nil, prompt: Text? = nil)\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eToggle\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/toggle/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(isOn: Binding\u0026lt;Bool\u003e, @ViewBuilder label: () -\u003e any View)\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n         \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eToolbarContent\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eAll of the items in a given custom \u003ccode\u003eToolbarContent\u003c/code\u003e view must have the same \u003ccode\u003eToolbarItemPlacement\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eToolbarItem\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/toolbar/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eToolbarItemGroup\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/toolbar/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eToolbarSpacer\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eToolbarTitleMenu\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUIKit\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#supported-uikit\"\u003eSupported UIKit\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eUnevenRoundedRectangle\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/shape/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003eCustom \u003ccode\u003eViews\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003eCustom \u003ccode\u003eViewModifiers\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eViewThatFits\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eVStack\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/stack/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#layout\"\u003eLayout\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n            \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003ewithAnimation\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#animation\"\u003eAnimation\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eZStack\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/stack/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.accessibilityAddTraits\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eOnly traits that map to Compose accessibility roles are used\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.accessibilityHeading\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.accessibilityHidden\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.accessibilityIdentifier\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.accessibilityLabel\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.accessibilityValue\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.alert\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.allowsHitTesting\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n            \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.animation\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#animation\"\u003eAnimation\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.aspectRatio\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003econtentMode\u003c/code\u003e is only supported for images\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.autocorrectionDisabled\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.background\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/background/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#safe-area\"\u003eSafe Area\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.backgroundStyle\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.badge\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSupported on \u003ccode\u003eList\u003c/code\u003e items\u003c/li\u003e\n                  \u003cli\u003eNot yet supported on \u003ccode\u003eTabView\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.blendMode\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003e.plusDarker\u003c/code\u003e and \u003ccode\u003e.plusLighter\u003c/code\u003e both map to Compose \u003ccode\u003ePlus\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.blur\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003eopaque\u003c/code\u003e parameter is ignored\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.bold\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.border\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/border/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.brightness\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.buttonStyle\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003e.automatic\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.plain\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.borderless\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.bordered\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.borderedProminent\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eCustom styles are not supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.clipped\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eMost content in Compose clips automatically\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.clipShape\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n            \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.colorScheme \u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee also \u003ca href=\"#colorscheme\"\u003eColorScheme\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.colorMultiply\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.confirmationDialog\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/confirmationdialog/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.contrast\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.cornerRadius\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.datePickerStyle\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003e.automatic\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.compact\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eCustom styles are not supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.deleteDisabled\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.disabled\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.drawingGroup\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003eopaque\u003c/code\u003e and \u003ccode\u003ecolorMode\u003c/code\u003e parameters are ignored\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.environment\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.environmentObject\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.fill\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.focused\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.flipsForRightToLeftLayoutDirection\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.font\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/text/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.foregroundColor\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.foregroundStyle\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.frame\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/frame/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#layout\"\u003eLayout\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.fullScreenCover\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc fullScreenCover(isPresented: Binding\u0026lt;Bool\u003e, onDismiss: (() -\u003e Void)? = nil, @ViewBuilder content: @escaping () -\u003e any View) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eSee \u003ca href=\"#modals\"\u003eModals\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.gesture\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gesture/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#gestures\"\u003eGestures\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.gradient\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gradient/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.grayscale\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.hidden\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.hueRotation\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.ignoresSafeArea\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#safe-area\"\u003eSafe Area\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.inset\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.interactiveDismissDisabled\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#modals\"\u003eModals\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.italic\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.keyboardType\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/keyboard/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.labelsHidden\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.labelStyle\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003e.automatic\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.titleOnly\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.iconOnly\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.titleAndIcon\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eCustom styles are not supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.lineLimit\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003efunc lineLimit(_ number: Int?) -\u003e some View\u003c/li\u003e\n                  \u003cli\u003efunc lineLimit(_ number: Int, reservesSpace: Bool) -\u003e some View\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.linespacing\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.listItemTint\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.listRowBackground\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.listRowSeparator\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.listStyle\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.luminanceToAlpha\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.mask\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.minimumScaleFactor\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.modifier\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/modifier/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.monospaced\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.moveDisabled\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.multilineTextAlignment\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.navigationBarBackButtonHidden\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.navigationBarTitleDisplayMode\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.navigationDestination\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.navigationTitle\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc navigationTitle(_ title: String) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc navigationTitle(_ title: Text) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.offset\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/offset/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.onAppear\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.onChange\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.onDelete\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.onDisappear\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.onLongPressGesture\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/gesture/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#gestures\"\u003eGestures\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.onMove\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.onOpenURL\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.onPreferenceChange\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.onReceive\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.onSubmit\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.onTapGesture\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#gestures\"\u003eGestures\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.opacity\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.overlay\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/overlay/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.padding\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.pickerStyle\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003e.automatic\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.navigationLink\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.menu\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.segmented\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eCustom styles are not supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.position\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.preference\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n            \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.preferredColorScheme\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee also \u003ca href=\"#colorscheme\"\u003eColorScheme\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.progressViewStyle\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003e.automatic\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.linear\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.circular\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eCustom styles are not supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.redacted\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eOnly \u003ccode\u003eRedactionReasons.placeholder\u003c/code\u003e is supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.refreshable\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.resizable\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc resizable() -\u003e Image\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.rotation\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc rotation(_ angle: Angle) -\u003e any Shape\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n       \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.rotationEffect\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc rotationEffect(_ angle: Angle) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc rotationEffect(_ angle: Angle, anchor: UnitPoint) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n       \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.rotation3DEffect\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc rotation3DEffect(_ angle: Angle, axis: (x: CGFloat, y: CGFloat, z: CGFloat), perspective: CGFloat = 1.0) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.saturation\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.scale\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc scale(_ scale: CGFloat) -\u003e any Shape\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc scale(x: CGFloat = 1.0, y: CGFloat = 1.0) -\u003e any Shape\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.scaledToFill\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eOnly supported for images\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.scaledToFit\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eOnly supported for images\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.scaleEffect\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc scaleEffect(_ scale: CGSize, anchor: UnitPoint = .center) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc scaleEffect(_ s: CGFloat, anchor: UnitPoint = .center) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc scaleEffect(x: CGFloat = 1.0, y: CGFloat = 1.0, anchor: UnitPoint = .center) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e\n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.scrollContentBackground\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.scrollDismissesKeyboard\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n\t\t    \u003cli\u003eIn Compose, the default behavior (\u003ccode\u003e.automatic\u003c/code\u003e) is to never dismiss on scroll\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.interactively\u003c/code\u003e behaves like \u003ccode\u003e.immediately\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\t  \n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.scrollTargetBehavior\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                \u003cli\u003eOnly \u003ccode\u003e.viewAligned\u003c/code\u003e is supported\u003c/li\u003e\n                \u003cli\u003eSee \u003ca href=\"#scrolling\"\u003eScrolling\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.scrollTargetLayout\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                \u003cli\u003eSee \u003ca href=\"#scrolling\"\u003eScrolling\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.searchable\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/searchable/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                \u003cli\u003e\u003ccode\u003efunc searchable(text: Binding\u0026lt;String\u003e, prompt: Text? = nil) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n                \u003cli\u003e\u003ccode\u003efunc searchable(text: Binding\u0026lt;String\u003e, prompt: String) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.shadow\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/shadow/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003ePlace this modifier before \u003ccode\u003e.background\u003c/code\u003e, \u003ccode\u003e.overlay\u003c/code\u003e modifiers\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.sheet\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/sheet/\"\u003eexample\u003c/a\u003e)\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc sheet(isPresented: Binding\u0026lt;Bool\u003e, onDismiss: (() -\u003e Void)? = nil, @ViewBuilder content: @escaping () -\u003e any View) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eSee \u003ca href=\"#modals\"\u003eModals\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.strikethrough\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003epattern\u003c/code\u003e and \u003ccode\u003ecolor\u003c/code\u003e are ignored\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.stroke\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.strokeBorder\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.submitLabel\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.symbolVariant\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.tabItem\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#navigation\"\u003eNavigation\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.tabViewStyle\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003e.automatic\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.page\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.tabBarOnly\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eCustom styles are not supported\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.tag\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.task\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.textCase\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.textContentType\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.textEditorStyle\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.textFieldStyle\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003e.automatic\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003e.roundedBorder\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.textInputAutocapitalization\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.tint\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.toolbar\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003efunc toolbar(@ViewBuilder content: () -\u003e any View) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc toolbar(_ visibility: Visibility, for bars: ToolbarPlacement...) -\u003e some View\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.toolbarBackground\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.toolbarColorScheme\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.toolbarTitleDisplayMode\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.toolbarTitleMenu\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.tracking\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n            \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.transition\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee \u003ca href=\"#animation\"\u003eAnimation\u003c/a\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003e.underline\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003epattern\u003c/code\u003e and \u003ccode\u003ecolor\u003c/code\u003e are ignored\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.truncationMode\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e.zIndex\u003c/code\u003e (\u003ca href=\"https://skip.dev/docs/components/zindex/\"\u003eexample\u003c/a\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n## Supported UIKit\n\nSkipUI does not support UIKit views themselves, but it does support a subset of the UIKit framework, such as the pasteboard and haptic feedback classes, that act as interfaces to the underlying services on Android.\n\nThe following table summarizes SkipUI's UIKit support on Android. Anything not listed here is likely not supported. Note that in your iOS-only code - i.e. code within `#if !SKIP` blocks - you can use any UIKit you want.\n\nSupport levels:\n\n  - ✅ – Full\n  - 🟢 – High\n  - 🟡 – Medium \n  - 🟠 – Low\n\n\u003ctable\u003e\n  \u003cthead\u003e\u003cth\u003eSupport\u003c/th\u003e\u003cth\u003eAPI\u003c/th\u003e\u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUIApplication\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003estatic var shared: UIApplication\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar applicationState: UIApplication.State\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar isIdleTimerDisabled: Bool\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc open(_ url: URL, options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:]) async -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e#colorLiteral()\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUIColor\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUIImage\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003einit?(contentsOfFile: String)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit?(data: Data)\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003einit?(data: Data, scale: CGFloat)\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eUIImpactFeedbackGenerator\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eUINotificationFeedbackGenerator\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUIPasteboard\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003estatic var general: UIPasteboard\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003estatic var changedNotification: Notification.Name\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar numberOfItems: Int\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar hasStrings: Bool\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar string: String?\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar strings: [String]?\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar hasURLs: Bool\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar url: URL?\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar urls: [URL]?\u003c/code\u003e\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eUISelectionFeedbackGenerator\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## Supported UserNotifications\n\nSkip integrates its support for the UserNotifications framework into SkipUI.\n\n**Important:** on Android devices to properly display notification icons in the status bar they must have specific properites. The icon must have a transparent background and a solid shape (usually white). It's recommended to use a specific icon for that and it must be specified in the AndroidManifest.xml with the following code inside the application tag:\n\n```xml\n\u003cmeta-data\n            android:name=\"com.google.firebase.messaging.default_notification_icon\"\n            android:resource=\"@drawable/ic_notification\" /\u003e\n```\n\nSKIP assume that the icon is called `ic_notification` and it's available inside the drawable resources. Otherwise it will fall back to use the app icon (eg. @mipmap/ic_launcher). Note that in this case it will most likely be displayed as solid white dot instead of the usual app icon.\n\nThe following table summarizes SkipUI's UserNotifications support on Android. Anything not listed here is likely not supported. Note that in your iOS-only code - i.e. code within `#if !SKIP` blocks - you can use any UserNotifications API you want.\n\nSupport levels:\n\n  - ✅ – Full\n  - 🟢 – High\n  - 🟡 – Medium \n  - 🟠 – Low\n\n\u003ctable\u003e\n  \u003cthead\u003e\u003cth\u003eSupport\u003c/th\u003e\u003cth\u003eAPI\u003c/th\u003e\u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUNAuthorizationOptions\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eIgnored on Android\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUNMutableNotificationContent\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eSee `UNNotificationContent`\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eUNNotification\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUNNotificationContent\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eOnly `title`, `body`, `userInfo`, and `public.image`-type attachments are used\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUNNotificationPresentationOptions\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eOnly `.banner` and `.alert` are used\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eUNNotificationRequest\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eUNNotificationResponse\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUNNotificationSound\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eIgnored on Android\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUNNotificationTrigger\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003eIgnored on Android\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n          \u003cdetails\u003e\n              \u003csummary\u003e\u003ccode\u003eUNUserNotificationCenter\u003c/code\u003e\u003c/summary\u003e\n              \u003cul\u003e\n                  \u003cli\u003e\u003ccode\u003estatic func current() -\u003e UNUserNotificationCenter\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc requestAuthorization(options: UNAuthorizationOptions) async throws -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003evar delegate: (any UNUserNotificationCenterDelegate)?\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003e\u003ccode\u003efunc add(_ request: UNNotificationRequest) async throws\u003c/code\u003e\u003c/li\u003e\n                  \u003cli\u003eThe `add` function ignores all scheduling and repeat options and simply delivers the notification immediately.\u003c/li\u003e\n              \u003c/ul\u003e\n          \u003c/details\u003e      \n       \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eUNUserNotificationCenterDelegate\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## Topics\n\n### Animation\n\nSkip supports SwiftUI's `.animation` and `.transition` modifiers as well as its `withAnimation` function on Android. \n\nThe following properties are currently animatable:\n\n- `.background` color\n- `.border` color\n- `.fill` color\n- `.font` size\n- `.foregroundColor`\n- `.foregroundStyle` color\n- `.frame` width and height\n- `.offset`\n- `.opacity`\n- `.rotationEffect`\n- `.scaleEffect`\n- `.stroke` color\n\nAll of SwiftUI's built-in transitions are supported on Android. To use transitions or to animate views being added or removed in general, however, you **must** assign a unique `.id` value to every view in the parent `HStack`, `VStack`, or `ZStack`:\n\n```swift\nVStack {\n    FirstView()\n        .id(100)\n    if condition {\n        SecondView()\n            .transition(.scale)\n            .id(200)\n    }\n}\n.animation(.default)\n``` \n\nSkip converts the various SwiftUI animation types to their Compose equivalents. For many SwiftUI spring animations, though, Skip uses Compose's simple `EaseInOutBack` easing function rather than a true spring. Only constructing a spring with `SwiftUI.Spring(mass:stiffness:damping:)` creates a true Compose spring animation. Using an easing function rather than a true spring allows us to overcome Compose's limitations on springs:\n\n- True spring animations cannot set a duration\n- True spring animations cannot have a delay\n- True spring animations cannot repeat\n\nCustom `Animatables` and `Transitions` are not supported. Finally, if you nest `withAnimation` blocks, Android will apply the innermost animation to all block actions.\n\n### Colors\n\n#### Accent Color\n\nIn addition to programmatically using SwiftUI's `.tint` modifier, iOS allows you to set your application's accent color via the `AccentColor` resource in your app's `Assets` asset catalog. In a Skip app, you can find `Assets` in the `Darwin` folder. \n\nSkip also supports these mechanisms, but your generated Android app can't access the `Darwin` folder contents. To define an accent color resource for your Android app, create a color set called `AccentColor` in the `Sources/\u003cYourAppModule\u003e/Resources/Module` asset catalog. See the section on Named Colors below for additional details. \n\n#### Named Colors\n\nNamed colors can be bundled in asset catalogs provided in the `Resources` folder of your SwiftPM modules. Your `Package.swift` project should have the module's `.target` include the `Resources` folder for resource processing (which is the default for projects created with `skip init`):\n\n```swift\n.target(name: \"MyModule\", dependencies: ..., resources: [.process(\"Resources\")], plugins: skipstone)\n```\n\nOnce an asset catalog is added to your `Resources` folder, any named colors can be loaded and displayed using the `Color(_:bundle:)` constructor. For example:\n\n```swift\nColor(\"WarningYellow\", bundle: .module)\n```\n\n\u003e [!TIP]\n\u003e Your named colors must use Xcode's \"Floating point (0.0-1.0)\" input method. You can convert named colors using other methods by selecting them in Xcode and using the UI picker to update the input method. The values will be preserved.\n\nSee the [Skip Showcase app](https://github.com/skiptools/skipapp-showcase) `ColorPlayground` for a concrete example of using a named color in an asset catalog, and see that project's Xcode project file ([screenshot](https://assets.skip.dev/screens/SkipUI_Asset_Image.png)) to see the configuration of the `.xcassets` file for the app module.\n\nWhen an app project is first created with `skip init`, it will contain two separate asset catalogs: a project-level `Assets.xcassets` catalog that contains the app's icons, and an empty module-level `Module.xcassets` catalog. **Add your assets to `Module.xcassets`.** Only the module-level catalog will be transpiled, since the project-level catalog is not processed by the skip transpiler.\n\n\u003e [!NOTE]\n\u003e Note that you also **must** specify the `bundle` parameter for colors explicitly, since a Skip project uses per-module resources, rather than the default `Bundle.main` bundle that would be assumed of the parameter were omitted.\n\nFor Android, Skip only uses named colors that you've set for \"Universal\" devices. You can define the color using RGB values or use any of the \"Universal System Color\" constants.\n\n### ColorScheme\n\nSkipUI fully supports the `.preferredColorScheme` modifier. If you created your app with the `skip` tool prior to v0.8.26, however, you will have to update the included `Android/app/src/main/kotlin/.../Main.kt` file in order for the modifier to work correctly. Using the latest [`Main.kt`](https://github.com/skiptools/skipapp-hello/blob/main/Android/app/src/main/kotlin/hello/skip/Main.kt) as your template, please do the following:\n\n1. Replace the all of the import statements with ones from latest `Main.kt`\n1. Replace the contents of the `setContent { ... }` block with the content from the latest `Main.kt`\n1. Replace the `MaterialThemeRootView()` function with the `PresentationRootView(context:)` function from the latest `Main.kt`\n\nWith these updates in place, you should be able to use `.preferredColorScheme` successfully.\n\n### Custom Fonts\n\nCustom fonts can be embedded and referenced using `Font.custom`. Fonts are loaded differently depending on the platform. On iOS the custom font name is the full Postscript name of the font, and on Android the name is the font's file name without the extension.\n\nAndroid requires that font file names contain only alphanumeric characters and underscores, so you should manually name your embedded font to the lowercased and underscore-separated form of the Postscript name of the font. SkipUI's `Font.custom` call will accommodate this by translating your custom font name like \"Protest Guerrilla\" into an Android-compatible name like \"protest_guerrilla.ttf\". \n\n```swift\nText(\"Custom Font\")\n    .font(Font.custom(\"Protest Guerrilla\", size: 30.0)) // protest_guerrilla.ttf\n```\n\nCustom fonts are embedded differently for each platform. On Android you should create a folder `Android/app/src/main/res/font/` and add the font file, which will cause Android to automatically embed any fonts in that folder as resources. \n\nFor iOS, you must add the font by adding to the Xcode project's app target and ensure the font file is included in the file list in the app target's \"Build Phases\" tab's \"Copy Bundle Resources\" phase. In addition, iOS needs to have the font explicitly listed in the Xcode project target's \"Info\" tab under \"Custom Application Target Properties\" by adding a new key for the \"Fonts provided by application\" (whose raw name is \"UIAppFonts\") and adding each font's file name to the string array.\n\nSee the [Skip Showcase app](https://github.com/skiptools/skipapp-showcase) `TextPlayground` for a concrete example of using a custom font, and see that project's Xcode project file ([screenshot](https://assets.skip.dev/screens/SkipUI_Custom_Font.png)) to see how the font is included on both the iOS and Android sides of the app.\n\n### Environment Keys\n\nSwiftUI has many built-in environment keys. These keys are defined in `EnvironmentValues` and typically accessed with the `@Environment` property wrapper. In additional to supporting your custom environment keys, SkipUI exposes the following built-in environment keys:\n\n- `autocorrectionDisabled` (read-only)\n- `backgroundStyle`\n- `dismiss`\n- `font`\n- `horizontalSizeClass`\n- `isEnabled`\n- `isSearching` (read-only)\n- `layoutDirection`\n- `lineLimit`\n- `locale`\n- `openURL`\n- `refresh`\n- `scenePhase`\n- `scrollDismissesKeyboardMode`\n- `timeZone`\n- `truncationMode`\n- `verticalSizeClass`\n\n### ForEach\n\nThe SwiftUI `ForEach` view allows you to generate views for a range or collection of content. SkipUI support any `Int` range or any `RandomAccessCollection`. If the collection elements do not implement the `Identifiable` protocol, specify the key path to a property that can be used to uniquely identify each element. These `id` values must follow our [Restrictions on Identifiers](#restrictions-on-identifiers).\n\n```swift\nForEach([person1, person2, person3], id: \\.fullName) { person in\n    HStack {\n        Text(person.fullName)\n        Spacer()\n        Text(person.age)\n    } \n}\n```\n\n**Important**: When the body of your `ForEach` contains multiple top-level views (e.g. a full row of a `VGrid`), or any single view that expands to additional views (like a `Section` or a nested `ForEach`), SkipUI must \"unroll\" the loop in order to supply all its views individually to Compose. This means that the `ForEach` will be entirely iterated up front, though the views it produces won't yet be rendered.\n\n### Gestures\n\nSkipUI currently supports tap, long press, drag, magnify, and rotate gestures. You can use either the general `.gesture` modifier or the specialized modifiers like `.onTapGesture` to add gesture support to your views. The following limitations apply:\n\n- `@GestureState` is only supported in Skip Fuse. Use the `Gesture.onEnded` modifier to reset your state.\n- Tap counts \u003e 2 are not supported.\n- Gesture velocity and predicted end location are always reported as zero and the current location, respectively.\n- Only the `onChanged` and `onEnded` gesture modifiers are supported.\n- Customization of minimum touch duration, distance, etc. is generally not supported.\n- When applying gestures to an offset view, place any gesture modifiers **before** the `.offset` modifier.\n\nThere is one exception to the last limitation: you **can** create a `DragGesture(minimumDistance: 0)` in order to detect touch down events immediately.\n\n#### Shapes and Paths\n\nSwiftUI automatically applies a mask to shapes and paths so that touches outside the shape do not trigger its gestures. SkipUI emulates this feature, but it is **not** supported on custom shapes and paths that have a `.stroke` applied. These shapes will register touches anywhere in their bounds. Consider using `.strokeBorder` instead of `.stroke` when a gesture mask is needed on a custom shape.\n\n### Grids\n\nSkipUI renders SwiftUI grid views using native Compose grids. This provides maximum performance and a native feel on Android. The different capabilities of SwiftUI and Compose grids, however, imposes restrictions on SwiftUI grid support in Android:\n\n- Pinned headers and footers are not supported.\n- When you place a `LazyHGrid` or `LazyVGrid` in a `ScrollView`, it must be the only child of that view. (This is because Compose grids implement their own internal scroll containers.) To simulate having other non-grid items in your `ScrollView`, put your non-grid content in the `header`s of empty `Section` containers inside the grid.\n    ```swift\n    ScrollView {\n        LazyVGrid(columns: [GridItem(.adaptive(minimum: 80))]) {\n            Section {} header: {\n                Text(\"Insert non-grid content here\")\n            }\n            ForEach(0..\u003c50) { index in\n                Text(\"Grid Cell \\(index)\")\n            }\n            Section {} header: {\n                Text(\"More non-grid content here\")\n            }\n        }\n    }\n    ```\n- When you define your grid with an array of `GridItem` specs, your Android grid is **based on the first `GridItem`**. Compose does not support different specs for different rows or columns, so SkipUI applies the first spec to all of them.\n- Maximum `GridItem` sizes are ignored.\n- Also see the `ForEach` [topic](#foreach).\n\n### Haptics\n\nSkipUI supports UIKit's `UIFeedbackGenerator` API for generating haptic feedback on the device, typically as a result of user interaction. Some examples are as follows:\n\n```swift\n// impact haptic feedback\nUIImpactFeedbackGenerator(style: .light).impactOccurred()\nUIImpactFeedbackGenerator(style: .medium).impactOccurred()\nUIImpactFeedbackGenerator(style: .heavy).impactOccurred()\n\nUIImpactFeedbackGenerator().impactOccurred(intensity: 0.5)\n\n// notification haptic feedback\nUINotificationFeedbackGenerator().notificationOccurred(.success)\nUINotificationFeedbackGenerator().notificationOccurred(.warning)\nUINotificationFeedbackGenerator().notificationOccurred(.error)\n\n// selection haptic feedback\nUISelectionFeedbackGenerator().selectionChanged()\n```\n\n\u003e [!TIP]\n\u003e Android requires adding a permission in order to be able to utilize the device's haptic feedback service (`android.content.Context.VIBRATOR_MANAGER_SERVICE`) by adding to the `Android/app/src/main/AndroidMetadata.xml` file's manifest section: `\u003cuses-permission android:name=\"android.permission.VIBRATE\"/\u003e`\n\n\n### Images\n\n#### Network Images\n\nSkipUI supports loading images from network URLs using SwiftUI's `AsyncImage`. Our implementation uses the [Coil](https://coil-kt.github.io/coil/) library to download images on Android. This includes support for a loading indicator, such as:\n\n```swift\nAsyncImage(url: URL(string: \"https://picsum.photos/id/237/200/300\")) { image in\n    image.resizable()\n} placeholder: {\n    ProgressView()\n}\n```\n\n#### Image Assets\n\nImages can be bundled in asset catalogs provided in the `Resources` folder of your SwiftPM modules. Your `Package.swift` project should have the module's `.target` include the `Resources` folder for resource processing (which is the default for projects created with `skip init`):\n\n```swift\n.target(name: \"MyModule\", dependencies: ..., resources: [.process(\"Resources\")], plugins: skipstone)\n```\n\nOnce an asset catalog is added to your `Resources` folder, any bundled images can be loaded and displayed using the `Image(name:bundle:)` constructor. For example:\n\n```swift\nImage(\"Cat\", bundle: .module, label: Text(\"Cat JPEG image\"))\n```\n\n\u003e [!WARNING]\n\u003e When an app project is first created with `skip init`, it will contain two separate asset catalogs: a project-level `Assets.xcassets` catalog that contains the app's icons, and an empty module-level `Module.xcassets` catalog. **Add your assets to `Module.xcassets`.** Only the module-level catalog will be transpiled, since the project-level catalog is not processed by the skip transpiler.\n\nSee the [Skip Showcase app](https://github.com/skiptools/skipapp-showcase) `ImagePlayground` for a concrete example of using a bundled image in an asset catalog, and see that project's Xcode project file ([screenshot](https://assets.skip.dev/screens/SkipUI_Asset_Image.png)) to see the configuration of the `.xcassets` file for the app module.\n\n\u003e [!NOTE]\n\u003e Note that you **must** specify the `bundle` parameter for images explicitly, since a Skip project uses per-module resources, rather than the default `Bundle.main` bundle that would be assumed of the parameter were omitted.\n\nIn addition to raster image formats like .png and .jpg, vector images in the .svg and .pdf forma","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskiptools%2Fskip-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskiptools%2Fskip-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskiptools%2Fskip-ui/lists"}