@fuzdev/fuz_ui 0.171.0 → 0.173.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/LICENSE +2 -2
- package/README.md +1 -1
- package/dist/Alert.svelte +21 -21
- package/dist/Alert.svelte.d.ts +2 -3
- package/dist/Alert.svelte.d.ts.map +1 -1
- package/dist/Breadcrumb.svelte +4 -2
- package/dist/Breadcrumb.svelte.d.ts +2 -1
- package/dist/Breadcrumb.svelte.d.ts.map +1 -1
- package/dist/Card.svelte +13 -14
- package/dist/Card.svelte.d.ts +2 -3
- package/dist/Card.svelte.d.ts.map +1 -1
- package/dist/ColorSchemeInput.svelte +5 -7
- package/dist/ColorSchemeInput.svelte.d.ts +2 -2
- package/dist/ColorSchemeInput.svelte.d.ts.map +1 -1
- package/dist/Contextmenu.svelte +4 -5
- package/dist/Contextmenu.svelte.d.ts +1 -2
- package/dist/Contextmenu.svelte.d.ts.map +1 -1
- package/dist/CopyToClipboard.svelte +1 -2
- package/dist/CopyToClipboard.svelte.d.ts.map +1 -1
- package/dist/DocsContent.svelte +4 -2
- package/dist/DocsContent.svelte.d.ts +2 -1
- package/dist/DocsContent.svelte.d.ts.map +1 -1
- package/dist/DocsFooter.svelte +6 -5
- package/dist/DocsFooter.svelte.d.ts +2 -2
- package/dist/DocsFooter.svelte.d.ts.map +1 -1
- package/dist/DocsList.svelte +5 -5
- package/dist/DocsList.svelte.d.ts +2 -2
- package/dist/DocsList.svelte.d.ts.map +1 -1
- package/dist/DocsMenu.svelte +4 -2
- package/dist/DocsMenu.svelte.d.ts +2 -1
- package/dist/DocsMenu.svelte.d.ts.map +1 -1
- package/dist/DocsMenuHeader.svelte +1 -2
- package/dist/DocsMenuHeader.svelte.d.ts.map +1 -1
- package/dist/DocsModulesList.svelte +4 -2
- package/dist/DocsModulesList.svelte.d.ts +2 -1
- package/dist/DocsModulesList.svelte.d.ts.map +1 -1
- package/dist/DocsPageLinks.svelte +4 -2
- package/dist/DocsPageLinks.svelte.d.ts +2 -1
- package/dist/DocsPageLinks.svelte.d.ts.map +1 -1
- package/dist/DocsPrimaryNav.svelte +4 -2
- package/dist/DocsPrimaryNav.svelte.d.ts +2 -1
- package/dist/DocsPrimaryNav.svelte.d.ts.map +1 -1
- package/dist/DocsSecondaryNav.svelte +5 -2
- package/dist/DocsSecondaryNav.svelte.d.ts +2 -1
- package/dist/DocsSecondaryNav.svelte.d.ts.map +1 -1
- package/dist/DocsTertiaryNav.svelte +4 -2
- package/dist/DocsTertiaryNav.svelte.d.ts +2 -1
- package/dist/DocsTertiaryNav.svelte.d.ts.map +1 -1
- package/dist/EcosystemLinks.svelte +8 -38
- package/dist/EcosystemLinks.svelte.d.ts +1 -1
- package/dist/EcosystemLinks.svelte.d.ts.map +1 -1
- package/dist/EcosystemLinksPanel.svelte +6 -2
- package/dist/EcosystemLinksPanel.svelte.d.ts.map +1 -1
- package/dist/GithubLink.svelte +9 -11
- package/dist/GithubLink.svelte.d.ts.map +1 -1
- package/dist/Glyph.svelte +1 -2
- package/dist/Glyph.svelte.d.ts.map +1 -1
- package/dist/Hashlink.svelte +2 -7
- package/dist/Hashlink.svelte.d.ts.map +1 -1
- package/dist/HueInput.svelte +5 -6
- package/dist/HueInput.svelte.d.ts +2 -2
- package/dist/HueInput.svelte.d.ts.map +1 -1
- package/dist/ImgOrSvg.svelte +23 -23
- package/dist/ImgOrSvg.svelte.d.ts +1 -3
- package/dist/ImgOrSvg.svelte.d.ts.map +1 -1
- package/dist/LibraryDetail.svelte +6 -3
- package/dist/MdnLink.svelte +3 -9
- package/dist/MdnLink.svelte.d.ts.map +1 -1
- package/dist/PasteFromClipboard.svelte +1 -2
- package/dist/PasteFromClipboard.svelte.d.ts.map +1 -1
- package/dist/PendingAnimation.svelte +1 -2
- package/dist/PendingAnimation.svelte.d.ts.map +1 -1
- package/dist/PendingButton.svelte +1 -2
- package/dist/PendingButton.svelte.d.ts.map +1 -1
- package/dist/ProjectLinks.svelte +69 -42
- package/dist/ProjectLinks.svelte.d.ts.map +1 -1
- package/dist/Spiders.svelte +2 -2
- package/dist/Svg.svelte +6 -7
- package/dist/Svg.svelte.d.ts +1 -2
- package/dist/Svg.svelte.d.ts.map +1 -1
- package/dist/ThemeInput.svelte +4 -2
- package/dist/ThemeInput.svelte.d.ts +2 -1
- package/dist/ThemeInput.svelte.d.ts.map +1 -1
- package/dist/Themed.svelte +2 -1
- package/dist/Themed.svelte.d.ts.map +1 -1
- package/dist/declaration.svelte.d.ts +1 -1
- package/dist/library.svelte.d.ts +1 -2
- package/dist/library.svelte.d.ts.map +1 -1
- package/dist/library_gen.d.ts +3 -4
- package/dist/library_gen.d.ts.map +1 -1
- package/dist/library_gen.js +9 -6
- package/dist/library_gen_helpers.d.ts +18 -2
- package/dist/library_gen_helpers.d.ts.map +1 -1
- package/dist/library_gen_helpers.js +18 -8
- package/dist/logos.d.ts +14 -57
- package/dist/logos.d.ts.map +1 -1
- package/dist/logos.js +32 -168
- package/dist/themer.svelte.d.ts +5 -4
- package/dist/themer.svelte.d.ts.map +1 -1
- package/dist/themer.svelte.js +5 -3
- package/dist/vite_plugin_library_well_known.d.ts +37 -0
- package/dist/vite_plugin_library_well_known.d.ts.map +1 -0
- package/dist/vite_plugin_library_well_known.js +144 -0
- package/package.json +3 -3
- package/src/lib/library_gen.ts +10 -10
- package/src/lib/library_gen_helpers.ts +33 -10
- package/src/lib/logos.ts +33 -175
- package/src/lib/themer.svelte.ts +12 -9
- package/src/lib/vite_plugin_library_well_known.ts +189 -0
- package/dist/HiddenPersonalLinks.svelte +0 -6
- package/dist/HiddenPersonalLinks.svelte.d.ts +0 -27
- package/dist/HiddenPersonalLinks.svelte.d.ts.map +0 -1
|
@@ -102,30 +102,53 @@ export const library_gen_sort_modules = (modules: Array<ModuleJson>): Array<Modu
|
|
|
102
102
|
};
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
|
-
*
|
|
105
|
+
* Result of generating library files.
|
|
106
|
+
* Contains both the JSON data and the TypeScript wrapper file.
|
|
107
|
+
*/
|
|
108
|
+
export interface LibraryGenOutput {
|
|
109
|
+
/** JSON content for library.json */
|
|
110
|
+
json_content: string;
|
|
111
|
+
/** TypeScript wrapper content for library.ts */
|
|
112
|
+
ts_content: string;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Generate the library.json and library.ts file contents.
|
|
106
117
|
* Parses at generation time so runtime only needs the pre-computed result.
|
|
118
|
+
*
|
|
119
|
+
* Returns JSON + .ts wrapper because:
|
|
120
|
+
* - JSON is natively importable by Node.js and Vite without TypeScript loaders
|
|
121
|
+
* - Works in CI environments that don't have TS compilation
|
|
122
|
+
* - The .ts wrapper validates with zod and exports with proper types
|
|
123
|
+
* (JSON imports get widened types like `string` instead of literal unions)
|
|
107
124
|
*/
|
|
108
|
-
export const
|
|
125
|
+
export const library_gen_generate_json = (
|
|
109
126
|
package_json: PackageJson,
|
|
110
127
|
source_json: SourceJson,
|
|
111
|
-
):
|
|
112
|
-
const
|
|
113
|
-
const
|
|
128
|
+
): LibraryGenOutput => {
|
|
129
|
+
const is_this_fuz_util = package_json.name === '@fuzdev/fuz_util';
|
|
130
|
+
const fuz_util_prefix = is_this_fuz_util ? './' : '@fuzdev/fuz_util/';
|
|
114
131
|
|
|
115
132
|
// Parse at generation time, not runtime
|
|
116
133
|
const library_json: LibraryJson = library_json_parse(package_json, source_json);
|
|
117
134
|
|
|
118
|
-
|
|
135
|
+
const json_content = JSON.stringify(library_json, null, '\t') + '\n';
|
|
119
136
|
|
|
120
|
-
|
|
137
|
+
const banner = '// generated by library.gen.ts - do not edit';
|
|
121
138
|
|
|
122
|
-
|
|
139
|
+
const ts_content = `${banner}
|
|
140
|
+
|
|
141
|
+
import type {LibraryJson} from '${fuz_util_prefix}library_json.js';
|
|
142
|
+
|
|
143
|
+
import json from './library.json' with {type: 'json'};
|
|
144
|
+
|
|
145
|
+
export const library_json: LibraryJson = json as LibraryJson;
|
|
123
146
|
|
|
124
147
|
${banner}
|
|
125
148
|
`;
|
|
126
|
-
};
|
|
127
149
|
|
|
128
|
-
|
|
150
|
+
return {json_content, ts_content};
|
|
151
|
+
};
|
|
129
152
|
|
|
130
153
|
/**
|
|
131
154
|
* Collect and filter source files from filer.
|
package/src/lib/logos.ts
CHANGED
|
@@ -19,23 +19,7 @@ Logo colors are the midpoint between the light and dark versions of color varian
|
|
|
19
19
|
```
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
-
export const
|
|
23
|
-
label: "three sleepy z's",
|
|
24
|
-
fill: '#e55d95',
|
|
25
|
-
paths: [
|
|
26
|
-
{
|
|
27
|
-
d: 'm 75.29285,61.962268 1.752156,1.914421 14.843359,1.811307 L 74.065203,86.193332 99.966781,85.408255 98.719988,83.648246 85.143565,82.136577 98.430963,62.887945',
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
d: 'm 47.636533,44.203704 2.295155,2.48945 25.618425,0.406407 L 45.93783,91.082857 89.425317,93.78003 87.862334,91.36274 61.57861,83.03068 86.244719,42.177019',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
d: 'M 0.62464489,0.27405496 3.9721704,4.0993769 50.515703,10.089712 0.04581262,99.957542 68.009395,98.901532 65.391343,95.487941 24.119119,88.067804 66.301842,2.2896897',
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
} satisfies SvgData;
|
|
37
|
-
|
|
38
|
-
export const gro_logo = {
|
|
22
|
+
export const logo_gro = {
|
|
39
23
|
label: 'a pixelated green oak acorn with a glint of sun',
|
|
40
24
|
paths: [
|
|
41
25
|
{
|
|
@@ -69,7 +53,7 @@ export const gro_logo = {
|
|
|
69
53
|
],
|
|
70
54
|
} satisfies SvgData;
|
|
71
55
|
|
|
72
|
-
export const
|
|
56
|
+
export const logo_fuz = {
|
|
73
57
|
label: 'a friendly brown spider facing you',
|
|
74
58
|
fill: '#84522a',
|
|
75
59
|
paths: [
|
|
@@ -79,64 +63,44 @@ export const fuz_logo = {
|
|
|
79
63
|
],
|
|
80
64
|
} satisfies SvgData;
|
|
81
65
|
|
|
82
|
-
export const
|
|
66
|
+
export const logo_fuz_ui = {
|
|
67
|
+
label: 'a friendly red spider facing you',
|
|
68
|
+
fill: '#d93636',
|
|
69
|
+
paths: logo_fuz.paths,
|
|
70
|
+
} satisfies SvgData;
|
|
71
|
+
|
|
72
|
+
export const logo_fuz_css = {
|
|
83
73
|
label: 'a fuzzy tuft of green moss',
|
|
84
74
|
fill: '#3db33d',
|
|
85
|
-
paths:
|
|
75
|
+
paths: logo_fuz.paths,
|
|
86
76
|
attrs: {style: 'transform: scaleX(-1) rotate(180deg)'},
|
|
87
77
|
} satisfies SvgData;
|
|
88
78
|
|
|
89
|
-
export const
|
|
90
|
-
label: 'a green sauropod wearing a brown belt',
|
|
91
|
-
paths: [
|
|
92
|
-
{
|
|
93
|
-
fill: '#5e853f',
|
|
94
|
-
d: 'M 18.067186,15.969407 C 21.788999,13.893836 17.949371,0.38957847 10.927436,0.04361599 4.8719565,-0.25473037 1.7349173,7.4851976 0.94704854,15.249287 c -0.92008807,9.06705 -1.79155525,17.669932 0.59969726,28.291532 2.4805689,12.269719 7.0800447,23.952702 13.1393162,34.8823 6.000724,10.5946 6.775015,20.816886 4.701503,21.478748 -0.03241,0.01035 -0.07998,0.06265 0.04147,0.06596 1.294211,0.03532 10.640814,0.04592 10.677563,-0.05295 0.485896,-1.307172 -3.047914,-6.728008 -1.423246,-8.607633 1.949043,-2.254904 17.430713,0.186565 21.929,0.285178 9.05576,0.198523 17.000796,-1.770745 18.230176,-0.990103 1.997906,1.268647 0.07692,8.622864 -1.734662,9.31776 -0.123669,0.04744 -0.0605,0.05786 8.7e-5,0.05776 1.355848,-0.0022 8.671284,0.02064 9.113066,-0.03424 1.109966,-0.137881 1.121155,-9.535235 1.329075,-10.418319 C 77.607043,89.2834 96.053852,85.109995 99.112049,70.368973 103.63141,48.584901 86.877032,39.05263 85.950278,39.29966 83.317032,40.001563 101.56057,48.396651 91.102193,67.902384 88.018737,73.653284 77.350057,79.523245 75.685258,79.119008 73.64059,78.622534 65.09671,63.091297 52.400901,65.836332 43.234666,67.818217 41.919113,72.011159 30.91062,71.457371 23.396234,71.079356 15.879493,62.020499 10.825044,44.977744 8.7853926,38.10038 7.9304392,31.282385 7.7195376,25.924892 7.3556266,16.68053 7.7329856,12.199716 7.7329856,12.199716 c 0,0 7.0326794,5.610875 10.3342004,3.769691 z',
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
fill: '#6f492b',
|
|
98
|
-
d: 'm 51.811124,91.579144 c -0.338516,0.300927 1.649325,0.223227 1.91566,0.125562 10.084215,-3.697658 13.756737,-6.313605 15.083689,-19.379753 0.213532,-2.102603 -6.814409,-6.279564 -6.854038,-5.131405 -0.399472,11.573929 -1.610604,16.392773 -10.086139,24.32687',
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
fill: '#34251a',
|
|
102
|
-
d: 'm 57.712693,87.945562 c 0,0 1.995464,1.865412 2.68268,1.964956 0.765874,0.110938 4.011805,-1.572536 4.056136,-2.519526 0.05138,-1.097583 -3.559853,-3.060285 -3.559853,-3.060285',
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
fill: '#34251a',
|
|
106
|
-
d: 'm 61.598583,82.940048 c 0,0 3.423751,3.095396 4.286346,2.851789 0.676123,-0.190945 2.567214,-3.369081 2.28239,-4.177499 -0.333199,-0.945723 -5.337842,-1.790867 -5.337842,-1.790867',
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
fill: '#34251a',
|
|
110
|
-
d: 'm 63.187415,78.383306 c 0,0 4.923745,1.759016 5.668289,1.154079 0.551751,-0.448294 1.380932,-3.505132 1.032166,-4.129317 -0.767431,-1.37347 -5.791186,-3.388548 -5.791186,-3.388548',
|
|
111
|
-
},
|
|
112
|
-
],
|
|
113
|
-
} satisfies SvgData;
|
|
114
|
-
|
|
115
|
-
export const fuz_code_logo = {
|
|
79
|
+
export const logo_fuz_code = {
|
|
116
80
|
label: 'a friendly pink spider facing you',
|
|
117
81
|
fill: '#e55d95',
|
|
118
|
-
paths:
|
|
82
|
+
paths: logo_fuz.paths,
|
|
119
83
|
} satisfies SvgData;
|
|
120
84
|
|
|
121
|
-
export const
|
|
85
|
+
export const logo_fuz_blog = {
|
|
122
86
|
label: 'a friendly yellow spider facing you',
|
|
123
87
|
fill: '#d8bc31',
|
|
124
|
-
paths:
|
|
88
|
+
paths: logo_fuz.paths,
|
|
125
89
|
} satisfies SvgData;
|
|
126
90
|
|
|
127
|
-
export const
|
|
91
|
+
export const logo_fuz_mastodon = {
|
|
128
92
|
label: 'a friendly purple spider facing you',
|
|
129
93
|
fill: '#8866cc',
|
|
130
|
-
paths:
|
|
94
|
+
paths: logo_fuz.paths,
|
|
131
95
|
} satisfies SvgData;
|
|
132
96
|
|
|
133
|
-
export const
|
|
97
|
+
export const logo_fuz_gitops = {
|
|
134
98
|
label: 'a friendly blue spider facing you',
|
|
135
99
|
fill: '#6199d1',
|
|
136
|
-
paths:
|
|
100
|
+
paths: logo_fuz.paths,
|
|
137
101
|
} satisfies SvgData;
|
|
138
102
|
|
|
139
|
-
export const
|
|
103
|
+
export const logo_fuz_template = {
|
|
140
104
|
label: 'a friendly orange pixelated spider facing you',
|
|
141
105
|
fill: '#f4672f',
|
|
142
106
|
paths: [
|
|
@@ -146,95 +110,33 @@ export const fuz_template_logo = {
|
|
|
146
110
|
],
|
|
147
111
|
} satisfies SvgData;
|
|
148
112
|
|
|
149
|
-
export const
|
|
150
|
-
label: 'a
|
|
151
|
-
fill: '#3db33d',
|
|
152
|
-
paths: [
|
|
153
|
-
{
|
|
154
|
-
d: 'M 37.174163,0.4792687 21.634926,39.631201 0.16786597,97.97918 16.575416,99.521374 19.352058,91.559689 68.736056,94.77021 70.61636,84.176728 21.745713,80.516425 33.323161,43.781709 44.12821,16.308249 84.47938,15.069186 86.44336,5.5860536 47.872897,6.9685586 49.611104,1.8736809 M 86.061057,1.9243199 74.915756,51.346436 65.559591,99.975909 82.510118,98.660645 89.82178,48.868054 99.675222,0.2061973',
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
d: 'M 82.541527,24.61445 53.862329,44.979685 26.077601,62.33992 25.099707,65.937651 55.229899,47.076762 81.507935,28.318661 M 66.33555,87.233139 54.738379,48.989886 44.170835,12.54806 42.725942,15.71185 52.060344,49.856839 63.493965,86.901562 M 67.524475,13.659828 52.81301,43.245382 35.985883,84.117296 38.703349,84.412401 55.158864,44.100695 70.474719,13.501929 m 5.1603,41.982295 -23.74376,-10.305007 -17.603166,-9.426434 -0.972181,2.878616 17.876898,8.612725 23.958503,10.964992',
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
d: 'm 50.5769,48.285601 0.966122,3.361133 2.456436,-0.09293 2.944734,-2.586661 -0.487976,-4.866721 -1.365959,-1.908962 -3.545067,0.04669 -2.781093,2.644178 -1.139247,5.065325 1.443893,5.999034 5.886709,0.356695 5.877825,-5.767341 0.765816,-9.526984 -4.632806,-4.416277 -7.978619,-0.418274 -5.522701,6.340293 -1.318243,11.151446 3.639737,9.979651 L 57.644364,63.06574 65.560214,52.529221 68.781299,35.897047 60.700698,29.322838 46.760117,27.037036 36.988493,39.207818 33.631767,58.700914 41.28115,74.499356 60.724825,72.962824 71.958187,55.382886 77.273782,30.412258 65.694639,19.60012 44.511786,14.731021 44.715509,16.675374 64.52349,21.522567 74.843098,31.738084 69.730823,54.159963 59.634025,70.76874 42.717921,72.097706 35.95196,57.551866 l 2.738009,-17.179374 8.834853,-11.13111 12.095799,2.019068 6.862581,6.161296 -3.066403,14.068912 -6.523733,9.299082 -9.939247,0.591529 -2.829727,-8.963835 1.086548,-8.709392 4.596194,-5.524272 6.319767,0.309359 3.579728,3.550699 -0.928078,7.718816 -4.331029,4.154252 -4.574097,-0.220971',
|
|
161
|
-
},
|
|
162
|
-
],
|
|
163
|
-
} satisfies SvgData;
|
|
164
|
-
|
|
165
|
-
export const earbetter_logo = {
|
|
166
|
-
label: 'two beamed musical notes with ears',
|
|
167
|
-
fill: '#8866cc',
|
|
168
|
-
paths: [
|
|
169
|
-
{
|
|
170
|
-
d: 'M 17.649763,27.091907 92.652647,0.07053376 93.464619,72.197282 c 0.0732,6.502554 -1.033904,26.195178 -10.644213,24.298316 -7.390587,-3.01113 -12.412301,-8.362897 -15.415159,-15.610599 -1.399917,-3.394335 -2.714253,-7.01918 -2.443203,-10.740686 0.340155,-4.670337 3.306295,-10.054413 6.970064,-12.97067 5.830865,-4.641207 15.450507,3.781166 15.450507,3.781166 L 84.813136,20.044447 23.342705,37.878638 25.739331,81.968409 c 0.356336,6.555367 -1.690324,19.516051 -6.937964,17.89111 C 15.430616,98.815763 12.34752,96.863406 7.2108686,88.806175 5.5129407,86.142843 5.0055612,82.674429 5.1528405,79.556791 c 0.183839,-3.891543 2.8440779,-7.761614 6.0200145,-10.018009 3.189269,-2.265866 8.500011,1.905961 8.500011,1.905961 M 23.170251,33.362099 84.485514,14.48689 84.220567,8.2399358 23.002286,29.453122 Z m -3.615828,52.986209 c -9.350797,3.940785 2.203294,11.549107 1.505207,1.654032 0,0 -2.834448,-12.747668 -3.964416,-12.841723 -1.293231,-0.107644 -12.4433683,3.811252 -5.227105,14.095981 -1.8880811,-2.376702 -4.6381237,-9.29629 5.436642,-11.774152 m 67.749413,1.414718 c -11.923517,6.195109 3.283676,14.41667 1.96013,2.093665 0,0 -3.665948,-16.618177 -5.020704,-16.996094 -1.798588,-0.501728 -18.078576,4.37863 -8.198369,18.612282 C 71.38344,79.544295 68.77145,69.693545 82.044022,67.159294',
|
|
171
|
-
},
|
|
172
|
-
],
|
|
173
|
-
} satisfies SvgData;
|
|
174
|
-
|
|
175
|
-
export const spiderspace_logo = {
|
|
176
|
-
label: 'a galaxy full of twinkling star spiders',
|
|
177
|
-
raw: `<defs>
|
|
178
|
-
<radialGradient id="spiderspace_logo_galaxy_radial_gradient">
|
|
179
|
-
<stop offset="0%" stop-color="#397fc6" />
|
|
180
|
-
<stop offset="50%" stop-color="#5040bf" />
|
|
181
|
-
<stop offset="70%" stop-color="#2e669e" />
|
|
182
|
-
<stop offset="90%" stop-color="#8866cc" />
|
|
183
|
-
<stop offset="95%" stop-color="#5040bf" />
|
|
184
|
-
<stop offset="100%" stop-color="#6a40bf" />
|
|
185
|
-
</radialGradient>
|
|
186
|
-
<radialGradient id="spiderspace_logo_spider_radial_gradient" cx="0.55" cy="0.53">
|
|
187
|
-
<stop offset="0%" stop-color="#ff901a" />
|
|
188
|
-
<stop offset="35%" stop-color="#e5c005" />
|
|
189
|
-
<stop offset="70%" stop-color="#ceac00" />
|
|
190
|
-
<stop offset="100%" stop-color="#ec8134" />
|
|
191
|
-
</radialGradient>
|
|
192
|
-
</defs>`,
|
|
113
|
+
export const logo_fuz_util = {
|
|
114
|
+
label: 'a green sauropod wearing a brown belt',
|
|
193
115
|
paths: [
|
|
194
116
|
{
|
|
195
|
-
fill: '#
|
|
196
|
-
d: '
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
fill: "url('#spiderspace_logo_galaxy_radial_gradient')",
|
|
200
|
-
d: 'M 41.391236,63.051146 C 33.101277,59.381253 25.468093,45.742926 25.968903,40.864718 26.47209,33.815832 38.701833,22.418881 41.51038,20.969358 c 3.812312,-2.29735 23.213922,-2.657575 33.693681,2.03222 11.179251,4.788744 20.431016,18.081407 21.06409,20.733048 2.198069,8.91408 7.241359,29.651079 -3.162658,39.721942 -17.30326,13.408505 -20.52971,13.039204 -41.910242,16.402096 -8.814053,0.617556 -21.073344,-1.572123 -31.580566,-4.460774 -0.97087,-0.420143 -2.274673,-1.71451 -1.625837,-1.661149 18.282473,2.687822 15.269024,2.607025 31.6774,0.887128 C 73.483357,93.85536 76.00865,92.487339 88.202493,79.794536 95.264786,70.763831 98.219325,71.369947 90.726804,46.036416 86.486072,30.899346 80.838557,30.73624 72.72026,27.076918 63.988942,23.141276 56.075126,19.998521 44.238428,25.98457 c -5.498722,3.347106 -10.804182,2.46512 -11.364155,15.00928 0.834256,10.377361 2.640093,12.680871 9.795913,14.221232 12.169687,0.693813 12.056629,-15.713913 20.41488,-14.809854 8.798827,0.995591 15.825208,8.671317 16.154942,18.135372 -0.1498,5.614338 -6.300267,13.188764 -13.294214,17.625334 -9.314739,5.391697 -22.317147,1.772039 -32.536635,0.520804 C 16.927476,72.824023 4.869592,57.793694 3.6601863,54.998722 -0.29148097,43.060661 3.3014798,21.244121 8.8379156,14.335408 13.006415,7.5990804 32.225731,3.0503398 44.931515,1.3218515 c 9.09225,-1.09456615 15.891073,-3.3689028 43.901741,3.6485916 0.747362,0.1912686 1.683777,1.591738 1.201279,1.5230051 C 66.295051,3.077785 62.514079,3.0931959 45.950985,6.5403681 37.778696,7.5648832 19.035412,6.4179932 13.476809,17.898834 4.2612823,36.638405 4.3827466,37.458254 9.6277911,53.123189 13.765209,63.514895 12.709091,63.459113 35.008252,70.980947 43.888711,73.624142 49.51008,78.877631 63.132495,71.39185 68.152511,67.563314 72.325339,68.471179 72.090999,58.848803 72.86057,44.801893 65.67137,47.553592 62.194729,47.369105 53.522898,46.908938 48.591134,65.048567 41.391236,63.051146 Z',
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
fill: "url('#spiderspace_logo_spider_radial_gradient')",
|
|
204
|
-
d: 'm 24.4585,64.970717 -0.930962,-2.241324 -0.224544,-2.918957 -0.304656,-0.347669 -0.278169,0.03594 -1.592326,1.40895 -1.191021,1.478973 -0.467224,1.045104 -0.259107,0.07189 0.266678,-1.255052 1.037223,-1.74184 1.64018,-1.725952 -0.02215,-0.368073 -0.274852,-0.131558 -2.190347,-0.270682 -1.670993,0.337187 -0.953319,0.148773 -0.178034,-0.160885 1.021237,-0.497411 1.810539,-0.481202 2.299845,0.130503 0.127035,-0.218522 -0.07993,-0.170527 -1.376599,-1.056429 -1.369186,-0.625465 -0.491568,-0.521398 0.03733,-0.226693 0.776326,0.509595 1.272685,0.27188 1.429846,0.920058 0.34613,-0.167324 0.385057,-0.51644 -0.507846,-1.109613 -0.04766,-1.437916 -0.228535,-0.998702 0.207214,0.03989 0.27946,0.720271 0.412455,1.586861 0.597116,0.990816 0.113807,0.119774 0.28822,0.07792 0.437823,-2.14204 0.433085,-1.743293 0.691342,-1.08962 0.06641,0.190647 -0.343996,0.770599 -0.310789,2.058743 0.0125,2.31944 0.0764,0.217499 0.238771,0.10859 2.208552,-0.948814 1.580988,0.01918 0.83258,0.177777 0.143991,0.159779 -1.005217,0.01058 -1.538265,0.25429 -1.862719,1.084909 -0.0025,0.197317 0.285853,0.23216 2.32098,1.054317 1.764918,1.638937 0.805362,1.161766 -0.09835,0.266702 -0.934868,-0.884911 -1.954205,-1.44216 -2.685667,-0.973353 -0.502084,0.270421 -0.569458,0.921912 0.07444,2.789455 0.671329,2.538031 0.38061,0.950549 -0.344995,-0.006 z',
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
fill: "url('#spiderspace_logo_spider_radial_gradient')",
|
|
208
|
-
d: 'm 26.7296,29.884698 -2.320885,0.49838 -2.80025,-0.352714 -0.396099,0.239774 -0.02879,0.289202 0.968893,1.894849 1.125181,1.501825 0.87937,0.681576 0.0094,0.277041 -1.12227,-0.519968 -1.407397,-1.398139 -1.256758,-2.006406 -0.351724,-0.05074 -0.185828,0.252502 -0.747951,2.167283 -0.05842,1.761503 -0.07437,0.996301 -0.191635,0.148522 -0.238738,-1.134485 -0.04584,-1.931652 0.640522,-2.306192 -0.177192,-0.172312 -0.178626,0.04715 -1.304991,1.185874 -0.897272,1.264098 -0.601792,0.394801 -0.205109,-0.08306 0.654829,-0.685851 0.542527,-1.236505 1.188505,-1.266976 -0.07971,-0.384266 -0.399845,-0.493146 -1.159576,0.294331 -1.365278,-0.237588 -0.992232,0.03317 0.0843,-0.202166 0.741411,-0.140174 1.587682,-0.102722 1.067761,-0.408472 0.138519,-0.09156 0.138253,-0.276782 -1.919314,-0.869899 -1.544754,-0.785805 -0.87085,-0.917705 0.194539,-0.02953 0.648498,0.502081 1.869425,0.724525 2.187783,0.448488 0.222075,-0.03419 0.156022,-0.220553 -0.396756,-2.428234 0.37387,-1.599381 0.354858,-0.808922 0.182967,-0.114177 -0.216296,1.021432 -0.106646,1.610431 0.602776,2.104599 0.185346,0.04172 0.283019,-0.243744 1.515503,-2.143963 1.941107,-1.463819 1.275661,-0.585672 0.22911,0.152752 -1.043997,0.772043 -1.798389,1.694838 -1.521352,2.529838 0.141752,0.5629 0.740307,0.760759 2.644484,0.47917 2.54196,-0.176105 0.9811,-0.196917 -0.08396,0.348504 z',
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
fill: "url('#spiderspace_logo_spider_radial_gradient')",
|
|
212
|
-
d: 'm 55.788199,11.366192 2.350612,-0.586417 2.862956,0.227733 0.396802,-0.251787 0.02119,-0.284726 -1.040466,-1.8167425 -1.188746,-1.4247826 -0.915114,-0.6311097 -0.01738,-0.2711951 1.158049,0.462445 1.473267,1.3113167 1.336897,1.9139692 0.359783,0.03491 0.182208,-0.255394 0.70105,-2.1561917 0.01,-1.7293284 0.04771,-0.9798424 0.191075,-0.1536727 0.27515,1.1021105 0.10105,1.891732 -0.587714,2.2878377 0.185394,0.161434 0.180669,-0.05374 1.296226,-1.217564 0.878625,-1.2770591 0.60203,-0.4124016 0.211325,0.072723 -0.647865,0.699974 -0.517952,1.2350596 -1.175264,1.2921591 0.09205,0.373344 0.421256,0.466589 1.173153,-0.337421 1.397692,0.175361 1.010004,-0.07434 -0.08014,0.201757 -0.751447,0.168663 -1.614716,0.16763 -1.076393,0.445454 -0.138545,0.09561 -0.133071,0.277165 1.979972,0.77188 1.595977,0.705243 0.913089,0.862945 -0.197366,0.03713 -0.67485,-0.464864 -1.925052,-0.63147 -2.241641,-0.347445 -0.225295,0.04287 -0.152762,0.222791 0.472543,2.363757 -0.335908,1.58369 -0.338785,0.807975 -0.18323,0.119603 0.191636,-1.010462 0.06334,-1.583255 -0.673349,-2.037806 -0.190021,-0.03307 -0.281518,0.250853 -1.483749,2.165684 -1.936511,1.516864 -1.283227,0.62793 -0.23775,-0.140042 1.041949,-0.80087 1.784611,-1.737312 1.478838,-2.544223 -0.160261,-0.545862 -0.77567,-0.714583 -2.707809,-0.358275 -2.584921,0.279792 -0.994056,0.234407 0.07573,-0.345193 z',
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
fill: "url('#spiderspace_logo_spider_radial_gradient')",
|
|
216
|
-
d: 'm 83.118615,67.384674 0.62104,2.273532 -0.195632,2.849118 0.259268,0.370803 0.288028,-0.0032 1.823586,-1.182818 1.425757,-1.295927 0.626814,-0.958133 0.273895,-0.0402 -0.453425,1.18391 -1.307567,1.567608 -1.918309,1.484016 -0.03095,0.358574 0.260313,0.158411 2.187711,0.509725 1.747939,-0.137088 0.990895,-0.0361 0.157628,0.175793 -1.110579,0.365603 -1.910741,0.260604 -2.319397,-0.386512 -0.160944,0.196949 0.05649,0.174012 1.246219,1.177749 1.301319,0.759923 0.424077,0.560006 -0.07098,0.215053 -0.715265,-0.580929 -1.254513,-0.407007 -1.320161,-1.051846 -0.376225,0.122716 -0.466501,0.456012 0.355187,1.130882 -0.160382,1.396388 0.08733,0.991976 -0.204881,-0.06207 -0.179528,-0.728405 -0.188904,-1.581754 -0.463198,-1.026065 -0.09826,-0.128839 -0.281736,-0.107968 -0.756251,2.022592 -0.693527,1.637397 -0.861158,0.975824 -0.04,-0.191907 0.461707,-0.706519 0.614993,-1.956385 0.324124,-2.245171 -0.04606,-0.219044 -0.227012,-0.132063 -2.38333,0.667905 -1.604677,-0.197457 -0.820704,-0.266202 -0.12307,-0.170956 1.023578,0.103565 1.600953,-0.07192 2.051471,-0.838687 0.03107,-0.19063 -0.256968,-0.256909 -2.206741,-1.282541 -1.55644,-1.785177 -0.650121,-1.214999 0.138692,-0.246887 0.822003,0.961826 1.777428,1.616306 2.589262,1.245535 0.54976,-0.204789 0.712882,-0.827382 0.329438,-2.706854 -0.313968,-2.531179 -0.248904,-0.962615 0.349805,0.04547 z',
|
|
117
|
+
fill: '#5e853f',
|
|
118
|
+
d: 'M 18.067186,15.969407 C 21.788999,13.893836 17.949371,0.38957847 10.927436,0.04361599 4.8719565,-0.25473037 1.7349173,7.4851976 0.94704854,15.249287 c -0.92008807,9.06705 -1.79155525,17.669932 0.59969726,28.291532 2.4805689,12.269719 7.0800447,23.952702 13.1393162,34.8823 6.000724,10.5946 6.775015,20.816886 4.701503,21.478748 -0.03241,0.01035 -0.07998,0.06265 0.04147,0.06596 1.294211,0.03532 10.640814,0.04592 10.677563,-0.05295 0.485896,-1.307172 -3.047914,-6.728008 -1.423246,-8.607633 1.949043,-2.254904 17.430713,0.186565 21.929,0.285178 9.05576,0.198523 17.000796,-1.770745 18.230176,-0.990103 1.997906,1.268647 0.07692,8.622864 -1.734662,9.31776 -0.123669,0.04744 -0.0605,0.05786 8.7e-5,0.05776 1.355848,-0.0022 8.671284,0.02064 9.113066,-0.03424 1.109966,-0.137881 1.121155,-9.535235 1.329075,-10.418319 C 77.607043,89.2834 96.053852,85.109995 99.112049,70.368973 103.63141,48.584901 86.877032,39.05263 85.950278,39.29966 83.317032,40.001563 101.56057,48.396651 91.102193,67.902384 88.018737,73.653284 77.350057,79.523245 75.685258,79.119008 73.64059,78.622534 65.09671,63.091297 52.400901,65.836332 43.234666,67.818217 41.919113,72.011159 30.91062,71.457371 23.396234,71.079356 15.879493,62.020499 10.825044,44.977744 8.7853926,38.10038 7.9304392,31.282385 7.7195376,25.924892 7.3556266,16.68053 7.7329856,12.199716 7.7329856,12.199716 c 0,0 7.0326794,5.610875 10.3342004,3.769691 z',
|
|
217
119
|
},
|
|
218
120
|
{
|
|
219
|
-
fill:
|
|
220
|
-
d: 'm
|
|
121
|
+
fill: '#6f492b',
|
|
122
|
+
d: 'm 51.811124,91.579144 c -0.338516,0.300927 1.649325,0.223227 1.91566,0.125562 10.084215,-3.697658 13.756737,-6.313605 15.083689,-19.379753 0.213532,-2.102603 -6.814409,-6.279564 -6.854038,-5.131405 -0.399472,11.573929 -1.610604,16.392773 -10.086139,24.32687',
|
|
221
123
|
},
|
|
222
124
|
{
|
|
223
|
-
fill:
|
|
224
|
-
d: 'm
|
|
125
|
+
fill: '#34251a',
|
|
126
|
+
d: 'm 57.712693,87.945562 c 0,0 1.995464,1.865412 2.68268,1.964956 0.765874,0.110938 4.011805,-1.572536 4.056136,-2.519526 0.05138,-1.097583 -3.559853,-3.060285 -3.559853,-3.060285',
|
|
225
127
|
},
|
|
226
128
|
{
|
|
227
|
-
fill:
|
|
228
|
-
d: 'm
|
|
129
|
+
fill: '#34251a',
|
|
130
|
+
d: 'm 61.598583,82.940048 c 0,0 3.423751,3.095396 4.286346,2.851789 0.676123,-0.190945 2.567214,-3.369081 2.28239,-4.177499 -0.333199,-0.945723 -5.337842,-1.790867 -5.337842,-1.790867',
|
|
229
131
|
},
|
|
230
132
|
{
|
|
231
|
-
fill:
|
|
232
|
-
d: 'm
|
|
133
|
+
fill: '#34251a',
|
|
134
|
+
d: 'm 63.187415,78.383306 c 0,0 4.923745,1.759016 5.668289,1.154079 0.551751,-0.448294 1.380932,-3.505132 1.032166,-4.129317 -0.767431,-1.37347 -5.791186,-3.388548 -5.791186,-3.388548',
|
|
233
135
|
},
|
|
234
136
|
],
|
|
235
137
|
} satisfies SvgData;
|
|
236
138
|
|
|
237
|
-
export const
|
|
139
|
+
export const logo_github = {
|
|
238
140
|
label: 'the GitHub logo, an octocat silhouette',
|
|
239
141
|
paths: [
|
|
240
142
|
{
|
|
@@ -247,7 +149,7 @@ export const github_logo = {
|
|
|
247
149
|
viewBox: '0 0 1024 1024',
|
|
248
150
|
} satisfies SvgData;
|
|
249
151
|
|
|
250
|
-
export const
|
|
152
|
+
export const logo_mdn = {
|
|
251
153
|
label: 'the MDN logo, an M formed from forward slashes and vertical bars',
|
|
252
154
|
fill: '#8cb4ff',
|
|
253
155
|
paths: [
|
|
@@ -256,47 +158,3 @@ export const mdn_logo = {
|
|
|
256
158
|
},
|
|
257
159
|
],
|
|
258
160
|
} satisfies SvgData;
|
|
259
|
-
|
|
260
|
-
export const chatgpt_logo = {
|
|
261
|
-
label: 'the ChatGPT logo',
|
|
262
|
-
paths: [
|
|
263
|
-
{
|
|
264
|
-
d: 'M 92.824732,40.934711 C 95.093282,34.125934 94.312102,26.667213 90.684294,20.474005 85.228523,10.974839 74.260736,6.0877682 63.549176,8.3875665 58.783969,3.0192876 51.937693,-0.03356964 44.7602,0.01017652 33.811161,-0.0148213 24.096388,7.0345602 20.727933,17.452396 13.694174,18.892893 7.6228289,23.295632 4.0700165,29.535711 c -5.4963924,9.47417 -4.24337782,21.41687 3.0997279,29.541159 -2.268551,6.808776 -1.4873695,14.267497 2.1404374,20.460703 5.4557742,9.499168 16.4235632,14.386238 27.1351222,12.08644 4.762082,5.36828 11.611481,8.421127 18.788976,8.374265 C 66.189568,100.0264 75.907466,92.97077 79.27592,82.54356 86.309679,81.10306 92.381021,76.700323 95.933833,70.460245 101.42394,60.986077 100.1678,49.052749 92.827857,40.928461 Z M 55.24053,93.464477 c -4.38399,0.0062 -8.630493,-1.527992 -11.995823,-4.33712 0.15311,-0.08124 0.418714,-0.228105 0.590574,-0.334345 l 19.910752,-11.49899 c 1.018661,-0.578077 1.643606,-1.662356 1.637357,-2.834129 V 46.390482 l 8.414886,4.858949 c 0.09062,0.04375 0.149986,0.131237 0.162486,0.23123 V 74.725495 C 73.948265,85.06209 65.577123,93.442603 55.24053,93.464477 Z M 14.981562,76.26911 c -2.196682,-3.793417 -2.987238,-8.239901 -2.234179,-12.555149 0.146862,0.0875 0.406214,0.246855 0.590575,0.353095 l 19.910751,11.498992 c 1.009287,0.590572 2.259177,0.590572 3.271588,0 L 60.827539,61.529779 v 9.717898 c 0.0062,0.09999 -0.04062,0.196858 -0.118738,0.259352 L 40.58244,83.127883 C 31.617603,88.289931 20.168607,85.221451 14.984686,76.26911 Z M 9.7413935,32.8073 c 2.1873115,-3.799666 5.6401345,-6.705663 9.7522715,-8.214905 0,0.17186 -0.0094,0.474959 -0.0094,0.68744 v 23.001106 c -0.0062,1.168647 0.618696,2.252926 1.634232,2.831002 l 24.307241,14.033144 -8.414884,4.858948 c -0.08436,0.05625 -0.190608,0.06561 -0.284351,0.02501 L 16.597046,58.398803 C 7.6509526,53.218009 4.5824707,41.772137 9.7382699,32.810423 Z M 78.879081,48.896514 54.571838,34.860243 62.986724,30.00442 c 0.08436,-0.05625 0.19061,-0.06561 0.284351,-0.02501 l 20.129484,11.620861 c 8.961713,5.177671 12.033318,16.642291 6.855648,25.604002 -2.190432,3.79342 -5.64013,6.699414 -9.749143,8.211781 V 51.72751 c 0.0094,-1.168648 -0.612449,-2.249803 -1.624858,-2.831 z m 8.374265,-12.605145 c -0.146862,-0.09062 -0.406215,-0.246854 -0.590572,-0.353094 L 66.75202,24.439283 c -1.009288,-0.590573 -2.259177,-0.590573 -3.271588,0 L 39.17319,38.47555 v -9.717896 c -0.0062,-0.09999 0.04062,-0.196858 0.11874,-0.259352 L 59.418287,16.88682 c 8.96484,-5.17142 20.426334,-2.093565 25.59463,6.874398 2.184185,3.787168 2.974739,8.221153 2.23418,12.530151 z M 34.598592,53.611723 26.180579,48.752775 c -0.09062,-0.04375 -0.149987,-0.13124 -0.162484,-0.23123 V 25.276711 c 0.0062,-10.349094 8.402387,-18.7358576 18.751479,-18.729608 4.377741,0 8.614867,1.5373651 11.980199,4.33712 -0.153113,0.08124 -0.41559,0.228105 -0.590575,0.334345 L 36.248445,22.717559 c -1.018659,0.578073 -1.643603,1.659229 -1.637356,2.831002 l -0.01249,28.056913 z m 4.571472,-9.855385 10.827174,-6.252577 10.827177,6.249452 V 56.25524 L 49.997238,62.504693 39.170064,56.25524 Z',
|
|
265
|
-
},
|
|
266
|
-
],
|
|
267
|
-
} satisfies SvgData;
|
|
268
|
-
|
|
269
|
-
export const claude_logo = {
|
|
270
|
-
label: 'the Claude logo',
|
|
271
|
-
fill: '#d97757',
|
|
272
|
-
paths: [
|
|
273
|
-
{
|
|
274
|
-
d: 'M 19.63855,66.500252 39.30268,55.467015 39.63334,54.508777 39.30268,53.975672 H 38.344442 L 35.058089,53.773227 23.822407,53.46956 14.078068,53.064671 4.6373961,52.558559 2.2620448,52.052447 0.03515285,49.116999 l 0.22943735,-1.46435 1.9974546,-1.342883 2.8612187,0.249681 6.3230235,0.431882 9.487909,0.654572 6.88312,0.404889 10.196466,1.059461 H 39.63334 L 39.862777,48.45568 39.309428,48.05079 38.877546,47.645901 29.058977,40.992218 18.43063,33.960638 12.8634,29.911743 9.8537217,27.860303 8.3353863,25.937079 7.6808151,21.739725 l 2.7330039,-3.009678 3.670997,0.249681 0.937994,0.249682 3.718235,2.861219 7.942581,6.147571 10.371918,7.638914 1.518335,1.261906 0.607334,-0.431882 0.07423,-0.303667 L 38.573879,35.263032 32.93242,25.066566 26.913063,14.694649 24.234045,10.396072 23.525488,7.8182763 C 23.275807,6.7588156 23.093606,5.8680588 23.093606,4.7816055 l 3.110901,-4.22434647 1.72078,-0.5533489 4.150117,0.5533489 1.747772,1.51833537 2.577797,5.8978895 4.177109,9.2854641 6.478231,12.625803 1.896232,3.745227 1.012224,3.468553 0.377897,1.059461 h 0.654571 v -0.607335 l 0.533104,-7.112557 0.985231,-8.732116 0.958239,-11.235682 0.330659,-3.1648857 1.565573,-3.7924644 3.1109,-2.0514398 2.429337,1.1606831 1.997454,2.8612187 -0.276674,1.8489951 -1.187676,7.719892 -2.328114,12.092698 -1.518335,8.097789 h 0.884008 l 1.012224,-1.012224 4.096131,-5.439015 6.883121,-8.6039 3.036671,-3.414568 3.542782,-3.77222 2.274129,-1.79501 h 4.298576 l 3.164886,4.703466 -1.417113,4.858673 -4.426791,5.614467 -3.670998,4.757451 -5.263562,7.085565 -3.286353,5.668452 0.303667,0.452127 0.782786,-0.07423 11.890253,-2.530559 6.424246,-1.160683 7.665907,-1.315891 3.468553,1.619558 0.377897,1.64655 -1.363128,3.367331 -8.199011,2.024447 -9.616124,1.923225 -14.31959,3.387575 -0.175452,0.128215 0.202444,0.249682 6.451239,0.607334 2.759996,0.148459 h 6.754906 l 12.578565,0.937994 3.286352,2.172907 1.970462,2.658774 -0.330659,2.024447 -5.061118,2.577796 -6.829136,-1.619558 -15.939147,-3.792464 -5.466008,-1.363128 h -0.755793 v 0.452127 l 4.555006,4.453784 8.347471,7.537691 10.452895,9.717347 0.533105,2.402344 -1.342884,1.896232 L 86.715233,84.220913 77.530991,77.3108 73.988209,74.1999 65.96465,67.444994 h -0.533105 v 0.708557 l 1.848995,2.706011 9.764584,14.677242 0.506112,4.501021 -0.708557,1.46435 -2.530559,0.884009 -2.780241,-0.506112 -5.715689,-8.023559 -5.897889,-9.035783 -4.757451,-8.097789 -0.580342,0.33066 -2.807233,30.238493 -1.315891,1.545328 -3.036671,1.160683 -2.530559,-1.923225 -1.342883,-3.1109 1.342883,-6.147572 1.619558,-8.023559 1.315891,-6.377008 1.187676,-7.922337 0.708556,-2.631781 -0.04724,-0.175452 -0.580342,0.07423 -5.972119,8.199011 -9.08302,12.274899 -7.186787,7.692899 -1.72078,0.681564 -2.982686,-1.545328 0.276675,-2.759997 1.666795,-2.456329 9.946783,-12.652795 5.999112,-7.841359 3.873443,-4.528013 -0.02699,-0.654571 h -0.229437 l -26.419036,17.153815 -4.703466,0.607335 -2.024447,-1.896233 0.249682,-3.1109 0.958238,-1.012224 7.942581,-5.466007 -0.02699,0.02699 z',
|
|
275
|
-
},
|
|
276
|
-
],
|
|
277
|
-
} satisfies SvgData;
|
|
278
|
-
|
|
279
|
-
export const gemini_logo = {
|
|
280
|
-
label: 'the Gemini logo',
|
|
281
|
-
fill: 'url(#paint0_radial_16771_53212)',
|
|
282
|
-
raw: `
|
|
283
|
-
<defs>
|
|
284
|
-
<radialGradient
|
|
285
|
-
id="paint0_radial_16771_53212"
|
|
286
|
-
cx="0"
|
|
287
|
-
cy="0"
|
|
288
|
-
r="1"
|
|
289
|
-
gradientUnits="userSpaceOnUse"
|
|
290
|
-
gradientTransform="matrix(100.83118,34.096523,-273.13486,807.72196,9.9243877,40.642075)">
|
|
291
|
-
<stop offset="0.0671246" stop-color="#9168C0" />
|
|
292
|
-
<stop offset="0.342551" stop-color="#5684D1" />
|
|
293
|
-
<stop offset="0.672076" stop-color="#1BA1E3" />
|
|
294
|
-
</radialGradient>
|
|
295
|
-
</defs>
|
|
296
|
-
`,
|
|
297
|
-
paths: [
|
|
298
|
-
{
|
|
299
|
-
d: 'm 50.001234,100.00247 c 0,-6.91696 -1.333248,-13.41712 -4.000099,-19.500484 C 43.417856,74.418621 39.875984,69.126705 35.375873,64.626594 30.875762,60.126484 25.583952,56.58461 19.500481,54.001331 13.417009,51.33448 6.9168492,50.001234 0,50.001234 c 6.9168492,0 13.417009,-1.291817 19.500481,-3.875096 6.083471,-2.666852 11.375281,-6.250154 15.875392,-10.750265 4.500111,-4.500111 8.041983,-9.791921 10.625262,-15.875392 C 48.667986,13.417009 50.001234,6.9168492 50.001234,0 c 0,6.9168492 1.291817,13.417009 3.875095,19.500481 2.666852,6.083471 6.250155,11.375281 10.750265,15.875392 4.500111,4.500111 9.792027,8.083413 15.875392,10.750265 6.083364,2.583279 12.583524,3.875096 19.500484,3.875096 -6.91696,0 -13.41712,1.333246 -19.500484,4.000097 -6.083365,2.583279 -11.375281,6.125153 -15.875392,10.625263 -4.50011,4.500111 -8.083413,9.792027 -10.750265,15.875392 -2.583278,6.083364 -3.875095,12.583524 -3.875095,19.500484 z',
|
|
300
|
-
},
|
|
301
|
-
],
|
|
302
|
-
} satisfies SvgData;
|
package/src/lib/themer.svelte.ts
CHANGED
|
@@ -5,11 +5,20 @@ import {BROWSER} from 'esm-env';
|
|
|
5
5
|
import {create_context} from './context_helpers.js';
|
|
6
6
|
import {load_from_storage, save_to_storage} from './storage.js';
|
|
7
7
|
|
|
8
|
+
export interface ThemerJson {
|
|
9
|
+
theme: Theme;
|
|
10
|
+
color_scheme: ColorScheme;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type ThemerOptions = Partial<ThemerJson>;
|
|
14
|
+
|
|
8
15
|
export class Themer {
|
|
9
16
|
theme: Theme = $state()!;
|
|
10
17
|
color_scheme: ColorScheme = $state()!;
|
|
11
18
|
|
|
12
|
-
constructor(
|
|
19
|
+
constructor(options?: ThemerOptions) {
|
|
20
|
+
const theme = options?.theme ?? default_themes[0]!;
|
|
21
|
+
const color_scheme = options?.color_scheme ?? 'auto';
|
|
13
22
|
if (parse_color_scheme(color_scheme) === null) {
|
|
14
23
|
throw Error('unknown color scheme: ' + color_scheme);
|
|
15
24
|
}
|
|
@@ -24,12 +33,6 @@ export class Themer {
|
|
|
24
33
|
};
|
|
25
34
|
}
|
|
26
35
|
}
|
|
27
|
-
|
|
28
|
-
export interface ThemerJson {
|
|
29
|
-
theme: Theme;
|
|
30
|
-
color_scheme: ColorScheme;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
36
|
export const themer_context = create_context<Themer>();
|
|
34
37
|
|
|
35
38
|
export const sync_color_scheme = (color_scheme: ColorScheme | null): void => {
|
|
@@ -61,8 +64,8 @@ export const save_theme = (theme: Theme | null, key = THEME_STORAGE_KEY): void =
|
|
|
61
64
|
};
|
|
62
65
|
|
|
63
66
|
export const load_theme = (fallback: Theme = default_themes[0]!, key = THEME_STORAGE_KEY): Theme =>
|
|
64
|
-
load_from_storage<Theme>(key, true) ?? fallback; // TODO use `parse_theme` from
|
|
67
|
+
load_from_storage<Theme>(key, true) ?? fallback; // TODO use `parse_theme` from fuz_css
|
|
65
68
|
|
|
66
|
-
// TODO move to
|
|
69
|
+
// TODO move to fuz_css
|
|
67
70
|
const parse_color_scheme = (value: unknown): ColorScheme | null =>
|
|
68
71
|
color_schemes.includes(value as any) ? (value as ColorScheme) : null;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import type {Plugin} from 'vite';
|
|
2
|
+
import type {ServerResponse} from 'node:http';
|
|
3
|
+
import {isAbsolute, join} from 'node:path';
|
|
4
|
+
import {readFile} from 'node:fs/promises';
|
|
5
|
+
import type {LibraryJson} from '@fuzdev/fuz_util/library_json.js';
|
|
6
|
+
|
|
7
|
+
export interface VitePluginLibraryWellKnownOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Path to the library.json file (relative to vite.config.ts).
|
|
10
|
+
* @default './src/routes/library.json'
|
|
11
|
+
*/
|
|
12
|
+
library_path?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface WellKnownContent {
|
|
16
|
+
package_json: string | null;
|
|
17
|
+
library_json: string | null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const respond_json = (res: ServerResponse, body: string): void => {
|
|
21
|
+
res.setHeader('Content-Type', 'application/json');
|
|
22
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
23
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
24
|
+
res.end(body);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Vite plugin that publishes `package.json` and `library.json` to `.well-known/`.
|
|
29
|
+
*
|
|
30
|
+
* Requires a generated library.json file (created by `library_gen` from `gro gen`).
|
|
31
|
+
* The plugin reads this JSON file and publishes its metadata to `.well-known/` for
|
|
32
|
+
* both dev and production builds.
|
|
33
|
+
*
|
|
34
|
+
* Note: This plugin respects SvelteKit's `base` path configuration, so `.well-known/`
|
|
35
|
+
* will be served at `{base}.well-known/` (e.g., `/my-app/.well-known/`). This deviates
|
|
36
|
+
* from RFC 8615 which specifies `.well-known` should be at the domain root. This tradeoff
|
|
37
|
+
* allows the plugin to work correctly when apps are deployed to non-root paths.
|
|
38
|
+
*
|
|
39
|
+
* Note: CORS headers are only set for the dev server. For production, configure
|
|
40
|
+
* CORS at the server level (nginx, Caddy, etc.) if cross-origin access is needed.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* // vite.config.ts
|
|
45
|
+
* import {defineConfig} from 'vite';
|
|
46
|
+
* import {sveltekit} from '@sveltejs/kit/vite';
|
|
47
|
+
* import {vite_plugin_library_well_known} from '@fuzdev/fuz_ui/vite_plugin_library_well_known.js';
|
|
48
|
+
*
|
|
49
|
+
* export default defineConfig({
|
|
50
|
+
* plugins: [sveltekit(), vite_plugin_library_well_known()],
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export const vite_plugin_library_well_known = (
|
|
55
|
+
options: VitePluginLibraryWellKnownOptions = {},
|
|
56
|
+
): Plugin => {
|
|
57
|
+
const {library_path = './src/routes/library.json'} = options;
|
|
58
|
+
|
|
59
|
+
const content: WellKnownContent = {
|
|
60
|
+
package_json: null,
|
|
61
|
+
library_json: null,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// Set by configResolved
|
|
65
|
+
let root: string;
|
|
66
|
+
let base: string; // e.g., '/' or '/my-app/'
|
|
67
|
+
|
|
68
|
+
// Promise that resolves when library is loaded, used by middleware to avoid race condition
|
|
69
|
+
let ready_promise: Promise<void> | null = null;
|
|
70
|
+
|
|
71
|
+
const load_library = async (): Promise<void> => {
|
|
72
|
+
// Resolve path relative to project root
|
|
73
|
+
const resolved_path = isAbsolute(library_path) ? library_path : join(root, library_path);
|
|
74
|
+
|
|
75
|
+
let json_content: string;
|
|
76
|
+
try {
|
|
77
|
+
json_content = await readFile(resolved_path, 'utf-8');
|
|
78
|
+
} catch (err) {
|
|
79
|
+
throw new Error(
|
|
80
|
+
`vite_plugin_library_well_known: failed to read library.json from "${library_path}"\n` +
|
|
81
|
+
`Resolved to: ${resolved_path}\n` +
|
|
82
|
+
`Make sure you've run \`gro gen\` to generate the library metadata.\n` +
|
|
83
|
+
`Error: ${err}`,
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
let raw: unknown;
|
|
88
|
+
try {
|
|
89
|
+
raw = JSON.parse(json_content);
|
|
90
|
+
} catch (err) {
|
|
91
|
+
throw new Error(
|
|
92
|
+
`vite_plugin_library_well_known: failed to parse library.json from "${library_path}"\n` +
|
|
93
|
+
`Error: ${err}`,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Basic structure validation (file is generated by library_gen)
|
|
98
|
+
if (raw == null || typeof raw !== 'object') {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`vite_plugin_library_well_known: invalid library.json at "${library_path}"\n` +
|
|
101
|
+
`Expected object, got ${typeof raw}`,
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
if (!('package_json' in raw) || !('source_json' in raw)) {
|
|
105
|
+
throw new Error(
|
|
106
|
+
`vite_plugin_library_well_known: invalid library.json at "${library_path}"\n` +
|
|
107
|
+
`Expected object with package_json and source_json properties`,
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
const library_json = raw as LibraryJson;
|
|
111
|
+
|
|
112
|
+
content.package_json = JSON.stringify(library_json.package_json, null, '\t') + '\n';
|
|
113
|
+
content.library_json = JSON.stringify(library_json, null, '\t') + '\n';
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
name: 'vite_plugin_library_well_known',
|
|
118
|
+
|
|
119
|
+
configResolved(config) {
|
|
120
|
+
root = config.root;
|
|
121
|
+
base = config.base; // e.g., '/' or '/my-app/'
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
async buildStart() {
|
|
125
|
+
ready_promise = load_library();
|
|
126
|
+
await ready_promise;
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
configureServer(server) {
|
|
130
|
+
// TODO: add HMR support to reload library.json when it changes
|
|
131
|
+
const well_known_prefix = `${base}.well-known/`;
|
|
132
|
+
|
|
133
|
+
server.middlewares.use(async (req, res, next) => {
|
|
134
|
+
if (!req.url) {
|
|
135
|
+
next();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const {pathname} = new URL(req.url, 'http://localhost');
|
|
140
|
+
if (!pathname.startsWith(well_known_prefix)) {
|
|
141
|
+
next();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Wait for library to load before serving
|
|
146
|
+
try {
|
|
147
|
+
if (!ready_promise) throw new Error('not initialized');
|
|
148
|
+
await ready_promise;
|
|
149
|
+
} catch {
|
|
150
|
+
res.statusCode = 503;
|
|
151
|
+
respond_json(res, JSON.stringify({error: 'Library not ready'}));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const path = pathname.slice(well_known_prefix.length);
|
|
156
|
+
|
|
157
|
+
if (path === 'package.json' && content.package_json) {
|
|
158
|
+
respond_json(res, content.package_json);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (path === 'library.json' && content.library_json) {
|
|
163
|
+
respond_json(res, content.library_json);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
next();
|
|
168
|
+
});
|
|
169
|
+
},
|
|
170
|
+
|
|
171
|
+
generateBundle() {
|
|
172
|
+
if (content.package_json) {
|
|
173
|
+
this.emitFile({
|
|
174
|
+
type: 'asset',
|
|
175
|
+
fileName: '.well-known/package.json',
|
|
176
|
+
source: content.package_json,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (content.library_json) {
|
|
181
|
+
this.emitFile({
|
|
182
|
+
type: 'asset',
|
|
183
|
+
fileName: '.well-known/library.json',
|
|
184
|
+
source: content.library_json,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
};
|