mirror of
https://github.com/TxtDot/vigi.git
synced 2024-11-21 19:16:20 +03:00
feat: dalet renderer
This commit is contained in:
parent
42762f591c
commit
48f4a63b6b
10 changed files with 102 additions and 18 deletions
|
@ -13,7 +13,8 @@
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tauri-apps/api": "^1"
|
"@tauri-apps/api": "^1",
|
||||||
|
"@txtdot/dalet": "1.0.0-pre1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@iconify/svelte": "^4.0.2",
|
"@iconify/svelte": "^4.0.2",
|
||||||
|
|
15
pnpm-lock.yaml
generated
15
pnpm-lock.yaml
generated
|
@ -11,6 +11,9 @@ importers:
|
||||||
'@tauri-apps/api':
|
'@tauri-apps/api':
|
||||||
specifier: ^1
|
specifier: ^1
|
||||||
version: 1.6.0
|
version: 1.6.0
|
||||||
|
'@txtdot/dalet':
|
||||||
|
specifier: 1.0.0-pre1
|
||||||
|
version: 1.0.0-pre1
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@iconify/svelte':
|
'@iconify/svelte':
|
||||||
specifier: ^4.0.2
|
specifier: ^4.0.2
|
||||||
|
@ -427,6 +430,9 @@ packages:
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
'@txtdot/dalet@1.0.0-pre1':
|
||||||
|
resolution: {integrity: sha512-dzEbI6wc8EmPH+WJD53h0IxOnfGL0S4Wx6P0sgKm+NTBolcWFMNuiz9c6j0uaUWsBpy/WHE3OyAAWcD4KUE6Hg==}
|
||||||
|
|
||||||
'@types/cookie@0.6.0':
|
'@types/cookie@0.6.0':
|
||||||
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
|
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
|
||||||
|
|
||||||
|
@ -1139,6 +1145,9 @@ packages:
|
||||||
engines: {node: '>= 14'}
|
engines: {node: '>= 14'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
zod@3.23.8:
|
||||||
|
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
|
||||||
|
|
||||||
snapshots:
|
snapshots:
|
||||||
|
|
||||||
'@alloc/quick-lru@5.2.0': {}
|
'@alloc/quick-lru@5.2.0': {}
|
||||||
|
@ -1405,6 +1414,10 @@ snapshots:
|
||||||
'@tauri-apps/cli-win32-ia32-msvc': 1.6.0
|
'@tauri-apps/cli-win32-ia32-msvc': 1.6.0
|
||||||
'@tauri-apps/cli-win32-x64-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/cookie@0.6.0': {}
|
||||||
|
|
||||||
'@types/estree@1.0.5': {}
|
'@types/estree@1.0.5': {}
|
||||||
|
@ -2090,3 +2103,5 @@ snapshots:
|
||||||
wrappy@1.0.2: {}
|
wrappy@1.0.2: {}
|
||||||
|
|
||||||
yaml@2.5.0: {}
|
yaml@2.5.0: {}
|
||||||
|
|
||||||
|
zod@3.23.8: {}
|
||||||
|
|
18
src/lib/components/BrowserWindow.svelte
Normal file
18
src/lib/components/BrowserWindow.svelte
Normal 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>
|
15
src/lib/components/DaletlRenderer/BodyRenderer.svelte
Normal file
15
src/lib/components/DaletlRenderer/BodyRenderer.svelte
Normal 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}
|
10
src/lib/components/DaletlRenderer/Renderer.svelte
Normal file
10
src/lib/components/DaletlRenderer/Renderer.svelte
Normal 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}
|
10
src/lib/components/DaletlRenderer/TagRenderer.svelte
Normal file
10
src/lib/components/DaletlRenderer/TagRenderer.svelte
Normal 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}
|
8
src/lib/components/DaletlRenderer/tags/Element.svelte
Normal file
8
src/lib/components/DaletlRenderer/tags/Element.svelte
Normal 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>
|
16
src/lib/components/Sidebar.svelte
Normal file
16
src/lib/components/Sidebar.svelte
Normal 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>
|
|
@ -7,7 +7,6 @@
|
||||||
import Block from "./Block.svelte";
|
import Block from "./Block.svelte";
|
||||||
import Button from "./Button.svelte";
|
import Button from "./Button.svelte";
|
||||||
|
|
||||||
export let onSidebarToggle = () => {};
|
|
||||||
export let onBack = () => {};
|
export let onBack = () => {};
|
||||||
export let onForward = () => {};
|
export let onForward = () => {};
|
||||||
export let onInput = () => {};
|
export let onInput = () => {};
|
||||||
|
@ -20,7 +19,7 @@
|
||||||
|
|
||||||
<div class="top-bar">
|
<div class="top-bar">
|
||||||
<Block className="flex">
|
<Block className="flex">
|
||||||
<Button onClick={onSidebarToggle}>
|
<Button onClick={() => (sidebarOpen = !sidebarOpen)}>
|
||||||
{#if sidebarOpen}
|
{#if sidebarOpen}
|
||||||
<SidebarLeft />
|
<SidebarLeft />
|
||||||
{:else}
|
{:else}
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import "../app.css";
|
import "../app.css";
|
||||||
|
|
||||||
import Block from "$lib/components/Block.svelte";
|
|
||||||
import TopBar from "$lib/components/TopBar.svelte";
|
import TopBar from "$lib/components/TopBar.svelte";
|
||||||
import WindowControls from "$lib/components/WindowControls.svelte";
|
import Sidebar from "$lib/components/Sidebar.svelte";
|
||||||
import { slide } from "svelte/transition";
|
import BrowserWindow from "$lib/components/BrowserWindow.svelte";
|
||||||
|
import type { Root } from "@txtdot/dalet";
|
||||||
|
|
||||||
let sidebarOpen = true;
|
let sidebarOpen = true;
|
||||||
|
let data: Root = [];
|
||||||
|
|
||||||
document.addEventListener("keypress", (e: KeyboardEvent) => {
|
document.addEventListener("keypress", (e: KeyboardEvent) => {
|
||||||
const formElements = ["INPUT", "TEXTAREA", "SELECT", "OPTION"];
|
const formElements = ["INPUT", "TEXTAREA", "SELECT", "OPTION"];
|
||||||
|
@ -18,19 +19,10 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="common-window" data-tauri-drag-region>
|
<div class="common-window" data-tauri-drag-region>
|
||||||
<Block className={`sidebar${sidebarOpen ? "" : " collapsed"}`} draggable>
|
<Sidebar bind:sidebarOpen />
|
||||||
{#if sidebarOpen}
|
|
||||||
<div transition:slide={{ axis: "x", duration: 100 }}>
|
|
||||||
<WindowControls />
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
</Block>
|
|
||||||
|
|
||||||
<div class="main-window">
|
<div class="main-window">
|
||||||
<TopBar
|
<TopBar bind:sidebarOpen />
|
||||||
bind:sidebarOpen
|
<BrowserWindow {data} />
|
||||||
onSidebarToggle={() => (sidebarOpen = !sidebarOpen)}
|
|
||||||
/>
|
|
||||||
<Block className="browser-window">Browser window</Block>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Add table
Reference in a new issue