@turnipxenon/pineapple 3.0.0-alpha.9 → 3.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/blog_template/BlogTemplate.svelte +2 -2
- package/dist/components/blog_template/BlogTemplate.svelte.d.ts +1 -1
- package/dist/components/blog_template/BlogTemplateInner.svelte +1 -1
- package/dist/components/blog_template/BlogTemplateInner.svelte.d.ts +1 -1
- package/dist/components/dialog_manager/DialogManager.d.ts +2 -1
- package/dist/components/dialog_manager/DialogMangerInit.d.ts +2 -15
- package/dist/components/dialog_manager/DialogMangerInit.js +8 -2
- package/dist/components/dialog_manager/IDialogManager.d.ts +39 -0
- package/dist/components/dialog_manager/IDialogManager.js +4 -0
- package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.d.ts +3 -0
- package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.js +15 -3
- package/dist/components/dialog_overlay/DialogOverlay.svelte +155 -36
- package/dist/components/layouts/SeaweedBaseLayout.svelte +0 -6
- package/dist/components/pineapple/PineappleBaseLayout.svelte +2 -21
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -3
- package/dist/styles/app.css +9 -14
- package/dist/ui/components/ModalBase.svelte +74 -74
- package/dist/ui/components/SocialSection.svelte +6 -2
- package/dist/ui/components/accordion/PinyaAccordion.svelte +20 -20
- package/dist/ui/components/accordion/PinyaAccordionItem.svelte +28 -28
- package/dist/ui/elements/CodeBlock/CodeBlock.svelte +64 -64
- package/dist/ui/elements/ImageIcon.svelte +53 -53
- package/dist/ui/elements/{pinya-button/component.svelte → PinyaButton/PinyaButton.svelte} +4 -3
- package/dist/ui/elements/PinyaButton/PinyaButton.svelte.d.ts +4 -0
- package/dist/ui/elements/{pinya-button/props.d.ts → PinyaButton/PinyaButtonProps.d.ts} +1 -0
- package/dist/ui/elements/PinyaButton/index.d.ts +2 -0
- package/dist/ui/elements/PinyaButton/index.js +2 -0
- package/dist/ui/elements/{pinya-card/component.svelte → PinyaCard/PinyaCard.svelte} +21 -20
- package/dist/ui/elements/PinyaCard/PinyaCard.svelte.d.ts +7 -0
- package/dist/ui/elements/PinyaCard/index.d.ts +2 -0
- package/dist/ui/elements/PinyaCard/index.js +2 -0
- package/dist/ui/elements/Placeholder.svelte +17 -17
- package/dist/ui/elements/TextLink.svelte +16 -16
- package/dist/ui/elements/index.d.ts +2 -2
- package/dist/ui/elements/index.js +2 -2
- package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte +34 -34
- package/dist/ui/elements/pinya-combobox/PinyaComboboxProps.d.ts +1 -0
- package/dist/ui/elements/text-chip/TextChip.svelte +14 -14
- package/dist/{components/navigation_component → ui/modules/NavigationMenu}/NavigationControl.svelte +24 -20
- package/dist/{components/navigation_component/NavigationComponent.svelte → ui/modules/NavigationMenu/NavigationMenu.svelte} +69 -43
- package/dist/{components/navigation_component/NavigationComponent.svelte.d.ts → ui/modules/NavigationMenu/NavigationMenu.svelte.d.ts} +6 -6
- package/dist/{components/navigation_component → ui/modules/NavigationMenu}/PageMeta.d.ts +4 -4
- package/dist/ui/modules/NavigationMenu/index.d.ts +2 -0
- package/dist/ui/modules/NavigationMenu/index.js +2 -0
- package/dist/ui/modules/index.d.ts +1 -1
- package/dist/ui/modules/index.js +1 -1
- package/dist/ui/modules/modals/general-settings/GeneralSettingsModal.svelte +109 -109
- package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte +42 -37
- package/dist/ui/modules/projects/Hepcat.svelte +6 -4
- package/dist/ui/modules/projects/Hepcat.svelte.d.ts +1 -1
- package/dist/ui/modules/projects/Pengi.svelte +61 -59
- package/dist/ui/modules/projects/Pengi.svelte.d.ts +1 -1
- package/dist/ui/modules/projects/Soulwork.svelte +7 -5
- package/dist/ui/modules/projects/ThisWebpage.svelte +19 -16
- package/dist/ui/modules/projects/ThisWebpage.svelte.d.ts +1 -1
- package/dist/ui/templates/{pinya-page-layout/component.svelte → PinyaPageLayout/PinyaPageLayout.svelte} +1 -1
- package/dist/ui/templates/PinyaPageLayout/PinyaPageLayout.svelte.d.ts +9 -0
- package/dist/ui/templates/PinyaPageLayout/index.d.ts +2 -0
- package/dist/ui/templates/PinyaPageLayout/index.js +2 -0
- package/dist/ui/templates/{pinya-page-layout → PinyaPageLayout}/runes.svelte.d.ts +3 -0
- package/dist/ui/templates/PinyaPageLayout/runes.svelte.js +4 -0
- package/dist/ui/{modules/seaweed → templates/SeaweedLayout}/ChumBucket.svelte +1 -1
- package/dist/{template/seaweed → ui/templates/SeaweedLayout}/CreateUrlForm.svelte +2 -2
- package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/EntryGroup.svelte +65 -88
- package/dist/ui/templates/SeaweedLayout/EntryOrderConfig.svelte.d.ts +9 -0
- package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/ProjectComponentProps.d.ts +1 -0
- package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/ProjectGroupConfig.svelte +316 -316
- package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/ProjectGroupConfig.svelte.d.ts +1 -1
- package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/SeaweedLayout.md +3 -3
- package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/SeaweedLayout.svelte +278 -276
- package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/props.d.ts +2 -2
- package/dist/ui/templates/confirmation-modal/component.svelte +46 -46
- package/dist/ui/templates/index.d.ts +2 -2
- package/dist/ui/templates/index.js +2 -2
- package/package.json +3 -2
- package/src/lib/styles/app.css +9 -14
- package/dist/components/navigation_component/index.d.ts +0 -2
- package/dist/components/navigation_component/index.js +0 -3
- package/dist/template/seaweed/ParseQueryTerms.d.ts +0 -1
- package/dist/template/seaweed/ParseQueryTerms.js +0 -23
- package/dist/template/seaweed/RunChaos.d.ts +0 -1
- package/dist/template/seaweed/RunChaos.js +0 -41
- package/dist/template/seaweed/SeaweedTemplate.svelte +0 -336
- package/dist/template/seaweed/SeaweedTemplate.svelte.d.ts +0 -32
- package/dist/template/seaweed/SeaweedTemplateData.d.ts +0 -30
- package/dist/template/seaweed/SeaweedTemplateData.js +0 -79
- package/dist/template/seaweed/entries/ChefWings.svelte +0 -45
- package/dist/template/seaweed/entries/ChefWings.svelte.d.ts +0 -7
- package/dist/template/seaweed/entries/CustomizedYarnspinner.svelte +0 -40
- package/dist/template/seaweed/entries/CustomizedYarnspinner.svelte.d.ts +0 -7
- package/dist/template/seaweed/entries/EntryProps.d.ts +0 -16
- package/dist/template/seaweed/entries/EntryProps.js +0 -5
- package/dist/template/seaweed/entries/Hepcat.svelte +0 -64
- package/dist/template/seaweed/entries/Hepcat.svelte.d.ts +0 -7
- package/dist/template/seaweed/entries/Pengi.svelte +0 -57
- package/dist/template/seaweed/entries/Pengi.svelte.d.ts +0 -7
- package/dist/template/seaweed/entries/Soulwork.svelte +0 -54
- package/dist/template/seaweed/entries/Soulwork.svelte.d.ts +0 -7
- package/dist/template/seaweed/entries/ThisWebpage.svelte +0 -55
- package/dist/template/seaweed/entries/ThisWebpage.svelte.d.ts +0 -7
- package/dist/template/seaweed/entries/WorkExperience.svelte +0 -130
- package/dist/template/seaweed/entries/WorkExperience.svelte.d.ts +0 -8
- package/dist/template/seaweed/entries/Workset.svelte +0 -57
- package/dist/template/seaweed/entries/Workset.svelte.d.ts +0 -7
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.d.ts +0 -1
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.js +0 -8
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte +0 -297
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte.d.ts +0 -12
- package/dist/template/seaweed/entry_order_config/entry-order-config.postcss +0 -35
- package/dist/template/seaweed/index.d.ts +0 -4
- package/dist/template/seaweed/index.js +0 -4
- package/dist/template/seaweed/seaweed.postcss +0 -125
- package/dist/ui/elements/pinya-button/component.svelte.d.ts +0 -4
- package/dist/ui/elements/pinya-button/index.d.ts +0 -2
- package/dist/ui/elements/pinya-button/index.js +0 -2
- package/dist/ui/elements/pinya-card/component.svelte.d.ts +0 -7
- package/dist/ui/elements/pinya-card/index.d.ts +0 -2
- package/dist/ui/elements/pinya-card/index.js +0 -2
- package/dist/ui/modules/seaweed/index.d.ts +0 -3
- package/dist/ui/modules/seaweed/index.js +0 -4
- package/dist/ui/templates/pinya-page-layout/component.svelte.d.ts +0 -9
- package/dist/ui/templates/pinya-page-layout/index.d.ts +0 -2
- package/dist/ui/templates/pinya-page-layout/index.js +0 -2
- package/dist/ui/templates/pinya-page-layout/runes.svelte.js +0 -3
- package/dist/ui/templates/seaweed-layout/EntryOrderConfig2.svelte.d.ts +0 -9
- /package/dist/ui/elements/{pinya-button/props.js → PinyaButton/PinyaButtonProps.js} +0 -0
- /package/dist/ui/elements/{pinya-card/props.d.ts → PinyaCard/PinyaCardProps.d.ts} +0 -0
- /package/dist/{template/seaweed/ToastSettings.js → ui/elements/PinyaCard/PinyaCardProps.js} +0 -0
- /package/dist/{components/navigation_component → ui/modules/NavigationMenu}/NavigationControl.svelte.d.ts +0 -0
- /package/dist/{components/navigation_component → ui/modules/NavigationMenu}/PageMeta.js +0 -0
- /package/dist/ui/{modules/seaweed → templates/SeaweedLayout}/ChumBucket.svelte.d.ts +0 -0
- /package/dist/{template/seaweed → ui/templates/SeaweedLayout}/CreateUrlForm.svelte.d.ts +0 -0
- /package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/EntryGroup.svelte.d.ts +0 -0
- /package/dist/ui/templates/{seaweed-layout/EntryOrderConfig2.svelte → SeaweedLayout/EntryOrderConfig.svelte} +0 -0
- /package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/ProjectComponentProps.js +0 -0
- /package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/SeaweedLayout.svelte.d.ts +0 -0
- /package/dist/{template/seaweed → ui/templates/SeaweedLayout}/ToastSettings.d.ts +0 -0
- /package/dist/ui/{elements/pinya-card/props.js → templates/SeaweedLayout/ToastSettings.js} +0 -0
- /package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/index.d.ts +0 -0
- /package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/index.js +0 -0
- /package/dist/ui/templates/{seaweed-layout → SeaweedLayout}/props.js +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@turnipxenon/pineapple",
|
|
3
3
|
"description": "personal package for base styling for other personal projects",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.1.0-alpha.1",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "vite dev",
|
|
7
7
|
"build": "vite build && yarn package",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
"@eslint/compat": "^1.2.5",
|
|
22
22
|
"@eslint/js": "^9.18.0",
|
|
23
23
|
"@sveltejs/adapter-auto": "^4.0.0",
|
|
24
|
-
"@sveltejs/kit": "^2.5.27",
|
|
25
24
|
"@sveltejs/package": "^2.3.7",
|
|
26
25
|
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
|
27
26
|
"eslint": "^9.18.0",
|
|
28
27
|
"eslint-config-prettier": "^10.0.1",
|
|
29
28
|
"eslint-plugin-svelte": "^3.0.0",
|
|
30
29
|
"globals": "^16.0.0",
|
|
30
|
+
"madge": "^8.0.0",
|
|
31
31
|
"prettier": "^3.4.2",
|
|
32
32
|
"prettier-plugin-svelte": "^3.3.3",
|
|
33
33
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"@prisma/client": "^5.12.1",
|
|
45
45
|
"@skeletonlabs/skeleton": "^3.1.0",
|
|
46
46
|
"@skeletonlabs/skeleton-svelte": "^1.0.0",
|
|
47
|
+
"@sveltejs/kit": "^2.5.27",
|
|
47
48
|
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
|
48
49
|
"@tailwindcss/vite": "^4.0.14",
|
|
49
50
|
"@types/htmlparser2": "^3.10.7",
|
package/src/lib/styles/app.css
CHANGED
|
@@ -10,16 +10,25 @@
|
|
|
10
10
|
|
|
11
11
|
@custom-variant turnip (&:where([data-theme=turnip], [data-theme=turnip] *));
|
|
12
12
|
|
|
13
|
+
html {
|
|
14
|
+
--dialog-start-pad: clamp(0em, 5vw, 2em);
|
|
15
|
+
--dialog-box-width: min(calc(54em), calc(100vw - var(--dialog-start-pad) - 2px));
|
|
16
|
+
--dialog-box-height: clamp(15em, 50vw, 18em);
|
|
17
|
+
--fab-margin: 1rem;
|
|
18
|
+
}
|
|
19
|
+
|
|
13
20
|
.footer-space {
|
|
14
21
|
width: 100%;
|
|
15
22
|
height: calc(var(--dialog-box-height) + 4em);
|
|
16
23
|
}
|
|
17
24
|
|
|
18
25
|
a.dialog-choice {
|
|
26
|
+
font-size: inherit;
|
|
19
27
|
cursor: url("$pkg/assets/icons/chat-cursor.svg"), auto;
|
|
20
28
|
}
|
|
21
29
|
|
|
22
30
|
a.external-link {
|
|
31
|
+
font-size: inherit;
|
|
23
32
|
cursor: url("$pkg/assets/icons/external-link.svg"), auto;
|
|
24
33
|
}
|
|
25
34
|
|
|
@@ -37,20 +46,6 @@ a.external-link {
|
|
|
37
46
|
background: rgba(var(--color-secondary-500));
|
|
38
47
|
}
|
|
39
48
|
|
|
40
|
-
.dialog-box {
|
|
41
|
-
background-color: rgb(var(--color-surface-500) / 0.9);
|
|
42
|
-
position: fixed;
|
|
43
|
-
bottom: 0;
|
|
44
|
-
width: var(--dialog-box-width); /*75em + 4em padding*/
|
|
45
|
-
height: var(--dialog-box-height);
|
|
46
|
-
max-width: calc(100vw - ((var(--fab-margin) * 2) + 4em));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.dark .dialog-box {
|
|
50
|
-
background-color: rgb(var(--color-surface-900) / 0.95);
|
|
51
|
-
--tw-ring-color: rgb(var(--color-text-400));
|
|
52
|
-
/*background-color: red;*/
|
|
53
|
-
}
|
|
54
49
|
|
|
55
50
|
@layer base {
|
|
56
51
|
.game-link-section {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const parseQueryTerms: (node: Element, querySet: Set<string>) => void;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export const parseQueryTerms = (node, querySet) => {
|
|
2
|
-
// change all text content to gibberish
|
|
3
|
-
for (const child of Array.from(node.children)) {
|
|
4
|
-
if (child.nodeType === Node.ELEMENT_NODE) {
|
|
5
|
-
parseQueryTerms(child, querySet);
|
|
6
|
-
// todo: if it's a span and it wraps a word, and qt class then we count that as query
|
|
7
|
-
// for (const childOfChild of child.childNodes) {
|
|
8
|
-
// if (childOfChild.nodeType === Node.TEXT_NODE && childOfChild.textContent?.trim()) {
|
|
9
|
-
// // todo analyze textcontent
|
|
10
|
-
// }
|
|
11
|
-
// }
|
|
12
|
-
// Warning: below is not redundant and is a catch-all
|
|
13
|
-
// Long-term solution: figure out the correct typing
|
|
14
|
-
if ((typeof child.className === "string") && child.className?.includes("qt-")) {
|
|
15
|
-
child.className.split(" ").forEach(c => {
|
|
16
|
-
if (c.startsWith("qt-")) {
|
|
17
|
-
querySet.add(c);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const runChaos: (node: Element) => void;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
const chaoticWordBank = ["niko", "toba", "seal", "aquarium", "ojisan", "baikal"];
|
|
2
|
-
export const runChaos = (node) => {
|
|
3
|
-
// change all text content to gibberish
|
|
4
|
-
for (const child of Array.from(node.children)) {
|
|
5
|
-
if (child.nodeType === Node.ELEMENT_NODE) {
|
|
6
|
-
runChaos(child);
|
|
7
|
-
for (const childOfChild of child.childNodes) {
|
|
8
|
-
if (childOfChild.nodeType === Node.TEXT_NODE && childOfChild.textContent?.trim()) {
|
|
9
|
-
const max = childOfChild.textContent.length;
|
|
10
|
-
childOfChild.textContent = "";
|
|
11
|
-
while (childOfChild.textContent.length < max) {
|
|
12
|
-
childOfChild.textContent += (chaoticWordBank[Math.floor(Math.random() * chaoticWordBank.length)] + " ");
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
// change all links to crouton
|
|
17
|
-
if (child.hasAttribute("href")) {
|
|
18
|
-
child.setAttribute("href", "https://crouton.net/");
|
|
19
|
-
}
|
|
20
|
-
// change all images to niko if aria != hidden?
|
|
21
|
-
if (child.hasAttribute("src") && !child.hasAttribute("aria-hidden")) {
|
|
22
|
-
if (child.hasAttribute("alt")) {
|
|
23
|
-
child.setAttribute("src", "https://p.potaufeu.asahi.com/a2b9-p/picture/21583312/5c3310aec77068e24844c663aa62b37c.jpg");
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
child.setAttribute("src", "https://video.twimg.com/ext_tw_video/1318728494256410624/pu/vid/640x360/TMklz6hiTkQu3xhn.mp4");
|
|
27
|
-
child.setAttribute("muted", "true");
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
if (child.tagName.trim() === "VIDEO") {
|
|
31
|
-
child.setAttribute("src", "https://video.twimg.com/ext_tw_video/1318728494256410624/pu/vid/640x360/TMklz6hiTkQu3xhn.mp4");
|
|
32
|
-
child.setAttribute("muted", "true");
|
|
33
|
-
}
|
|
34
|
-
// change all button events
|
|
35
|
-
if (child.tagName.trim() === "BUTTON") {
|
|
36
|
-
// remove anon function: https://stackoverflow.com/a/41343451/17836168
|
|
37
|
-
child.setAttribute("disabled", "true");
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
};
|
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
<!-- @migration-task Error while migrating Svelte code: Can't migrate code with afterUpdate. Please migrate by hand. -->
|
|
2
|
-
<script lang="ts">
|
|
3
|
-
import { afterUpdate, type ComponentType, onMount } from "svelte";
|
|
4
|
-
import EntryOrderConfig from "./entry_order_config/EntryOrderConfig.svelte";
|
|
5
|
-
import { runChaos } from "./RunChaos";
|
|
6
|
-
import SocialSection from "../../ui/components/SocialSection.svelte";
|
|
7
|
-
import SeaweedBaseLayout from "../../components/layouts/SeaweedBaseLayout.svelte";
|
|
8
|
-
import { page } from "$app/stores";
|
|
9
|
-
import Card from "../../components/Card.svelte";
|
|
10
|
-
import {
|
|
11
|
-
type ComponentMeta,
|
|
12
|
-
type EntryGroup,
|
|
13
|
-
type SeaweedTemplateData,
|
|
14
|
-
TurnGroupEntriesMutable
|
|
15
|
-
} from "./SeaweedTemplateData";
|
|
16
|
-
import type { EntryProps } from "./entries/EntryProps";
|
|
17
|
-
import { parseQueryTerms } from "./ParseQueryTerms";
|
|
18
|
-
import UrlShortenerForm from "./CreateUrlForm.svelte";
|
|
19
|
-
import PineappleSlideToggle from "../../components/PineappleSlideToggle.svelte";
|
|
20
|
-
import { Chip } from "../../index";
|
|
21
|
-
import ChumBucket from "../../ui/modules/seaweed/ChumBucket.svelte";
|
|
22
|
-
|
|
23
|
-
export let seaweedTemplateData: SeaweedTemplateData;
|
|
24
|
-
export let projectFirstGroupedEntries: ReadonlyArray<EntryGroup>;
|
|
25
|
-
export let getAllEntryFromGlobal: () => Map<string, ComponentMeta>;
|
|
26
|
-
export let getEntryFromGlobal: (name: string) => undefined | ComponentMeta;
|
|
27
|
-
export let letChaos = true;
|
|
28
|
-
export let name = "Turnip";
|
|
29
|
-
export let email = "turnipxenon@gmail.com";
|
|
30
|
-
export let linkedinSlug = "turnip-xenon";
|
|
31
|
-
export let domain = "http://localhost:5173/portfolio/actual/";
|
|
32
|
-
export let serverSideQueryParams = "";
|
|
33
|
-
export let experienceSection: ComponentType;
|
|
34
|
-
|
|
35
|
-
// region query params
|
|
36
|
-
let entryProps: EntryProps = {
|
|
37
|
-
email,
|
|
38
|
-
letChaos,
|
|
39
|
-
linkedinSlug,
|
|
40
|
-
name,
|
|
41
|
-
seaweedTemplateData
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
let isVisible = true;
|
|
45
|
-
const paramQTSet = new Set<string>();
|
|
46
|
-
|
|
47
|
-
let isAdvanceSettingOn = false;
|
|
48
|
-
$: isSocialsGone = !isVisible;
|
|
49
|
-
$: console.log("is visible", isVisible);
|
|
50
|
-
|
|
51
|
-
let qtfontWeight = "normal";
|
|
52
|
-
let additionalFontWeight = "";
|
|
53
|
-
|
|
54
|
-
let chaosDone = false;
|
|
55
|
-
let mainVisibility = "visible";
|
|
56
|
-
$: mainVisibility = letChaos && !chaosDone ? "hidden" : "visible";
|
|
57
|
-
|
|
58
|
-
const syncQT = () => {
|
|
59
|
-
if (seaweedTemplateData.queryTermMap.size === 0 || paramQTSet.size === 0) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
seaweedTemplateData.queryTermMap.forEach((_, k) => {
|
|
64
|
-
seaweedTemplateData.queryTermMap.set(k, paramQTSet.has(k));
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
// force svelte refresh
|
|
68
|
-
seaweedTemplateData.queryTermMap = seaweedTemplateData.queryTermMap;
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const parseQueryTermsLocal = async () => {
|
|
72
|
-
const qtSet = new Set<string>();
|
|
73
|
-
parseQueryTerms(document.body, qtSet);
|
|
74
|
-
qtSet.forEach(t => seaweedTemplateData.queryTermMap.set(t, true));
|
|
75
|
-
// force svelte update
|
|
76
|
-
seaweedTemplateData.queryTermMap = seaweedTemplateData.queryTermMap;
|
|
77
|
-
syncQT();
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
/** qt values and what they mean:
|
|
81
|
-
* undefined: set all qt terms to font-weight: bold
|
|
82
|
-
* todo: implement clear
|
|
83
|
-
* clear: unset all terms to font-weight: normal
|
|
84
|
-
* <term>: only set qt-<term> to bold
|
|
85
|
-
* <term1>,<term2>: only set qt-<term1> and qt-<term2> to bold,
|
|
86
|
-
*
|
|
87
|
-
* ONLY CALL INSIDE onMount()
|
|
88
|
-
**/
|
|
89
|
-
const filterSearchParams = (searchParams: URLSearchParams) => {
|
|
90
|
-
const isFunOn = searchParams.get("fun")?.trim();
|
|
91
|
-
if (isFunOn === "true") {
|
|
92
|
-
seaweedTemplateData.shouldAddFunNote = true;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// region Order
|
|
96
|
-
const gameSectionFirstParam = searchParams.get("game-section-first")?.trim();
|
|
97
|
-
const orderParam = searchParams.get("order")?.trim();
|
|
98
|
-
if (orderParam) {
|
|
99
|
-
seaweedTemplateData.groupedEntries = [];
|
|
100
|
-
|
|
101
|
-
orderParam.split(",").forEach(groupDefinition => {
|
|
102
|
-
const pair = groupDefinition.split(":");
|
|
103
|
-
if (pair.length >= 2) {
|
|
104
|
-
const group: EntryGroup = {
|
|
105
|
-
name: pair[0],
|
|
106
|
-
items: [],
|
|
107
|
-
gridClass: pair[2]
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
pair[1].split("|").forEach(e => {
|
|
111
|
-
const component = getEntryFromGlobal(e);
|
|
112
|
-
if (component) {
|
|
113
|
-
group.items.push(component);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
seaweedTemplateData.groupedEntries.push(group);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
seaweedTemplateData.groupedEntries = seaweedTemplateData.groupedEntries;
|
|
123
|
-
} else if (gameSectionFirstParam === "false") {
|
|
124
|
-
seaweedTemplateData.groupedEntries = TurnGroupEntriesMutable(projectFirstGroupedEntries);
|
|
125
|
-
}
|
|
126
|
-
// endregion
|
|
127
|
-
|
|
128
|
-
// region Bold terms
|
|
129
|
-
const qtValue = searchParams.get("qt")?.trim();
|
|
130
|
-
if (qtValue !== undefined) {
|
|
131
|
-
qtfontWeight = "normal";
|
|
132
|
-
const dynamicStyle = qtValue.split(",").map((term) => {
|
|
133
|
-
// side-effect
|
|
134
|
-
paramQTSet.add(`qt-${term}`);
|
|
135
|
-
|
|
136
|
-
// main effect
|
|
137
|
-
return `span.qt-${term} { font-weight: bold !important; }`;
|
|
138
|
-
}).join("\n");
|
|
139
|
-
|
|
140
|
-
// https://stackoverflow.com/a/24285947/17836168
|
|
141
|
-
const style = document.createElement("style");
|
|
142
|
-
// noinspection JSDeprecatedSymbols
|
|
143
|
-
style.type = "text/css";
|
|
144
|
-
style.innerText = dynamicStyle;
|
|
145
|
-
document.head.appendChild(style);
|
|
146
|
-
syncQT();
|
|
147
|
-
} else {
|
|
148
|
-
qtfontWeight = "bold";
|
|
149
|
-
}
|
|
150
|
-
// endregion Bold terms
|
|
151
|
-
};
|
|
152
|
-
// endregion query params
|
|
153
|
-
|
|
154
|
-
/* region chaos scripts */
|
|
155
|
-
/* endregion chaos scripts */
|
|
156
|
-
|
|
157
|
-
onMount(async () => {
|
|
158
|
-
if (!letChaos && serverSideQueryParams) {
|
|
159
|
-
filterSearchParams(new URLSearchParams(serverSideQueryParams));
|
|
160
|
-
} else if (!letChaos && $page.url.searchParams) {
|
|
161
|
-
filterSearchParams($page.url.searchParams);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (letChaos) {
|
|
165
|
-
runChaos(document.body);
|
|
166
|
-
chaosDone = true;
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
// todo: figure out what this does #migration
|
|
171
|
-
// let isParsed = false;
|
|
172
|
-
// afterUpdate(async () => {
|
|
173
|
-
// if (!letChaos && !isParsed) {
|
|
174
|
-
// isParsed = true;
|
|
175
|
-
// await parseQueryTermsLocal();
|
|
176
|
-
// }
|
|
177
|
-
// });
|
|
178
|
-
|
|
179
|
-
const toggleTerm = (term: string) => {
|
|
180
|
-
seaweedTemplateData.queryTermMap.set(term, !seaweedTemplateData.queryTermMap.get(term));
|
|
181
|
-
seaweedTemplateData.queryTermMap = seaweedTemplateData.queryTermMap;
|
|
182
|
-
};
|
|
183
|
-
|
|
184
|
-
// when either gameSectionFirst or the queryTerms are updated, update advancedUrl
|
|
185
|
-
let orderUrl = "";
|
|
186
|
-
let advancedUrl = domain;
|
|
187
|
-
let advancedQuery = "";
|
|
188
|
-
const updateUrl = (seaweedTemplateData: SeaweedTemplateData) => {
|
|
189
|
-
if (seaweedTemplateData === undefined) {
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const queryParams: string[] = [];
|
|
194
|
-
|
|
195
|
-
if (orderUrl) {
|
|
196
|
-
queryParams.push(orderUrl);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
const qtList: string[] = [];
|
|
200
|
-
seaweedTemplateData.queryTermMap.forEach((shouldBold, term) => {
|
|
201
|
-
if (shouldBold) {
|
|
202
|
-
qtList.push(term);
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
if (qtList.length === 0) {
|
|
207
|
-
queryParams.push("qt=clear");
|
|
208
|
-
} else if (seaweedTemplateData.queryTermMap.size !== qtList.length) {
|
|
209
|
-
// we'll only add if the lengths are not equal
|
|
210
|
-
// dont need to add query if all terms in qtMap is true
|
|
211
|
-
queryParams.push(`qt=${qtList.map(t => t.slice(3, t.length)).join(",")}`);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
if (seaweedTemplateData.shouldAddFunNote) {
|
|
215
|
-
queryParams.push("fun=true");
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
if (!seaweedTemplateData.gameSectionFirst) {
|
|
219
|
-
queryParams.push("game-section-first=false");
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
if (queryParams.length > 0) {
|
|
223
|
-
advancedQuery = queryParams.join("&");
|
|
224
|
-
advancedUrl = `${domain}?${advancedQuery}`;
|
|
225
|
-
} else {
|
|
226
|
-
advancedUrl = domain;
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
$: updateUrl(seaweedTemplateData);
|
|
230
|
-
|
|
231
|
-
// eslint-disable-next-line
|
|
232
|
-
const updateSeaweedWhenFunNoteChanged = (_: boolean) => {
|
|
233
|
-
entryProps = entryProps;
|
|
234
|
-
};
|
|
235
|
-
$: updateSeaweedWhenFunNoteChanged(seaweedTemplateData.shouldAddFunNote);
|
|
236
|
-
</script>
|
|
237
|
-
|
|
238
|
-
<SeaweedBaseLayout bind:shouldDisplayLeadingIcons={isSocialsGone}>
|
|
239
|
-
<!-- todo: limit main size to 1080 px? -->
|
|
240
|
-
<main style={`
|
|
241
|
-
--qt-font-weight: ${qtfontWeight};${additionalFontWeight};
|
|
242
|
-
visibility: ${mainVisibility};
|
|
243
|
-
`}>
|
|
244
|
-
<svelte:component this={experienceSection}
|
|
245
|
-
entryProps={entryProps}
|
|
246
|
-
bind:isVisible={isVisible}
|
|
247
|
-
></svelte:component>
|
|
248
|
-
|
|
249
|
-
{#if seaweedTemplateData}
|
|
250
|
-
{#each seaweedTemplateData.groupedEntries as group}
|
|
251
|
-
{#if group.items.length > 0}
|
|
252
|
-
<Card>
|
|
253
|
-
<section class="section-card title-card" slot="content">
|
|
254
|
-
<h1 class="text-center">{group.name}</h1>
|
|
255
|
-
</section>
|
|
256
|
-
</Card>
|
|
257
|
-
|
|
258
|
-
<section class={group.gridClass}>
|
|
259
|
-
{#each group.items as entry}
|
|
260
|
-
<svelte:component this={entry.component} props={entryProps}></svelte:component>
|
|
261
|
-
{/each}
|
|
262
|
-
</section>
|
|
263
|
-
{/if}
|
|
264
|
-
{/each}
|
|
265
|
-
{/if}
|
|
266
|
-
|
|
267
|
-
<ChumBucket></ChumBucket>
|
|
268
|
-
|
|
269
|
-
{#if (!letChaos)}
|
|
270
|
-
<div aria-hidden="true" style="height: 3lh" />
|
|
271
|
-
|
|
272
|
-
<Card>
|
|
273
|
-
<div slot="content" class="default-card advanced-setting">
|
|
274
|
-
<h1>Advanced settings</h1>
|
|
275
|
-
<p>This one is for those curious how I customize this page.</p>
|
|
276
|
-
|
|
277
|
-
<PineappleSlideToggle name="advanced-setting-slider"
|
|
278
|
-
bind:checked={isAdvanceSettingOn}>
|
|
279
|
-
Advanced settings: {isAdvanceSettingOn ? "On" : "Off"}
|
|
280
|
-
</PineappleSlideToggle>
|
|
281
|
-
|
|
282
|
-
{#if (isAdvanceSettingOn)}
|
|
283
|
-
<PineappleSlideToggle name="game-section-slider"
|
|
284
|
-
bind:checked={seaweedTemplateData.gameSectionFirst}>
|
|
285
|
-
Should game section appear first over projects: {seaweedTemplateData.gameSectionFirst ? "On" : "Off"}
|
|
286
|
-
</PineappleSlideToggle>
|
|
287
|
-
<p>Note: the above configuration was made before the dynamic entry list and to support links sent with that params, we will act like it only swaps the two groups, and nothing more dynamic if order query param does not exist. The configuration only happens during page load with query param, and it does not apply when changed here.</p>
|
|
288
|
-
<PineappleSlideToggle name="fun-note-slider"
|
|
289
|
-
bind:checked={seaweedTemplateData.shouldAddFunNote}>
|
|
290
|
-
Should add fun note in description: {seaweedTemplateData.shouldAddFunNote ? "On" : "Off"}
|
|
291
|
-
</PineappleSlideToggle>
|
|
292
|
-
|
|
293
|
-
<h3>Query terms to bold</h3>
|
|
294
|
-
<div class="query-term-grid">
|
|
295
|
-
{#each seaweedTemplateData.queryTermMap.entries() as [term, shouldBold]}
|
|
296
|
-
<!--{@const shouldBold = false}-->
|
|
297
|
-
<Chip onClick={() => {toggleTerm(term)}}
|
|
298
|
-
checked={shouldBold}>
|
|
299
|
-
<!-- todo: change shouldBold -->
|
|
300
|
-
<span style={`font-weight: ${shouldBold ? "bold" : "normal"}`}>
|
|
301
|
-
{#if (shouldBold)}✓{/if}
|
|
302
|
-
{term}
|
|
303
|
-
</span>
|
|
304
|
-
</Chip>
|
|
305
|
-
{/each}
|
|
306
|
-
</div>
|
|
307
|
-
|
|
308
|
-
<EntryOrderConfig bind:seaweedEntries={seaweedTemplateData.groupedEntries}
|
|
309
|
-
seaweedTemplateData={seaweedTemplateData}
|
|
310
|
-
bind:orderUrl={orderUrl}
|
|
311
|
-
getAllEntryFromGlobal={getAllEntryFromGlobal}
|
|
312
|
-
getEntryFromGlobal={getEntryFromGlobal}
|
|
313
|
-
updateUrl={updateUrl}></EntryOrderConfig>
|
|
314
|
-
|
|
315
|
-
<br>
|
|
316
|
-
<p>Copy the url below and open a new page with it</p>
|
|
317
|
-
<CodeBlock language="url" code={advancedUrl}></CodeBlock>
|
|
318
|
-
|
|
319
|
-
<UrlShortenerForm queryParams={advancedQuery}></UrlShortenerForm>
|
|
320
|
-
{/if}
|
|
321
|
-
</div>
|
|
322
|
-
</Card>
|
|
323
|
-
{/if}
|
|
324
|
-
</main>
|
|
325
|
-
|
|
326
|
-
{#snippet extraLeadingIcons()}
|
|
327
|
-
<SocialSection
|
|
328
|
-
isSlot={true}
|
|
329
|
-
email={email}
|
|
330
|
-
linkedinSlug={linkedinSlug}
|
|
331
|
-
isSmallVersion={true}></SocialSection>
|
|
332
|
-
{/snippet}
|
|
333
|
-
</SeaweedBaseLayout>
|
|
334
|
-
|
|
335
|
-
<style>/*$$__STYLE_CONTENT__$$*/
|
|
336
|
-
</style>
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { type ComponentType } from "svelte";
|
|
2
|
-
import { type ComponentMeta, type EntryGroup, type SeaweedTemplateData } from "./SeaweedTemplateData";
|
|
3
|
-
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
4
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
5
|
-
$$bindings?: Bindings;
|
|
6
|
-
} & Exports;
|
|
7
|
-
(internal: unknown, props: Props & {
|
|
8
|
-
$$events?: Events;
|
|
9
|
-
$$slots?: Slots;
|
|
10
|
-
}): Exports & {
|
|
11
|
-
$set?: any;
|
|
12
|
-
$on?: any;
|
|
13
|
-
};
|
|
14
|
-
z_$$bindings?: Bindings;
|
|
15
|
-
}
|
|
16
|
-
declare const SeaweedTemplate: $$__sveltets_2_IsomorphicComponent<{
|
|
17
|
-
seaweedTemplateData: SeaweedTemplateData;
|
|
18
|
-
projectFirstGroupedEntries: ReadonlyArray<EntryGroup>;
|
|
19
|
-
getAllEntryFromGlobal: () => Map<string, ComponentMeta>;
|
|
20
|
-
getEntryFromGlobal: (name: string) => undefined | ComponentMeta;
|
|
21
|
-
letChaos?: boolean;
|
|
22
|
-
name?: string;
|
|
23
|
-
email?: string;
|
|
24
|
-
linkedinSlug?: string;
|
|
25
|
-
domain?: string;
|
|
26
|
-
serverSideQueryParams?: string;
|
|
27
|
-
experienceSection: ComponentType;
|
|
28
|
-
}, {
|
|
29
|
-
[evt: string]: CustomEvent<any>;
|
|
30
|
-
}, {}, {}, string>;
|
|
31
|
-
type SeaweedTemplate = InstanceType<typeof SeaweedTemplate>;
|
|
32
|
-
export default SeaweedTemplate;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { ComponentType } from "svelte";
|
|
2
|
-
export declare enum GroupGridClass {
|
|
3
|
-
Games = "games-section",
|
|
4
|
-
Projects = "projects-section"
|
|
5
|
-
}
|
|
6
|
-
export interface ComponentMeta {
|
|
7
|
-
name: string;
|
|
8
|
-
component: ComponentType;
|
|
9
|
-
}
|
|
10
|
-
export interface EntryGroup {
|
|
11
|
-
name: string;
|
|
12
|
-
items: ComponentMeta[];
|
|
13
|
-
gridClass: string;
|
|
14
|
-
}
|
|
15
|
-
export declare const GameEntries: Readonly<EntryGroup>;
|
|
16
|
-
export declare const ProjectEntries: Readonly<EntryGroup>;
|
|
17
|
-
export declare const EmptyRelevantProjects: Readonly<EntryGroup>;
|
|
18
|
-
export declare const AllGroupedEntriesGameFirst: ReadonlyArray<EntryGroup>;
|
|
19
|
-
export declare const AllGroupedEntriesProjectFirst: ReadonlyArray<EntryGroup>;
|
|
20
|
-
export declare const lazyInitializeAllFlatEntries: () => void;
|
|
21
|
-
export declare const GetAllEntryFromGlobal: () => Map<string, ComponentMeta>;
|
|
22
|
-
export declare const GetEntryFromGlobal: (name: string) => ComponentMeta | undefined;
|
|
23
|
-
export declare const TurnGroupEntriesMutable: (allEntries: ReadonlyArray<EntryGroup>) => EntryGroup[];
|
|
24
|
-
export interface SeaweedTemplateData {
|
|
25
|
-
groupedEntries: EntryGroup[];
|
|
26
|
-
shouldAddFunNote: boolean;
|
|
27
|
-
queryTermMap: Map<string, boolean>;
|
|
28
|
-
gameSectionFirst: boolean;
|
|
29
|
-
}
|
|
30
|
-
export declare const seaweedTemplateData: SeaweedTemplateData;
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { DefaultHeader } from "./entries/EntryProps";
|
|
2
|
-
import Pengi from "./entries/Pengi.svelte";
|
|
3
|
-
import Hepcat from "./entries/Hepcat.svelte";
|
|
4
|
-
import ChefWings from "./entries/ChefWings.svelte";
|
|
5
|
-
import Soulwork from "./entries/Soulwork.svelte";
|
|
6
|
-
import CustomizedYarnspinner from "./entries/CustomizedYarnspinner.svelte";
|
|
7
|
-
import ThisWebpage from "./entries/ThisWebpage.svelte";
|
|
8
|
-
import { removeProxyWrapperOnString } from "./entry_order_config/EntryOrderConfig";
|
|
9
|
-
export var GroupGridClass;
|
|
10
|
-
(function (GroupGridClass) {
|
|
11
|
-
GroupGridClass["Games"] = "games-section";
|
|
12
|
-
GroupGridClass["Projects"] = "projects-section";
|
|
13
|
-
})(GroupGridClass || (GroupGridClass = {}));
|
|
14
|
-
export const GameEntries = {
|
|
15
|
-
name: DefaultHeader.Games.toString(),
|
|
16
|
-
items: [
|
|
17
|
-
{ name: "Pengi", component: Pengi },
|
|
18
|
-
{ name: "Hepcat", component: Hepcat },
|
|
19
|
-
{ name: "Chef Wings", component: ChefWings }
|
|
20
|
-
],
|
|
21
|
-
gridClass: GroupGridClass.Games.toString()
|
|
22
|
-
};
|
|
23
|
-
export const ProjectEntries = {
|
|
24
|
-
name: DefaultHeader.Projects.toString(),
|
|
25
|
-
items: [
|
|
26
|
-
{ name: "Soulwork", component: Soulwork },
|
|
27
|
-
{ name: "Customized YarnSpinner", component: CustomizedYarnspinner },
|
|
28
|
-
{ name: "This Webpage", component: ThisWebpage }
|
|
29
|
-
],
|
|
30
|
-
gridClass: GroupGridClass.Projects.toString()
|
|
31
|
-
};
|
|
32
|
-
export const EmptyRelevantProjects = {
|
|
33
|
-
name: "Relevant projects",
|
|
34
|
-
items: [],
|
|
35
|
-
gridClass: GroupGridClass.Games.toString()
|
|
36
|
-
};
|
|
37
|
-
export const AllGroupedEntriesGameFirst = [
|
|
38
|
-
EmptyRelevantProjects,
|
|
39
|
-
GameEntries,
|
|
40
|
-
ProjectEntries
|
|
41
|
-
];
|
|
42
|
-
export const AllGroupedEntriesProjectFirst = [
|
|
43
|
-
EmptyRelevantProjects,
|
|
44
|
-
ProjectEntries,
|
|
45
|
-
GameEntries
|
|
46
|
-
];
|
|
47
|
-
const allFlatEntries = new Map();
|
|
48
|
-
export const lazyInitializeAllFlatEntries = () => {
|
|
49
|
-
if (allFlatEntries.size === 0) {
|
|
50
|
-
[...ProjectEntries.items, ...GameEntries.items].forEach(e => {
|
|
51
|
-
allFlatEntries.set(removeProxyWrapperOnString(e.name), e);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
export const GetAllEntryFromGlobal = () => {
|
|
56
|
-
lazyInitializeAllFlatEntries();
|
|
57
|
-
return allFlatEntries;
|
|
58
|
-
};
|
|
59
|
-
export const GetEntryFromGlobal = (name) => {
|
|
60
|
-
lazyInitializeAllFlatEntries();
|
|
61
|
-
return allFlatEntries.get(name);
|
|
62
|
-
};
|
|
63
|
-
export const TurnGroupEntriesMutable = (allEntries) => {
|
|
64
|
-
return allEntries.map(g => {
|
|
65
|
-
return {
|
|
66
|
-
name: g.name,
|
|
67
|
-
gridClass: g.gridClass,
|
|
68
|
-
items: g.items.map(e => e)
|
|
69
|
-
};
|
|
70
|
-
});
|
|
71
|
-
};
|
|
72
|
-
export const seaweedTemplateData = {
|
|
73
|
-
shouldAddFunNote: false,
|
|
74
|
-
queryTermMap: new Map(),
|
|
75
|
-
// todo: gameSectionFirst currently has no functionality
|
|
76
|
-
gameSectionFirst: true,
|
|
77
|
-
// copy the readonly properties into mutable values
|
|
78
|
-
groupedEntries: TurnGroupEntriesMutable(AllGroupedEntriesGameFirst)
|
|
79
|
-
};
|