Skip to content

Commit b90fb9f

Browse files
committed
Prep first release
1 parent 8a52d42 commit b90fb9f

File tree

3 files changed

+83
-2
lines changed

3 files changed

+83
-2
lines changed

src/Component.svelte

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/JsonView.svelte

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<script>
2+
export let json
3+
export let depth = Infinity
4+
export let _lvl = 0
5+
6+
const collapsedSymbol = '...'
7+
const getType = i => {
8+
if (i === null) return 'null'
9+
return typeof i
10+
}
11+
12+
let items
13+
let isArray
14+
let openBracket
15+
let closeBracket
16+
$: {
17+
items = getType(json) === 'object' ? Object.keys(json) : []
18+
isArray = Array.isArray(json)
19+
openBracket = isArray ? '[' : '{'
20+
closeBracket = isArray ? ']' : '}'
21+
}
22+
23+
let collapsed
24+
$: collapsed = depth < _lvl
25+
26+
const format = i => {
27+
switch (getType(i)) {
28+
case 'string':
29+
return `"${i}"`
30+
case 'function':
31+
return 'f () {...}'
32+
case 'symbol':
33+
return i.toString()
34+
default:
35+
return i
36+
}
37+
}
38+
const clicked = () => {
39+
collapsed = !collapsed
40+
}
41+
</script>
42+
43+
<style>
44+
ul {
45+
list-style: none;
46+
margin: 0;
47+
padding: 0;
48+
padding-left: var(--nodePaddingLeft,1rem);
49+
border-left: var(--nodeBorderLeft,1px dotted #9CA3AF);
50+
color: var(--nodeColor,#374151)
51+
}
52+
.hidden { display: none; }
53+
.bracket { cursor: pointer; }
54+
.bracket:hover { background: var(--bracketHoverBackground,#D1D5DB); }
55+
.val { color: var(--leafDefaultColor,#9CA3AF) }
56+
.val.string { color: var(--leafStringColor, #059669); }
57+
.val.number { color: var(--leafNumberColor, #D97706); }
58+
.val.boolean { color: var(--leafBooleanColor, #2563EB); }
59+
</style>
60+
61+
{#if items.length}
62+
<span class:hidden={collapsed}>
63+
<span class="bracket" on:click={clicked} tabindex="0">{openBracket}</span>
64+
<ul>
65+
{#each items as i, idx}
66+
<li>
67+
{#if !isArray}
68+
<span class="key">"{i}":</span>
69+
{/if}
70+
{#if getType(json[i]) === 'object'}
71+
<svelte:self json={json[i]} {depth} _lvl={_lvl + 1} />
72+
{:else}
73+
<span class="val {getType(json[i])}">{format(json[i])}</span>
74+
{/if}
75+
<span>{idx < items.length - 1 ? ',' : ''}</span>
76+
</li>
77+
{/each}
78+
</ul>
79+
<span class="bracket" on:click={clicked} tabindex="0">{closeBracket}</span>
80+
</span>
81+
<span class="bracket" class:hidden={!collapsed} on:click={clicked} tabindex="0">{openBracket}{collapsedSymbol}{closeBracket}</span>
82+
{/if}

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { default } from './Component.svelte'
1+
export { default as JsonView } from './JsonView.svelte'

0 commit comments

Comments
 (0)