@fuzdev/fuz_ui 0.207.0 → 0.208.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/README.md +1 -1
- package/dist/ApiIndex.svelte +9 -9
- package/dist/ApiModule.svelte +4 -4
- package/dist/DeclarationDetail.svelte +26 -5
- package/dist/DeclarationDetail.svelte.d.ts +1 -1
- package/dist/DeclarationDetail.svelte.d.ts.map +1 -1
- package/dist/ProjectLinks.svelte +2 -1
- package/dist/ProjectLinks.svelte.d.ts.map +1 -1
- package/dist/TypeLink.svelte +11 -0
- package/dist/TypeLink.svelte.d.ts +9 -0
- package/dist/TypeLink.svelte.d.ts.map +1 -1
- package/dist/api_search.svelte.d.ts +17 -20
- package/dist/api_search.svelte.d.ts.map +1 -1
- package/dist/api_search.svelte.js +32 -63
- package/dist/csp.d.ts +19 -1
- package/dist/csp.d.ts.map +1 -1
- package/dist/csp.js +26 -1
- package/dist/declaration.svelte.d.ts +25 -1
- package/dist/declaration.svelte.d.ts.map +1 -1
- package/dist/declaration.svelte.js +43 -3
- package/dist/project_stats_data.d.ts.map +1 -1
- package/dist/project_stats_data.js +25 -18
- package/package.json +3 -3
- package/src/lib/api_search.svelte.ts +34 -82
- package/src/lib/csp.ts +27 -1
- package/src/lib/declaration.svelte.ts +49 -3
- package/src/lib/project_stats_data.ts +25 -18
package/README.md
CHANGED
package/dist/ApiIndex.svelte
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import DocsSearch from './DocsSearch.svelte';
|
|
7
7
|
import ApiModulesList from './ApiModulesList.svelte';
|
|
8
8
|
import ApiDeclarationList from './ApiDeclarationList.svelte';
|
|
9
|
-
import {
|
|
9
|
+
import { ApiSearchState } from './api_search.svelte.js';
|
|
10
10
|
|
|
11
11
|
const {
|
|
12
12
|
library: library_prop,
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
const get_library = set_library_context_with_fallback(() => library_prop, 'ApiIndex');
|
|
34
34
|
const library = $derived(get_library());
|
|
35
35
|
|
|
36
|
-
const search = $derived(
|
|
36
|
+
const search = $derived(new ApiSearchState(library));
|
|
37
37
|
</script>
|
|
38
38
|
|
|
39
39
|
<svelte:head>
|
|
@@ -49,21 +49,21 @@
|
|
|
49
49
|
<section>
|
|
50
50
|
<p>{library.pkg_json.description}</p>
|
|
51
51
|
|
|
52
|
-
{#if search.modules.
|
|
52
|
+
{#if search.modules.length + search.declarations.length > 1}
|
|
53
53
|
<DocsSearch
|
|
54
|
-
module_count={search.modules.
|
|
55
|
-
declaration_count={search.declarations.
|
|
56
|
-
filtered_module_count={search.query.trim() ? search.
|
|
54
|
+
module_count={search.modules.length}
|
|
55
|
+
declaration_count={search.declarations.length}
|
|
56
|
+
filtered_module_count={search.query.trim() ? search.modules_filtered.length : undefined}
|
|
57
57
|
filtered_declaration_count={search.query.trim()
|
|
58
|
-
? search.
|
|
58
|
+
? search.declarations_filtered.length
|
|
59
59
|
: undefined}
|
|
60
60
|
bind:search_query={search.query}
|
|
61
61
|
/>
|
|
62
62
|
{/if}
|
|
63
63
|
</section>
|
|
64
64
|
|
|
65
|
-
<ApiModulesList modules={search.
|
|
65
|
+
<ApiModulesList modules={search.modules_filtered} search_query={search.query} />
|
|
66
66
|
|
|
67
|
-
<ApiDeclarationList declarations={search.
|
|
67
|
+
<ApiDeclarationList declarations={search.declarations_filtered} search_query={search.query} />
|
|
68
68
|
{/if}
|
|
69
69
|
</TomeContent>
|
package/dist/ApiModule.svelte
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import DocsLink from './DocsLink.svelte';
|
|
18
18
|
import DeclarationLink from './DeclarationLink.svelte';
|
|
19
19
|
import ApiDeclarationList from './ApiDeclarationList.svelte';
|
|
20
|
-
import {
|
|
20
|
+
import { DeclarationSearchState } from './api_search.svelte.js';
|
|
21
21
|
|
|
22
22
|
const {
|
|
23
23
|
module_path: module_path_param,
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
module?.path || (directory_modules ? module_path : '[missing module]')
|
|
65
65
|
);
|
|
66
66
|
|
|
67
|
-
const search = $derived(
|
|
67
|
+
const search = $derived(new DeclarationSearchState(module?.declarations ?? []));
|
|
68
68
|
|
|
69
69
|
// GitHub source URL for the module
|
|
70
70
|
const source_url = $derived(module?.url_github);
|
|
@@ -117,11 +117,11 @@
|
|
|
117
117
|
<TomeSection>
|
|
118
118
|
<TomeSectionHeader text="Declarations" />
|
|
119
119
|
|
|
120
|
-
{#if search.
|
|
120
|
+
{#if search.declarations.length > 1}
|
|
121
121
|
<section>
|
|
122
122
|
<DocsSearch
|
|
123
123
|
placeholder="search declarations in this module..."
|
|
124
|
-
declaration_count={search.
|
|
124
|
+
declaration_count={search.declarations.length}
|
|
125
125
|
filtered_declaration_count={search.query.trim() ? search.filtered.length : undefined}
|
|
126
126
|
bind:search_query={search.query}
|
|
127
127
|
/>
|
|
@@ -7,7 +7,7 @@ type, variable, enum, component, snippet) and their kind-specific fields
|
|
|
7
7
|
including parameters, props, members, overloads, external types, and more.
|
|
8
8
|
|
|
9
9
|
@see `declaration.svelte.ts` for the `Declaration` wrapper class
|
|
10
|
-
@see {@link https://github.com/
|
|
10
|
+
@see {@link https://github.com/fuzdev/svelte-docinfo svelte-docinfo} for the analysis library
|
|
11
11
|
-->
|
|
12
12
|
<script lang="ts">
|
|
13
13
|
import Code from '@fuzdev/fuz_code/Code.svelte';
|
|
@@ -50,6 +50,7 @@ including parameters, props, members, overloads, external types, and more.
|
|
|
50
50
|
// sections for the same fields instead).
|
|
51
51
|
interface DocExtras {
|
|
52
52
|
deprecatedMessage?: string;
|
|
53
|
+
internalMessage?: string;
|
|
53
54
|
since?: string;
|
|
54
55
|
examples?: Array<string>;
|
|
55
56
|
seeAlso?: Array<string>;
|
|
@@ -96,7 +97,7 @@ including parameters, props, members, overloads, external types, and more.
|
|
|
96
97
|
</div>
|
|
97
98
|
{/snippet}
|
|
98
99
|
|
|
99
|
-
<!-- Compact prose metadata for props and members (deprecated, since, examples, see also, throws). -->
|
|
100
|
+
<!-- Compact prose metadata for props and members (deprecated, internal, since, examples, see also, throws). -->
|
|
100
101
|
{#snippet doc_extras(item: DocExtras)}
|
|
101
102
|
<!-- eslint-disable-next-line @typescript-eslint/no-deprecated -->
|
|
102
103
|
{#if item.deprecatedMessage !== undefined}
|
|
@@ -106,6 +107,12 @@ including parameters, props, members, overloads, external types, and more.
|
|
|
106
107
|
{#if item.deprecatedMessage}{item.deprecatedMessage}{/if}
|
|
107
108
|
</p>
|
|
108
109
|
{/if}
|
|
110
|
+
{#if item.internalMessage !== undefined}
|
|
111
|
+
<p class="row gap_md">
|
|
112
|
+
<span class="chip">internal</span>
|
|
113
|
+
{#if item.internalMessage}{item.internalMessage}{/if}
|
|
114
|
+
</p>
|
|
115
|
+
{/if}
|
|
109
116
|
{#if item.since}
|
|
110
117
|
<p><strong>since</strong> {item.since}</p>
|
|
111
118
|
{/if}
|
|
@@ -159,8 +166,10 @@ including parameters, props, members, overloads, external types, and more.
|
|
|
159
166
|
<!-- chips -->
|
|
160
167
|
<!-- eslint-disable-next-line @typescript-eslint/no-deprecated -->
|
|
161
168
|
{#if declaration.is_deprecated ||
|
|
169
|
+
declaration.is_internal ||
|
|
162
170
|
declaration.reactivity ||
|
|
163
171
|
declaration.accepts_children ||
|
|
172
|
+
declaration.merged_value ||
|
|
164
173
|
declaration.alias_of
|
|
165
174
|
}
|
|
166
175
|
<p class="row gap_md flex-wrap:wrap">
|
|
@@ -168,12 +177,18 @@ including parameters, props, members, overloads, external types, and more.
|
|
|
168
177
|
{#if declaration.is_deprecated}
|
|
169
178
|
<span class="chip">⚠️ deprecated</span>
|
|
170
179
|
{/if}
|
|
180
|
+
{#if declaration.is_internal}
|
|
181
|
+
<span class="chip">internal</span>
|
|
182
|
+
{/if}
|
|
171
183
|
{#if declaration.reactivity}
|
|
172
184
|
<span class="chip">{declaration.reactivity}</span>
|
|
173
185
|
{/if}
|
|
174
186
|
{#if declaration.accepts_children}
|
|
175
187
|
<span class="chip">accepts children</span>
|
|
176
188
|
{/if}
|
|
189
|
+
{#if declaration.merged_value}
|
|
190
|
+
<span class="chip">value + type</span>
|
|
191
|
+
{/if}
|
|
177
192
|
{#if declaration.alias_of}
|
|
178
193
|
<span class="chip">
|
|
179
194
|
alias of {declaration.alias_of.name}{#if declaration.alias_of.module}
|
|
@@ -202,17 +217,23 @@ including parameters, props, members, overloads, external types, and more.
|
|
|
202
217
|
</p>
|
|
203
218
|
{/if}
|
|
204
219
|
|
|
220
|
+
{#if declaration.internal_message}
|
|
221
|
+
<p>{declaration.internal_message}</p>
|
|
222
|
+
{/if}
|
|
223
|
+
|
|
205
224
|
<!-- type signature -->
|
|
206
225
|
{#if declaration.type_signature}
|
|
207
226
|
<Code lang="ts" content={declaration.type_signature} />
|
|
208
227
|
{/if}
|
|
209
228
|
|
|
210
229
|
<!-- structured type (variables and type aliases; carries what the flat
|
|
211
|
-
signature lost — union members, recovered alias names — with links)
|
|
212
|
-
|
|
230
|
+
signature lost — union members, recovered alias names — with links);
|
|
231
|
+
`type_info_expanded` strips a self-aliased root so a union alias expands
|
|
232
|
+
into its members here instead of linking circularly to itself -->
|
|
233
|
+
{#if declaration.type_info_expanded}
|
|
213
234
|
<p class="row gap_md">
|
|
214
235
|
<strong>type</strong>
|
|
215
|
-
<TypeJsonView type_info={declaration.
|
|
236
|
+
<TypeJsonView type_info={declaration.type_info_expanded} title={declaration.type_signature} />
|
|
216
237
|
</p>
|
|
217
238
|
{/if}
|
|
218
239
|
|
|
@@ -9,7 +9,7 @@ type $$ComponentProps = {
|
|
|
9
9
|
* including parameters, props, members, overloads, external types, and more.
|
|
10
10
|
*
|
|
11
11
|
* @see `declaration.svelte.ts` for the `Declaration` wrapper class
|
|
12
|
-
* @see {@link https://github.com/
|
|
12
|
+
* @see {@link https://github.com/fuzdev/svelte-docinfo svelte-docinfo} for the analysis library
|
|
13
13
|
*/
|
|
14
14
|
declare const DeclarationDetail: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
15
15
|
type DeclarationDetail = ReturnType<typeof DeclarationDetail>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeclarationDetail.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/DeclarationDetail.svelte"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"DeclarationDetail.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/DeclarationDetail.svelte"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAkB1D,KAAK,gBAAgB,GAAI;IAAE,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC;AAigBvD;;;;;;;;GAQG;AACH,QAAA,MAAM,iBAAiB,sDAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
|
package/dist/ProjectLinks.svelte
CHANGED
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
{/each}
|
|
20
20
|
</menu>
|
|
21
21
|
<small class="display:block text-align:right">
|
|
22
|
-
the charts show public commit activity<br />since Gro
|
|
22
|
+
the charts show public commit activity<br />since Gro started in August 2019 -<br />most of the
|
|
23
|
+
repos created in 2023-2024 are<br />history-resetting forks from 2020~2023 attempts
|
|
23
24
|
</small>
|
|
24
25
|
|
|
25
26
|
{#snippet package_thumbnail(project_item: ProjectItem)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectLinks.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ProjectLinks.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProjectLinks.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ProjectLinks.svelte"],"names":[],"mappings":"AA8DA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,YAAY;;kBAA+E,CAAC;AAChF,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,eAAe,YAAY,CAAC"}
|
package/dist/TypeLink.svelte
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
|
|
4
|
+
Renders a type reference, linking the parts that resolve to library declarations.
|
|
5
|
+
|
|
6
|
+
With `type_info` it delegates to `TypeJsonView`, which renders the structured
|
|
7
|
+
tree — reference names become `DeclarationLink`s and everything else is
|
|
8
|
+
syntax-highlighted in place, so `Map<string, Tome> | null` links `Map` and
|
|
9
|
+
`Tome` independently, with the flat `type` as hover text. Without it the whole
|
|
10
|
+
`type` string links only when it names a declaration outright.
|
|
11
|
+
-->
|
|
1
12
|
<script lang="ts">
|
|
2
13
|
import Code from '@fuzdev/fuz_code/Code.svelte';
|
|
3
14
|
import type { HTMLAttributes, SvelteHTMLElements } from 'svelte/elements';
|
|
@@ -19,6 +19,15 @@ HTMLAttributes<HTMLElement> & {
|
|
|
19
19
|
/** Code attributes, applied only to the fallback `Code` when the type doesn't resolve. */
|
|
20
20
|
code_attrs?: SvelteHTMLElements['code'];
|
|
21
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Renders a type reference, linking the parts that resolve to library declarations.
|
|
24
|
+
*
|
|
25
|
+
* With `type_info` it delegates to `TypeJsonView`, which renders the structured
|
|
26
|
+
* tree — reference names become `DeclarationLink`s and everything else is
|
|
27
|
+
* syntax-highlighted in place, so `Map<string, Tome> | null` links `Map` and
|
|
28
|
+
* `Tome` independently, with the flat `type` as hover text. Without it the whole
|
|
29
|
+
* `type` string links only when it names a declaration outright.
|
|
30
|
+
*/
|
|
22
31
|
declare const TypeLink: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
23
32
|
type TypeLink = ReturnType<typeof TypeLink>;
|
|
24
33
|
export default TypeLink;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeLink.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/TypeLink.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAMvD,KAAK,gBAAgB,GACpB,AADwB,0JAA0J;AAClL,cAAc,CAAC,WAAW,CAAC,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAClC,0FAA0F;IAC1F,UAAU,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;CACxC,CAAC;
|
|
1
|
+
{"version":3,"file":"TypeLink.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/TypeLink.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAMvD,KAAK,gBAAgB,GACpB,AADwB,0JAA0J;AAClL,cAAc,CAAC,WAAW,CAAC,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAClC,0FAA0F;IAC1F,UAAU,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;CACxC,CAAC;AAqCJ;;;;;;;;GAQG;AACH,QAAA,MAAM,QAAQ,sDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
import type { Declaration } from './declaration.svelte.js';
|
|
2
2
|
import type { Library } from './library.svelte.js';
|
|
3
3
|
import type { Module } from './module.svelte.js';
|
|
4
|
-
export interface DeclarationSearchState {
|
|
5
|
-
query: string;
|
|
6
|
-
all: Array<Declaration>;
|
|
7
|
-
filtered: Array<Declaration>;
|
|
8
|
-
}
|
|
9
|
-
export interface ApiSearchState {
|
|
10
|
-
query: string;
|
|
11
|
-
modules: {
|
|
12
|
-
all: Array<Module>;
|
|
13
|
-
filtered: Array<Module>;
|
|
14
|
-
};
|
|
15
|
-
declarations: {
|
|
16
|
-
all: Array<Declaration>;
|
|
17
|
-
filtered: Array<Declaration>;
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
4
|
/**
|
|
21
|
-
*
|
|
5
|
+
* Unified search state for the API index page (modules and declarations).
|
|
22
6
|
*/
|
|
23
|
-
export declare
|
|
7
|
+
export declare class ApiSearchState {
|
|
8
|
+
readonly library: Library;
|
|
9
|
+
query: string;
|
|
10
|
+
readonly modules: Array<Module>;
|
|
11
|
+
readonly modules_filtered: Array<Module>;
|
|
12
|
+
readonly declarations: Array<Declaration>;
|
|
13
|
+
readonly declarations_filtered: Array<Declaration>;
|
|
14
|
+
constructor(library: Library);
|
|
15
|
+
}
|
|
24
16
|
/**
|
|
25
|
-
*
|
|
17
|
+
* Search state for a module-specific declaration list.
|
|
26
18
|
*/
|
|
27
|
-
export declare
|
|
19
|
+
export declare class DeclarationSearchState {
|
|
20
|
+
readonly declarations: Array<Declaration>;
|
|
21
|
+
query: string;
|
|
22
|
+
readonly filtered: Array<Declaration>;
|
|
23
|
+
constructor(declarations: Array<Declaration>);
|
|
24
|
+
}
|
|
28
25
|
//# sourceMappingURL=api_search.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_search.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/api_search.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,
|
|
1
|
+
{"version":3,"file":"api_search.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/api_search.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,qBAAa,cAAc;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,KAAK,EAAE,MAAM,CAAc;IAE3B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAkD;IAEjF,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAQrC;IAEH,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAgD;IAEzF,QAAQ,CAAC,qBAAqB,EAAE,KAAK,CAAC,WAAW,CAAC,CAM/C;gBAES,OAAO,EAAE,OAAO;CAG5B;AAED;;GAEG;AACH,qBAAa,sBAAsB;IAClC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAE1C,KAAK,EAAE,MAAM,CAAc;IAE3B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAmBlC;gBAES,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC;CAG5C"}
|
|
@@ -1,65 +1,45 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Unified search state for the API index page (modules and declarations).
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
if (!query.trim())
|
|
10
|
-
return
|
|
11
|
-
const terms = query.trim().toLowerCase().split(/\s+/);
|
|
12
|
-
return
|
|
4
|
+
export class ApiSearchState {
|
|
5
|
+
library;
|
|
6
|
+
query = $state('');
|
|
7
|
+
modules = $derived.by(() => this.library.modules_sorted);
|
|
8
|
+
modules_filtered = $derived.by(() => {
|
|
9
|
+
if (!this.query.trim())
|
|
10
|
+
return this.modules;
|
|
11
|
+
const terms = this.query.trim().toLowerCase().split(/\s+/);
|
|
12
|
+
return this.modules.filter((m) => {
|
|
13
13
|
const path_lower = m.path.toLowerCase();
|
|
14
14
|
const comment_lower = m.module_comment?.toLowerCase() ?? '';
|
|
15
15
|
return terms.every((term) => path_lower.includes(term) || comment_lower.includes(term));
|
|
16
16
|
});
|
|
17
17
|
});
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
declarations = $derived.by(() => this.library.declarations);
|
|
19
|
+
declarations_filtered = $derived.by(() => {
|
|
20
|
+
const items = this.query.trim()
|
|
21
|
+
? this.library.search_declarations(this.query)
|
|
22
|
+
: this.declarations;
|
|
22
23
|
// spread before sort — `items` may be the shared source array
|
|
23
24
|
return [...items].sort((a, b) => a.name.localeCompare(b.name));
|
|
24
25
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
set query(v) {
|
|
30
|
-
query = v;
|
|
31
|
-
},
|
|
32
|
-
modules: {
|
|
33
|
-
get all() {
|
|
34
|
-
return all_modules;
|
|
35
|
-
},
|
|
36
|
-
get filtered() {
|
|
37
|
-
return filtered_modules;
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
declarations: {
|
|
41
|
-
get all() {
|
|
42
|
-
return all_declarations;
|
|
43
|
-
},
|
|
44
|
-
get filtered() {
|
|
45
|
-
return filtered_declarations;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
};
|
|
26
|
+
constructor(library) {
|
|
27
|
+
this.library = library;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
50
30
|
/**
|
|
51
|
-
*
|
|
31
|
+
* Search state for a module-specific declaration list.
|
|
52
32
|
*/
|
|
53
|
-
export
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const trimmed_query = query.trim();
|
|
58
|
-
// spread before sort — `
|
|
33
|
+
export class DeclarationSearchState {
|
|
34
|
+
declarations;
|
|
35
|
+
query = $state('');
|
|
36
|
+
filtered = $derived.by(() => {
|
|
37
|
+
const trimmed_query = this.query.trim();
|
|
38
|
+
// spread before sort — `declarations` is the shared source array
|
|
59
39
|
if (!trimmed_query)
|
|
60
|
-
return [...
|
|
40
|
+
return [...this.declarations].sort((a, b) => a.name.localeCompare(b.name));
|
|
61
41
|
const terms = trimmed_query.toLowerCase().split(/\s+/);
|
|
62
|
-
const items =
|
|
42
|
+
const items = this.declarations.filter((d) => {
|
|
63
43
|
const name_lower = d.name.toLowerCase();
|
|
64
44
|
const kind_lower = d.kind.toLowerCase();
|
|
65
45
|
const module_path_lower = d.module_path.toLowerCase();
|
|
@@ -67,18 +47,7 @@ export const create_module_declaration_search = (declarations) => {
|
|
|
67
47
|
});
|
|
68
48
|
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
69
49
|
});
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
set query(v) {
|
|
75
|
-
query = v;
|
|
76
|
-
},
|
|
77
|
-
get all() {
|
|
78
|
-
return all;
|
|
79
|
-
},
|
|
80
|
-
get filtered() {
|
|
81
|
-
return filtered;
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
};
|
|
50
|
+
constructor(declarations) {
|
|
51
|
+
this.declarations = declarations;
|
|
52
|
+
}
|
|
53
|
+
}
|
package/dist/csp.d.ts
CHANGED
|
@@ -83,7 +83,25 @@ export declare const create_csp_directives: (options?: CreateCspDirectivesOption
|
|
|
83
83
|
export type CspDirective = keyof CspDirectives;
|
|
84
84
|
export declare const parse_csp_directive: (directive: unknown) => CspDirective | null;
|
|
85
85
|
export type CspDirectiveValue<T extends CspDirective> = Defined<CspDirectives[T]>;
|
|
86
|
-
|
|
86
|
+
/**
|
|
87
|
+
* The exact body of the color-scheme loader `<script>` in `app.html`, the inline script
|
|
88
|
+
* `COLOR_SCHEME_SCRIPT_HASH` admits.
|
|
89
|
+
*
|
|
90
|
+
* The loader has to run before first paint to avoid a flash of the wrong scheme, so it is inline
|
|
91
|
+
* rather than a render-blocking `src`, and CSP admits it by hash. That makes its bytes
|
|
92
|
+
* load-bearing: whitespace, quoting, and trailing commas all move the hash, so a formatter that
|
|
93
|
+
* reflows `app.html` breaks the theme on every cold load with nothing but a console violation to
|
|
94
|
+
* show for it. Consumers can guard their own `app.html` against this constant.
|
|
95
|
+
*/
|
|
96
|
+
export declare const COLOR_SCHEME_SCRIPT = "\n\t\t\tdocument.documentElement.classList.add(\n\t\t\t\t((c) =>\n\t\t\t\t\tc === 'dark' || (c !== 'light' && matchMedia('(prefers-color-scheme:dark)').matches)\n\t\t\t\t\t\t? 'dark'\n\t\t\t\t\t\t: 'light')(localStorage.getItem('fuz:color-scheme'))\n\t\t\t);\n\t\t";
|
|
97
|
+
/**
|
|
98
|
+
* The `sha256-` CSP source for `COLOR_SCHEME_SCRIPT`, carried by the `script-src` and
|
|
99
|
+
* `script-src-elem` defaults so the loader runs under the library CSP.
|
|
100
|
+
*
|
|
101
|
+
* Regenerate after any edit to `COLOR_SCHEME_SCRIPT` — `src/test/csp.color_scheme.test.ts`
|
|
102
|
+
* reports the expected value when the two disagree.
|
|
103
|
+
*/
|
|
104
|
+
export declare const COLOR_SCHEME_SCRIPT_HASH = "sha256-CkhymyixntvSTuePGizI3BFtnRFlWWg95YBmBOCFxfY=";
|
|
87
105
|
/**
|
|
88
106
|
* The library CSP directive defaults — directives enabled out of the box.
|
|
89
107
|
* Prioritizes safety but loosens around media and styles, relying on defense-in-depth.
|
package/dist/csp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csp.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/csp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"csp.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/csp.ts"],"names":[],"mappings":"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"}
|
package/dist/csp.js
CHANGED
|
@@ -152,7 +152,32 @@ const for_each_directive = (source, source_label, fn) => {
|
|
|
152
152
|
fn(directive, value);
|
|
153
153
|
}
|
|
154
154
|
};
|
|
155
|
-
|
|
155
|
+
/**
|
|
156
|
+
* The exact body of the color-scheme loader `<script>` in `app.html`, the inline script
|
|
157
|
+
* `COLOR_SCHEME_SCRIPT_HASH` admits.
|
|
158
|
+
*
|
|
159
|
+
* The loader has to run before first paint to avoid a flash of the wrong scheme, so it is inline
|
|
160
|
+
* rather than a render-blocking `src`, and CSP admits it by hash. That makes its bytes
|
|
161
|
+
* load-bearing: whitespace, quoting, and trailing commas all move the hash, so a formatter that
|
|
162
|
+
* reflows `app.html` breaks the theme on every cold load with nothing but a console violation to
|
|
163
|
+
* show for it. Consumers can guard their own `app.html` against this constant.
|
|
164
|
+
*/
|
|
165
|
+
export const COLOR_SCHEME_SCRIPT = `
|
|
166
|
+
document.documentElement.classList.add(
|
|
167
|
+
((c) =>
|
|
168
|
+
c === 'dark' || (c !== 'light' && matchMedia('(prefers-color-scheme:dark)').matches)
|
|
169
|
+
? 'dark'
|
|
170
|
+
: 'light')(localStorage.getItem('fuz:color-scheme'))
|
|
171
|
+
);
|
|
172
|
+
`;
|
|
173
|
+
/**
|
|
174
|
+
* The `sha256-` CSP source for `COLOR_SCHEME_SCRIPT`, carried by the `script-src` and
|
|
175
|
+
* `script-src-elem` defaults so the loader runs under the library CSP.
|
|
176
|
+
*
|
|
177
|
+
* Regenerate after any edit to `COLOR_SCHEME_SCRIPT` — `src/test/csp.color_scheme.test.ts`
|
|
178
|
+
* reports the expected value when the two disagree.
|
|
179
|
+
*/
|
|
180
|
+
export const COLOR_SCHEME_SCRIPT_HASH = 'sha256-CkhymyixntvSTuePGizI3BFtnRFlWWg95YBmBOCFxfY=';
|
|
156
181
|
/**
|
|
157
182
|
* The library CSP directive defaults — directives enabled out of the box.
|
|
158
183
|
* Prioritizes safety but loosens around media and styles, relying on defense-in-depth.
|
|
@@ -10,7 +10,7 @@ import type { Module } from './module.svelte.js';
|
|
|
10
10
|
* Computed properties are plain getters rather than `$derived` — see
|
|
11
11
|
* `Library` for why.
|
|
12
12
|
*
|
|
13
|
-
* @see {@link https://github.com/
|
|
13
|
+
* @see {@link https://github.com/fuzdev/svelte-docinfo svelte-docinfo} for the analysis library
|
|
14
14
|
* @see `DeclarationDetail.svelte` for the rendering component
|
|
15
15
|
*/
|
|
16
16
|
export declare class Declaration {
|
|
@@ -50,6 +50,16 @@ export declare class Declaration {
|
|
|
50
50
|
* is the whole story. Present on `variable` and `type` kinds only.
|
|
51
51
|
*/
|
|
52
52
|
get type_info(): TypeJson | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* `type_info` prepared for rendering at the declaration itself. A type
|
|
55
|
+
* alias's tree carries the alias's own name at the root
|
|
56
|
+
* (`type A = 'a' | 'b'` → `{kind: 'union', alias: 'A', members: [...]}`),
|
|
57
|
+
* which `typeJsonToTokens` collapses to the bare name — right where `A` is
|
|
58
|
+
* composed into another type, circular at `A`'s own declaration. Strips
|
|
59
|
+
* that self-alias so the root expands into its members; every other tree
|
|
60
|
+
* passes through unchanged.
|
|
61
|
+
*/
|
|
62
|
+
get type_info_expanded(): TypeJson | undefined;
|
|
53
63
|
/**
|
|
54
64
|
* Default value documented via `@default`; the authoritative initializer
|
|
55
65
|
* (when human-readable) is in `type_signature`. Present on `variable` kind
|
|
@@ -87,6 +97,13 @@ export declare class Declaration {
|
|
|
87
97
|
* Present on `component`, `type`, `interface`, and `class` kinds.
|
|
88
98
|
*/
|
|
89
99
|
get external_types(): Array<string> | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* Whether the exported name also carries a value meaning — a merged
|
|
102
|
+
* value+type symbol like `const Foo = z.strictObject({...})` beside
|
|
103
|
+
* `type Foo = z.infer<typeof Foo>`, where the type wins the declaration slot.
|
|
104
|
+
* Present on `type` and `interface` kinds.
|
|
105
|
+
*/
|
|
106
|
+
get merged_value(): boolean | undefined;
|
|
90
107
|
/**
|
|
91
108
|
* Whether a component accepts children via props or template usage.
|
|
92
109
|
* Present on `component` kind only.
|
|
@@ -111,6 +128,12 @@ export declare class Declaration {
|
|
|
111
128
|
* Mutation documentation from `@mutates` tags, mapping parameter names to descriptions.
|
|
112
129
|
*/
|
|
113
130
|
get mutates(): DeclarationJsonInput['mutates'];
|
|
131
|
+
/**
|
|
132
|
+
* Internal-API marker from the `@internal` tag. Presence means the tag was
|
|
133
|
+
* written; an empty string is a bare tag with no trailing prose. A marker,
|
|
134
|
+
* not an exclusion — the declaration stays documented.
|
|
135
|
+
*/
|
|
136
|
+
get internal_message(): string | undefined;
|
|
114
137
|
/**
|
|
115
138
|
* Svelte reactivity flavor (`$state`, `$state.raw`, `$derived`, `$derived.by`)
|
|
116
139
|
* when this variable is initialized with a value-producing rune.
|
|
@@ -119,6 +142,7 @@ export declare class Declaration {
|
|
|
119
142
|
get reactivity(): Reactivity | undefined;
|
|
120
143
|
get has_examples(): boolean;
|
|
121
144
|
get is_deprecated(): boolean;
|
|
145
|
+
get is_internal(): boolean;
|
|
122
146
|
get has_documentation(): boolean;
|
|
123
147
|
get has_parameters(): boolean;
|
|
124
148
|
get has_props(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declaration.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/declaration.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAcjD;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAW;;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAiB;IACxC,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAiB;IAEhE,IAAI,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAE/B;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAEvC;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAQnC;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAID;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"declaration.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/declaration.svelte.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ const field = (decl, key) => decl[key];
|
|
|
20
20
|
* Computed properties are plain getters rather than `$derived` — see
|
|
21
21
|
* `Library` for why.
|
|
22
22
|
*
|
|
23
|
-
* @see {@link https://github.com/
|
|
23
|
+
* @see {@link https://github.com/fuzdev/svelte-docinfo svelte-docinfo} for the analysis library
|
|
24
24
|
* @see `DeclarationDetail.svelte` for the rendering component
|
|
25
25
|
*/
|
|
26
26
|
export class Declaration {
|
|
@@ -60,8 +60,9 @@ export class Declaration {
|
|
|
60
60
|
* Generated TypeScript import statement.
|
|
61
61
|
*/
|
|
62
62
|
get import_statement() {
|
|
63
|
-
// `generateImport` reads only `name`/`kind`/path, none of
|
|
64
|
-
// arrays,
|
|
63
|
+
// `generateImport` reads only `name`/`kind`/`mergedValue`/path, none of
|
|
64
|
+
// the defaulted arrays, and treats an absent `mergedValue` as the stripped
|
|
65
|
+
// `false`, so asserting the parsed shape here is sound.
|
|
65
66
|
return (this.#import_statement ??= generateImport(this.declaration_json, this.module_path, this.library.pkg_json.name));
|
|
66
67
|
}
|
|
67
68
|
/**
|
|
@@ -94,6 +95,24 @@ export class Declaration {
|
|
|
94
95
|
get type_info() {
|
|
95
96
|
return field(this.declaration_json, 'typeInfo');
|
|
96
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* `type_info` prepared for rendering at the declaration itself. A type
|
|
100
|
+
* alias's tree carries the alias's own name at the root
|
|
101
|
+
* (`type A = 'a' | 'b'` → `{kind: 'union', alias: 'A', members: [...]}`),
|
|
102
|
+
* which `typeJsonToTokens` collapses to the bare name — right where `A` is
|
|
103
|
+
* composed into another type, circular at `A`'s own declaration. Strips
|
|
104
|
+
* that self-alias so the root expands into its members; every other tree
|
|
105
|
+
* passes through unchanged.
|
|
106
|
+
*/
|
|
107
|
+
get type_info_expanded() {
|
|
108
|
+
const type_info = this.type_info;
|
|
109
|
+
if (type_info &&
|
|
110
|
+
(type_info.kind === 'union' || type_info.kind === 'intersection') &&
|
|
111
|
+
type_info.alias === this.name) {
|
|
112
|
+
return { ...type_info, alias: undefined };
|
|
113
|
+
}
|
|
114
|
+
return type_info;
|
|
115
|
+
}
|
|
97
116
|
/**
|
|
98
117
|
* Default value documented via `@default`; the authoritative initializer
|
|
99
118
|
* (when human-readable) is in `type_signature`. Present on `variable` kind
|
|
@@ -165,6 +184,15 @@ export class Declaration {
|
|
|
165
184
|
get external_types() {
|
|
166
185
|
return field(this.declaration_json, 'externalTypes');
|
|
167
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Whether the exported name also carries a value meaning — a merged
|
|
189
|
+
* value+type symbol like `const Foo = z.strictObject({...})` beside
|
|
190
|
+
* `type Foo = z.infer<typeof Foo>`, where the type wins the declaration slot.
|
|
191
|
+
* Present on `type` and `interface` kinds.
|
|
192
|
+
*/
|
|
193
|
+
get merged_value() {
|
|
194
|
+
return field(this.declaration_json, 'mergedValue');
|
|
195
|
+
}
|
|
168
196
|
/**
|
|
169
197
|
* Whether a component accepts children via props or template usage.
|
|
170
198
|
* Present on `component` kind only.
|
|
@@ -199,6 +227,14 @@ export class Declaration {
|
|
|
199
227
|
get mutates() {
|
|
200
228
|
return this.declaration_json.mutates;
|
|
201
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* Internal-API marker from the `@internal` tag. Presence means the tag was
|
|
232
|
+
* written; an empty string is a bare tag with no trailing prose. A marker,
|
|
233
|
+
* not an exclusion — the declaration stays documented.
|
|
234
|
+
*/
|
|
235
|
+
get internal_message() {
|
|
236
|
+
return this.declaration_json.internalMessage;
|
|
237
|
+
}
|
|
202
238
|
/**
|
|
203
239
|
* Svelte reactivity flavor (`$state`, `$state.raw`, `$derived`, `$derived.by`)
|
|
204
240
|
* when this variable is initialized with a value-producing rune.
|
|
@@ -214,6 +250,10 @@ export class Declaration {
|
|
|
214
250
|
get is_deprecated() {
|
|
215
251
|
return this.deprecated_message !== undefined;
|
|
216
252
|
}
|
|
253
|
+
// presence, not truthiness — a bare `@internal` (no message text) arrives as `''`
|
|
254
|
+
get is_internal() {
|
|
255
|
+
return this.internal_message !== undefined;
|
|
256
|
+
}
|
|
217
257
|
get has_documentation() {
|
|
218
258
|
return !!this.doc_comment;
|
|
219
259
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project_stats_data.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/project_stats_data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"project_stats_data.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/project_stats_data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,eAAO,MAAM,kBAAkB,EAAE,oBA0dhC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// generated by src/lib/project_stats_update.task.ts — do not edit directly, run `gro project_stats_update`
|
|
2
2
|
export const project_stats_data = {
|
|
3
|
-
generated_at: '2026-08-
|
|
4
|
-
end_date: '2026-08-
|
|
3
|
+
generated_at: '2026-08-31T17:42:38.471Z',
|
|
4
|
+
end_date: '2026-08-31',
|
|
5
5
|
projects: [
|
|
6
6
|
{
|
|
7
7
|
name: 'fuz_app',
|
|
@@ -11,7 +11,8 @@ export const project_stats_data = {
|
|
|
11
11
|
6, 5, 1, 18, 19, 30, 9, 4, 3, 1, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 2, 11, 7, 7, 0, 6, 4, 4, 6, 2,
|
|
12
12
|
0, 0, 0, 0, 0, 9, 3, 13, 4, 11, 2, 1, 4, 4, 1, 0, 1, 0, 5, 0, 0, 0, 2, 7, 6, 10, 4, 0, 0, 0,
|
|
13
13
|
6, 5, 5, 6, 12, 4, 1, 1, 0, 1, 0, 0, 0, 7, 1, 0, 1, 3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
|
|
14
|
-
0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 12, 6, 0, 0,
|
|
14
|
+
0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 12, 6, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0,
|
|
15
|
+
0, 0, 0, 0, 0, 0, 1, 0, 9, 6, 0
|
|
15
16
|
]
|
|
16
17
|
},
|
|
17
18
|
{
|
|
@@ -45,7 +46,8 @@ export const project_stats_data = {
|
|
|
45
46
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
46
47
|
1, 3, 7, 0, 0, 0, 1, 2, 2, 2, 0, 1, 1, 1, 1, 2, 0, 6, 3, 1, 0, 0, 0, 5, 0, 2, 0, 0, 0, 0, 0,
|
|
47
48
|
2, 1, 0, 0, 0, 4, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
|
|
48
|
-
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
49
|
+
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
50
|
+
0, 0, 0
|
|
49
51
|
]
|
|
50
52
|
},
|
|
51
53
|
{
|
|
@@ -82,7 +84,8 @@ export const project_stats_data = {
|
|
|
82
84
|
0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
83
85
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8, 3, 0, 0, 3, 0, 2, 3, 3, 0, 3, 7, 8,
|
|
84
86
|
3, 0, 4, 0, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 8, 10, 0, 2, 2, 0, 3, 0, 3, 0, 0,
|
|
85
|
-
0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0,
|
|
87
|
+
0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 10, 0,
|
|
88
|
+
0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2
|
|
86
89
|
]
|
|
87
90
|
},
|
|
88
91
|
{
|
|
@@ -151,8 +154,8 @@ export const project_stats_data = {
|
|
|
151
154
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
152
155
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1, 3, 0,
|
|
153
156
|
0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 2, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
|
|
154
|
-
0, 3, 0, 0, 0, 1, 0, 0, 3,
|
|
155
|
-
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
157
|
+
0, 3, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
158
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
156
159
|
]
|
|
157
160
|
},
|
|
158
161
|
{
|
|
@@ -182,8 +185,9 @@ export const project_stats_data = {
|
|
|
182
185
|
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
183
186
|
0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
|
|
184
187
|
0, 0, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 2, 2, 0, 1, 0, 2, 3, 0, 2, 0, 3, 0, 0, 0, 0, 0,
|
|
185
|
-
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0,
|
|
186
|
-
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
188
|
+
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
189
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
190
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
187
191
|
]
|
|
188
192
|
},
|
|
189
193
|
{
|
|
@@ -224,7 +228,7 @@ export const project_stats_data = {
|
|
|
224
228
|
0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 1, 0, 3, 0, 0, 0,
|
|
225
229
|
0, 1, 2, 0, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
|
|
226
230
|
5, 0, 0, 0, 4, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
227
|
-
0
|
|
231
|
+
2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
228
232
|
]
|
|
229
233
|
},
|
|
230
234
|
{
|
|
@@ -263,7 +267,8 @@ export const project_stats_data = {
|
|
|
263
267
|
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
264
268
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 2, 0, 0, 1, 0,
|
|
265
269
|
2, 3, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
266
|
-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
270
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
271
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
267
272
|
]
|
|
268
273
|
},
|
|
269
274
|
{
|
|
@@ -302,8 +307,8 @@ export const project_stats_data = {
|
|
|
302
307
|
0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 3, 1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
|
|
303
308
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 12, 0, 1,
|
|
304
309
|
0, 3, 3, 0, 5, 0, 0, 1, 0, 2, 4, 1, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
|
|
305
|
-
2, 0, 0, 0,
|
|
306
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
|
310
|
+
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
311
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
307
312
|
]
|
|
308
313
|
},
|
|
309
314
|
{
|
|
@@ -312,7 +317,8 @@ export const project_stats_data = {
|
|
|
312
317
|
daily_counts: [
|
|
313
318
|
11, 8, 0, 1, 0, 5, 2, 4, 2, 0, 1, 0, 2, 13, 5, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
314
319
|
0, 1, 0, 0, 0, 8, 1, 1, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
|
|
315
|
-
0, 0, 0, 1, 4, 2, 0, 2, 3, 1, 4, 13, 8,
|
|
320
|
+
0, 0, 0, 1, 4, 2, 0, 2, 3, 1, 4, 13, 8, 7, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
321
|
+
0, 0, 0
|
|
316
322
|
]
|
|
317
323
|
},
|
|
318
324
|
{
|
|
@@ -363,7 +369,7 @@ export const project_stats_data = {
|
|
|
363
369
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 1, 0, 0, 0, 0, 1, 3, 2, 0, 0, 0, 9, 0, 1, 0, 5,
|
|
364
370
|
5, 4, 3, 0, 0, 1, 0, 1, 2, 0, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 0,
|
|
365
371
|
0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
|
|
366
|
-
0, 0,
|
|
372
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
367
373
|
]
|
|
368
374
|
},
|
|
369
375
|
{
|
|
@@ -452,8 +458,8 @@ export const project_stats_data = {
|
|
|
452
458
|
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
453
459
|
0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 1, 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 5, 5, 0, 0, 2, 8, 2, 2, 0, 0,
|
|
454
460
|
0, 0, 1, 2, 1, 3, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
|
|
455
|
-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
456
|
-
0, 0
|
|
461
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
462
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
457
463
|
]
|
|
458
464
|
},
|
|
459
465
|
{
|
|
@@ -462,7 +468,8 @@ export const project_stats_data = {
|
|
|
462
468
|
daily_counts: [
|
|
463
469
|
3, 11, 8, 16, 12, 14, 6, 14, 11, 4, 10, 21, 26, 11, 15, 22, 20, 13, 28, 16, 32, 19, 22, 27,
|
|
464
470
|
28, 4, 28, 27, 16, 12, 31, 20, 19, 24, 17, 13, 16, 13, 15, 13, 16, 17, 8, 13, 1, 14, 18, 5,
|
|
465
|
-
8, 30, 9, 4, 23, 9, 11, 7, 9, 6, 15, 17,
|
|
471
|
+
8, 30, 9, 4, 23, 9, 11, 7, 9, 6, 15, 17, 12, 13, 19, 23, 17, 22, 11, 19, 16, 11, 11, 4, 13,
|
|
472
|
+
8, 6, 10, 9, 11, 7, 13, 0
|
|
466
473
|
]
|
|
467
474
|
}
|
|
468
475
|
]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fuzdev/fuz_ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.208.0",
|
|
4
4
|
"description": "Svelte UI library",
|
|
5
5
|
"tagline": "friendly user zystem",
|
|
6
6
|
"glyph": "🧶",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"@fuzdev/blake3_wasm": "^0.1.1",
|
|
66
66
|
"@fuzdev/fuz_code": "^0.48.0",
|
|
67
67
|
"@fuzdev/fuz_css": "^0.63.2",
|
|
68
|
-
"@fuzdev/fuz_util": "^0.
|
|
68
|
+
"@fuzdev/fuz_util": "^0.68.0",
|
|
69
69
|
"@fuzdev/gro": "^0.209.0",
|
|
70
70
|
"@fuzdev/mdz": "^0.3.0",
|
|
71
71
|
"@ryanatkn/eslint-config": "^0.12.2",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"jsdom": "^29.1.1",
|
|
82
82
|
"svelte": "^5.56.4",
|
|
83
83
|
"svelte-check": "^4.7.2",
|
|
84
|
-
"svelte-docinfo": "^0.
|
|
84
|
+
"svelte-docinfo": "^0.7.0",
|
|
85
85
|
"tslib": "^2.8.1",
|
|
86
86
|
"typescript": "^5.9.3",
|
|
87
87
|
"typescript-eslint": "^8.60.0",
|
|
@@ -2,94 +2,57 @@ import type { Declaration } from './declaration.svelte.ts';
|
|
|
2
2
|
import type { Library } from './library.svelte.ts';
|
|
3
3
|
import type { Module } from './module.svelte.ts';
|
|
4
4
|
|
|
5
|
-
export interface DeclarationSearchState {
|
|
6
|
-
query: string;
|
|
7
|
-
all: Array<Declaration>;
|
|
8
|
-
filtered: Array<Declaration>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface ApiSearchState {
|
|
12
|
-
query: string;
|
|
13
|
-
modules: {
|
|
14
|
-
all: Array<Module>;
|
|
15
|
-
filtered: Array<Module>;
|
|
16
|
-
};
|
|
17
|
-
declarations: {
|
|
18
|
-
all: Array<Declaration>;
|
|
19
|
-
filtered: Array<Declaration>;
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
5
|
/**
|
|
24
|
-
*
|
|
6
|
+
* Unified search state for the API index page (modules and declarations).
|
|
25
7
|
*/
|
|
26
|
-
export
|
|
27
|
-
|
|
8
|
+
export class ApiSearchState {
|
|
9
|
+
readonly library: Library;
|
|
10
|
+
|
|
11
|
+
query: string = $state('');
|
|
28
12
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (!query.trim()) return
|
|
33
|
-
const terms = query.trim().toLowerCase().split(/\s+/);
|
|
34
|
-
return
|
|
13
|
+
readonly modules: Array<Module> = $derived.by(() => this.library.modules_sorted);
|
|
14
|
+
|
|
15
|
+
readonly modules_filtered: Array<Module> = $derived.by(() => {
|
|
16
|
+
if (!this.query.trim()) return this.modules;
|
|
17
|
+
const terms = this.query.trim().toLowerCase().split(/\s+/);
|
|
18
|
+
return this.modules.filter((m) => {
|
|
35
19
|
const path_lower = m.path.toLowerCase();
|
|
36
20
|
const comment_lower = m.module_comment?.toLowerCase() ?? '';
|
|
37
21
|
return terms.every((term) => path_lower.includes(term) || comment_lower.includes(term));
|
|
38
22
|
});
|
|
39
23
|
});
|
|
40
24
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const items = query.trim()
|
|
25
|
+
readonly declarations: Array<Declaration> = $derived.by(() => this.library.declarations);
|
|
26
|
+
|
|
27
|
+
readonly declarations_filtered: Array<Declaration> = $derived.by(() => {
|
|
28
|
+
const items = this.query.trim()
|
|
29
|
+
? this.library.search_declarations(this.query)
|
|
30
|
+
: this.declarations;
|
|
45
31
|
// spread before sort — `items` may be the shared source array
|
|
46
32
|
return [...items].sort((a, b) => a.name.localeCompare(b.name));
|
|
47
33
|
});
|
|
48
34
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
set query(v: string) {
|
|
54
|
-
query = v;
|
|
55
|
-
},
|
|
56
|
-
modules: {
|
|
57
|
-
get all() {
|
|
58
|
-
return all_modules;
|
|
59
|
-
},
|
|
60
|
-
get filtered() {
|
|
61
|
-
return filtered_modules;
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
declarations: {
|
|
65
|
-
get all() {
|
|
66
|
-
return all_declarations;
|
|
67
|
-
},
|
|
68
|
-
get filtered() {
|
|
69
|
-
return filtered_declarations;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
};
|
|
35
|
+
constructor(library: Library) {
|
|
36
|
+
this.library = library;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
74
39
|
|
|
75
40
|
/**
|
|
76
|
-
*
|
|
41
|
+
* Search state for a module-specific declaration list.
|
|
77
42
|
*/
|
|
78
|
-
export
|
|
79
|
-
declarations: Array<Declaration
|
|
80
|
-
): DeclarationSearchState => {
|
|
81
|
-
let query = $state.raw('');
|
|
43
|
+
export class DeclarationSearchState {
|
|
44
|
+
readonly declarations: Array<Declaration>;
|
|
82
45
|
|
|
83
|
-
|
|
46
|
+
query: string = $state('');
|
|
84
47
|
|
|
85
|
-
|
|
86
|
-
const trimmed_query = query.trim();
|
|
87
|
-
// spread before sort — `
|
|
88
|
-
if (!trimmed_query) return [...
|
|
48
|
+
readonly filtered: Array<Declaration> = $derived.by(() => {
|
|
49
|
+
const trimmed_query = this.query.trim();
|
|
50
|
+
// spread before sort — `declarations` is the shared source array
|
|
51
|
+
if (!trimmed_query) return [...this.declarations].sort((a, b) => a.name.localeCompare(b.name));
|
|
89
52
|
|
|
90
53
|
const terms = trimmed_query.toLowerCase().split(/\s+/);
|
|
91
54
|
|
|
92
|
-
const items =
|
|
55
|
+
const items = this.declarations.filter((d) => {
|
|
93
56
|
const name_lower = d.name.toLowerCase();
|
|
94
57
|
const kind_lower = d.kind.toLowerCase();
|
|
95
58
|
const module_path_lower = d.module_path.toLowerCase();
|
|
@@ -103,18 +66,7 @@ export const create_module_declaration_search = (
|
|
|
103
66
|
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
104
67
|
});
|
|
105
68
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
set query(v: string) {
|
|
111
|
-
query = v;
|
|
112
|
-
},
|
|
113
|
-
get all() {
|
|
114
|
-
return all;
|
|
115
|
-
},
|
|
116
|
-
get filtered() {
|
|
117
|
-
return filtered;
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
};
|
|
69
|
+
constructor(declarations: Array<Declaration>) {
|
|
70
|
+
this.declarations = declarations;
|
|
71
|
+
}
|
|
72
|
+
}
|
package/src/lib/csp.ts
CHANGED
|
@@ -254,7 +254,33 @@ const for_each_directive = <V>(
|
|
|
254
254
|
}
|
|
255
255
|
};
|
|
256
256
|
|
|
257
|
-
|
|
257
|
+
/**
|
|
258
|
+
* The exact body of the color-scheme loader `<script>` in `app.html`, the inline script
|
|
259
|
+
* `COLOR_SCHEME_SCRIPT_HASH` admits.
|
|
260
|
+
*
|
|
261
|
+
* The loader has to run before first paint to avoid a flash of the wrong scheme, so it is inline
|
|
262
|
+
* rather than a render-blocking `src`, and CSP admits it by hash. That makes its bytes
|
|
263
|
+
* load-bearing: whitespace, quoting, and trailing commas all move the hash, so a formatter that
|
|
264
|
+
* reflows `app.html` breaks the theme on every cold load with nothing but a console violation to
|
|
265
|
+
* show for it. Consumers can guard their own `app.html` against this constant.
|
|
266
|
+
*/
|
|
267
|
+
export const COLOR_SCHEME_SCRIPT = `
|
|
268
|
+
document.documentElement.classList.add(
|
|
269
|
+
((c) =>
|
|
270
|
+
c === 'dark' || (c !== 'light' && matchMedia('(prefers-color-scheme:dark)').matches)
|
|
271
|
+
? 'dark'
|
|
272
|
+
: 'light')(localStorage.getItem('fuz:color-scheme'))
|
|
273
|
+
);
|
|
274
|
+
`;
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* The `sha256-` CSP source for `COLOR_SCHEME_SCRIPT`, carried by the `script-src` and
|
|
278
|
+
* `script-src-elem` defaults so the loader runs under the library CSP.
|
|
279
|
+
*
|
|
280
|
+
* Regenerate after any edit to `COLOR_SCHEME_SCRIPT` — `src/test/csp.color_scheme.test.ts`
|
|
281
|
+
* reports the expected value when the two disagree.
|
|
282
|
+
*/
|
|
283
|
+
export const COLOR_SCHEME_SCRIPT_HASH = 'sha256-CkhymyixntvSTuePGizI3BFtnRFlWWg95YBmBOCFxfY=';
|
|
258
284
|
|
|
259
285
|
/**
|
|
260
286
|
* The library CSP directive defaults — directives enabled out of the box.
|
|
@@ -35,7 +35,7 @@ const field = <T>(decl: DeclarationJsonInput, key: string): T | undefined =>
|
|
|
35
35
|
* Computed properties are plain getters rather than `$derived` — see
|
|
36
36
|
* `Library` for why.
|
|
37
37
|
*
|
|
38
|
-
* @see {@link https://github.com/
|
|
38
|
+
* @see {@link https://github.com/fuzdev/svelte-docinfo svelte-docinfo} for the analysis library
|
|
39
39
|
* @see `DeclarationDetail.svelte` for the rendering component
|
|
40
40
|
*/
|
|
41
41
|
export class Declaration {
|
|
@@ -87,8 +87,9 @@ export class Declaration {
|
|
|
87
87
|
* Generated TypeScript import statement.
|
|
88
88
|
*/
|
|
89
89
|
get import_statement(): string {
|
|
90
|
-
// `generateImport` reads only `name`/`kind`/path, none of
|
|
91
|
-
// arrays,
|
|
90
|
+
// `generateImport` reads only `name`/`kind`/`mergedValue`/path, none of
|
|
91
|
+
// the defaulted arrays, and treats an absent `mergedValue` as the stripped
|
|
92
|
+
// `false`, so asserting the parsed shape here is sound.
|
|
92
93
|
return (this.#import_statement ??= generateImport(
|
|
93
94
|
this.declaration_json as DeclarationJson,
|
|
94
95
|
this.module_path,
|
|
@@ -131,6 +132,27 @@ export class Declaration {
|
|
|
131
132
|
return field<TypeJson>(this.declaration_json, 'typeInfo');
|
|
132
133
|
}
|
|
133
134
|
|
|
135
|
+
/**
|
|
136
|
+
* `type_info` prepared for rendering at the declaration itself. A type
|
|
137
|
+
* alias's tree carries the alias's own name at the root
|
|
138
|
+
* (`type A = 'a' | 'b'` → `{kind: 'union', alias: 'A', members: [...]}`),
|
|
139
|
+
* which `typeJsonToTokens` collapses to the bare name — right where `A` is
|
|
140
|
+
* composed into another type, circular at `A`'s own declaration. Strips
|
|
141
|
+
* that self-alias so the root expands into its members; every other tree
|
|
142
|
+
* passes through unchanged.
|
|
143
|
+
*/
|
|
144
|
+
get type_info_expanded(): TypeJson | undefined {
|
|
145
|
+
const type_info = this.type_info;
|
|
146
|
+
if (
|
|
147
|
+
type_info &&
|
|
148
|
+
(type_info.kind === 'union' || type_info.kind === 'intersection') &&
|
|
149
|
+
type_info.alias === this.name
|
|
150
|
+
) {
|
|
151
|
+
return { ...type_info, alias: undefined };
|
|
152
|
+
}
|
|
153
|
+
return type_info;
|
|
154
|
+
}
|
|
155
|
+
|
|
134
156
|
/**
|
|
135
157
|
* Default value documented via `@default`; the authoritative initializer
|
|
136
158
|
* (when human-readable) is in `type_signature`. Present on `variable` kind
|
|
@@ -219,6 +241,16 @@ export class Declaration {
|
|
|
219
241
|
return field<Array<string>>(this.declaration_json, 'externalTypes');
|
|
220
242
|
}
|
|
221
243
|
|
|
244
|
+
/**
|
|
245
|
+
* Whether the exported name also carries a value meaning — a merged
|
|
246
|
+
* value+type symbol like `const Foo = z.strictObject({...})` beside
|
|
247
|
+
* `type Foo = z.infer<typeof Foo>`, where the type wins the declaration slot.
|
|
248
|
+
* Present on `type` and `interface` kinds.
|
|
249
|
+
*/
|
|
250
|
+
get merged_value(): boolean | undefined {
|
|
251
|
+
return field<boolean>(this.declaration_json, 'mergedValue');
|
|
252
|
+
}
|
|
253
|
+
|
|
222
254
|
/**
|
|
223
255
|
* Whether a component accepts children via props or template usage.
|
|
224
256
|
* Present on `component` kind only.
|
|
@@ -258,6 +290,15 @@ export class Declaration {
|
|
|
258
290
|
return this.declaration_json.mutates;
|
|
259
291
|
}
|
|
260
292
|
|
|
293
|
+
/**
|
|
294
|
+
* Internal-API marker from the `@internal` tag. Presence means the tag was
|
|
295
|
+
* written; an empty string is a bare tag with no trailing prose. A marker,
|
|
296
|
+
* not an exclusion — the declaration stays documented.
|
|
297
|
+
*/
|
|
298
|
+
get internal_message(): string | undefined {
|
|
299
|
+
return this.declaration_json.internalMessage;
|
|
300
|
+
}
|
|
301
|
+
|
|
261
302
|
/**
|
|
262
303
|
* Svelte reactivity flavor (`$state`, `$state.raw`, `$derived`, `$derived.by`)
|
|
263
304
|
* when this variable is initialized with a value-producing rune.
|
|
@@ -276,6 +317,11 @@ export class Declaration {
|
|
|
276
317
|
return this.deprecated_message !== undefined;
|
|
277
318
|
}
|
|
278
319
|
|
|
320
|
+
// presence, not truthiness — a bare `@internal` (no message text) arrives as `''`
|
|
321
|
+
get is_internal(): boolean {
|
|
322
|
+
return this.internal_message !== undefined;
|
|
323
|
+
}
|
|
324
|
+
|
|
279
325
|
get has_documentation(): boolean {
|
|
280
326
|
return !!this.doc_comment;
|
|
281
327
|
}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import type { ProjectStatsSnapshot } from './project_stats.ts';
|
|
4
4
|
|
|
5
5
|
export const project_stats_data: ProjectStatsSnapshot = {
|
|
6
|
-
generated_at: '2026-08-
|
|
7
|
-
end_date: '2026-08-
|
|
6
|
+
generated_at: '2026-08-31T17:42:38.471Z',
|
|
7
|
+
end_date: '2026-08-31',
|
|
8
8
|
projects: [
|
|
9
9
|
{
|
|
10
10
|
name: 'fuz_app',
|
|
@@ -14,7 +14,8 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
14
14
|
6, 5, 1, 18, 19, 30, 9, 4, 3, 1, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 2, 11, 7, 7, 0, 6, 4, 4, 6, 2,
|
|
15
15
|
0, 0, 0, 0, 0, 9, 3, 13, 4, 11, 2, 1, 4, 4, 1, 0, 1, 0, 5, 0, 0, 0, 2, 7, 6, 10, 4, 0, 0, 0,
|
|
16
16
|
6, 5, 5, 6, 12, 4, 1, 1, 0, 1, 0, 0, 0, 7, 1, 0, 1, 3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
|
|
17
|
-
0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 12, 6, 0, 0,
|
|
17
|
+
0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 12, 6, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0,
|
|
18
|
+
0, 0, 0, 0, 0, 0, 1, 0, 9, 6, 0
|
|
18
19
|
]
|
|
19
20
|
},
|
|
20
21
|
{
|
|
@@ -48,7 +49,8 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
48
49
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
49
50
|
1, 3, 7, 0, 0, 0, 1, 2, 2, 2, 0, 1, 1, 1, 1, 2, 0, 6, 3, 1, 0, 0, 0, 5, 0, 2, 0, 0, 0, 0, 0,
|
|
50
51
|
2, 1, 0, 0, 0, 4, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
|
|
51
|
-
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
52
|
+
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
53
|
+
0, 0, 0
|
|
52
54
|
]
|
|
53
55
|
},
|
|
54
56
|
{
|
|
@@ -85,7 +87,8 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
85
87
|
0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
86
88
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8, 3, 0, 0, 3, 0, 2, 3, 3, 0, 3, 7, 8,
|
|
87
89
|
3, 0, 4, 0, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 8, 10, 0, 2, 2, 0, 3, 0, 3, 0, 0,
|
|
88
|
-
0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0,
|
|
90
|
+
0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 10, 0,
|
|
91
|
+
0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2
|
|
89
92
|
]
|
|
90
93
|
},
|
|
91
94
|
{
|
|
@@ -154,8 +157,8 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
154
157
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
155
158
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1, 3, 0,
|
|
156
159
|
0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 2, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
|
|
157
|
-
0, 3, 0, 0, 0, 1, 0, 0, 3,
|
|
158
|
-
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
160
|
+
0, 3, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
161
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
159
162
|
]
|
|
160
163
|
},
|
|
161
164
|
{
|
|
@@ -185,8 +188,9 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
185
188
|
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
186
189
|
0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
|
|
187
190
|
0, 0, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 2, 2, 0, 1, 0, 2, 3, 0, 2, 0, 3, 0, 0, 0, 0, 0,
|
|
188
|
-
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0,
|
|
189
|
-
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
191
|
+
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
192
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
193
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
190
194
|
]
|
|
191
195
|
},
|
|
192
196
|
{
|
|
@@ -227,7 +231,7 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
227
231
|
0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 1, 0, 3, 0, 0, 0,
|
|
228
232
|
0, 1, 2, 0, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
|
|
229
233
|
5, 0, 0, 0, 4, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
230
|
-
0
|
|
234
|
+
2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
231
235
|
]
|
|
232
236
|
},
|
|
233
237
|
{
|
|
@@ -266,7 +270,8 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
266
270
|
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
267
271
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 2, 0, 0, 1, 0,
|
|
268
272
|
2, 3, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
269
|
-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
273
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
274
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
270
275
|
]
|
|
271
276
|
},
|
|
272
277
|
{
|
|
@@ -305,8 +310,8 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
305
310
|
0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 3, 1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
|
|
306
311
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 12, 0, 1,
|
|
307
312
|
0, 3, 3, 0, 5, 0, 0, 1, 0, 2, 4, 1, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
|
|
308
|
-
2, 0, 0, 0,
|
|
309
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
|
313
|
+
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
314
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
310
315
|
]
|
|
311
316
|
},
|
|
312
317
|
{
|
|
@@ -315,7 +320,8 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
315
320
|
daily_counts: [
|
|
316
321
|
11, 8, 0, 1, 0, 5, 2, 4, 2, 0, 1, 0, 2, 13, 5, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
317
322
|
0, 1, 0, 0, 0, 8, 1, 1, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
|
|
318
|
-
0, 0, 0, 1, 4, 2, 0, 2, 3, 1, 4, 13, 8,
|
|
323
|
+
0, 0, 0, 1, 4, 2, 0, 2, 3, 1, 4, 13, 8, 7, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
324
|
+
0, 0, 0
|
|
319
325
|
]
|
|
320
326
|
},
|
|
321
327
|
{
|
|
@@ -366,7 +372,7 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
366
372
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 1, 0, 0, 0, 0, 1, 3, 2, 0, 0, 0, 9, 0, 1, 0, 5,
|
|
367
373
|
5, 4, 3, 0, 0, 1, 0, 1, 2, 0, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 0,
|
|
368
374
|
0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
|
|
369
|
-
0, 0,
|
|
375
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
370
376
|
]
|
|
371
377
|
},
|
|
372
378
|
{
|
|
@@ -455,8 +461,8 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
455
461
|
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
456
462
|
0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 1, 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 5, 5, 0, 0, 2, 8, 2, 2, 0, 0,
|
|
457
463
|
0, 0, 1, 2, 1, 3, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
|
|
458
|
-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
459
|
-
0, 0
|
|
464
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
465
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
460
466
|
]
|
|
461
467
|
},
|
|
462
468
|
{
|
|
@@ -465,7 +471,8 @@ export const project_stats_data: ProjectStatsSnapshot = {
|
|
|
465
471
|
daily_counts: [
|
|
466
472
|
3, 11, 8, 16, 12, 14, 6, 14, 11, 4, 10, 21, 26, 11, 15, 22, 20, 13, 28, 16, 32, 19, 22, 27,
|
|
467
473
|
28, 4, 28, 27, 16, 12, 31, 20, 19, 24, 17, 13, 16, 13, 15, 13, 16, 17, 8, 13, 1, 14, 18, 5,
|
|
468
|
-
8, 30, 9, 4, 23, 9, 11, 7, 9, 6, 15, 17,
|
|
474
|
+
8, 30, 9, 4, 23, 9, 11, 7, 9, 6, 15, 17, 12, 13, 19, 23, 17, 22, 11, 19, 16, 11, 11, 4, 13,
|
|
475
|
+
8, 6, 10, 9, 11, 7, 13, 0
|
|
469
476
|
]
|
|
470
477
|
}
|
|
471
478
|
]
|