@noughts/svelte-uikit
TypeScript icon, indicating that this package has built-in type declarations

0.8.23 • Public • Published

Svelte UIKit

A framework for prototyping mobile apps in Svelte. The goal is to reproduce the general navigation of a mobile application.

The system design is equivalent to Apple's UIKit API.

Motivation

[TBD]

Setup

In Safari on the iPhone, Pull To Refresh is triggered when flicking down at the top of the screen, and the flick event does not work as expected.

This can be avoided by specifying overflow:hidden; in the body style.

<!DOCTYPE html>
<html lang="en">
<head>...</head>
<body style="overflow: hidden;">%sveltekit.body%</body>
</html>

Basics

The code to implement standard tab bar navigation in iOS is as follows

<!-- src/routes/+page.svelte -->

<script lang="ts">
    import { UISceneController, UITabBarController, UIView, UIViewController, App } from "@noughts/svelte-uikit";
    // imports some Svelte Components here. e.g.: import WorldClockView from "./WorldClockView.svelte";
</script>

<App
    viewController={new UISceneController(
        new UITabBarController([
            new UIViewController(new UIView(WorldClockView), { tabBarItem: { title: "World Clock", icon: "language" } }),
            new UIViewController(new UIView(AlermView), { tabBarItem: { title: "Alarm", icon: "alarm" } }),
            new UIViewController(new UIView(BedtimeView), { tabBarItem: { title: "Bedtime", icon: "bed" } }),
            new UIViewController(new UIView(StopwatchView), { tabBarItem: { title: "Stopwatch", icon: "timer" } }),
            new UIViewController(new UIView(TimerView), { tabBarItem: { title: "Timer", icon: "pace" } }),
        ])
    )}
/>

<style>
    :global(*) {
        padding: 0;
        margin: 0;
        box-sizing: border-box;
        --ui-tint-color:orange !important;
    }
</style>

Add a SubView to NavigationView.

For example, if you want to place a floating button on a View represented by UINavigationController, you can do it as follows.

<!-- +page.svelte -->
<App
    viewController={new UITabBarController([
        new UINavigationController(
            new UIViewController(new UIView(LandmarkList), {
                hidesNavigationBarWhenPushed: true,
            }),
            {tabBarItem: { title: "wo/NavBar", icon: { name: "home" } }},
            new UIView(Fab)
        )
    ])}
/>
<!-- Fab.svelte -->
<script lang="ts">
    import { UIView } from "$lib/UIView.js";
    import { UIViewController } from "$lib/UIViewController.js";
    import DemoScreen from "./DemoScreen.svelte";
    export let viewController: UIViewController;
    function onFabClick() {
        viewController.present(new UIViewController(new UIView(DemoScreen), {}));
    }
</script>

<button class="fab" on:click={onFabClick}>FAB</button>

<style>
    .fab {
        position: absolute;
        width: 88px;
        height: 88px;
        left: 22px;
        bottom: 22px;
        z-index: 100;
    }
</style>

Readme

Keywords

none

Package Sidebar

Install

npm i @noughts/svelte-uikit

Weekly Downloads

1

Version

0.8.23

License

MIT

Unpacked Size

51.3 kB

Total Files

57

Last publish

Collaborators

  • noughts