tangled
alpha
login
or
join now
vielle.dev
/
pdsls
forked from
pds.ls/pdsls
0
fork
atom
atproto explorer
0
fork
atom
overview
issues
pulls
pipelines
restyle modals
handle.invalid
6 months ago
d068f7b9
8b93b86c
+24
-19
11 changed files
expand all
collapse all
unified
split
src
components
account.tsx
button.tsx
create.tsx
editor.tsx
modal.tsx
search.tsx
text-input.tsx
views
labels.tsx
record.tsx
repo.tsx
stream.tsx
+3
-3
src/components/account.tsx
···
68
return (
69
<>
70
<Modal open={openManager()} onClose={() => setOpenManager(false)}>
71
-
<div class="dark:bg-dark-800 dark:shadow-dark-800 absolute top-12 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-200 p-4 text-neutral-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-neutral-200 starting:opacity-0">
72
<div class="mb-2 flex items-center gap-1 font-semibold">
73
<span class="iconify lucide--user-round"></span>
74
<span>Manage accounts</span>
···
76
<div class="mb-3 max-h-[20rem] overflow-y-auto md:max-h-[25rem]">
77
<For each={Object.keys(sessions)}>
78
{(did) => (
79
-
<div class="flex w-full items-center justify-between gap-x-2 rounded-lg hover:bg-neutral-100 active:bg-neutral-100 dark:hover:bg-neutral-600 dark:active:bg-neutral-600">
80
<button
81
class="flex basis-full items-center justify-between gap-1 truncate p-1"
82
onclick={() => resumeSession(did as Did)}
···
113
class="flex items-center rounded-lg p-1 hover:bg-neutral-200 active:bg-neutral-200 dark:hover:bg-neutral-700 dark:active:bg-neutral-700"
114
>
115
{agent() && avatar() ?
116
-
<img src={avatar()} class="dark:shadow-dark-800 size-5 rounded-full shadow-sm" />
117
: <span class="iconify lucide--circle-user-round text-xl"></span>}
118
</button>
119
</>
···
68
return (
69
<>
70
<Modal open={openManager()} onClose={() => setOpenManager(false)}>
71
+
<div class="dark:bg-dark-300 dark:shadow-dark-800 absolute top-12 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-300 sm:w-[24rem] dark:border-neutral-700 starting:opacity-0">
72
<div class="mb-2 flex items-center gap-1 font-semibold">
73
<span class="iconify lucide--user-round"></span>
74
<span>Manage accounts</span>
···
76
<div class="mb-3 max-h-[20rem] overflow-y-auto md:max-h-[25rem]">
77
<For each={Object.keys(sessions)}>
78
{(did) => (
79
+
<div class="flex w-full items-center justify-between gap-x-2 rounded-lg hover:bg-neutral-200 active:bg-neutral-200 dark:hover:bg-neutral-600 dark:active:bg-neutral-600">
80
<button
81
class="flex basis-full items-center justify-between gap-1 truncate p-1"
82
onclick={() => resumeSession(did as Did)}
···
113
class="flex items-center rounded-lg p-1 hover:bg-neutral-200 active:bg-neutral-200 dark:hover:bg-neutral-700 dark:active:bg-neutral-700"
114
>
115
{agent() && avatar() ?
116
+
<img src={avatar()} class="dark:shadow-dark-800 size-5 rounded-full shadow-xs" />
117
: <span class="iconify lucide--circle-user-round text-xl"></span>}
118
</button>
119
</>
+1
-1
src/components/button.tsx
···
13
type="button"
14
class={
15
props.class ??
16
-
"dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-800 dark:active:bg-dark-100 flex items-center gap-1 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 px-2 py-1.5 text-xs font-semibold shadow-sm hover:bg-neutral-100 active:bg-neutral-100 dark:border-neutral-700"
17
}
18
classList={props.classList}
19
onClick={props.onClick}
···
13
type="button"
14
class={
15
props.class ??
16
+
"dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-800 dark:active:bg-dark-100 flex items-center gap-1 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 px-2 py-1.5 text-xs font-semibold shadow-xs hover:bg-neutral-100 active:bg-neutral-100 dark:border-neutral-700"
17
}
18
classList={props.classList}
19
onClick={props.onClick}
+3
-3
src/components/create.tsx
···
164
return (
165
<>
166
<Modal open={openDialog()} onClose={() => setOpenDialog(false)} closeOnClick={false}>
167
-
<div class="dark:bg-dark-800 dark:shadow-dark-800 absolute top-12 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-200 p-2 text-neutral-900 shadow-md transition-opacity duration-300 sm:w-xl sm:p-4 lg:w-[48rem] dark:border-neutral-700 dark:text-neutral-200 starting:opacity-0">
168
<div class="mb-2 flex w-full justify-between">
169
<div class="flex items-center gap-1 font-semibold">
170
<span class="iconify lucide--square-pen"></span>
···
202
<select
203
name="validate"
204
id="validate"
205
-
class="dark:bg-dark-100 dark:shadow-dark-800 rounded-lg border-[0.5px] border-neutral-300 bg-white px-1 py-1 shadow-sm focus:outline-[1.5px] focus:outline-neutral-900 dark:border-neutral-700 dark:focus:outline-neutral-200"
206
>
207
<option value="unset">Unset</option>
208
<option value="true">True</option>
···
211
</div>
212
<div class="flex items-center gap-2">
213
<Show when={!uploading()}>
214
-
<div class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-800 dark:active:bg-dark-100 flex rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 text-xs font-semibold shadow-sm hover:bg-neutral-100 active:bg-neutral-100 dark:border-neutral-700">
215
<input type="file" id="blob" hidden onChange={() => uploadBlob()} />
216
<label class="flex items-center gap-1 px-2 py-1.5" for="blob">
217
<span class="iconify lucide--upload text-sm"></span>
···
164
return (
165
<>
166
<Modal open={openDialog()} onClose={() => setOpenDialog(false)} closeOnClick={false}>
167
+
<div class="dark:bg-dark-300 dark:shadow-dark-800 absolute top-12 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-2 shadow-md transition-opacity duration-300 sm:w-xl sm:p-4 lg:w-[48rem] dark:border-neutral-700 starting:opacity-0">
168
<div class="mb-2 flex w-full justify-between">
169
<div class="flex items-center gap-1 font-semibold">
170
<span class="iconify lucide--square-pen"></span>
···
202
<select
203
name="validate"
204
id="validate"
205
+
class="dark:bg-dark-100 dark:shadow-dark-800 rounded-lg border-[0.5px] border-neutral-300 bg-white px-1 py-1 shadow-xs focus:outline-[1.5px] focus:outline-neutral-900 dark:border-neutral-700 dark:focus:outline-neutral-200"
206
>
207
<option value="unset">Unset</option>
208
<option value="true">True</option>
···
211
</div>
212
<div class="flex items-center gap-2">
213
<Show when={!uploading()}>
214
+
<div class="dark:hover:bg-dark-100 dark:shadow-dark-800 dark:bg-dark-300 dark:active:bg-dark-100 flex rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 text-xs font-semibold shadow-xs hover:bg-neutral-100 active:bg-neutral-100 dark:border-neutral-700">
215
<input type="file" id="blob" hidden onChange={() => uploadBlob()} />
216
<label class="flex items-center gap-1 px-2 py-1.5" for="blob">
217
<span class="iconify lucide--upload text-sm"></span>
+6
-1
src/components/editor.tsx
···
54
window.matchMedia("(prefers-color-scheme: dark)").removeEventListener("change", themeEvent),
55
);
56
57
-
return <div ref={editorDiv} class="dark:shadow-dark-800 shadow-sm"></div>;
0
0
0
0
0
58
};
59
60
export { Editor };
···
54
window.matchMedia("(prefers-color-scheme: dark)").removeEventListener("change", themeEvent),
55
);
56
57
+
return (
58
+
<div
59
+
ref={editorDiv}
60
+
class="dark:shadow-dark-800 border-[0.5px] border-neutral-300 shadow-xs dark:border-neutral-700"
61
+
></div>
62
+
);
63
};
64
65
export { Editor };
+1
-1
src/components/modal.tsx
···
27
document.body.style.overflow = "auto";
28
if (props.onClose) props.onClose();
29
}}
30
-
class="h-full max-h-none w-full max-w-none bg-transparent backdrop:bg-transparent"
31
>
32
{props.children}
33
</dialog>
···
27
document.body.style.overflow = "auto";
28
if (props.onClose) props.onClose();
29
}}
30
+
class="h-full max-h-none w-full max-w-none bg-transparent text-neutral-900 backdrop:bg-transparent dark:text-neutral-200"
31
>
32
{props.children}
33
</dialog>
+1
-1
src/components/search.tsx
···
76
PDS URL, AT URI, or handle
77
</label>
78
<div class="flex w-full items-center gap-2">
79
-
<div class="dark:bg-dark-100 dark:shadow-dark-800 flex grow items-center gap-2 rounded-lg border-[0.5px] border-neutral-300 bg-white px-2 py-1 shadow-sm focus-within:outline-[1.5px] focus-within:outline-neutral-900 dark:border-neutral-700 dark:focus-within:outline-neutral-200">
80
<input
81
type="text"
82
spellcheck={false}
···
76
PDS URL, AT URI, or handle
77
</label>
78
<div class="flex w-full items-center gap-2">
79
+
<div class="dark:bg-dark-100 dark:shadow-dark-800 flex grow items-center gap-2 rounded-lg border-[0.5px] border-neutral-300 bg-white px-2 py-1 shadow-xs focus-within:outline-[1.5px] focus-within:outline-neutral-900 dark:border-neutral-700 dark:focus-within:outline-neutral-200">
80
<input
81
type="text"
82
spellcheck={false}
+1
-1
src/components/text-input.tsx
···
25
disabled={props.disabled}
26
required={props.required}
27
class={
28
-
"dark:bg-dark-100 dark:shadow-dark-800 rounded-lg border-[0.5px] border-neutral-300 bg-white px-2 py-1 shadow-sm placeholder:text-sm focus:outline-[1.5px] focus:outline-neutral-900 dark:border-neutral-700 dark:focus:outline-neutral-200 " +
29
props.class
30
}
31
onInput={props.onInput}
···
25
disabled={props.disabled}
26
required={props.required}
27
class={
28
+
"dark:bg-dark-100 dark:shadow-dark-800 rounded-lg border-[0.5px] border-neutral-300 bg-white px-2 py-1 shadow-xs placeholder:text-sm focus:outline-[1.5px] focus:outline-neutral-900 dark:border-neutral-700 dark:focus:outline-neutral-200 " +
29
props.class
30
}
31
onInput={props.onInput}
+1
-1
src/views/labels.tsx
···
79
spellcheck={false}
80
rows={3}
81
value={searchParams.uriPatterns ?? "*"}
82
-
class="dark:bg-dark-100 dark:shadow-dark-800 mb-1 grow rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-[1.5px] focus:outline-neutral-900 dark:focus:outline-neutral-200"
83
/>
84
<div class="flex justify-center">
85
<Show when={!response.loading}>
···
79
spellcheck={false}
80
rows={3}
81
value={searchParams.uriPatterns ?? "*"}
82
+
class="dark:bg-dark-100 dark:shadow-dark-800 mb-1 grow rounded-lg bg-white px-2 py-1 shadow-xs focus:outline-[1.5px] focus:outline-neutral-900 dark:focus:outline-neutral-200"
83
/>
84
<div class="flex justify-center">
85
<Show when={!response.loading}>
+3
-3
src/views/record.tsx
···
120
return (
121
<Show when={record()} keyed>
122
<div class="flex w-full flex-col items-center">
123
-
<div class="dark:shadow-dark-800 dark:bg-dark-300 mb-3 flex w-[22rem] justify-between rounded-lg bg-neutral-50 px-2 py-1.5 shadow-sm sm:w-[24rem]">
124
<div class="flex gap-3 text-sm">
125
<A
126
classList={{
···
157
</button>
158
</Tooltip>
159
<Modal open={openDelete()} onClose={() => setOpenDelete(false)}>
160
-
<div class="dark:bg-dark-800 dark:shadow-dark-800 absolute top-70 left-[50%] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-200 p-4 text-neutral-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-neutral-200 starting:opacity-0">
161
<h2 class="mb-2 font-semibold">Delete this record?</h2>
162
<div class="flex justify-end gap-2">
163
<Button onClick={() => setOpenDelete(false)}>Cancel</Button>
164
<Button
165
onClick={deleteRecord}
166
-
class="dark:shadow-dark-800 rounded-lg bg-red-500 px-2 py-1.5 text-xs font-semibold text-neutral-200 shadow-sm hover:bg-red-400 active:bg-red-400"
167
>
168
Delete
169
</Button>
···
120
return (
121
<Show when={record()} keyed>
122
<div class="flex w-full flex-col items-center">
123
+
<div class="dark:shadow-dark-800 dark:bg-dark-300 mb-3 flex w-[22rem] justify-between rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 px-2 py-1.5 shadow-xs sm:w-[24rem] dark:border-neutral-700">
124
<div class="flex gap-3 text-sm">
125
<A
126
classList={{
···
157
</button>
158
</Tooltip>
159
<Modal open={openDelete()} onClose={() => setOpenDelete(false)}>
160
+
<div class="dark:bg-dark-300 dark:shadow-dark-800 absolute top-70 left-[50%] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-300 dark:border-neutral-700 starting:opacity-0">
161
<h2 class="mb-2 font-semibold">Delete this record?</h2>
162
<div class="flex justify-end gap-2">
163
<Button onClick={() => setOpenDelete(false)}>Cancel</Button>
164
<Button
165
onClick={deleteRecord}
166
+
class="dark:shadow-dark-800 rounded-lg bg-red-500 px-2 py-1.5 text-xs font-semibold text-neutral-200 shadow-xs hover:bg-red-400 active:bg-red-400"
167
>
168
Delete
169
</Button>
+2
-2
src/views/repo.tsx
···
110
<div class="flex items-center justify-between">
111
<div class="flex items-center gap-1">
112
<div class="iconify lucide--filter" />
113
-
<div class="dark:shadow-dark-800 dark:bg-dark-300 flex w-fit items-center rounded-full border-[0.5px] border-neutral-300 bg-neutral-50 shadow-sm dark:border-neutral-700">
114
<FilterButton icon="iconify lucide--at-sign" event="handle" />
115
<FilterButton icon="iconify lucide--key-round" event="rotation_key" />
116
<FilterButton icon="iconify lucide--hard-drive" event="service" />
···
273
{error()}
274
</div>
275
</Show>
276
-
<div class="dark:shadow-dark-800 dark:bg-dark-300 flex justify-between rounded-lg bg-neutral-50 px-2 py-1.5 text-sm shadow-sm">
277
<Show when={!error()}>
278
<RepoTab tab="collections" label="Collections" icon="lucide--folder-open" />
279
</Show>
···
110
<div class="flex items-center justify-between">
111
<div class="flex items-center gap-1">
112
<div class="iconify lucide--filter" />
113
+
<div class="dark:shadow-dark-800 dark:bg-dark-300 flex w-fit items-center rounded-full border-[0.5px] border-neutral-300 bg-neutral-50 shadow-xs dark:border-neutral-700">
114
<FilterButton icon="iconify lucide--at-sign" event="handle" />
115
<FilterButton icon="iconify lucide--key-round" event="rotation_key" />
116
<FilterButton icon="iconify lucide--hard-drive" event="service" />
···
273
{error()}
274
</div>
275
</Show>
276
+
<div class="dark:shadow-dark-800 dark:bg-dark-300 flex justify-between rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 px-2 py-1.5 text-sm shadow-xs dark:border-neutral-700">
277
<Show when={!error()}>
278
<RepoTab tab="collections" label="Collections" icon="lucide--folder-open" />
279
</Show>
+2
-2
src/views/stream.tsx
···
194
spellcheck={false}
195
placeholder="Comma-separated list of collections"
196
value={searchParams.collections ?? ""}
197
-
class="dark:bg-dark-100 dark:shadow-dark-800 grow rounded-lg border-[0.5px] border-neutral-300 bg-white px-2 py-1 shadow-sm focus:outline-[1.5px] focus:outline-neutral-900 dark:border-neutral-700 dark:focus:outline-neutral-200"
198
/>
199
</label>
200
</Show>
···
206
spellcheck={false}
207
placeholder="Comma-separated list of DIDs"
208
value={searchParams.dids ?? ""}
209
-
class="dark:bg-dark-100 dark:shadow-dark-800 grow rounded-lg border-[0.5px] border-neutral-300 bg-white px-2 py-1 shadow-sm focus:outline-[1.5px] focus:outline-neutral-900 dark:border-neutral-700 dark:focus:outline-neutral-200"
210
/>
211
</label>
212
</Show>
···
194
spellcheck={false}
195
placeholder="Comma-separated list of collections"
196
value={searchParams.collections ?? ""}
197
+
class="dark:bg-dark-100 dark:shadow-dark-800 grow rounded-lg border-[0.5px] border-neutral-300 bg-white px-2 py-1 shadow-xs focus:outline-[1.5px] focus:outline-neutral-900 dark:border-neutral-700 dark:focus:outline-neutral-200"
198
/>
199
</label>
200
</Show>
···
206
spellcheck={false}
207
placeholder="Comma-separated list of DIDs"
208
value={searchParams.dids ?? ""}
209
+
class="dark:bg-dark-100 dark:shadow-dark-800 grow rounded-lg border-[0.5px] border-neutral-300 bg-white px-2 py-1 shadow-xs focus:outline-[1.5px] focus:outline-neutral-900 dark:border-neutral-700 dark:focus:outline-neutral-200"
210
/>
211
</label>
212
</Show>