+2
-2
src/components/account.tsx
+2
-2
src/components/account.tsx
···
70
return (
71
<>
72
<Modal open={openManager()} onClose={() => setOpenManager(false)}>
73
-
<div class="starting:opacity-0 dark:bg-dark-800/70 border-0.5 w-21rem dark:shadow-dark-900 backdrop-blur-xs left-50% absolute top-12 -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-4 text-slate-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-slate-100">
74
<h3 class="mb-2 font-bold">Manage accounts</h3>
75
<div class="mb-3 max-h-[20rem] overflow-y-auto md:max-h-[25rem]">
76
<For each={Object.keys(sessions)}>
···
98
<button onclick={() => setOpenManager(true)}>
99
<Tooltip text="Accounts">
100
{loginState() && avatar() ?
101
-
<img src={avatar()} class="dark:shadow-dark-900 size-5 rounded-full shadow-sm" />
102
: <div class="i-lucide-circle-user-round text-xl" />}
103
</Tooltip>
104
</button>
···
70
return (
71
<>
72
<Modal open={openManager()} onClose={() => setOpenManager(false)}>
73
+
<div class="starting:opacity-0 dark:bg-dark-800/70 border-0.5 w-21rem dark:shadow-dark-900/80 backdrop-blur-xs left-50% absolute top-12 -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-4 text-slate-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-slate-100">
74
<h3 class="mb-2 font-bold">Manage accounts</h3>
75
<div class="mb-3 max-h-[20rem] overflow-y-auto md:max-h-[25rem]">
76
<For each={Object.keys(sessions)}>
···
98
<button onclick={() => setOpenManager(true)}>
99
<Tooltip text="Accounts">
100
{loginState() && avatar() ?
101
+
<img src={avatar()} class="dark:shadow-dark-900/80 size-5 rounded-full shadow-sm" />
102
: <div class="i-lucide-circle-user-round text-xl" />}
103
</Tooltip>
104
</button>
+1
-1
src/components/backlinks.tsx
+1
-1
src/components/backlinks.tsx
+4
-4
src/components/create.tsx
+4
-4
src/components/create.tsx
···
172
return (
173
<>
174
<Modal open={openDialog()} onClose={() => setOpenDialog(false)}>
175
-
<div class="w-21rem sm:w-xl lg:w-50rem starting:opacity-0 dark:bg-dark-800/70 left-50% backdrop-blur-xs border-0.5 dark:shadow-dark-900 absolute top-12 -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-2 text-slate-900 shadow-md transition-opacity duration-300 sm:p-4 dark:border-neutral-700 dark:text-slate-100">
176
<div class="mb-2 flex w-full justify-between">
177
<h3 class="font-bold">{props.create ? "Creating" : "Editing"} record</h3>
178
<div
···
208
<select
209
name="validate"
210
id="validate"
211
-
class="dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900 rounded-lg bg-white px-1 py-1 shadow-sm focus:outline-slate-900 dark:focus:outline-slate-100"
212
>
213
<option value="unset">Unset</option>
214
<option value="true">True</option>
···
217
</div>
218
<div class="flex items-center gap-2">
219
<Show when={!uploading()}>
220
-
<div class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900 flex rounded-lg bg-white text-xs font-bold shadow-sm hover:bg-zinc-100">
221
<input type="file" id="blob" hidden onChange={() => uploadBlob()} />
222
<label class="flex items-center gap-1 px-2 py-1.5" for="blob">
223
<div class="i-lucide-upload text-sm" />
···
267
createRecord(new FormData(formRef))
268
: editRecord(new FormData(formRef))
269
}
270
-
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-100 sm:text-sm"
271
>
272
{props.create ? "Create" : "Edit"}
273
</button>
···
172
return (
173
<>
174
<Modal open={openDialog()} onClose={() => setOpenDialog(false)}>
175
+
<div class="w-21rem sm:w-xl lg:w-50rem starting:opacity-0 dark:bg-dark-800/70 left-50% backdrop-blur-xs border-0.5 dark:shadow-dark-900/80 absolute top-12 -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-2 text-slate-900 shadow-md transition-opacity duration-300 sm:p-4 dark:border-neutral-700 dark:text-slate-100">
176
<div class="mb-2 flex w-full justify-between">
177
<h3 class="font-bold">{props.create ? "Creating" : "Editing"} record</h3>
178
<div
···
208
<select
209
name="validate"
210
id="validate"
211
+
class="dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900/80 rounded-lg bg-white px-1 py-1 shadow-sm focus:outline-slate-900 dark:focus:outline-slate-100"
212
>
213
<option value="unset">Unset</option>
214
<option value="true">True</option>
···
217
</div>
218
<div class="flex items-center gap-2">
219
<Show when={!uploading()}>
220
+
<div class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 flex rounded-lg bg-white text-xs font-bold shadow-sm hover:bg-zinc-100">
221
<input type="file" id="blob" hidden onChange={() => uploadBlob()} />
222
<label class="flex items-center gap-1 px-2 py-1.5" for="blob">
223
<div class="i-lucide-upload text-sm" />
···
267
createRecord(new FormData(formRef))
268
: editRecord(new FormData(formRef))
269
}
270
+
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-100 sm:text-sm"
271
>
272
{props.create ? "Create" : "Edit"}
273
</button>
+1
-1
src/components/editor.tsx
+1
-1
src/components/editor.tsx
+1
-1
src/components/search.tsx
+1
-1
src/components/search.tsx
···
71
</label>
72
</div>
73
<div class="flex w-full items-center gap-2">
74
-
<div class="dark:bg-dark-100 focus-within:outline-1.5 dark:shadow-dark-900 flex grow items-center gap-2 rounded-lg bg-white px-2 py-1 shadow-sm focus-within:outline-slate-900 dark:focus-within:outline-slate-100">
75
<input
76
type="text"
77
spellcheck={false}
···
71
</label>
72
</div>
73
<div class="flex w-full items-center gap-2">
74
+
<div class="dark:bg-dark-100 focus-within:outline-1.5 dark:shadow-dark-900/80 flex grow items-center gap-2 rounded-lg bg-white px-2 py-1 shadow-sm focus-within:outline-slate-900 dark:focus-within:outline-slate-100">
75
<input
76
type="text"
77
spellcheck={false}
+1
-1
src/components/settings.tsx
+1
-1
src/components/settings.tsx
···
56
return (
57
<>
58
<Modal open={openSettings()} onClose={() => setOpenSettings(false)}>
59
-
<div class="starting:opacity-0 w-21rem dark:bg-dark-800/70 border-0.5 dark:shadow-dark-900 backdrop-blur-xs left-50% absolute top-12 -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-4 text-slate-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-slate-100">
60
<h3 class="border-b-0.5 mb-2 border-neutral-500 pb-2 font-bold">Settings</h3>
61
<h4 class="mb-1 font-semibold">Theme</h4>
62
<div class="flex w-full gap-2">
···
56
return (
57
<>
58
<Modal open={openSettings()} onClose={() => setOpenSettings(false)}>
59
+
<div class="starting:opacity-0 w-21rem dark:bg-dark-800/70 border-0.5 dark:shadow-dark-900/80 backdrop-blur-xs left-50% absolute top-12 -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-4 text-slate-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-slate-100">
60
<h3 class="border-b-0.5 mb-2 border-neutral-500 pb-2 font-bold">Settings</h3>
61
<h4 class="mb-1 font-semibold">Theme</h4>
62
<div class="flex w-full gap-2">
+1
-1
src/components/text-input.tsx
+1
-1
src/components/text-input.tsx
+1
-1
src/components/tooltip.tsx
+1
-1
src/components/tooltip.tsx
···
8
<Show when={!isTouchDevice}>
9
<span
10
style={`transform: translate(-50%, 28px)`}
11
-
class={`left-50% border-0.5 dark:shadow-dark-900 pointer-events-none absolute z-10 hidden min-w-fit select-none whitespace-nowrap rounded border-neutral-300 bg-white p-1 text-center font-sans text-xs text-slate-900 shadow-md group-hover/tooltip:inline dark:border-neutral-600 dark:bg-neutral-800 dark:text-slate-100`}
12
>
13
{props.text}
14
</span>
···
8
<Show when={!isTouchDevice}>
9
<span
10
style={`transform: translate(-50%, 28px)`}
11
+
class={`left-50% border-0.5 dark:shadow-dark-900/80 pointer-events-none absolute z-10 hidden min-w-fit select-none whitespace-nowrap rounded border-neutral-300 bg-white p-1 text-center font-sans text-xs text-slate-900 shadow-md group-hover/tooltip:inline dark:border-neutral-600 dark:bg-neutral-800 dark:text-slate-100`}
12
>
13
{props.text}
14
</span>
+1
-1
src/layout.tsx
+1
-1
src/layout.tsx
+1
-1
src/views/blob.tsx
+1
-1
src/views/blob.tsx
+2
-2
src/views/collection.tsx
+2
-2
src/views/collection.tsx
···
50
<Show when={hover()}>
51
<span
52
ref={previewRef}
53
-
class={`dark:bg-dark-500/70 left-50% max-h-md z-25 backdrop-blur-xs border-0.5 dark:shadow-dark-900 pointer-events-none absolute block w-max max-w-sm -translate-x-1/2 overflow-hidden whitespace-pre-wrap rounded-md border-neutral-300 bg-zinc-100/70 p-2 text-xs shadow-md lg:max-w-lg dark:border-neutral-700 ${isOverflowing(previewHeight()) ? "bottom-7" : "top-7"}`}
54
>
55
<JSONValue
56
data={props.record.record.value as JSONType}
···
236
<button
237
type="button"
238
onclick={() => refetch()}
239
-
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
240
>
241
Load More
242
</button>
···
50
<Show when={hover()}>
51
<span
52
ref={previewRef}
53
+
class={`dark:bg-dark-500/70 left-50% max-h-md z-25 backdrop-blur-xs border-0.5 dark:shadow-dark-900/80 pointer-events-none absolute block w-max max-w-sm -translate-x-1/2 overflow-hidden whitespace-pre-wrap rounded-md border-neutral-300 bg-zinc-100/70 p-2 text-xs shadow-md lg:max-w-lg dark:border-neutral-700 ${isOverflowing(previewHeight()) ? "bottom-7" : "top-7"}`}
54
>
55
<JSONValue
56
data={props.record.record.value as JSONType}
···
236
<button
237
type="button"
238
onclick={() => refetch()}
239
+
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
240
>
241
Load More
242
</button>
+2
-2
src/views/labels.tsx
+2
-2
src/views/labels.tsx
···
72
spellcheck={false}
73
rows={3}
74
value={searchParams.uriPatterns ?? "*"}
75
-
class="dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900 mb-1 grow rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-slate-900 dark:focus:outline-slate-100"
76
/>
77
<div class="flex justify-center">
78
<Show when={!response.loading}>
···
106
<button
107
type="button"
108
onclick={() => refetch()}
109
-
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
110
>
111
Load More
112
</button>
···
72
spellcheck={false}
73
rows={3}
74
value={searchParams.uriPatterns ?? "*"}
75
+
class="dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900/80 mb-1 grow rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-slate-900 dark:focus:outline-slate-100"
76
/>
77
<div class="flex justify-center">
78
<Show when={!response.loading}>
···
106
<button
107
type="button"
108
onclick={() => refetch()}
109
+
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
110
>
111
Load More
112
</button>
+1
-1
src/views/pds.tsx
+1
-1
src/views/pds.tsx
+3
-3
src/views/record.tsx
+3
-3
src/views/record.tsx
···
151
</button>
152
</Tooltip>
153
<Modal open={openDelete()} onClose={() => setOpenDelete(false)}>
154
-
<div class="starting:opacity-0 dark:bg-dark-800/70 border-0.5 dark:shadow-dark-900 backdrop-blur-xs left-50% top-70 absolute -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-4 text-slate-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-slate-100">
155
<h2 class="mb-2 font-bold">Delete this record?</h2>
156
<div class="flex justify-end gap-2">
157
<button
158
type="button"
159
onclick={() => setOpenDelete(false)}
160
-
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900 rounded-lg bg-white px-2 py-1.5 text-sm font-bold shadow-sm hover:bg-zinc-100"
161
>
162
Cancel
163
</button>
164
<button
165
type="button"
166
onclick={deleteRecord}
167
-
class="dark:shadow-dark-900 rounded-lg bg-red-500 px-2 py-1.5 text-sm font-bold text-slate-100 shadow-sm hover:bg-red-400"
168
>
169
Delete
170
</button>
···
151
</button>
152
</Tooltip>
153
<Modal open={openDelete()} onClose={() => setOpenDelete(false)}>
154
+
<div class="starting:opacity-0 dark:bg-dark-800/70 border-0.5 dark:shadow-dark-900/80 backdrop-blur-xs left-50% top-70 absolute -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-4 text-slate-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-slate-100">
155
<h2 class="mb-2 font-bold">Delete this record?</h2>
156
<div class="flex justify-end gap-2">
157
<button
158
type="button"
159
onclick={() => setOpenDelete(false)}
160
+
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1.5 text-sm font-bold shadow-sm hover:bg-zinc-100"
161
>
162
Cancel
163
</button>
164
<button
165
type="button"
166
onclick={deleteRecord}
167
+
class="dark:shadow-dark-900/80 rounded-lg bg-red-500 px-2 py-1.5 text-sm font-bold text-slate-100 shadow-sm hover:bg-red-400"
168
>
169
Delete
170
</button>
+4
-4
src/views/repo.tsx
+4
-4
src/views/repo.tsx
···
110
<Tooltip text="Filter operations">
111
<div class="i-lucide-filter text-xl" />
112
</Tooltip>
113
-
<div class="dark:shadow-dark-900 flex w-fit items-center rounded-full bg-neutral-200 shadow-md dark:bg-neutral-700">
114
<FilterButton icon="i-lucide-at-sign" event="handle" />
115
<FilterButton icon="i-lucide-key-round" event="rotation_key" />
116
<FilterButton icon="i-lucide-server" event="service" />
···
162
<button
163
classList={{
164
"rounded-lg flex flex-1 py-1 justify-center": true,
165
-
"bg-zinc-200/70 dark:bg-dark-200 shadow-sm dark:shadow-dark-900": tab() === props.tab,
166
"bg-transparent hover:bg-zinc-200/50 dark:hover:bg-dark-300": tab() !== props.tab,
167
}}
168
onclick={() => setTab(props.tab)}
···
433
434
setShowPlcLogs(!showPlcLogs());
435
}}
436
-
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900 flex items-center gap-1 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
437
>
438
<div class="i-lucide-logs text-sm" />
439
{showPlcLogs() ? "Hide" : "Show"} PLC logs
···
456
<button
457
type="button"
458
onclick={() => downloadRepo()}
459
-
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900 flex items-center gap-1 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
460
>
461
<div class="i-lucide-download text-sm" />
462
Export Repo
···
110
<Tooltip text="Filter operations">
111
<div class="i-lucide-filter text-xl" />
112
</Tooltip>
113
+
<div class="dark:shadow-dark-900/80 flex w-fit items-center rounded-full bg-neutral-200 shadow-md dark:bg-neutral-700">
114
<FilterButton icon="i-lucide-at-sign" event="handle" />
115
<FilterButton icon="i-lucide-key-round" event="rotation_key" />
116
<FilterButton icon="i-lucide-server" event="service" />
···
162
<button
163
classList={{
164
"rounded-lg flex flex-1 py-1 justify-center": true,
165
+
"bg-zinc-200/70 dark:bg-dark-200 shadow-sm dark:shadow-dark-900/80": tab() === props.tab,
166
"bg-transparent hover:bg-zinc-200/50 dark:hover:bg-dark-300": tab() !== props.tab,
167
}}
168
onclick={() => setTab(props.tab)}
···
433
434
setShowPlcLogs(!showPlcLogs());
435
}}
436
+
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 flex items-center gap-1 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
437
>
438
<div class="i-lucide-logs text-sm" />
439
{showPlcLogs() ? "Hide" : "Show"} PLC logs
···
456
<button
457
type="button"
458
onclick={() => downloadRepo()}
459
+
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 flex items-center gap-1 rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
460
>
461
<div class="i-lucide-download text-sm" />
462
Export Repo
+3
-3
src/views/stream.tsx
+3
-3
src/views/stream.tsx
···
178
spellcheck={false}
179
placeholder="Comma-separated list of collections"
180
value={searchParams.collections ?? ""}
181
-
class="w-16rem dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900 rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-slate-900 dark:focus:outline-slate-100"
182
/>
183
</label>
184
</Show>
···
190
spellcheck={false}
191
placeholder="Comma-separated list of DIDs"
192
value={searchParams.dids ?? ""}
193
-
class="w-16rem dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900 rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-slate-900 dark:focus:outline-slate-100"
194
/>
195
</label>
196
</Show>
···
238
<button
239
type="button"
240
onclick={() => connectSocket(new FormData(formRef))}
241
-
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900 w-fit rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
242
>
243
{connected() ? "Disconnect" : "Connect"}
244
</button>
···
178
spellcheck={false}
179
placeholder="Comma-separated list of collections"
180
value={searchParams.collections ?? ""}
181
+
class="w-16rem dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-slate-900 dark:focus:outline-slate-100"
182
/>
183
</label>
184
</Show>
···
190
spellcheck={false}
191
placeholder="Comma-separated list of DIDs"
192
value={searchParams.dids ?? ""}
193
+
class="w-16rem dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-slate-900 dark:focus:outline-slate-100"
194
/>
195
</label>
196
</Show>
···
238
<button
239
type="button"
240
onclick={() => connectSocket(new FormData(formRef))}
241
+
class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 w-fit rounded-lg bg-white px-2 py-1.5 text-xs font-bold shadow-sm hover:bg-zinc-200/50"
242
>
243
{connected() ? "Disconnect" : "Connect"}
244
</button>