@turnipxenon/pineapple 2.4.23 → 2.4.25

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.
Files changed (36) hide show
  1. package/.idea/workspace.xml +82 -79
  2. package/.svelte-kit/__package__/index.d.ts +1 -1
  3. package/.svelte-kit/__package__/index.js +1 -1
  4. package/.svelte-kit/__package__/template/Seaweed/GameSection.svelte +207 -0
  5. package/.svelte-kit/__package__/template/Seaweed/GameSection.svelte.d.ts +17 -0
  6. package/.svelte-kit/__package__/template/Seaweed/ProjectSection.svelte +289 -0
  7. package/.svelte-kit/__package__/template/Seaweed/ProjectSection.svelte.d.ts +17 -0
  8. package/.svelte-kit/__package__/template/Seaweed/SeaweedTemplate.svelte +362 -0
  9. package/.svelte-kit/__package__/template/{SeaweedTemplate.svelte.d.ts → Seaweed/SeaweedTemplate.svelte.d.ts} +2 -0
  10. package/.svelte-kit/__package__/template/Seaweed/seaweed.postcss +133 -0
  11. package/.svelte-kit/__package__/util/util.d.ts +3 -0
  12. package/.svelte-kit/ambient.d.ts +2 -0
  13. package/.svelte-kit/generated/server/internal.js +1 -1
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/template/Seaweed/GameSection.svelte +207 -0
  17. package/dist/template/Seaweed/GameSection.svelte.d.ts +17 -0
  18. package/dist/template/Seaweed/ProjectSection.svelte +289 -0
  19. package/dist/template/Seaweed/ProjectSection.svelte.d.ts +17 -0
  20. package/dist/template/Seaweed/SeaweedTemplate.svelte +362 -0
  21. package/dist/template/{SeaweedTemplate.svelte.d.ts → Seaweed/SeaweedTemplate.svelte.d.ts} +2 -0
  22. package/dist/template/Seaweed/seaweed.postcss +133 -0
  23. package/dist/util/util.d.ts +3 -0
  24. package/package.json +1 -1
  25. package/src/lib/index.ts +1 -1
  26. package/src/lib/template/Seaweed/GameSection.svelte +213 -0
  27. package/src/lib/template/Seaweed/ProjectSection.svelte +298 -0
  28. package/src/lib/template/Seaweed/SeaweedTemplate.svelte +433 -0
  29. package/src/lib/template/Seaweed/seaweed.postcss +133 -0
  30. package/src/lib/util/util.ts +4 -0
  31. package/src/routes/(seaweed)/portfolio/+page.svelte +1 -1
  32. package/src/routes/(seaweed)/portfolio/actual/+page.svelte +4 -4
  33. package/src/routes/+layout.svelte +18 -0
  34. package/.svelte-kit/__package__/template/SeaweedTemplate.svelte +0 -910
  35. package/dist/template/SeaweedTemplate.svelte +0 -910
  36. package/src/lib/template/SeaweedTemplate.svelte +0 -877
@@ -0,0 +1,433 @@
1
+ <script lang="ts">
2
+ export let letChaos = true;
3
+ export let name = "Turnip";
4
+ export let email = "turnipxenon@gmail.com";
5
+ export let linkedinSlug = "turnip-xenon";
6
+ export let domain = "http://localhost:5173/portfolio/actual/";
7
+
8
+ import SocialSection from "$pkg/components/SocialSection.svelte";
9
+ import "./seaweed.postcss";
10
+ import SeaweedBaseLayout from "$pkg/components/layouts/SeaweedBaseLayout.svelte";
11
+ import { Accordion, AccordionItem, CodeBlock, SlideToggle } from "@skeletonlabs/skeleton";
12
+ import { page } from "$app/stores";
13
+ import Card from "$pkg/components/Card.svelte";
14
+ import { onMount } from "svelte";
15
+ import ElementVisbilityDetector from "$pkg/components/ElementVisbilityDetector.svelte";
16
+ import GameSection from "$pkg/template/Seaweed/GameSection.svelte";
17
+ import ProjectSection from "$pkg/template/Seaweed/ProjectSection.svelte";
18
+
19
+ let isVisible = true;
20
+ let isAdvanceSettingOn = false;
21
+
22
+ $: isSocialsGone = !isVisible;
23
+
24
+ // region query params
25
+ import gameContent from "./GameSection.svelte?raw";
26
+ import projectContent from "./ProjectSection.svelte?raw";
27
+ import selfContent from "./SeaweedTemplate.svelte?raw";
28
+
29
+ let qtMap = new Map<string, boolean>();
30
+ const paramQTSet = new Set<string>();
31
+
32
+ const syncQT = () => {
33
+ if (qtMap.size === 0 || paramQTSet.size === 0) {
34
+ return;
35
+ }
36
+
37
+ qtMap.forEach((_, k) => {
38
+ qtMap.set(k, paramQTSet.has(k));
39
+ });
40
+
41
+ // force svelte refresh
42
+ qtMap = qtMap;
43
+ };
44
+
45
+ const parseQTTerms = async () => {
46
+ const qtSet = new Set<string>();
47
+ const rawTermList: string[] = [];
48
+ [gameContent, projectContent, selfContent].forEach(body => {
49
+ // parse the qt-* term which exists within elements like:
50
+ // <span class="qt-*">TERM</span>
51
+ rawTermList.push(
52
+ ...body // step 3: destructure the array
53
+ .split("\"") // step 1: split the text as double quotations (") as the delimiter
54
+ .filter(s => s.startsWith("qt-")) // step 2: filter out texts that does not begin with "qt-"
55
+ );
56
+ });
57
+
58
+ // step 4: some spans contain multiple classes, split them up
59
+ // then add them to qtTerms
60
+ // e.g. <span class="qt-1 qt-2">TERM</span>
61
+ rawTermList.forEach(t => {
62
+ t.split(" ").forEach(nt => {
63
+ // filter out some of this meta terms
64
+ if (["qt-1", "qt-2", "qt-*", "qt-"].includes(nt)) {
65
+ return;
66
+ }
67
+
68
+ // adding to set ensures the entry is unique
69
+ qtSet.add(nt);
70
+ });
71
+ });
72
+
73
+ // activate svelte reactivity
74
+ qtSet.forEach(t => qtMap.set(t, true));
75
+ syncQT();
76
+ };
77
+ parseQTTerms();
78
+
79
+ // todo: fix fragile relative reference to the root
80
+ // const fileList = import.meta.glob("./**/+page.svelte", { query: "?raw", eager: true });
81
+ // const titleToLink = new Map<string, string>();
82
+
83
+ let gameSectionFirst = true;
84
+ let qtfontWeight = "normal";
85
+ let additionalFontWeight = "";
86
+ /** qt values and what they mean:
87
+ * undefined: set all qt terms to font-weight: bold
88
+ * todo: implement clear
89
+ * clear: unset all terms to font-weight: normal
90
+ * <term>: only set qt-<term> to bold
91
+ * <term1>,<term2>: only set qt-<term1> and qt-<term2> to bold,
92
+ *
93
+ * ONLY CALL INSIDE onMount()
94
+ **/
95
+ const filterSearchParams = (searchParams: URLSearchParams) => {
96
+ const gameSectionFirstParam = searchParams.get("game-section-first")?.trim();
97
+ if (gameSectionFirstParam === "false") {
98
+ gameSectionFirst = false;
99
+ }
100
+
101
+ // region Bold terms
102
+ const qtValue = searchParams.get("qt")?.trim();
103
+ if (qtValue === undefined) {
104
+ qtfontWeight = "bold";
105
+ return;
106
+ }
107
+ qtfontWeight = "normal";
108
+ const dynamicStyle = qtValue.split(",").map((term) => {
109
+ // side-effect
110
+ paramQTSet.add(`qt-${term}`);
111
+
112
+ // main effect
113
+ return `span.qt-${term} { font-weight: bold !important; }`;
114
+ }).join("\n");
115
+
116
+ // https://stackoverflow.com/a/24285947/17836168
117
+ const style = document.createElement("style");
118
+ // noinspection JSDeprecatedSymbols
119
+ style.type = "text/css";
120
+ style.innerText = dynamicStyle;
121
+ document.head.appendChild(style);
122
+ syncQT();
123
+ // endregion Bold terms
124
+ };
125
+ // endregion query params
126
+
127
+ /* region chaos scripts */
128
+ const chaoticWordBank = ["niko", "toba", "seal", "aquarium", "ojisan", "baikal"];
129
+ let chaosDone = false;
130
+ const runChaos = (node: Element) => {
131
+ // change all text content to gibberish
132
+ for (let child of Array.from(node.children)) {
133
+ if (child.nodeType === Node.ELEMENT_NODE) {
134
+ runChaos(child);
135
+ for (const childOfChild of child.childNodes) {
136
+ if (childOfChild.nodeType === Node.TEXT_NODE && childOfChild.textContent?.trim()) {
137
+ const max = childOfChild.textContent.length;
138
+ childOfChild.textContent = "";
139
+ while (childOfChild.textContent.length < max) {
140
+ childOfChild.textContent += (chaoticWordBank[Math.floor(Math.random() * chaoticWordBank.length)] + " ");
141
+ }
142
+ }
143
+ }
144
+
145
+ // change all links to crouton
146
+ if (child.hasAttribute("href")) {
147
+ child.setAttribute("href", "https://crouton.net/");
148
+ }
149
+
150
+ // change all images to niko if aria != hidden?
151
+ if (child.hasAttribute("src") && !child.hasAttribute("aria-hidden")) {
152
+ if (child.hasAttribute("alt")) {
153
+ child.setAttribute("src", "https://p.potaufeu.asahi.com/a2b9-p/picture/21583312/5c3310aec77068e24844c663aa62b37c.jpg");
154
+ } else {
155
+ child.setAttribute("src", "https://video.twimg.com/ext_tw_video/1318728494256410624/pu/vid/640x360/TMklz6hiTkQu3xhn.mp4");
156
+ child.setAttribute("muted", "true");
157
+ }
158
+ }
159
+ if (child.tagName.trim() === "VIDEO") {
160
+ child.setAttribute("src", "https://video.twimg.com/ext_tw_video/1318728494256410624/pu/vid/640x360/TMklz6hiTkQu3xhn.mp4");
161
+ child.setAttribute("muted", "true");
162
+ }
163
+
164
+ // change all button events
165
+ if (child.tagName.trim() === "BUTTON") {
166
+ // remove anon function: https://stackoverflow.com/a/41343451/17836168
167
+ child.setAttribute("disabled", "true");
168
+ }
169
+ }
170
+ }
171
+ };
172
+
173
+ let mainVisibility = "visible";
174
+ $: mainVisibility = letChaos && !chaosDone ? "hidden" : "visible";
175
+ /* endregion chaos scripts */
176
+
177
+ onMount(() => {
178
+ if (!letChaos && $page.url.searchParams) {
179
+ filterSearchParams($page.url.searchParams);
180
+ }
181
+
182
+ if (letChaos) {
183
+ runChaos(document.body);
184
+ chaosDone = true;
185
+ }
186
+ });
187
+
188
+ const toggleTerm = (term: string) => {
189
+ qtMap.set(term, !qtMap.get(term));
190
+ qtMap = qtMap;
191
+ };
192
+
193
+ // when either gameSectionFirst or the queryTerms are updated, update advancedUrl
194
+ let advancedUrl = domain;
195
+ const updateUrl = () => {
196
+ const queryParams: string[] = [];
197
+
198
+ const qtList: string[] = [];
199
+ qtMap.forEach((shouldBold, term) => {
200
+ if (shouldBold) {
201
+ qtList.push(term);
202
+ }
203
+ });
204
+
205
+ if (qtList.length === 0) {
206
+ queryParams.push("qt=clear");
207
+ } else if (qtMap.size !== qtList.length) {
208
+ // we'll only add if the lengths are not equal
209
+ // dont need to add query if all terms in qtMap is true
210
+ queryParams.push(`qt=${qtList.map(t => t.slice(3, t.length)).join(",")}`);
211
+ }
212
+
213
+ if (!gameSectionFirst) {
214
+ queryParams.push("game-section-first=false");
215
+ }
216
+
217
+ if (queryParams.length > 0) {
218
+ advancedUrl = `${domain}?${queryParams.join("&")}`;
219
+ } else {
220
+ advancedUrl = domain;
221
+ }
222
+ // advancedUrl = `${domain}?${q}`;
223
+ };
224
+ $: // noinspection CommaExpressionJS
225
+ gameSectionFirst, qtMap, updateUrl();
226
+ // $: gameSectionQuery = gameSectionFirst ? "" : "game-section-first=false";
227
+ </script>
228
+
229
+ <SeaweedBaseLayout bind:shouldDisplayLeadingIcons={isSocialsGone}>
230
+ <!-- todo: limit main size to 1080 px? -->
231
+ <main style={`
232
+ --qt-font-weight: ${qtfontWeight};${additionalFontWeight};
233
+ visibility: ${mainVisibility};
234
+ `}>
235
+
236
+ <div class="experience-and-about-div">
237
+
238
+ <div class="greater-about-div">
239
+
240
+ <Card includeDataNoSnippet={false}>
241
+ <section class="section-card" slot="content">
242
+
243
+ <h1>About</h1>
244
+
245
+ <p>
246
+ Hi! My name is {name}! I work as a software developer. Outside of that, I like making games, and
247
+ trying to do everything in between required to make one. I have some showcased below, our visit
248
+ my itch.io page for more of them.
249
+ </p>
250
+ <!-- todo: link the degree details idk -->
251
+ <p>
252
+ I also graduated with BS Computing Science, Specializing in Software Practice, and a
253
+ certificate in Computer Game Development at University of Alberta.
254
+ </p>
255
+ <p>
256
+ I'm inspired by games like Harvest Moon: Friends of Mineral Town, Rune Factory 4, Theatrhythm,
257
+ Bravely Default: Flying Fairy, Boku no Natsuyasumi 2, and A Short Hike.
258
+ </p>
259
+
260
+ <!-- todo: maybe put cute stuff here -->
261
+ <!-- </ToggleableContent>-->
262
+ </section>
263
+ </Card>
264
+
265
+ <Card>
266
+ <section class="section-card" slot="content">
267
+ <SocialSection email={email} linkedinSlug={linkedinSlug}></SocialSection>
268
+ <ElementVisbilityDetector bind:isVisible={isVisible}>
269
+ </ElementVisbilityDetector>
270
+ </section>
271
+ </Card>
272
+
273
+ </div>
274
+
275
+ <Card>
276
+ <section class="section-card" slot="content">
277
+ <h1>Experience</h1>
278
+
279
+ <h2>Software Engineer</h2>
280
+ <div class="two-column-separated">
281
+ <div>July 2023 – January 2024</div>
282
+ <div style="text-align: end">Twitch, Remote</div>
283
+ </div>
284
+ <ul>
285
+ <li>Contributed to <span class="qt-go">Golang</span> and <span class="qt-ts">Typescript</span> codebases,
286
+ across several teams, to accommodate adjustments for public-facing user safety related features, to better
287
+ comply with EU’s <a target="_blank"
288
+ href="https://commission.europa.eu/strategy-and-policy/priorities-2019-2024/europe-fit-digital-age/digital-services-act/europe-fit-digital-age-new-online-rules-platforms_en">
289
+ Digital Services Act</a>, also including feature flags, alarms, unit tests, end-to-end testing, and
290
+ documentation
291
+ </li>
292
+ <li>Improved observability for upcoming features by setting up new <span class="qt-aws qt-infra">AWS</span>
293
+ resources to integrate internal data platform tools with existing alarms in our team’s microservice,
294
+ utilizing <span class="qt-aws qt-infra">Cloudwatch</span> and <span class="qt-aws qt-infra">Kinesis Data Stream</span>,
295
+ while adhering to best practices for <span class="qt-aws qt-infra">AWS CDK</span> (infrastructure as code)
296
+ </li>
297
+ </ul>
298
+ <br>
299
+
300
+ <h2>Software Engineer Intern</h2>
301
+ <div class="two-column-separated">
302
+ <div>May 2022 – Aug 2022</div>
303
+ <div style="text-align: end">Twitch, San Francisco</div>
304
+ </div>
305
+ <ul>
306
+ <li>
307
+ Built a <span class="qt-infra">load testing service</span> that can be configured to generate different
308
+ message types at different volumes that can be easily extended to target different chat services
309
+ </li>
310
+ <li>
311
+ Used Twitch’s set of custom tools, including Twitch’s custom RPC protocol, to create a backend
312
+ service with business logic written in <span class="qt-go">Go</span> and cloud infrastructure utilizing
313
+ <span
314
+ class="qt-infra qt-aws">ECS on Fargate, Cloudwatch, and DynamoDB</span>
315
+ , defined in <span class="qt-ts">Typescript</span>-flavored CDK
316
+ </li>
317
+ <li>
318
+ Wrote a technical specification document for the service’s MVP and possible future features, and
319
+ additional documentation on how to use the service and how to extend the load testing service to include
320
+ new services to test
321
+ </li>
322
+ </ul>
323
+ <br>
324
+ <!-- todo: turn off flashing when accordion is expanded -->
325
+ <Accordion>
326
+ <AccordionItem>
327
+ <div slot="summary">
328
+ <h2 class="accordion-header">More experience</h2>
329
+ </div>
330
+ <svelte:fragment slot="content">
331
+ <section class="more-section">
332
+ {#if (!letChaos)}
333
+ <h2>Software Engineer Intern</h2>
334
+ <div class="two-column-separated">
335
+ <div>May 2021 – Dec 2021</div>
336
+ <div style="text-align: end">Twitch / Amazon Web Services Canada, Remote</div>
337
+ </div>
338
+ <ul>
339
+ <li>
340
+ Implemented and wrote tests for a feature in Twitch’s backend authentication
341
+ systems and frontend web application that will help suggest security improvements to
342
+ over hundreds of thousands of users daily
343
+ </li>
344
+ <li>
345
+ Learned <span class="qt-go">Go</span>, <span class="qt-ts">Typescript</span>, <span
346
+ class="qt-react">React</span>, and other new technologies on the go to contribute to
347
+ the codebase
348
+ </li>
349
+ </ul>
350
+ {:else}
351
+ niko baikal seal from toba aquarium
352
+ {/if}
353
+ <br>
354
+ </section>
355
+ </svelte:fragment>
356
+ </AccordionItem>
357
+ </Accordion>
358
+ </section>
359
+ </Card>
360
+
361
+ </div>
362
+
363
+ {#if (gameSectionFirst)}
364
+ <GameSection email={email}></GameSection>
365
+ <ProjectSection email={email}></ProjectSection>
366
+ {:else }
367
+ <ProjectSection email={email}></ProjectSection>
368
+ <GameSection email={email}></GameSection>
369
+ {/if}
370
+
371
+ <div aria-hidden="true" style="height: 25vh" />
372
+
373
+ <Card>
374
+ <div slot="content" class="default-card advanced-setting">
375
+ <h1>Advanced settings</h1>
376
+ <p>This one is for those curious how I customize this page.</p>
377
+ <SlideToggle name="advanced-setting-slider" bind:checked={isAdvanceSettingOn}>
378
+ Advanced settings: {isAdvanceSettingOn ? "On" : "Off"}
379
+ </SlideToggle>
380
+ {#if (isAdvanceSettingOn)}
381
+ <SlideToggle name="game-section-slider" bind:checked={gameSectionFirst}>
382
+ Should game section appear first over projects: {gameSectionFirst ? "On" : "Off"}
383
+ </SlideToggle>
384
+
385
+ <h3>Query terms to bold</h3>
386
+ <div class="query-term-grid">
387
+ {#each qtMap.entries() as [term, shouldBold]}
388
+ <!--{@const shouldBold = false}-->
389
+ <button
390
+ class="chip {shouldBold ? 'variant-filled-tertiary' : 'variant-soft-tertiary'}"
391
+ on:click={() => {toggleTerm(term)}}
392
+ >
393
+ <!-- todo: change shouldBold -->
394
+ {#if (shouldBold)}&check;{/if}
395
+ {term}
396
+ </button>
397
+ {/each}
398
+ </div>
399
+
400
+ <br>
401
+ <p>Copy the url below and open a new page with it</p>
402
+ <CodeBlock language="url" code={advancedUrl}></CodeBlock>
403
+ {/if}
404
+ </div>
405
+ </Card>
406
+
407
+ </main>
408
+
409
+ <SocialSection slot="extraLeadingIcons"
410
+ isSlot={true}
411
+ email={email}
412
+ linkedinSlug={linkedinSlug}
413
+ isSmallVersion={true}></SocialSection>
414
+ </SeaweedBaseLayout>
415
+
416
+ <style lang="postcss">
417
+ .advanced-setting {
418
+ display: flex;
419
+ flex-direction: column;
420
+ gap: 0.5lh;
421
+ }
422
+
423
+ h3 {
424
+ font-size: 1.5em;
425
+ line-height: 1.5lh;
426
+ }
427
+
428
+ .query-term-grid {
429
+ display: flex;
430
+ gap: 0.25em;
431
+ flex-wrap: wrap;
432
+ }
433
+ </style>
@@ -0,0 +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
+ }
@@ -32,3 +32,7 @@ export const createExternalLinkWarningFunction = (args: ExternalLinkWarningArgs)
32
32
  location.href = args.href;
33
33
  });
34
34
  };
35
+
36
+ export interface RawGlob {
37
+ default: string;
38
+ }
@@ -1,5 +1,5 @@
1
1
  <script>
2
- import SeaweedTemplate from "$pkg/template/SeaweedTemplate.svelte";
2
+ import SeaweedTemplate from "$pkg/template/Seaweed/SeaweedTemplate.svelte";
3
3
  import WebThumbnailImage from "$pkg/assets/placeholder/placeholder_circle.png";
4
4
 
5
5
  export let metaWebsite = "https://www.crouton.com/test/portfolio-base-layout";
@@ -1,10 +1,10 @@
1
1
  <script>
2
- import SeaweedTemplate from "$pkg/template/SeaweedTemplate.svelte";
2
+ import SeaweedTemplate from "$pkg/template/Seaweed/SeaweedTemplate.svelte";
3
3
  </script>
4
4
 
5
- <SeaweedTemplate name="Allan Manuba"
5
+ <SeaweedTemplate letChaos={false}
6
+ name="Allan Manuba"
6
7
  email="allanmanuba@gmail.com"
7
- linkedinSlug="allan-manuba"
8
- metaWebsite="https://www.allanmanuba.com">
8
+ linkedinSlug="allan-manuba">
9
9
 
10
10
  </SeaweedTemplate>
@@ -7,6 +7,24 @@
7
7
  import "$lib/app.postcss";
8
8
 
9
9
  import "$lib/styles/global.css";
10
+
11
+ // region Skeleton Store
12
+
13
+ // endregion Skeleton Store
14
+
15
+ // region highlightjs
16
+ import { initializeStores, storeHighlightJs } from "@skeletonlabs/skeleton";
17
+ import "highlight.js/styles/github-dark.css";
18
+
19
+ import xml from "highlight.js/lib/languages/xml"; // for HTML
20
+ import hljs from "highlight.js/lib/core";
21
+
22
+ initializeStores();
23
+
24
+ hljs.registerLanguage("xml", xml);
25
+ hljs.registerLanguage("url", xml);
26
+ storeHighlightJs.set(hljs);
27
+ // endregion highlightjs
10
28
  </script>
11
29
 
12
30
  <slot />