@fuzdev/fuz_app 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/action_codegen.d.ts.map +1 -1
- package/dist/actions/action_codegen.js +1 -6
- package/dist/ui/AdminOverview.svelte +33 -33
- package/dist/ui/ColumnLayout.svelte +6 -6
- package/dist/ui/Datatable.svelte +14 -14
- package/dist/ui/OpenSignupToggle.svelte +1 -1
- package/dist/ui/SurfaceExplorer.svelte +1 -5
- package/dist/ui/SurfaceExplorer.svelte.d.ts +3 -3
- package/dist/ui/SurfaceExplorer.svelte.d.ts.map +1 -1
- package/dist/ui/auth_state.svelte.d.ts +9 -9
- package/dist/ui/auth_state.svelte.d.ts.map +1 -1
- package/dist/ui/auth_state.svelte.js +5 -5
- package/dist/ui/sidebar_state.svelte.d.ts +5 -5
- package/dist/ui/sidebar_state.svelte.d.ts.map +1 -1
- package/dist/ui/sidebar_state.svelte.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action_codegen.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_codegen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,eAAe,EAAE,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAKxE;;GAEG;AACH,UAAU,UAAU;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa;;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAa;IAE1D;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQrC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;IAOrD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;IAgCtD;;;OAGG;IACH,KAAK,IAAI,MAAM;IAIf;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;OAGG;IACH,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;IAIxB;;OAEG;IACH,KAAK,IAAI,IAAI;CAqDb;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC/B,MAAM,eAAe,EACrB,UAAU,UAAU,GAAG,SAAS,KAC9B,KAAK,CAAC,gBAAgB,CA4DxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GACnC,MAAM,eAAe,EACrB,OAAO,gBAAgB,EACvB,SAAS,aAAa,EACtB,aAAa,MAAM,KACjB,MAkBF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GACnC,MAAM,eAAe,EACrB,UAAU,UAAU,GAAG,SAAS,EAChC,SAAS,aAAa,KACpB,
|
|
1
|
+
{"version":3,"file":"action_codegen.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_codegen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,eAAe,EAAE,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAKxE;;GAEG;AACH,UAAU,UAAU;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa;;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAa;IAE1D;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQrC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;IAOrD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;IAgCtD;;;OAGG;IACH,KAAK,IAAI,MAAM;IAIf;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;OAGG;IACH,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;IAIxB;;OAEG;IACH,KAAK,IAAI,IAAI;CAqDb;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC/B,MAAM,eAAe,EACrB,UAAU,UAAU,GAAG,SAAS,KAC9B,KAAK,CAAC,gBAAgB,CA4DxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GACnC,MAAM,eAAe,EACrB,OAAO,gBAAgB,EACvB,SAAS,aAAa,EACtB,aAAa,MAAM,KACjB,MAkBF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GACnC,MAAM,eAAe,EACrB,UAAU,UAAU,GAAG,SAAS,EAChC,SAAS,aAAa,KACpB,MAyBF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,aAAa,MAAM,KAAG,MACU,CAAC"}
|
|
@@ -257,18 +257,13 @@ export const generate_phase_handlers = (spec, executor, imports) => {
|
|
|
257
257
|
// Backend types file is in server/ subdirectory, so needs different relative paths
|
|
258
258
|
const path_prefix = executor === 'frontend' ? './' : '../';
|
|
259
259
|
imports.add_type(`${path_prefix}action_event.js`, 'ActionEvent');
|
|
260
|
-
// Add environment type import
|
|
261
|
-
const environment_type = executor === 'frontend' ? 'Frontend' : 'Backend';
|
|
262
|
-
const environment_module = executor === 'frontend' ? './frontend.svelte.js' : './backend.js';
|
|
263
|
-
imports.add_type(environment_module, environment_type);
|
|
264
260
|
// Generate handler definitions for each phase
|
|
265
261
|
const phase_handlers = phases
|
|
266
262
|
.map((phase) => {
|
|
267
263
|
// Pass imports to get_handler_return_type so it can add necessary imports
|
|
268
264
|
const return_type = get_handler_return_type(spec, phase, imports, path_prefix);
|
|
269
|
-
// Use the new type parameter approach
|
|
270
265
|
return `${phase}?: (
|
|
271
|
-
action_event: ActionEvent<'${method}',
|
|
266
|
+
action_event: ActionEvent<'${method}', '${phase}', 'handling'>
|
|
272
267
|
) => ${return_type}`;
|
|
273
268
|
})
|
|
274
269
|
.join(';\n\t\t');
|
|
@@ -67,20 +67,20 @@
|
|
|
67
67
|
<!-- TODO: panels will be user-draggable/rearrangeable, hardcoded order for now -->
|
|
68
68
|
<div class="overview">
|
|
69
69
|
<section>
|
|
70
|
-
<div class="
|
|
70
|
+
<div class="panel-header">
|
|
71
71
|
<h3>accounts</h3>
|
|
72
72
|
<a href={resolve('/admin/accounts' as any)} class="text_50 font_size_sm">view all →</a>
|
|
73
73
|
</div>
|
|
74
74
|
{#if accounts.loading}
|
|
75
75
|
<p class="text_50">loading...</p>
|
|
76
76
|
{:else if accounts.error}
|
|
77
|
-
<p class="
|
|
77
|
+
<p class="color_c_50">{accounts.error}</p>
|
|
78
78
|
{:else}
|
|
79
|
-
<div class="
|
|
79
|
+
<div class="baseline-row gap_xs">
|
|
80
80
|
<strong class="font_size_lg">{accounts.account_count}</strong>
|
|
81
81
|
<span class="text_50">accounts</span>
|
|
82
82
|
</div>
|
|
83
|
-
<div class="
|
|
83
|
+
<div class="baseline-row gap_xs flex-wrap:wrap font_size_sm mt_xs">
|
|
84
84
|
{#each role_counts as [role, count] (role)}
|
|
85
85
|
<span>{count} {role}</span>
|
|
86
86
|
<span class="text_50">·</span>
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
<span>{unroled_count} unroled</span>
|
|
89
89
|
</div>
|
|
90
90
|
{#if accounts.accounts.length > 0}
|
|
91
|
-
<ul class="
|
|
91
|
+
<ul class="compact-list">
|
|
92
92
|
{#each accounts.accounts.slice(0, 6) as entry (entry)}
|
|
93
93
|
<li>
|
|
94
94
|
<strong>{entry.account.username}</strong>
|
|
@@ -109,25 +109,25 @@
|
|
|
109
109
|
</section>
|
|
110
110
|
|
|
111
111
|
<section>
|
|
112
|
-
<div class="
|
|
112
|
+
<div class="panel-header">
|
|
113
113
|
<h3>sessions</h3>
|
|
114
114
|
<a href={resolve('/admin/sessions' as any)} class="text_50 font_size_sm">view all →</a>
|
|
115
115
|
</div>
|
|
116
116
|
{#if sessions.loading}
|
|
117
117
|
<p class="text_50">loading...</p>
|
|
118
118
|
{:else if sessions.error}
|
|
119
|
-
<p class="
|
|
119
|
+
<p class="color_c_50">{sessions.error}</p>
|
|
120
120
|
{:else}
|
|
121
|
-
<div class="
|
|
121
|
+
<div class="baseline-row gap_xs">
|
|
122
122
|
<strong class="font_size_lg">{sessions.active_count}</strong>
|
|
123
123
|
<span class="text_50">active</span>
|
|
124
124
|
</div>
|
|
125
|
-
<div class="
|
|
125
|
+
<div class="baseline-row gap_xs">
|
|
126
126
|
<strong class="font_size_lg">{unique_users}</strong>
|
|
127
127
|
<span class="text_50">unique users</span>
|
|
128
128
|
</div>
|
|
129
129
|
{#if most_recent}
|
|
130
|
-
<div class="
|
|
130
|
+
<div class="baseline-row gap_xs font_size_sm mt_sm">
|
|
131
131
|
<span class="text_50">last active:</span>
|
|
132
132
|
<strong>{most_recent.username}</strong>
|
|
133
133
|
<span class="text_50" title={format_datetime_local(most_recent.last_seen_at)}
|
|
@@ -139,16 +139,16 @@
|
|
|
139
139
|
</section>
|
|
140
140
|
|
|
141
141
|
<section>
|
|
142
|
-
<div class="
|
|
142
|
+
<div class="panel-header">
|
|
143
143
|
<h3>invites</h3>
|
|
144
144
|
<a href={resolve('/admin/invites' as any)} class="text_50 font_size_sm">view all →</a>
|
|
145
145
|
</div>
|
|
146
146
|
{#if invites.loading}
|
|
147
147
|
<p class="text_50">loading...</p>
|
|
148
148
|
{:else if invites.error}
|
|
149
|
-
<p class="
|
|
149
|
+
<p class="color_c_50">{invites.error}</p>
|
|
150
150
|
{:else}
|
|
151
|
-
<div class="
|
|
151
|
+
<div class="baseline-row gap_sm">
|
|
152
152
|
<span class="text_50">public signup</span>
|
|
153
153
|
{#if app_settings.settings?.open_signup}
|
|
154
154
|
<span class="chip color_b">open</span>
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
<span class="chip">closed</span>
|
|
157
157
|
{/if}
|
|
158
158
|
</div>
|
|
159
|
-
<div class="
|
|
159
|
+
<div class="baseline-row gap_xs">
|
|
160
160
|
<strong class="font_size_lg">{invites.unclaimed_count}</strong>
|
|
161
161
|
<span class="text_50">unclaimed</span>
|
|
162
162
|
<span class="text_50">/</span>
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
<span class="text_50">total</span>
|
|
165
165
|
</div>
|
|
166
166
|
{#if invites.invites.length > 0}
|
|
167
|
-
<ul class="
|
|
167
|
+
<ul class="compact-list">
|
|
168
168
|
{#each invites.invites.slice(0, 4) as invite (invite.id)}
|
|
169
169
|
<li>
|
|
170
170
|
<span>{invite.email || invite.username || '—'}</span>
|
|
@@ -184,18 +184,18 @@
|
|
|
184
184
|
</section>
|
|
185
185
|
|
|
186
186
|
<section>
|
|
187
|
-
<div class="
|
|
187
|
+
<div class="panel-header">
|
|
188
188
|
<h3>recent activity</h3>
|
|
189
189
|
<a href={resolve('/admin/audit-log' as any)} class="text_50 font_size_sm">view all →</a>
|
|
190
190
|
</div>
|
|
191
191
|
{#if audit_log.loading}
|
|
192
192
|
<p class="text_50">loading...</p>
|
|
193
193
|
{:else if audit_log.error}
|
|
194
|
-
<p class="
|
|
194
|
+
<p class="color_c_50">{audit_log.error}</p>
|
|
195
195
|
{:else if recent_events.length === 0}
|
|
196
196
|
<p class="text_50">no events</p>
|
|
197
197
|
{:else}
|
|
198
|
-
<ul class="
|
|
198
|
+
<ul class="compact-list">
|
|
199
199
|
{#each recent_events as event (event.id)}
|
|
200
200
|
<li>
|
|
201
201
|
<span class="text_50 font_size_sm" title={format_datetime_local(event.created_at)}
|
|
@@ -212,27 +212,27 @@
|
|
|
212
212
|
</section>
|
|
213
213
|
|
|
214
214
|
<section>
|
|
215
|
-
<div class="
|
|
215
|
+
<div class="panel-header">
|
|
216
216
|
<h3>security</h3>
|
|
217
217
|
<a href={resolve('/admin/audit-log' as any)} class="text_50 font_size_sm">audit log →</a>
|
|
218
218
|
</div>
|
|
219
219
|
{#if audit_log.loading}
|
|
220
220
|
<p class="text_50">loading...</p>
|
|
221
221
|
{:else if audit_log.error}
|
|
222
|
-
<p class="
|
|
222
|
+
<p class="color_c_50">{audit_log.error}</p>
|
|
223
223
|
{:else}
|
|
224
|
-
<div class="
|
|
225
|
-
<strong class="font_size_lg" class:
|
|
224
|
+
<div class="baseline-row gap_xs">
|
|
225
|
+
<strong class="font_size_lg" class:color_c_50={failed_logins.length > 0}>
|
|
226
226
|
{failed_logins.length}
|
|
227
227
|
</strong>
|
|
228
228
|
<span class="text_50">failed logins</span>
|
|
229
229
|
</div>
|
|
230
|
-
<div class="
|
|
230
|
+
<div class="baseline-row gap_xs">
|
|
231
231
|
<strong class="font_size_lg">{permit_changes.length}</strong>
|
|
232
232
|
<span class="text_50">permit changes</span>
|
|
233
233
|
</div>
|
|
234
234
|
{#if permit_changes.length > 0}
|
|
235
|
-
<ul class="
|
|
235
|
+
<ul class="compact-list">
|
|
236
236
|
{#each permit_changes.slice(0, 4) as event (event.id)}
|
|
237
237
|
<li class="font_size_sm">
|
|
238
238
|
<span class="text_50" title={format_datetime_local(event.created_at)}
|
|
@@ -250,15 +250,15 @@
|
|
|
250
250
|
</section>
|
|
251
251
|
|
|
252
252
|
<section>
|
|
253
|
-
<div class="
|
|
253
|
+
<div class="panel-header">
|
|
254
254
|
<h3>system</h3>
|
|
255
255
|
</div>
|
|
256
256
|
{#if app_settings.loading}
|
|
257
257
|
<p class="text_50">loading...</p>
|
|
258
258
|
{:else if app_settings.error}
|
|
259
|
-
<p class="
|
|
259
|
+
<p class="color_c_50">{app_settings.error}</p>
|
|
260
260
|
{:else}
|
|
261
|
-
<div class="
|
|
261
|
+
<div class="baseline-row gap_sm">
|
|
262
262
|
<span class="text_50">public signup</span>
|
|
263
263
|
{#if app_settings.settings?.open_signup}
|
|
264
264
|
<span class="chip color_b">open</span>
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
{/if}
|
|
268
268
|
</div>
|
|
269
269
|
{#if app_settings.settings?.updated_at}
|
|
270
|
-
<div class="
|
|
270
|
+
<div class="baseline-row gap_xs font_size_sm mt_xs">
|
|
271
271
|
<span class="text_50">last changed:</span>
|
|
272
272
|
<span title={format_datetime_local(app_settings.settings.updated_at)}>
|
|
273
273
|
{format_relative_time(app_settings.settings.updated_at)}
|
|
@@ -280,7 +280,7 @@
|
|
|
280
280
|
{/if}
|
|
281
281
|
{/if}
|
|
282
282
|
{#if auth_state.account}
|
|
283
|
-
<div class="
|
|
283
|
+
<div class="baseline-row gap_sm">
|
|
284
284
|
<span class="text_50">logged in as</span>
|
|
285
285
|
<strong>{auth_state.account.username}</strong>
|
|
286
286
|
</div>
|
|
@@ -310,25 +310,25 @@
|
|
|
310
310
|
gap: var(--space_lg);
|
|
311
311
|
}
|
|
312
312
|
|
|
313
|
-
.
|
|
313
|
+
.panel-header {
|
|
314
314
|
display: flex;
|
|
315
315
|
justify-content: space-between;
|
|
316
316
|
align-items: baseline;
|
|
317
317
|
margin-bottom: var(--space_md);
|
|
318
318
|
}
|
|
319
319
|
|
|
320
|
-
.
|
|
320
|
+
.baseline-row {
|
|
321
321
|
display: flex;
|
|
322
322
|
align-items: baseline;
|
|
323
323
|
}
|
|
324
324
|
|
|
325
|
-
.
|
|
325
|
+
.compact-list {
|
|
326
326
|
list-style: none;
|
|
327
327
|
padding: 0;
|
|
328
328
|
margin: var(--space_sm) 0 0;
|
|
329
329
|
}
|
|
330
330
|
|
|
331
|
-
.
|
|
331
|
+
.compact-list li {
|
|
332
332
|
display: flex;
|
|
333
333
|
align-items: baseline;
|
|
334
334
|
gap: var(--space_xs);
|
|
@@ -15,29 +15,29 @@
|
|
|
15
15
|
} = $props();
|
|
16
16
|
</script>
|
|
17
17
|
|
|
18
|
-
<div class="
|
|
19
|
-
<aside class="
|
|
18
|
+
<div class="column-layout {class_name}" style:--column_width={column_width} {...rest}>
|
|
19
|
+
<aside class="column-fixed unstyled">
|
|
20
20
|
{@render aside()}
|
|
21
21
|
</aside>
|
|
22
|
-
<div class="
|
|
22
|
+
<div class="column-fluid">
|
|
23
23
|
{@render children()}
|
|
24
24
|
</div>
|
|
25
25
|
</div>
|
|
26
26
|
|
|
27
27
|
<style>
|
|
28
|
-
.
|
|
28
|
+
.column-layout {
|
|
29
29
|
display: flex;
|
|
30
30
|
height: 100%;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
.
|
|
33
|
+
.column-fixed {
|
|
34
34
|
width: var(--column_width, 280px);
|
|
35
35
|
min-width: var(--column_width, 280px);
|
|
36
36
|
height: 100%;
|
|
37
37
|
overflow: auto;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
.
|
|
40
|
+
.column-fluid {
|
|
41
41
|
flex: 1;
|
|
42
42
|
height: 100%;
|
|
43
43
|
min-width: 0;
|
package/dist/ui/Datatable.svelte
CHANGED
|
@@ -78,16 +78,16 @@
|
|
|
78
78
|
aria-rowcount={rows.length + 1}
|
|
79
79
|
>
|
|
80
80
|
<!-- sticky header -->
|
|
81
|
-
<div class="
|
|
81
|
+
<div class="datatable-header" role="row" aria-rowindex={1}>
|
|
82
82
|
{#each columns as column, i (column.key)}
|
|
83
|
-
<div class="
|
|
83
|
+
<div class="datatable-header-cell" role="columnheader">
|
|
84
84
|
{#if header}
|
|
85
85
|
{@render header(column)}
|
|
86
86
|
{:else}
|
|
87
87
|
{column.label}
|
|
88
88
|
{/if}
|
|
89
89
|
<div
|
|
90
|
-
class="
|
|
90
|
+
class="datatable-resize-handle"
|
|
91
91
|
role="separator"
|
|
92
92
|
onpointerdown={(e) => handle_resize_start(e, i)}
|
|
93
93
|
onpointermove={handle_resize_move}
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
</div>
|
|
99
99
|
|
|
100
100
|
{#if rows.length === 0}
|
|
101
|
-
<div class="
|
|
101
|
+
<div class="datatable-empty">
|
|
102
102
|
{#if empty}
|
|
103
103
|
{@render empty()}
|
|
104
104
|
{:else}
|
|
@@ -107,9 +107,9 @@
|
|
|
107
107
|
</div>
|
|
108
108
|
{:else}
|
|
109
109
|
{#each rows as row, i (row[row_key] ?? i)}
|
|
110
|
-
<div class="
|
|
110
|
+
<div class="datatable-row" role="row" aria-rowindex={i + 2}>
|
|
111
111
|
{#each columns as column (column.key)}
|
|
112
|
-
<div class="
|
|
112
|
+
<div class="datatable-cell" role="gridcell">
|
|
113
113
|
{#if cell}
|
|
114
114
|
{@render cell(column, row, row[column.key])}
|
|
115
115
|
{:else if column.format}
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
overflow: auto;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
.
|
|
134
|
+
.datatable-header {
|
|
135
135
|
display: grid;
|
|
136
136
|
grid-column: 1 / -1;
|
|
137
137
|
grid-template-columns: subgrid;
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
border-bottom: var(--border_width, 1px) solid var(--border_color);
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
.
|
|
145
|
+
.datatable-header-cell {
|
|
146
146
|
position: relative;
|
|
147
147
|
display: flex;
|
|
148
148
|
align-items: center;
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
font-weight: 600;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
.
|
|
153
|
+
.datatable-resize-handle {
|
|
154
154
|
position: absolute;
|
|
155
155
|
top: 0;
|
|
156
156
|
right: 0;
|
|
@@ -159,11 +159,11 @@
|
|
|
159
159
|
cursor: col-resize;
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
.
|
|
163
|
-
background: var(--
|
|
162
|
+
.datatable-resize-handle:hover {
|
|
163
|
+
background: var(--color_a_10);
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
-
.
|
|
166
|
+
.datatable-row {
|
|
167
167
|
display: grid;
|
|
168
168
|
grid-column: 1 / -1;
|
|
169
169
|
grid-template-columns: subgrid;
|
|
@@ -172,13 +172,13 @@
|
|
|
172
172
|
border-bottom: var(--border_width, 1px) solid var(--border_color);
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
.
|
|
175
|
+
.datatable-cell {
|
|
176
176
|
padding: var(--space_xs);
|
|
177
177
|
min-width: 0; /* override grid auto minimum to respect column widths */
|
|
178
178
|
overflow-wrap: break-word;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
.
|
|
181
|
+
.datatable-empty {
|
|
182
182
|
grid-column: 1 / -1;
|
|
183
183
|
padding: var(--space_lg);
|
|
184
184
|
}
|
|
@@ -4,11 +4,7 @@
|
|
|
4
4
|
import type {AppSurface, AppSurfaceRoute, AppSurfaceDiagnostic} from '../http/surface.js';
|
|
5
5
|
import {surface_auth_summary, format_route_key} from '../http/surface_query.js';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
surface: AppSurface;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const {surface}: Props = $props();
|
|
7
|
+
const {surface}: {surface: AppSurface} = $props();
|
|
12
8
|
|
|
13
9
|
const auth_types = ['all', 'none', 'authenticated', 'role', 'keeper'] as const;
|
|
14
10
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { AppSurface } from '../http/surface.js';
|
|
2
|
-
|
|
2
|
+
type $$ComponentProps = {
|
|
3
3
|
surface: AppSurface;
|
|
4
|
-
}
|
|
5
|
-
declare const SurfaceExplorer: import("svelte").Component
|
|
4
|
+
};
|
|
5
|
+
declare const SurfaceExplorer: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
6
|
type SurfaceExplorer = ReturnType<typeof SurfaceExplorer>;
|
|
7
7
|
export default SurfaceExplorer;
|
|
8
8
|
//# sourceMappingURL=SurfaceExplorer.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SurfaceExplorer.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/SurfaceExplorer.svelte"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAwC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"SurfaceExplorer.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/SurfaceExplorer.svelte"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAwC,MAAM,oBAAoB,CAAC;AAGzF,KAAK,gBAAgB,GAAI;IAAC,OAAO,EAAE,UAAU,CAAA;CAAC,CAAC;AAsRhD,QAAA,MAAM,eAAe,sDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -32,6 +32,15 @@
|
|
|
32
32
|
* @module
|
|
33
33
|
*/
|
|
34
34
|
import { type Permit, type SessionAccount } from '../auth/account_schema.js';
|
|
35
|
+
/**
|
|
36
|
+
* Svelte context for `AuthState`.
|
|
37
|
+
* Use `auth_state_context.set(state)` in the provider and `auth_state_context.get()` to access.
|
|
38
|
+
*/
|
|
39
|
+
export declare const auth_state_context: {
|
|
40
|
+
get: (error_message?: string) => AuthState;
|
|
41
|
+
get_maybe: () => AuthState | undefined;
|
|
42
|
+
set: (value: AuthState) => AuthState;
|
|
43
|
+
};
|
|
35
44
|
export declare class AuthState {
|
|
36
45
|
verifying: boolean;
|
|
37
46
|
verified: boolean;
|
|
@@ -73,13 +82,4 @@ export declare class AuthState {
|
|
|
73
82
|
*/
|
|
74
83
|
logout(): Promise<void>;
|
|
75
84
|
}
|
|
76
|
-
/**
|
|
77
|
-
* Svelte context for `AuthState`.
|
|
78
|
-
* Use `auth_state_context.set(state)` in the provider and `auth_state_context.get()` to access.
|
|
79
|
-
*/
|
|
80
|
-
export declare const auth_state_context: {
|
|
81
|
-
get: (error_message?: string) => AuthState;
|
|
82
|
-
get_maybe: () => AuthState | undefined;
|
|
83
|
-
set: (value: AuthState) => AuthState;
|
|
84
|
-
};
|
|
85
85
|
//# sourceMappingURL=auth_state.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/auth_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;
|
|
1
|
+
{"version":3,"file":"auth_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/auth_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAKH,OAAO,EAAC,KAAK,MAAM,EAAoB,KAAK,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAE7F;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;CAA8B,CAAC;AAE9D,qBAAa,SAAS;IACrB,SAAS,UAAqB;IAC9B,QAAQ,UAAqB;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAoB;IAC/C,OAAO,EAAE,cAAc,GAAG,IAAI,CAAoB;IAClD,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAkB;IACxC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAEpC;IACF,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAoD;IAEjF,gEAAgE;IAChE,eAAe,UAAqB;IAEpC;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BpC;;;;OAIG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwCjE;;;;OAIG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCpF;;;;OAIG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4ClF;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
|
|
@@ -34,6 +34,11 @@
|
|
|
34
34
|
import { create_context } from '@fuzdev/fuz_ui/context_helpers.js';
|
|
35
35
|
import { ui_fetch } from './ui_fetch.js';
|
|
36
36
|
import { is_permit_active } from '../auth/account_schema.js';
|
|
37
|
+
/**
|
|
38
|
+
* Svelte context for `AuthState`.
|
|
39
|
+
* Use `auth_state_context.set(state)` in the provider and `auth_state_context.get()` to access.
|
|
40
|
+
*/
|
|
41
|
+
export const auth_state_context = create_context();
|
|
37
42
|
export class AuthState {
|
|
38
43
|
verifying = $state.raw(false);
|
|
39
44
|
verified = $state.raw(false);
|
|
@@ -231,8 +236,3 @@ export class AuthState {
|
|
|
231
236
|
this.permits = [];
|
|
232
237
|
}
|
|
233
238
|
}
|
|
234
|
-
/**
|
|
235
|
-
* Svelte context for `AuthState`.
|
|
236
|
-
* Use `auth_state_context.set(state)` in the provider and `auth_state_context.get()` to access.
|
|
237
|
-
*/
|
|
238
|
-
export const auth_state_context = create_context();
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export declare const sidebar_state_context: {
|
|
2
|
+
get: (error_message?: string) => () => SidebarState;
|
|
3
|
+
get_maybe: () => (() => SidebarState) | undefined;
|
|
4
|
+
set: (value: () => SidebarState) => () => SidebarState;
|
|
5
|
+
};
|
|
1
6
|
/**
|
|
2
7
|
* Options for configuring a `SidebarState`.
|
|
3
8
|
*
|
|
@@ -22,9 +27,4 @@ export declare class SidebarState {
|
|
|
22
27
|
*/
|
|
23
28
|
activate(): () => void;
|
|
24
29
|
}
|
|
25
|
-
export declare const sidebar_state_context: {
|
|
26
|
-
get: (error_message?: string) => () => SidebarState;
|
|
27
|
-
get_maybe: () => (() => SidebarState) | undefined;
|
|
28
|
-
set: (value: () => SidebarState) => () => SidebarState;
|
|
29
|
-
};
|
|
30
30
|
//# sourceMappingURL=sidebar_state.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/sidebar_state.svelte.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IACnC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;CACxB;AAED,qBAAa,YAAY;;IAKxB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED,IAAI,YAAY,IAAI,OAAO,CAG1B;IAED,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;gBAEW,OAAO,CAAC,EAAE,mBAAmB;IAIzC,cAAc,CAAC,KAAK,GAAE,OAA4B,GAAG,IAAI;IAIzD;;;OAGG;IACH,QAAQ,IAAI,MAAM,IAAI;CAQtB
|
|
1
|
+
{"version":3,"file":"sidebar_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/sidebar_state.svelte.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB;2CAAwB,YAAY;4BAAZ,YAAY;uBAAZ,YAAY,WAAZ,YAAY;CAAG,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IACnC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;CACxB;AAED,qBAAa,YAAY;;IAKxB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED,IAAI,YAAY,IAAI,OAAO,CAG1B;IAED,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;gBAEW,OAAO,CAAC,EAAE,mBAAmB;IAIzC,cAAc,CAAC,KAAK,GAAE,OAA4B,GAAG,IAAI;IAIzD;;;OAGG;IACH,QAAQ,IAAI,MAAM,IAAI;CAQtB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { create_context } from '@fuzdev/fuz_ui/context_helpers.js';
|
|
2
|
+
export const sidebar_state_context = create_context();
|
|
2
3
|
export class SidebarState {
|
|
3
4
|
#get_enabled;
|
|
4
5
|
#enabled = $state.raw(true);
|
|
@@ -36,4 +37,3 @@ export class SidebarState {
|
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
|
-
export const sidebar_state_context = create_context();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fuzdev/fuz_app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "fullstack app library",
|
|
5
5
|
"glyph": "🗝",
|
|
6
6
|
"logo": "logo.svg",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@fuzdev/fuz_code": "^0.45.1",
|
|
47
47
|
"@fuzdev/fuz_css": "^0.58.0",
|
|
48
48
|
"@fuzdev/fuz_ui": "^0.191.2",
|
|
49
|
-
"@fuzdev/fuz_util": "^0.
|
|
49
|
+
"@fuzdev/fuz_util": "^0.56.0",
|
|
50
50
|
"@fuzdev/gro": "^0.197.3",
|
|
51
51
|
"@jridgewell/trace-mapping": "^0.3.31",
|
|
52
52
|
"@node-rs/argon2": "^2.0.2",
|