@turnipxenon/pineapple 2.4.24 → 2.4.26
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/.idea/workspace.xml +55 -51
- package/.svelte-kit/__package__/components/overrideable_meta/OverridableMeta.svelte +51 -0
- package/.svelte-kit/__package__/components/overrideable_meta/OverridableMeta.svelte.d.ts +20 -0
- package/.svelte-kit/__package__/components/overrideable_meta/OverridableMetaProps.d.ts +7 -0
- package/.svelte-kit/__package__/components/overrideable_meta/OverridableMetaProps.js +1 -0
- package/.svelte-kit/__package__/components/overrideable_meta/index.d.ts +2 -0
- package/.svelte-kit/__package__/components/overrideable_meta/index.js +3 -0
- package/.svelte-kit/__package__/index.d.ts +1 -0
- package/.svelte-kit/__package__/index.js +2 -0
- package/.svelte-kit/__package__/template/Seaweed/GameSection.svelte +184 -184
- package/.svelte-kit/__package__/template/Seaweed/ProjectSection.svelte +268 -268
- package/.svelte-kit/__package__/template/Seaweed/SeaweedTemplate.svelte +135 -18
- package/.svelte-kit/__package__/template/Seaweed/SeaweedTemplate.svelte.d.ts +1 -0
- package/.svelte-kit/__package__/template/Seaweed/seaweed.postcss +133 -133
- package/.svelte-kit/__package__/util/util.d.ts +3 -0
- package/.svelte-kit/ambient.d.ts +0 -2
- package/.svelte-kit/generated/client/nodes/5.js +2 -0
- package/.svelte-kit/generated/client/nodes/6.js +2 -0
- package/.svelte-kit/generated/client/nodes/7.js +2 -0
- package/.svelte-kit/generated/client/nodes/8.js +1 -1
- package/.svelte-kit/generated/server/internal.js +1 -1
- package/.svelte-kit/types/route_meta_data.json +7 -2
- package/.svelte-kit/types/src/routes/(pineapple)/pineapple/$types.d.ts +3 -1
- package/.svelte-kit/types/src/routes/(seaweed)/portfolio/$types.d.ts +4 -2
- package/.svelte-kit/types/src/routes/(seaweed)/portfolio/actual/$types.d.ts +3 -1
- package/dist/components/overrideable_meta/OverridableMeta.svelte +51 -0
- package/dist/components/overrideable_meta/OverridableMeta.svelte.d.ts +20 -0
- package/dist/components/overrideable_meta/OverridableMetaProps.d.ts +7 -0
- package/dist/components/overrideable_meta/OverridableMetaProps.js +1 -0
- package/dist/components/overrideable_meta/index.d.ts +2 -0
- package/dist/components/overrideable_meta/index.js +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/template/Seaweed/GameSection.svelte +184 -184
- package/dist/template/Seaweed/ProjectSection.svelte +268 -268
- package/dist/template/Seaweed/SeaweedTemplate.svelte +135 -18
- package/dist/template/Seaweed/SeaweedTemplate.svelte.d.ts +1 -0
- package/dist/template/Seaweed/seaweed.postcss +133 -133
- package/dist/util/util.d.ts +3 -0
- package/package.json +1 -1
- package/src/lib/components/overrideable_meta/OverridableMeta.svelte +56 -0
- package/src/lib/components/overrideable_meta/OverridableMetaProps.ts +7 -0
- package/src/lib/components/overrideable_meta/index.ts +4 -0
- package/src/lib/index.ts +3 -0
- package/src/lib/template/Seaweed/GameSection.svelte +213 -213
- package/src/lib/template/Seaweed/ProjectSection.svelte +298 -298
- package/src/lib/template/Seaweed/SeaweedTemplate.svelte +180 -21
- package/src/lib/template/Seaweed/seaweed.postcss +133 -133
- package/src/lib/util/util.ts +38 -34
- package/src/routes/(pineapple)/+layout.svelte +0 -15
- package/src/routes/(pineapple)/+page.svelte +0 -12
- package/src/routes/(pineapple)/pineapple/+page.svelte +0 -10
- package/src/routes/(pineapple)/pineapple/+page.ts +8 -0
- package/src/routes/(seaweed)/portfolio/+page.svelte +0 -11
- package/src/routes/(seaweed)/portfolio/+page.ts +8 -0
- package/src/routes/(seaweed)/portfolio/actual/+page.ts +8 -0
- package/src/routes/+layout.svelte +21 -0
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
export let name = "Turnip";
|
|
3
3
|
export let email = "turnipxenon@gmail.com";
|
|
4
4
|
export let linkedinSlug = "turnip-xenon";
|
|
5
|
+
export let domain = "http://localhost:5173/portfolio/actual/";
|
|
5
6
|
import SocialSection from "../../components/SocialSection.svelte";
|
|
6
7
|
import "./seaweed.postcss";
|
|
7
8
|
import SeaweedBaseLayout from "../../components/layouts/SeaweedBaseLayout.svelte";
|
|
8
|
-
import { Accordion, AccordionItem, SlideToggle } from "@skeletonlabs/skeleton";
|
|
9
|
+
import { Accordion, AccordionItem, CodeBlock, SlideToggle } from "@skeletonlabs/skeleton";
|
|
9
10
|
import { page } from "$app/stores";
|
|
10
11
|
import Card from "../../components/Card.svelte";
|
|
11
12
|
import { onMount } from "svelte";
|
|
@@ -16,9 +17,49 @@ let isVisible = true;
|
|
|
16
17
|
let isAdvanceSettingOn = false;
|
|
17
18
|
$:
|
|
18
19
|
isSocialsGone = !isVisible;
|
|
20
|
+
import gameContent from "./GameSection.svelte?raw";
|
|
21
|
+
import projectContent from "./ProjectSection.svelte?raw";
|
|
22
|
+
import selfContent from "./SeaweedTemplate.svelte?raw";
|
|
23
|
+
let qtMap = /* @__PURE__ */ new Map();
|
|
24
|
+
const paramQTSet = /* @__PURE__ */ new Set();
|
|
25
|
+
const syncQT = () => {
|
|
26
|
+
if (qtMap.size === 0 || paramQTSet.size === 0) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
qtMap.forEach((_, k) => {
|
|
30
|
+
qtMap.set(k, paramQTSet.has(k));
|
|
31
|
+
});
|
|
32
|
+
qtMap = qtMap;
|
|
33
|
+
};
|
|
34
|
+
const parseQTTerms = async () => {
|
|
35
|
+
const qtSet = /* @__PURE__ */ new Set();
|
|
36
|
+
const rawTermList = [];
|
|
37
|
+
[gameContent, projectContent, selfContent].forEach((body) => {
|
|
38
|
+
rawTermList.push(
|
|
39
|
+
...body.split('"').filter((s) => s.startsWith("qt-"))
|
|
40
|
+
// step 2: filter out texts that does not begin with "qt-"
|
|
41
|
+
);
|
|
42
|
+
});
|
|
43
|
+
rawTermList.forEach((t) => {
|
|
44
|
+
t.split(" ").forEach((nt) => {
|
|
45
|
+
if (["qt-1", "qt-2", "qt-*", "qt-"].includes(nt)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
qtSet.add(nt);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
qtSet.forEach((t) => qtMap.set(t, true));
|
|
52
|
+
syncQT();
|
|
53
|
+
};
|
|
54
|
+
parseQTTerms();
|
|
55
|
+
let gameSectionFirst = true;
|
|
19
56
|
let qtfontWeight = "normal";
|
|
20
57
|
let additionalFontWeight = "";
|
|
21
58
|
const filterSearchParams = (searchParams) => {
|
|
59
|
+
const gameSectionFirstParam = searchParams.get("game-section-first")?.trim();
|
|
60
|
+
if (gameSectionFirstParam === "false") {
|
|
61
|
+
gameSectionFirst = false;
|
|
62
|
+
}
|
|
22
63
|
const qtValue = searchParams.get("qt")?.trim();
|
|
23
64
|
if (qtValue === void 0) {
|
|
24
65
|
qtfontWeight = "bold";
|
|
@@ -26,12 +67,14 @@ const filterSearchParams = (searchParams) => {
|
|
|
26
67
|
}
|
|
27
68
|
qtfontWeight = "normal";
|
|
28
69
|
const dynamicStyle = qtValue.split(",").map((term) => {
|
|
70
|
+
paramQTSet.add(`qt-${term}`);
|
|
29
71
|
return `span.qt-${term} { font-weight: bold !important; }`;
|
|
30
72
|
}).join("\n");
|
|
31
73
|
const style = document.createElement("style");
|
|
32
74
|
style.type = "text/css";
|
|
33
75
|
style.innerText = dynamicStyle;
|
|
34
76
|
document.head.appendChild(style);
|
|
77
|
+
syncQT();
|
|
35
78
|
};
|
|
36
79
|
const chaoticWordBank = ["niko", "toba", "seal", "aquarium", "ojisan", "baikal"];
|
|
37
80
|
let chaosDone = false;
|
|
@@ -69,6 +112,9 @@ const runChaos = (node) => {
|
|
|
69
112
|
}
|
|
70
113
|
}
|
|
71
114
|
};
|
|
115
|
+
let mainVisibility = "visible";
|
|
116
|
+
$:
|
|
117
|
+
mainVisibility = letChaos && !chaosDone ? "hidden" : "visible";
|
|
72
118
|
onMount(() => {
|
|
73
119
|
if (!letChaos && $page.url.searchParams) {
|
|
74
120
|
filterSearchParams($page.url.searchParams);
|
|
@@ -78,9 +124,35 @@ onMount(() => {
|
|
|
78
124
|
chaosDone = true;
|
|
79
125
|
}
|
|
80
126
|
});
|
|
81
|
-
|
|
127
|
+
const toggleTerm = (term) => {
|
|
128
|
+
qtMap.set(term, !qtMap.get(term));
|
|
129
|
+
qtMap = qtMap;
|
|
130
|
+
};
|
|
131
|
+
let advancedUrl = domain;
|
|
132
|
+
const updateUrl = () => {
|
|
133
|
+
const queryParams = [];
|
|
134
|
+
const qtList = [];
|
|
135
|
+
qtMap.forEach((shouldBold, term) => {
|
|
136
|
+
if (shouldBold) {
|
|
137
|
+
qtList.push(term);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
if (qtList.length === 0) {
|
|
141
|
+
queryParams.push("qt=clear");
|
|
142
|
+
} else if (qtMap.size !== qtList.length) {
|
|
143
|
+
queryParams.push(`qt=${qtList.map((t) => t.slice(3, t.length)).join(",")}`);
|
|
144
|
+
}
|
|
145
|
+
if (!gameSectionFirst) {
|
|
146
|
+
queryParams.push("game-section-first=false");
|
|
147
|
+
}
|
|
148
|
+
if (queryParams.length > 0) {
|
|
149
|
+
advancedUrl = `${domain}?${queryParams.join("&")}`;
|
|
150
|
+
} else {
|
|
151
|
+
advancedUrl = domain;
|
|
152
|
+
}
|
|
153
|
+
};
|
|
82
154
|
$:
|
|
83
|
-
|
|
155
|
+
gameSectionFirst, qtMap, updateUrl();
|
|
84
156
|
</script>
|
|
85
157
|
|
|
86
158
|
<SeaweedBaseLayout bind:shouldDisplayLeadingIcons={isSocialsGone}>
|
|
@@ -217,25 +289,51 @@ $:
|
|
|
217
289
|
|
|
218
290
|
</div>
|
|
219
291
|
|
|
220
|
-
|
|
292
|
+
{#if (gameSectionFirst)}
|
|
293
|
+
<GameSection email={email}></GameSection>
|
|
294
|
+
<ProjectSection email={email}></ProjectSection>
|
|
295
|
+
{:else }
|
|
296
|
+
<ProjectSection email={email}></ProjectSection>
|
|
297
|
+
<GameSection email={email}></GameSection>
|
|
298
|
+
{/if}
|
|
221
299
|
|
|
222
|
-
|
|
300
|
+
{#if (!letChaos)}
|
|
301
|
+
<div aria-hidden="true" style="height: 25vh" />
|
|
223
302
|
|
|
224
|
-
|
|
303
|
+
<Card>
|
|
304
|
+
<div slot="content" class="default-card advanced-setting">
|
|
305
|
+
<h1>Advanced settings</h1>
|
|
306
|
+
<p>This one is for those curious how I customize this page.</p>
|
|
307
|
+
<SlideToggle name="advanced-setting-slider" bind:checked={isAdvanceSettingOn}>
|
|
308
|
+
Advanced settings: {isAdvanceSettingOn ? "On" : "Off"}
|
|
309
|
+
</SlideToggle>
|
|
310
|
+
{#if (isAdvanceSettingOn)}
|
|
311
|
+
<SlideToggle name="game-section-slider" bind:checked={gameSectionFirst}>
|
|
312
|
+
Should game section appear first over projects: {gameSectionFirst ? "On" : "Off"}
|
|
313
|
+
</SlideToggle>
|
|
225
314
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
315
|
+
<h3>Query terms to bold</h3>
|
|
316
|
+
<div class="query-term-grid">
|
|
317
|
+
{#each qtMap.entries() as [term, shouldBold]}
|
|
318
|
+
<!--{@const shouldBold = false}-->
|
|
319
|
+
<button
|
|
320
|
+
class="chip {shouldBold ? 'variant-filled-tertiary' : 'variant-soft-tertiary'}"
|
|
321
|
+
on:click={() => {toggleTerm(term)}}
|
|
322
|
+
>
|
|
323
|
+
<!-- todo: change shouldBold -->
|
|
324
|
+
{#if (shouldBold)}✓{/if}
|
|
325
|
+
{term}
|
|
326
|
+
</button>
|
|
327
|
+
{/each}
|
|
328
|
+
</div>
|
|
238
329
|
|
|
330
|
+
<br>
|
|
331
|
+
<p>Copy the url below and open a new page with it</p>
|
|
332
|
+
<CodeBlock language="url" code={advancedUrl}></CodeBlock>
|
|
333
|
+
{/if}
|
|
334
|
+
</div>
|
|
335
|
+
</Card>
|
|
336
|
+
{/if}
|
|
239
337
|
</main>
|
|
240
338
|
|
|
241
339
|
<SocialSection slot="extraLeadingIcons"
|
|
@@ -244,3 +342,22 @@ $:
|
|
|
244
342
|
linkedinSlug={linkedinSlug}
|
|
245
343
|
isSmallVersion={true}></SocialSection>
|
|
246
344
|
</SeaweedBaseLayout>
|
|
345
|
+
|
|
346
|
+
<style>
|
|
347
|
+
.advanced-setting {
|
|
348
|
+
display: flex;
|
|
349
|
+
flex-direction: column;
|
|
350
|
+
gap: 0.5lh;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
h3 {
|
|
354
|
+
font-size: 1.5em;
|
|
355
|
+
line-height: 1.5lh;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.query-term-grid {
|
|
359
|
+
display: flex;
|
|
360
|
+
gap: 0.25em;
|
|
361
|
+
flex-wrap: wrap;
|
|
362
|
+
}
|
|
363
|
+
</style>
|
|
@@ -1,133 +1,133 @@
|
|
|
1
|
-
main {
|
|
2
|
-
width: 100%;
|
|
3
|
-
overflow: visible;
|
|
4
|
-
display: flex;
|
|
5
|
-
flex-direction: column;
|
|
6
|
-
justify-content: center;
|
|
7
|
-
align-items: center;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
h1 {
|
|
11
|
-
font-size: 2em;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
h2 {
|
|
15
|
-
font-size: 1.5em;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.section-card {
|
|
19
|
-
padding: 3em;
|
|
20
|
-
max-width: 800px;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.game-card, .project-card {
|
|
24
|
-
width: 100vw;
|
|
25
|
-
max-width: 36em;
|
|
26
|
-
margin-bottom: 3em;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.game-card > video {
|
|
30
|
-
border-top-left-radius: 1em;
|
|
31
|
-
border-top-right-radius: 1em;
|
|
32
|
-
max-height: 24em;
|
|
33
|
-
width: 100%;
|
|
34
|
-
object-fit: cover;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
#migrante-alberta, .game-card > img, .project-card > img {
|
|
38
|
-
border-top-left-radius: 1em;
|
|
39
|
-
border-top-right-radius: 1em;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
#migrante-alberta {
|
|
43
|
-
width: 100%;
|
|
44
|
-
object-fit: cover;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.game-button {
|
|
48
|
-
@apply btn variant-filled-primary;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.game-button > img {
|
|
52
|
-
max-height: 1lh;
|
|
53
|
-
/* todo: consider night mode day mode */
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.two-column-separated {
|
|
57
|
-
display: flex;
|
|
58
|
-
justify-content: space-between;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.more-section {
|
|
62
|
-
padding: 1em;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.greater-about-div {
|
|
66
|
-
display: flex;
|
|
67
|
-
flex-direction: column;
|
|
68
|
-
max-width: 36em;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.experience-and-about-div {
|
|
72
|
-
display: flex;
|
|
73
|
-
gap: 2em;
|
|
74
|
-
flex-wrap: wrap;
|
|
75
|
-
justify-content: center;
|
|
76
|
-
align-items: flex-start;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.game-card-body, .project-card-body {
|
|
80
|
-
padding: 1em;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.game-card-body > blockquote {
|
|
84
|
-
margin-bottom: 0.7lh;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.game-card-body > h1, .project-card-body > h2 {
|
|
88
|
-
text-align: center;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.game-link-section {
|
|
92
|
-
display: flex;
|
|
93
|
-
flex-direction: row;
|
|
94
|
-
justify-content: center;
|
|
95
|
-
gap: 1em;
|
|
96
|
-
margin-top: 1em;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.games-section, .projects-section {
|
|
100
|
-
display: flex;
|
|
101
|
-
flex-wrap: wrap;
|
|
102
|
-
gap: 2em;
|
|
103
|
-
justify-content: center;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.projects-section {
|
|
107
|
-
align-items: flex-start;
|
|
108
|
-
/*justify-content: flex-start;*/
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.long-btn-image {
|
|
112
|
-
max-height: 1lh;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.itch-promo {
|
|
116
|
-
padding: 4em;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
#hepcat-video {
|
|
120
|
-
object-position: 0 0;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.title-card {
|
|
124
|
-
width: clamp(360px, 80vw, 800px);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
[class*='qt-'] {
|
|
128
|
-
font-weight: var(--qt-font-weight);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.accordion-header {
|
|
132
|
-
margin-top: 0.25em;
|
|
133
|
-
}
|
|
1
|
+
main {
|
|
2
|
+
width: 100%;
|
|
3
|
+
overflow: visible;
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
align-items: center;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
h1 {
|
|
11
|
+
font-size: 2em;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
h2 {
|
|
15
|
+
font-size: 1.5em;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.section-card {
|
|
19
|
+
padding: 3em;
|
|
20
|
+
max-width: 800px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.game-card, .project-card {
|
|
24
|
+
width: 100vw;
|
|
25
|
+
max-width: 36em;
|
|
26
|
+
margin-bottom: 3em;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.game-card > video {
|
|
30
|
+
border-top-left-radius: 1em;
|
|
31
|
+
border-top-right-radius: 1em;
|
|
32
|
+
max-height: 24em;
|
|
33
|
+
width: 100%;
|
|
34
|
+
object-fit: cover;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
#migrante-alberta, .game-card > img, .project-card > img {
|
|
38
|
+
border-top-left-radius: 1em;
|
|
39
|
+
border-top-right-radius: 1em;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#migrante-alberta {
|
|
43
|
+
width: 100%;
|
|
44
|
+
object-fit: cover;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.game-button {
|
|
48
|
+
@apply btn variant-filled-primary;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.game-button > img {
|
|
52
|
+
max-height: 1lh;
|
|
53
|
+
/* todo: consider night mode day mode */
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.two-column-separated {
|
|
57
|
+
display: flex;
|
|
58
|
+
justify-content: space-between;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.more-section {
|
|
62
|
+
padding: 1em;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.greater-about-div {
|
|
66
|
+
display: flex;
|
|
67
|
+
flex-direction: column;
|
|
68
|
+
max-width: 36em;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.experience-and-about-div {
|
|
72
|
+
display: flex;
|
|
73
|
+
gap: 2em;
|
|
74
|
+
flex-wrap: wrap;
|
|
75
|
+
justify-content: center;
|
|
76
|
+
align-items: flex-start;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.game-card-body, .project-card-body {
|
|
80
|
+
padding: 1em;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.game-card-body > blockquote {
|
|
84
|
+
margin-bottom: 0.7lh;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.game-card-body > h1, .project-card-body > h2 {
|
|
88
|
+
text-align: center;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.game-link-section {
|
|
92
|
+
display: flex;
|
|
93
|
+
flex-direction: row;
|
|
94
|
+
justify-content: center;
|
|
95
|
+
gap: 1em;
|
|
96
|
+
margin-top: 1em;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.games-section, .projects-section {
|
|
100
|
+
display: flex;
|
|
101
|
+
flex-wrap: wrap;
|
|
102
|
+
gap: 2em;
|
|
103
|
+
justify-content: center;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.projects-section {
|
|
107
|
+
align-items: flex-start;
|
|
108
|
+
/*justify-content: flex-start;*/
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.long-btn-image {
|
|
112
|
+
max-height: 1lh;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.itch-promo {
|
|
116
|
+
padding: 4em;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
#hepcat-video {
|
|
120
|
+
object-position: 0 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.title-card {
|
|
124
|
+
width: clamp(360px, 80vw, 800px);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
[class*='qt-'] {
|
|
128
|
+
font-weight: var(--qt-font-weight);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.accordion-header {
|
|
132
|
+
margin-top: 0.25em;
|
|
133
|
+
}
|
package/.svelte-kit/ambient.d.ts
CHANGED
|
@@ -46,7 +46,6 @@ declare module '$env/static/private' {
|
|
|
46
46
|
export const HOMEDRIVE: string;
|
|
47
47
|
export const HOMEPATH: string;
|
|
48
48
|
export const IDEA_INITIAL_DIRECTORY: string;
|
|
49
|
-
export const IJ_RESTARTER_LOG: string;
|
|
50
49
|
export const INIT_CWD: string;
|
|
51
50
|
export const JAVA_HOME: string;
|
|
52
51
|
export const LOCALAPPDATA: string;
|
|
@@ -240,7 +239,6 @@ declare module '$env/dynamic/private' {
|
|
|
240
239
|
HOMEDRIVE: string;
|
|
241
240
|
HOMEPATH: string;
|
|
242
241
|
IDEA_INITIAL_DIRECTORY: string;
|
|
243
|
-
IJ_RESTARTER_LOG: string;
|
|
244
242
|
INIT_CWD: string;
|
|
245
243
|
JAVA_HOME: string;
|
|
246
244
|
LOCALAPPDATA: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default as component } from "../../../../src/routes/(seaweed)/portfolio/+page.svelte";
|
|
1
|
+
export { default as component } from "../../../../src/routes/(seaweed)/portfolio/actual/+page.svelte";
|
|
@@ -21,7 +21,7 @@ export const options = {
|
|
|
21
21
|
app: ({ head, body, assets, nonce, env }) => "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"" + assets + "/favicon.png\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width\" />\n\t\t" + head + "\n\t</head>\n\n\t<body data-sveltekit-preload-data=\"hover\" data-theme=\"crimson\">\n\t\t<div style=\"display: contents\" class=\"h-full overflow-hidden\">" + body + "</div>\n\t</body>\n</html>\n",
|
|
22
22
|
error: ({ status, message }) => "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>" + message + "</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\t--bg: white;\n\t\t\t\t--fg: #222;\n\t\t\t\t--divider: #ccc;\n\t\t\t\tbackground: var(--bg);\n\t\t\t\tcolor: var(--fg);\n\t\t\t\tfont-family:\n\t\t\t\t\tsystem-ui,\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tOxygen,\n\t\t\t\t\tUbuntu,\n\t\t\t\t\tCantarell,\n\t\t\t\t\t'Open Sans',\n\t\t\t\t\t'Helvetica Neue',\n\t\t\t\t\tsans-serif;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmax-width: 32rem;\n\t\t\t\tmargin: 0 1rem;\n\t\t\t}\n\n\t\t\t.status {\n\t\t\t\tfont-weight: 200;\n\t\t\t\tfont-size: 3rem;\n\t\t\t\tline-height: 1;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: -0.05rem;\n\t\t\t}\n\n\t\t\t.message {\n\t\t\t\tborder-left: 1px solid var(--divider);\n\t\t\t\tpadding: 0 0 0 1rem;\n\t\t\t\tmargin: 0 0 0 1rem;\n\t\t\t\tmin-height: 2.5rem;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\n\t\t\t.message h1 {\n\t\t\t\tfont-weight: 400;\n\t\t\t\tfont-size: 1em;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t@media (prefers-color-scheme: dark) {\n\t\t\t\tbody {\n\t\t\t\t\t--bg: #222;\n\t\t\t\t\t--fg: #ddd;\n\t\t\t\t\t--divider: #666;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"error\">\n\t\t\t<span class=\"status\">" + status + "</span>\n\t\t\t<div class=\"message\">\n\t\t\t\t<h1>" + message + "</h1>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n</html>\n"
|
|
23
23
|
},
|
|
24
|
-
version_hash: "
|
|
24
|
+
version_hash: "6ez2bd"
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
export async function get_hooks() {
|
|
@@ -2,9 +2,14 @@
|
|
|
2
2
|
"/(seaweed)": [],
|
|
3
3
|
"/(pineapple)": [],
|
|
4
4
|
"/": [],
|
|
5
|
-
"/(pineapple)/pineapple": [
|
|
5
|
+
"/(pineapple)/pineapple": [
|
|
6
|
+
"src/routes/(pineapple)/pineapple/+page.ts"
|
|
7
|
+
],
|
|
6
8
|
"/(seaweed)/portfolio": [
|
|
9
|
+
"src/routes/(seaweed)/portfolio/+page.ts",
|
|
7
10
|
"src/routes/(seaweed)/portfolio/+page.server.ts"
|
|
8
11
|
],
|
|
9
|
-
"/(seaweed)/portfolio/actual": [
|
|
12
|
+
"/(seaweed)/portfolio/actual": [
|
|
13
|
+
"src/routes/(seaweed)/portfolio/actual/+page.ts"
|
|
14
|
+
]
|
|
10
15
|
}
|
|
@@ -14,4 +14,6 @@ export type Snapshot<T = any> = Kit.Snapshot<T>;
|
|
|
14
14
|
type PageParentData = Omit<EnsureDefined<import('../../$types.js').LayoutData>, keyof import('../$types.js').LayoutData> & EnsureDefined<import('../$types.js').LayoutData>;
|
|
15
15
|
|
|
16
16
|
export type PageServerData = null;
|
|
17
|
-
export type
|
|
17
|
+
export type PageLoad<OutputData extends OutputDataShape<PageParentData> = OutputDataShape<PageParentData>> = Kit.Load<RouteParams, PageServerData, PageParentData, OutputData, RouteId>;
|
|
18
|
+
export type PageLoadEvent = Parameters<PageLoad>[0];
|
|
19
|
+
export type PageData = Expand<Omit<PageParentData, keyof Kit.LoadProperties<Awaited<ReturnType<typeof import('../../../../../../src/routes/(pineapple)/pineapple/+page.js').load>>>> & OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('../../../../../../src/routes/(pineapple)/pineapple/+page.js').load>>>>>>;
|
|
@@ -14,11 +14,13 @@ export type Snapshot<T = any> = Kit.Snapshot<T>;
|
|
|
14
14
|
type PageServerParentData = Omit<EnsureDefined<import('../../$types.js').LayoutServerData>, keyof import('../$types.js').LayoutServerData> & EnsureDefined<import('../$types.js').LayoutServerData>;
|
|
15
15
|
type PageParentData = Omit<EnsureDefined<import('../../$types.js').LayoutData>, keyof import('../$types.js').LayoutData> & EnsureDefined<import('../$types.js').LayoutData>;
|
|
16
16
|
|
|
17
|
-
export type PageServerLoad<OutputData extends
|
|
17
|
+
export type PageServerLoad<OutputData extends Partial<App.PageData> & Record<string, any> | void = Partial<App.PageData> & Record<string, any> | void> = Kit.ServerLoad<RouteParams, PageServerParentData, OutputData, RouteId>;
|
|
18
18
|
export type PageServerLoadEvent = Parameters<PageServerLoad>[0];
|
|
19
19
|
export type ActionData = unknown;
|
|
20
20
|
export type PageServerData = Expand<OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('./proxy+page.server.js').load>>>>>>;
|
|
21
|
-
export type
|
|
21
|
+
export type PageLoad<OutputData extends OutputDataShape<PageParentData> = OutputDataShape<PageParentData>> = Kit.Load<RouteParams, PageServerData, PageParentData, OutputData, RouteId>;
|
|
22
|
+
export type PageLoadEvent = Parameters<PageLoad>[0];
|
|
23
|
+
export type PageData = Expand<Omit<PageParentData, keyof Kit.LoadProperties<Awaited<ReturnType<typeof import('../../../../../../src/routes/(seaweed)/portfolio/+page.js').load>>>> & OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('../../../../../../src/routes/(seaweed)/portfolio/+page.js').load>>>>>>;
|
|
22
24
|
export type Action<OutputData extends Record<string, any> | void = Record<string, any> | void> = Kit.Action<RouteParams, OutputData, RouteId>
|
|
23
25
|
export type Actions<OutputData extends Record<string, any> | void = Record<string, any> | void> = Kit.Actions<RouteParams, OutputData, RouteId>
|
|
24
26
|
export type RequestEvent = Kit.RequestEvent<RouteParams, RouteId>;
|
|
@@ -14,4 +14,6 @@ export type Snapshot<T = any> = Kit.Snapshot<T>;
|
|
|
14
14
|
type PageParentData = Omit<EnsureDefined<import('../../../$types.js').LayoutData>, keyof import('../../$types.js').LayoutData> & EnsureDefined<import('../../$types.js').LayoutData>;
|
|
15
15
|
|
|
16
16
|
export type PageServerData = null;
|
|
17
|
-
export type
|
|
17
|
+
export type PageLoad<OutputData extends OutputDataShape<PageParentData> = OutputDataShape<PageParentData>> = Kit.Load<RouteParams, PageServerData, PageParentData, OutputData, RouteId>;
|
|
18
|
+
export type PageLoadEvent = Parameters<PageLoad>[0];
|
|
19
|
+
export type PageData = Expand<Omit<PageParentData, keyof Kit.LoadProperties<Awaited<ReturnType<typeof import('../../../../../../../src/routes/(seaweed)/portfolio/actual/+page.js').load>>>> & OptionalUnion<EnsureDefined<Kit.LoadProperties<Awaited<ReturnType<typeof import('../../../../../../../src/routes/(seaweed)/portfolio/actual/+page.js').load>>>>>>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
OverridableMeta is convenient Svelte component allowing each page to override the head meta values
|
|
3
|
+
based on their +page.ts.
|
|
4
|
+
|
|
5
|
+
For example:
|
|
6
|
+
<code>
|
|
7
|
+
// +page.ts
|
|
8
|
+
|
|
9
|
+
import type { OverridableMetaProps } from "../..";
|
|
10
|
+
|
|
11
|
+
export const load = async (): Promise<OverridableMetaProps> => {
|
|
12
|
+
return {
|
|
13
|
+
title: "CustomTitle",
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
</code>
|
|
17
|
+
-->
|
|
18
|
+
|
|
19
|
+
<script>import WebThumbnailImage from "../../assets/placeholder/placeholder_circle.png";
|
|
20
|
+
export let rootUrl = "http://localhost:5173";
|
|
21
|
+
export let title = "Welcome to my portfolio";
|
|
22
|
+
export let ogTitle = "Turnip time!";
|
|
23
|
+
export let ogDescription = "Welcome to Turnip's test portfolio";
|
|
24
|
+
export let ogImage = WebThumbnailImage;
|
|
25
|
+
import { page } from "$app/stores";
|
|
26
|
+
const data = {
|
|
27
|
+
title: "Welcome to my portfolio",
|
|
28
|
+
ogUrl: "https://www.crouton.net/",
|
|
29
|
+
ogTitle: "Turnip time!",
|
|
30
|
+
ogDescription: "Welcome to Turnip's test portfolio",
|
|
31
|
+
ogImage: WebThumbnailImage
|
|
32
|
+
};
|
|
33
|
+
page.subscribe((p) => {
|
|
34
|
+
const pageData = p.data;
|
|
35
|
+
data.title = pageData.title ?? title;
|
|
36
|
+
data.ogUrl = `${rootUrl}${p.url.pathname}`;
|
|
37
|
+
data.ogTitle = pageData.ogTitle ?? ogTitle;
|
|
38
|
+
data.ogDescription = pageData.ogDescription ?? ogDescription;
|
|
39
|
+
data.ogImage = pageData.ogImage ?? ogImage;
|
|
40
|
+
});
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<svelte:head>
|
|
44
|
+
<meta charset="utf-8" />
|
|
45
|
+
<title>{data.title}</title>
|
|
46
|
+
<meta name="twitter:card" content="summary" />
|
|
47
|
+
<meta property="og:url" content={data.ogUrl} />
|
|
48
|
+
<meta property="og:title" content={data.ogTitle} />
|
|
49
|
+
<meta property="og:description" content={data.ogDescription} />
|
|
50
|
+
<meta property="og:image" content={data.ogImage} />
|
|
51
|
+
</svelte:head>
|