@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
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { ModalProps } from 'svelte-modals';
|
|
3
|
-
import { setMode, userPrefersMode } from 'mode-watcher';
|
|
4
|
-
|
|
5
|
-
import { m } from '../../../../paraglide/messages';
|
|
6
|
-
import ModalBase from '../../../components/ModalBase.svelte';
|
|
7
|
-
import DarkIcon from '../../../../assets/icons/icon-dark-mode.svg';
|
|
8
|
-
import LightIcon from '../../../../assets/icons/icon-light-mode.svg';
|
|
9
|
-
import ConstrastIcon from '../../../../assets/icons/icon-contrast.svg';
|
|
10
|
-
import LanguagePicker from './LanguagePicker.svelte';
|
|
11
|
-
|
|
12
|
-
let props: ModalProps = $props();
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
interface ToggleItem {
|
|
16
|
-
key: 'light' | 'dark' | 'system'
|
|
17
|
-
imageSrc: string,
|
|
18
|
-
label: string,
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const modes: ToggleItem[] = [
|
|
22
|
-
{ key: 'light', imageSrc: LightIcon, label: 'Light' },
|
|
23
|
-
{ key: 'dark', imageSrc: DarkIcon, label: 'Dark' },
|
|
24
|
-
{ key: 'system', imageSrc: ConstrastIcon, label: 'System' }
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
let selectedItem: ToggleItem = $state(modes[0]);
|
|
28
|
-
|
|
29
|
-
// when mode is edited outside, adjust toggle button
|
|
30
|
-
// do not use runes here because we only want explicit changes outside
|
|
31
|
-
// our control here!
|
|
32
|
-
userPrefersMode.subscribe((value) => {
|
|
33
|
-
const si = modes.find(m => m.key === value);
|
|
34
|
-
if (selectedItem !== si && si) {
|
|
35
|
-
selectedItem = si;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
// when mode is changed inside the button, adjust the mode
|
|
40
|
-
$effect(() => {
|
|
41
|
-
switch (selectedItem?.key) {
|
|
42
|
-
case 'dark':
|
|
43
|
-
setMode('dark');
|
|
44
|
-
break;
|
|
45
|
-
case 'light':
|
|
46
|
-
setMode('light');
|
|
47
|
-
break;
|
|
48
|
-
case 'system':
|
|
49
|
-
setMode('system');
|
|
50
|
-
break;
|
|
51
|
-
default:
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
</script>
|
|
56
|
-
|
|
57
|
-
<ModalBase {...props}>
|
|
58
|
-
<div class="wrapper">
|
|
59
|
-
<h2>{m.settings()}</h2>
|
|
60
|
-
|
|
61
|
-
<fieldset class="btn-group border-primary-500 border-2 flex-col p-2 md:flex-row">
|
|
62
|
-
<legend class="bg-surface-100-900 pl-4 pr-4">Mode</legend>
|
|
63
|
-
{#each modes as mode (mode)}
|
|
64
|
-
<button
|
|
65
|
-
type="button"
|
|
66
|
-
title={mode.label}
|
|
67
|
-
class={`btn pt-3 pb-3 hover:brightness-125
|
|
68
|
-
${mode.key === selectedItem.key ? 'bg-secondary-400 dark:bg-secondary-800' : 'preset-outlined-primary-300-700'}
|
|
69
|
-
`}
|
|
70
|
-
onclick={() => { setMode(mode.key) }}
|
|
71
|
-
>
|
|
72
|
-
<img
|
|
73
|
-
src={mode.imageSrc}
|
|
74
|
-
aria-hidden="true"
|
|
75
|
-
alt=""
|
|
76
|
-
class={`icon
|
|
77
|
-
${mode.key === selectedItem.key ? 'reverse' : ''}
|
|
78
|
-
`}
|
|
79
|
-
>
|
|
80
|
-
{mode.label}
|
|
81
|
-
</button>
|
|
82
|
-
{/each}
|
|
83
|
-
</fieldset>
|
|
84
|
-
|
|
85
|
-
<LanguagePicker />
|
|
86
|
-
|
|
87
|
-
<div class="actions">
|
|
88
|
-
<button class="btn preset-filled-primary-400-600 text-surface-100" onclick={() => props.close()}
|
|
89
|
-
title="Close modal">
|
|
90
|
-
Close
|
|
91
|
-
</button>
|
|
92
|
-
</div>
|
|
93
|
-
</div>
|
|
94
|
-
</ModalBase>
|
|
95
|
-
|
|
96
|
-
<style>
|
|
97
|
-
.actions {
|
|
98
|
-
display: flex;
|
|
99
|
-
flex-direction: row-reverse;
|
|
100
|
-
margin-top: 1.4lh;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.wrapper {
|
|
104
|
-
display: flex;
|
|
105
|
-
flex-direction: column;
|
|
106
|
-
justify-content: start;
|
|
107
|
-
text-align: start;
|
|
108
|
-
gap: 1lh;
|
|
109
|
-
}
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ModalProps } from 'svelte-modals';
|
|
3
|
+
import { setMode, userPrefersMode } from 'mode-watcher';
|
|
4
|
+
|
|
5
|
+
import { m } from '../../../../paraglide/messages';
|
|
6
|
+
import ModalBase from '../../../components/ModalBase.svelte';
|
|
7
|
+
import DarkIcon from '../../../../assets/icons/icon-dark-mode.svg';
|
|
8
|
+
import LightIcon from '../../../../assets/icons/icon-light-mode.svg';
|
|
9
|
+
import ConstrastIcon from '../../../../assets/icons/icon-contrast.svg';
|
|
10
|
+
import LanguagePicker from './LanguagePicker.svelte';
|
|
11
|
+
|
|
12
|
+
let props: ModalProps = $props();
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
interface ToggleItem {
|
|
16
|
+
key: 'light' | 'dark' | 'system'
|
|
17
|
+
imageSrc: string,
|
|
18
|
+
label: string,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const modes: ToggleItem[] = [
|
|
22
|
+
{ key: 'light', imageSrc: LightIcon, label: 'Light' },
|
|
23
|
+
{ key: 'dark', imageSrc: DarkIcon, label: 'Dark' },
|
|
24
|
+
{ key: 'system', imageSrc: ConstrastIcon, label: 'System' }
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
let selectedItem: ToggleItem = $state(modes[0]);
|
|
28
|
+
|
|
29
|
+
// when mode is edited outside, adjust toggle button
|
|
30
|
+
// do not use runes here because we only want explicit changes outside
|
|
31
|
+
// our control here!
|
|
32
|
+
userPrefersMode.subscribe((value) => {
|
|
33
|
+
const si = modes.find(m => m.key === value);
|
|
34
|
+
if (selectedItem !== si && si) {
|
|
35
|
+
selectedItem = si;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// when mode is changed inside the button, adjust the mode
|
|
40
|
+
$effect(() => {
|
|
41
|
+
switch (selectedItem?.key) {
|
|
42
|
+
case 'dark':
|
|
43
|
+
setMode('dark');
|
|
44
|
+
break;
|
|
45
|
+
case 'light':
|
|
46
|
+
setMode('light');
|
|
47
|
+
break;
|
|
48
|
+
case 'system':
|
|
49
|
+
setMode('system');
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
<ModalBase {...props}>
|
|
58
|
+
<div class="wrapper">
|
|
59
|
+
<h2>{m.settings()}</h2>
|
|
60
|
+
|
|
61
|
+
<fieldset class="btn-group border-primary-500 border-2 flex-col p-2 md:flex-row">
|
|
62
|
+
<legend class="bg-surface-100-900 pl-4 pr-4">Mode</legend>
|
|
63
|
+
{#each modes as mode (mode)}
|
|
64
|
+
<button
|
|
65
|
+
type="button"
|
|
66
|
+
title={mode.label}
|
|
67
|
+
class={`btn pt-3 pb-3 hover:brightness-125
|
|
68
|
+
${mode.key === selectedItem.key ? 'bg-secondary-400 dark:bg-secondary-800' : 'preset-outlined-primary-300-700'}
|
|
69
|
+
`}
|
|
70
|
+
onclick={() => { setMode(mode.key) }}
|
|
71
|
+
>
|
|
72
|
+
<img
|
|
73
|
+
src={mode.imageSrc}
|
|
74
|
+
aria-hidden="true"
|
|
75
|
+
alt=""
|
|
76
|
+
class={`icon
|
|
77
|
+
${mode.key === selectedItem.key ? 'reverse' : ''}
|
|
78
|
+
`}
|
|
79
|
+
>
|
|
80
|
+
{mode.label}
|
|
81
|
+
</button>
|
|
82
|
+
{/each}
|
|
83
|
+
</fieldset>
|
|
84
|
+
|
|
85
|
+
<LanguagePicker />
|
|
86
|
+
|
|
87
|
+
<div class="actions">
|
|
88
|
+
<button class="btn preset-filled-primary-400-600 text-surface-100" onclick={() => props.close()}
|
|
89
|
+
title="Close modal">
|
|
90
|
+
Close
|
|
91
|
+
</button>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
</ModalBase>
|
|
95
|
+
|
|
96
|
+
<style>
|
|
97
|
+
.actions {
|
|
98
|
+
display: flex;
|
|
99
|
+
flex-direction: row-reverse;
|
|
100
|
+
margin-top: 1.4lh;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.wrapper {
|
|
104
|
+
display: flex;
|
|
105
|
+
flex-direction: column;
|
|
106
|
+
justify-content: start;
|
|
107
|
+
text-align: start;
|
|
108
|
+
gap: 1lh;
|
|
109
|
+
}
|
|
110
110
|
</style>
|
|
@@ -1,38 +1,43 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { getLocale, localizeHref } from "../../../../paraglide/runtime";
|
|
3
|
-
import PinyaCombobox from "../../../elements/pinya-combobox/PinyaCombobox.svelte";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
{ label: "
|
|
13
|
-
{ label: "
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
{
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { deLocalizeHref, getLocale, localizeHref } from "../../../../paraglide/runtime";
|
|
3
|
+
import PinyaCombobox from "../../../elements/pinya-combobox/PinyaCombobox.svelte";
|
|
4
|
+
import { appState } from "../../../templates/PinyaPageLayout/runes.svelte";
|
|
5
|
+
|
|
6
|
+
interface ComboxData {
|
|
7
|
+
label: string;
|
|
8
|
+
value: "en" | "fr" | "tl";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const comboboxData: ComboxData[] = [
|
|
12
|
+
{ label: "English", value: "en" },
|
|
13
|
+
{ label: "French", value: "fr" },
|
|
14
|
+
{ label: "Tagalog", value: "tl" }
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
let selectedCountry = $state([getLocale()]);
|
|
18
|
+
|
|
19
|
+
interface ValueDetail {
|
|
20
|
+
value: string[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const onValueChange = (e: ValueDetail) => {
|
|
24
|
+
const data = comboboxData.find((d) => d.value === e.value[0]);
|
|
25
|
+
if (data) {
|
|
26
|
+
selectedCountry = [data.value];
|
|
27
|
+
const pathname = deLocalizeHref(location.href);
|
|
28
|
+
location.href = localizeHref(pathname, { locale: data.value });
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
let disabled = $derived(!appState.isLanguagePickerAvailable);
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<PinyaCombobox
|
|
36
|
+
data={comboboxData}
|
|
37
|
+
value={selectedCountry}
|
|
38
|
+
defaultValue={selectedCountry}
|
|
39
|
+
label="Select Language"
|
|
40
|
+
placeholder="Select Language"
|
|
41
|
+
{onValueChange}
|
|
42
|
+
{disabled}
|
|
38
43
|
/>
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
2
|
import HeaderHepCat from "../../../assets/temp/header-hep-cat.mp4";
|
|
3
3
|
import BitbucketIcon from "../../../assets/icons/bitbucket-icon.svg";
|
|
4
|
-
import type { ProjectComponentProps } from "../../templates/
|
|
5
|
-
import { FourPartCard } from "../../components/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
5
|
+
import { default as FourPartCard } from "../../components/FourPartCard.svelte";
|
|
6
|
+
import { default as ImageIcon } from "../../elements/ImageIcon.svelte";
|
|
7
|
+
import { default as PinyaButton } from "../../elements/PinyaButton/PinyaButton.svelte";
|
|
8
|
+
import { ButtonVariant } from "../../elements/PinyaButton/PinyaButtonProps";
|
|
9
|
+
import { ItchLogoHotLink } from "../../../consts";
|
|
8
10
|
|
|
9
11
|
const key = "Hepcat";
|
|
10
12
|
export { component, key };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ProjectComponentProps } from "../../templates/
|
|
1
|
+
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
2
2
|
declare const key = "Hepcat";
|
|
3
3
|
export { component, key };
|
|
4
4
|
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
@@ -1,60 +1,62 @@
|
|
|
1
|
-
<script module lang="ts">
|
|
2
|
-
import HeaderPengi from "../../../assets/temp/header-pengi.mp4";
|
|
3
|
-
import GithubIcon from "../../../assets/icons/github-mark.svg";
|
|
4
|
-
import type { ProjectComponentProps } from "../../templates/
|
|
5
|
-
import { FourPartCard } from "../../components/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
{
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
<
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import HeaderPengi from "../../../assets/temp/header-pengi.mp4";
|
|
3
|
+
import GithubIcon from "../../../assets/icons/github-mark.svg";
|
|
4
|
+
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
5
|
+
import { default as FourPartCard } from "../../components/FourPartCard.svelte";
|
|
6
|
+
import { default as ImageIcon } from "../../elements/ImageIcon.svelte";
|
|
7
|
+
import { default as PinyaButton } from "../../elements/PinyaButton/PinyaButton.svelte";
|
|
8
|
+
import { ButtonVariant } from "../../elements/PinyaButton/PinyaButtonProps";
|
|
9
|
+
import { ItchLogoHotLink } from "../../../consts";
|
|
10
|
+
|
|
11
|
+
const key = "Pengi";
|
|
12
|
+
export { component, key };
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
{#snippet component(props: ProjectComponentProps)}
|
|
16
|
+
<FourPartCard>
|
|
17
|
+
{#snippet headerCover()}
|
|
18
|
+
<video class="rounded-t-xl max-h-64 not-prose object-cover w-full" playsinline autoplay muted loop preload="none">
|
|
19
|
+
video unavailable. original video contains pengi gameplay showing the dynamic dialog
|
|
20
|
+
layout and character animation.
|
|
21
|
+
<source src={HeaderPengi} type="video/mp4">
|
|
22
|
+
</video>
|
|
23
|
+
{/snippet}
|
|
24
|
+
|
|
25
|
+
{#snippet header()}
|
|
26
|
+
<h3>Pengi</h3>
|
|
27
|
+
|
|
28
|
+
<blockquote>
|
|
29
|
+
Well well, quite the dreamer, aren’t you? Might be hard to get in... costs a lot of
|
|
30
|
+
money...
|
|
31
|
+
</blockquote>
|
|
32
|
+
{/snippet}
|
|
33
|
+
|
|
34
|
+
<p>
|
|
35
|
+
Pengi is a text-based adventure made in <span class='qt-unity'>Unity</span> (<span class='qt-cs'>C#</span>). I
|
|
36
|
+
acted as the sole
|
|
37
|
+
programmer for the team. Most of the work revolves around UI and creating <a
|
|
38
|
+
href="https://yarnspinner.dev/" target="_blank">YarnSpinner</a> commands for writers
|
|
39
|
+
to use to create expressive stage directions in the script.
|
|
40
|
+
</p>
|
|
41
|
+
|
|
42
|
+
<section class="game-link-section">
|
|
43
|
+
<PinyaButton
|
|
44
|
+
buttonVariant={ButtonVariant.Image}
|
|
45
|
+
aria-label="Click to go to Project Pengi in Github"
|
|
46
|
+
title="https://github.com/GreenTea-M/ProjectPengi"
|
|
47
|
+
onclick={() => window.open("https://github.com/GreenTea-M/ProjectPengi")}
|
|
48
|
+
>
|
|
49
|
+
<ImageIcon alt="" aria-hidden="true" src={GithubIcon} />
|
|
50
|
+
</PinyaButton>
|
|
51
|
+
<PinyaButton
|
|
52
|
+
buttonVariant={ButtonVariant.Image}
|
|
53
|
+
aria-label="Click to go to Project Pengi in Itch.io"
|
|
54
|
+
title="https://turnipxenon.itch.io/pengi"
|
|
55
|
+
onclick={() => window.open("https://turnipxenon.itch.io/pengi")}
|
|
56
|
+
>
|
|
57
|
+
<ImageIcon alt="" aria-hidden="true" src={ItchLogoHotLink} />
|
|
58
|
+
</PinyaButton>
|
|
59
|
+
</section>
|
|
60
|
+
|
|
61
|
+
</FourPartCard>
|
|
60
62
|
{/snippet}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ProjectComponentProps } from "../../templates/
|
|
1
|
+
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
2
2
|
declare const key = "Pengi";
|
|
3
3
|
export { component, key };
|
|
4
4
|
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
|
-
import HeaderSoulwork from
|
|
3
|
-
import GithubIcon from
|
|
2
|
+
import HeaderSoulwork from "../../../assets/temp/header-soulwork.mp4";
|
|
3
|
+
import GithubIcon from "../../../assets/icons/github-mark.svg";
|
|
4
4
|
import type { ProjectComponentProps } from "../../templates/index";
|
|
5
|
-
import { FourPartCard } from "../../components/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { default as FourPartCard } from "../../components/FourPartCard.svelte";
|
|
6
|
+
import { default as ImageIcon } from "../../elements/ImageIcon.svelte";
|
|
7
|
+
import { default as PinyaButton } from "../../elements/PinyaButton/PinyaButton.svelte";
|
|
8
|
+
import { ButtonVariant } from "../../elements/PinyaButton/PinyaButtonProps";
|
|
9
|
+
import { ItchLogoHotLink } from "../../../consts";
|
|
8
10
|
|
|
9
11
|
const key = "Soulwork";
|
|
10
12
|
export { component, key };
|
|
@@ -1,28 +1,31 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
|
-
import GithubIcon from
|
|
3
|
-
import ThisWebsiteFootage from
|
|
4
|
-
import type { ProjectComponentProps } from
|
|
2
|
+
import GithubIcon from "../../../assets/icons/github-mark.svg";
|
|
3
|
+
import ThisWebsiteFootage from "../../../assets/others/seaweed-showcase.mp4";
|
|
4
|
+
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
5
|
+
import { default as FourPartCard } from "../../components/FourPartCard.svelte";
|
|
6
|
+
import { default as ImageIcon } from "../../elements/ImageIcon.svelte";
|
|
7
|
+
import { default as PinyaButton } from "../../elements/PinyaButton/PinyaButton.svelte";
|
|
8
|
+
import { ButtonVariant } from "../../elements/PinyaButton/PinyaButtonProps";
|
|
9
|
+
import { default as TextChip } from "../../elements/text-chip/TextChip.svelte";
|
|
5
10
|
|
|
6
|
-
const key =
|
|
11
|
+
const key = "This Webpage";
|
|
7
12
|
export { component, key };
|
|
8
13
|
</script>
|
|
9
|
-
<script>
|
|
10
|
-
import { FourPartCard } from "../../components/index";
|
|
11
|
-
import { ButtonVariant, ImageIcon, PinyaButton, TextChip } from "../../elements/index.js";
|
|
12
|
-
</script>
|
|
13
14
|
|
|
14
15
|
{#snippet component(props: ProjectComponentProps)}
|
|
15
16
|
<FourPartCard>
|
|
16
17
|
|
|
17
18
|
{#snippet headerCover()}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
{#if !props.isPineapple}
|
|
20
|
+
<video
|
|
21
|
+
playsinline autoplay muted loop preload="none"
|
|
22
|
+
class="game-video-cover"
|
|
23
|
+
>
|
|
24
|
+
<source src={ThisWebsiteFootage} type="video/mp4">
|
|
25
|
+
video unavailable. original video contains clips of this website being resized and light-dark mode being
|
|
26
|
+
toggled.
|
|
27
|
+
</video>
|
|
28
|
+
{/if}
|
|
26
29
|
{/snippet}
|
|
27
30
|
|
|
28
31
|
{#snippet header()}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ProjectComponentProps } from
|
|
1
|
+
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
2
2
|
declare const key = "This Webpage";
|
|
3
3
|
export { component, key };
|
|
4
4
|
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { modals } from "svelte-modals";
|
|
9
9
|
import GeneralSettingsModal from "../../modules/modals/general-settings/GeneralSettingsModal.svelte";
|
|
10
10
|
import { localizeHref } from "../../../paraglide/runtime";
|
|
11
|
-
import { appState } from "
|
|
11
|
+
import { appState } from "./runes.svelte";
|
|
12
12
|
|
|
13
13
|
let {
|
|
14
14
|
children,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Snippet } from "svelte";
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
children: Snippet;
|
|
4
|
+
appBarLead?: Snippet;
|
|
5
|
+
footer?: Snippet;
|
|
6
|
+
};
|
|
7
|
+
declare const PinyaPageLayout: import("svelte").Component<$$ComponentProps, {}, "appBarLead">;
|
|
8
|
+
type PinyaPageLayout = ReturnType<typeof PinyaPageLayout>;
|
|
9
|
+
export default PinyaPageLayout;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { type PageMeta } from "
|
|
2
|
+
import { type PageMeta } from "../../modules/NavigationMenu/index";
|
|
3
3
|
import { onMount } from "svelte";
|
|
4
4
|
import Placeholder from "../../elements/Placeholder.svelte";
|
|
5
5
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { type CreateUrlRequest, CreateUrlResult, jsonToCreateUrlResponse } from "
|
|
2
|
+
import { type CreateUrlRequest, CreateUrlResult, jsonToCreateUrlResponse } from "../../../types/api/CreateUrl";
|
|
3
3
|
import type { ToastContext } from "@skeletonlabs/skeleton-svelte";
|
|
4
4
|
import { getContext } from "svelte";
|
|
5
5
|
import type { ToastSettings } from "./ToastSettings";
|
|
6
|
-
import { PinyaButton } from "../../
|
|
6
|
+
import { PinyaButton } from "../../elements/index";
|
|
7
7
|
|
|
8
8
|
export const toast: ToastContext = getContext("toast");
|
|
9
9
|
|