feat: dalet renderer

This commit is contained in:
Artemy Egorov 2024-07-28 22:39:55 +03:00
parent 42762f591c
commit 48f4a63b6b
10 changed files with 102 additions and 18 deletions

View file

@ -13,7 +13,8 @@
},
"license": "MIT",
"dependencies": {
"@tauri-apps/api": "^1"
"@tauri-apps/api": "^1",
"@txtdot/dalet": "1.0.0-pre1"
},
"devDependencies": {
"@iconify/svelte": "^4.0.2",

View file

@ -11,6 +11,9 @@ importers:
'@tauri-apps/api':
specifier: ^1
version: 1.6.0
'@txtdot/dalet':
specifier: 1.0.0-pre1
version: 1.0.0-pre1
devDependencies:
'@iconify/svelte':
specifier: ^4.0.2
@ -427,6 +430,9 @@ packages:
engines: {node: '>= 10'}
hasBin: true
'@txtdot/dalet@1.0.0-pre1':
resolution: {integrity: sha512-dzEbI6wc8EmPH+WJD53h0IxOnfGL0S4Wx6P0sgKm+NTBolcWFMNuiz9c6j0uaUWsBpy/WHE3OyAAWcD4KUE6Hg==}
'@types/cookie@0.6.0':
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
@ -1139,6 +1145,9 @@ packages:
engines: {node: '>= 14'}
hasBin: true
zod@3.23.8:
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
snapshots:
'@alloc/quick-lru@5.2.0': {}
@ -1405,6 +1414,10 @@ snapshots:
'@tauri-apps/cli-win32-ia32-msvc': 1.6.0
'@tauri-apps/cli-win32-x64-msvc': 1.6.0
'@txtdot/dalet@1.0.0-pre1':
dependencies:
zod: 3.23.8
'@types/cookie@0.6.0': {}
'@types/estree@1.0.5': {}
@ -2090,3 +2103,5 @@ snapshots:
wrappy@1.0.2: {}
yaml@2.5.0: {}
zod@3.23.8: {}

View file

@ -0,0 +1,18 @@
<script lang="ts">
import type { Root } from "@txtdot/dalet";
import Block from "./Block.svelte";
import Renderer from "./DaletlRenderer/Renderer.svelte";
export let data: Root;
export let isLoading = false;
</script>
<Block className="browser-window">
{#if isLoading && data.length === 0}
<div>Loading...</div>
{:else if !isLoading && data.length === 0}
<div>No data</div>
{:else}
<Renderer {data} />
{/if}
</Block>

View file

@ -0,0 +1,15 @@
<script lang="ts">
import type { Body } from "@txtdot/dalet";
import TagRenderer from "./TagRenderer.svelte";
import Element from "./tags/Element.svelte";
export let body: Body;
</script>
{#if typeof body === "string"}
<Element {body} />
{:else if body !== null}
{#each body as tag}
<TagRenderer {tag} />
{/each}
{/if}

View file

@ -0,0 +1,10 @@
<script lang="ts">
import type { Root } from "@txtdot/dalet";
import TagRenderer from "./TagRenderer.svelte";
export let data: Root = [];
</script>
{#each data as tag}
<TagRenderer {tag} />
{/each}

View file

@ -0,0 +1,10 @@
<script lang="ts">
import type { Tag } from "@txtdot/dalet";
import Element from "./tags/Element.svelte";
export let tag: Tag;
</script>
{#if tag.id === 0}
<Element body={tag.body} />
{/if}

View file

@ -0,0 +1,8 @@
<script lang="ts">
import type { Body, Tag } from "@txtdot/dalet";
import BodyRenderer from "../BodyRenderer.svelte";
export let body: Body;
</script>
<section class="el"><BodyRenderer {body} /></section>

View file

@ -0,0 +1,16 @@
<script>
import { slide } from "svelte/transition";
import Block from "./Block.svelte";
import WindowControls from "./WindowControls.svelte";
export let sidebarOpen = true;
</script>
<Block className={`sidebar${sidebarOpen ? "" : " collapsed"}`} draggable>
{#if sidebarOpen}
<div transition:slide={{ axis: "x", duration: 100 }}>
<WindowControls />
</div>
{/if}
</Block>

View file

@ -7,7 +7,6 @@
import Block from "./Block.svelte";
import Button from "./Button.svelte";
export let onSidebarToggle = () => {};
export let onBack = () => {};
export let onForward = () => {};
export let onInput = () => {};
@ -20,7 +19,7 @@
<div class="top-bar">
<Block className="flex">
<Button onClick={onSidebarToggle}>
<Button onClick={() => (sidebarOpen = !sidebarOpen)}>
{#if sidebarOpen}
<SidebarLeft />
{:else}

View file

@ -1,12 +1,13 @@
<script lang="ts">
import "../app.css";
import Block from "$lib/components/Block.svelte";
import TopBar from "$lib/components/TopBar.svelte";
import WindowControls from "$lib/components/WindowControls.svelte";
import { slide } from "svelte/transition";
import Sidebar from "$lib/components/Sidebar.svelte";
import BrowserWindow from "$lib/components/BrowserWindow.svelte";
import type { Root } from "@txtdot/dalet";
let sidebarOpen = true;
let data: Root = [];
document.addEventListener("keypress", (e: KeyboardEvent) => {
const formElements = ["INPUT", "TEXTAREA", "SELECT", "OPTION"];
@ -18,19 +19,10 @@
</script>
<div class="common-window" data-tauri-drag-region>
<Block className={`sidebar${sidebarOpen ? "" : " collapsed"}`} draggable>
{#if sidebarOpen}
<div transition:slide={{ axis: "x", duration: 100 }}>
<WindowControls />
</div>
{/if}
</Block>
<Sidebar bind:sidebarOpen />
<div class="main-window">
<TopBar
bind:sidebarOpen
onSidebarToggle={() => (sidebarOpen = !sidebarOpen)}
/>
<Block className="browser-window">Browser window</Block>
<TopBar bind:sidebarOpen />
<BrowserWindow {data} />
</div>
</div>