@turnipxenon/pineapple 2.10.0 → 3.0.0-alpha-3
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/assets/icons/icon-check-dark-contrast.svg +1 -0
- package/dist/assets/icons/icon-check-light-contrast.svg +1 -0
- package/dist/assets/icons/icon-contrast.svg +1 -0
- package/dist/assets/icons/icon-copy-dark-contrast.svg +1 -0
- package/dist/assets/icons/icon-copy-light-contrast.svg +1 -0
- package/dist/assets/icons/icon-dark-mode.svg +1 -0
- package/dist/assets/icons/icon-light-mode.svg +1 -0
- package/dist/assets/icons/icon-settings.svg +1 -0
- package/dist/components/Card.svelte +43 -41
- package/dist/components/Card.svelte.d.ts +11 -24
- package/dist/components/CarouselElement.svelte +15 -8
- package/dist/components/CarouselElement.svelte.d.ts +7 -18
- package/dist/components/ElementVisbilityDetector.svelte +23 -14
- package/dist/components/ElementVisbilityDetector.svelte.d.ts +6 -17
- package/dist/components/LazyAsset.svelte +93 -65
- package/dist/components/LazyAsset.svelte.d.ts +9 -19
- package/dist/components/PineappleSlideToggle.svelte +28 -10
- package/dist/components/PineappleSlideToggle.svelte.d.ts +9 -19
- package/dist/components/RandomizedBackground.svelte +46 -27
- package/dist/components/RandomizedBackground.svelte.d.ts +5 -15
- package/dist/components/RandomizedImage.svelte +15 -8
- package/dist/components/RandomizedImage.svelte.d.ts +6 -16
- package/dist/components/StickyElement.svelte +25 -16
- package/dist/components/StickyElement.svelte.d.ts +6 -17
- package/dist/components/ToggleableContent.svelte +88 -59
- package/dist/components/ToggleableContent.svelte.d.ts +6 -17
- package/dist/components/blog_template/BlogTemplate.svelte +45 -25
- package/dist/components/blog_template/BlogTemplate.svelte.d.ts +9 -20
- package/dist/components/blog_template/BlogTemplateInner.svelte +11 -3
- package/dist/components/blog_template/BlogTemplateInner.svelte.d.ts +6 -17
- package/dist/components/chip/Chip.svelte +33 -57
- package/dist/components/chip/Chip.svelte.d.ts +7 -18
- package/dist/components/combo_box/ComboBox.svelte +10 -4
- package/dist/components/combo_box/ComboBox.svelte.d.ts +6 -16
- package/dist/components/combo_box/ComboBoxWithButton.svelte +16 -9
- package/dist/components/combo_box/ComboBoxWithButton.svelte.d.ts +7 -17
- package/dist/components/combo_box/combo-box.postcss +2 -2
- package/dist/components/dialog_manager/DialogManager.d.ts +0 -1
- package/dist/components/dialog_manager/DialogManagerStore.d.ts +0 -1
- package/dist/components/dialog_manager/DialogManagerStore.js +1 -1
- package/dist/components/dialog_overlay/DialogOverlay.svelte +42 -34
- package/dist/components/dialog_overlay/DialogOverlay.svelte.d.ts +3 -14
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/layouts/SeaweedBaseLayout.svelte +80 -43
- package/dist/components/layouts/SeaweedBaseLayout.svelte.d.ts +8 -21
- package/dist/components/navigation_component/NavigationComponent.svelte +52 -141
- package/dist/components/navigation_component/NavigationComponent.svelte.d.ts +17 -26
- package/dist/components/navigation_component/NavigationControl.svelte +52 -103
- package/dist/components/navigation_component/NavigationControl.svelte.d.ts +7 -17
- package/dist/components/overrideable_meta/OverridableMeta.svelte +37 -22
- package/dist/components/overrideable_meta/OverridableMeta.svelte.d.ts +9 -19
- package/dist/components/pineapple/PineappleBaseLayout.svelte +132 -188
- package/dist/components/pineapple/PineappleBaseLayout.svelte.d.ts +6 -17
- package/dist/components/pineapple/toast/DefaultToastBody.svelte +14 -16
- package/dist/components/pineapple/toast/DefaultToastBody.svelte.d.ts +7 -17
- package/dist/components/pineapple/toast/Toast.d.ts +0 -1
- package/dist/components/pineapple/toast/Toast.svelte +92 -64
- package/dist/components/pineapple/toast/Toast.svelte.d.ts +3 -14
- package/dist/components/pineapple/toast/custom-toast/TestCustomToast.svelte.d.ts +22 -19
- package/dist/paraglide/messages/_index.d.ts +2 -0
- package/dist/paraglide/messages/_index.js +3 -0
- package/dist/paraglide/messages/example_message.d.ts +5 -0
- package/dist/paraglide/messages/example_message.js +39 -0
- package/dist/paraglide/messages/settings.d.ts +3 -0
- package/dist/paraglide/messages/settings.js +38 -0
- package/dist/paraglide/messages.d.ts +2 -0
- package/dist/paraglide/messages.js +4 -0
- package/dist/paraglide/registry.d.ts +21 -0
- package/dist/paraglide/registry.js +31 -0
- package/dist/paraglide/runtime.d.ts +400 -0
- package/dist/paraglide/runtime.js +1060 -0
- package/dist/paraglide/server.d.ts +64 -0
- package/dist/paraglide/server.js +161 -0
- package/dist/scripts/util/FileManagement.d.ts +1 -1
- package/dist/store.d.ts +0 -1
- package/dist/styles/app.css +144 -0
- package/dist/styles/turnip-theme.css +327 -0
- package/dist/template/seaweed/CreateUrlForm.svelte +59 -41
- package/dist/template/seaweed/CreateUrlForm.svelte.d.ts +8 -15
- package/dist/template/seaweed/SeaweedTemplate.svelte +244 -195
- package/dist/template/seaweed/SeaweedTemplate.svelte.d.ts +28 -25
- package/dist/template/seaweed/ToastSettings.d.ts +15 -0
- package/dist/template/seaweed/ToastSettings.js +1 -0
- package/dist/template/seaweed/entries/ChefWings.svelte +37 -39
- package/dist/template/seaweed/entries/ChefWings.svelte.d.ts +5 -15
- package/dist/template/seaweed/entries/CustomizedYarnspinner.svelte +32 -24
- package/dist/template/seaweed/entries/CustomizedYarnspinner.svelte.d.ts +5 -15
- package/dist/template/seaweed/entries/Hepcat.svelte +58 -49
- package/dist/template/seaweed/entries/Hepcat.svelte.d.ts +5 -15
- package/dist/template/seaweed/entries/Pengi.svelte +51 -43
- package/dist/template/seaweed/entries/Pengi.svelte.d.ts +5 -15
- package/dist/template/seaweed/entries/Soulwork.svelte +44 -36
- package/dist/template/seaweed/entries/Soulwork.svelte.d.ts +5 -15
- package/dist/template/seaweed/entries/ThisWebpage.svelte +47 -38
- package/dist/template/seaweed/entries/ThisWebpage.svelte.d.ts +5 -15
- package/dist/template/seaweed/entries/WorkExperience.svelte +109 -92
- package/dist/template/seaweed/entries/WorkExperience.svelte.d.ts +6 -16
- package/dist/template/seaweed/entries/Workset.svelte +51 -42
- package/dist/template/seaweed/entries/Workset.svelte.d.ts +5 -15
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte +169 -259
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte.d.ts +10 -21
- package/dist/template/seaweed/seaweed.postcss +1 -9
- package/dist/{theme.postcss → theme.css} +1 -4
- package/dist/ui/components/FourPartCard.svelte +47 -0
- package/dist/ui/components/FourPartCard.svelte.d.ts +10 -0
- package/dist/ui/components/ModalBase.svelte +75 -0
- package/dist/ui/components/ModalBase.svelte.d.ts +8 -0
- package/dist/ui/components/SocialSection.svelte +87 -0
- package/dist/ui/components/SocialSection.svelte.d.ts +9 -0
- package/dist/ui/components/index.d.ts +3 -0
- package/dist/ui/components/index.js +3 -0
- package/dist/ui/components/randomized-background/RandomizedBackground.svelte +87 -0
- package/dist/ui/components/randomized-background/RandomizedBackground.svelte.d.ts +6 -0
- package/dist/ui/components/randomized-background/RandomizedImage.svelte +42 -0
- package/dist/ui/components/randomized-background/RandomizedImage.svelte.d.ts +7 -0
- package/dist/ui/elements/CodeBlock/CodeBlock.svelte +65 -0
- package/dist/ui/elements/CodeBlock/CodeBlock.svelte.d.ts +5 -0
- package/dist/ui/elements/CodeBlock/CodeBlockProps.d.ts +11 -0
- package/dist/ui/elements/CodeBlock/CodeBlockProps.js +1 -0
- package/dist/ui/elements/CodeBlock/index.d.ts +2 -0
- package/dist/ui/elements/CodeBlock/index.js +2 -0
- package/dist/ui/elements/ColorScheme.d.ts +10 -0
- package/dist/ui/elements/ColorScheme.js +11 -0
- package/dist/ui/elements/GeneralUIProps.d.ts +12 -0
- package/dist/ui/elements/GeneralUIProps.js +1 -0
- package/dist/ui/elements/ImageIcon.svelte +54 -0
- package/dist/ui/elements/ImageIcon.svelte.d.ts +6 -0
- package/dist/ui/elements/OnBackground.d.ts +3 -0
- package/dist/ui/elements/OnBackground.js +4 -0
- package/dist/ui/elements/PineappleSwitch.svelte +29 -0
- package/dist/ui/elements/PineappleSwitch.svelte.d.ts +10 -0
- package/dist/ui/elements/TextLink.svelte +17 -0
- package/dist/ui/elements/TextLink.svelte.d.ts +8 -0
- package/dist/ui/elements/WrapperProps.d.ts +4 -0
- package/dist/ui/elements/WrapperProps.js +1 -0
- package/dist/ui/elements/index.d.ts +10 -0
- package/dist/ui/elements/index.js +10 -0
- package/dist/ui/elements/pinya-button/component.svelte +47 -0
- package/dist/ui/elements/pinya-button/component.svelte.d.ts +4 -0
- package/dist/ui/elements/pinya-button/index.d.ts +2 -0
- package/dist/ui/elements/pinya-button/index.js +2 -0
- package/dist/ui/elements/pinya-button/props.d.ts +13 -0
- package/dist/ui/elements/pinya-button/props.js +6 -0
- package/dist/ui/elements/pinya-card/component.svelte +21 -0
- package/dist/ui/elements/pinya-card/component.svelte.d.ts +7 -0
- package/dist/ui/elements/pinya-card/index.d.ts +2 -0
- package/dist/ui/elements/pinya-card/index.js +2 -0
- package/dist/ui/elements/pinya-card/props.d.ts +10 -0
- package/dist/ui/elements/pinya-card/props.js +1 -0
- package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte +35 -0
- package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte.d.ts +18 -0
- package/dist/ui/elements/pinya-combobox/PinyaComboboxProps.d.ts +18 -0
- package/dist/ui/elements/pinya-combobox/PinyaComboboxProps.js +1 -0
- package/dist/ui/elements/text-chip/TextChip.svelte +15 -0
- package/dist/ui/elements/text-chip/TextChip.svelte.d.ts +4 -0
- package/dist/ui/elements/text-chip/TextChipProps.d.ts +4 -0
- package/dist/ui/elements/text-chip/TextChipProps.js +1 -0
- package/dist/ui/elements/text-chip/index.d.ts +2 -0
- package/dist/ui/elements/text-chip/index.js +2 -0
- package/dist/ui/modules/index.d.ts +2 -0
- package/dist/ui/modules/index.js +2 -0
- package/dist/ui/modules/modals/general-settings/GeneralSettingsModal.svelte +110 -0
- package/dist/ui/modules/modals/general-settings/GeneralSettingsModal.svelte.d.ts +4 -0
- package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte +38 -0
- package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte.d.ts +3 -0
- package/dist/ui/modules/projects/Hepcat.svelte +71 -0
- package/dist/ui/modules/projects/Hepcat.svelte.d.ts +22 -0
- package/dist/ui/modules/projects/Pengi.svelte +60 -0
- package/dist/ui/modules/projects/Pengi.svelte.d.ts +22 -0
- package/dist/ui/modules/projects/Soulwork.svelte +55 -0
- package/dist/ui/modules/projects/Soulwork.svelte.d.ts +22 -0
- package/dist/ui/modules/projects/ThisWebpage.svelte +62 -0
- package/dist/ui/modules/projects/ThisWebpage.svelte.d.ts +22 -0
- package/dist/ui/modules/projects/index.d.ts +4 -0
- package/dist/ui/modules/projects/index.js +4 -0
- package/dist/ui/modules/seaweed/ChumBucket.svelte +86 -0
- package/dist/ui/modules/seaweed/ChumBucket.svelte.d.ts +3 -0
- package/dist/ui/modules/seaweed/index.d.ts +3 -0
- package/dist/ui/modules/seaweed/index.js +4 -0
- package/dist/ui/templates/PinyaBase.svelte +48 -0
- package/dist/ui/templates/PinyaBase.svelte.d.ts +7 -0
- package/dist/ui/templates/confirmation-modal/component.svelte +47 -0
- package/dist/ui/templates/confirmation-modal/component.svelte.d.ts +4 -0
- package/dist/ui/templates/confirmation-modal/index.d.ts +2 -0
- package/dist/ui/templates/confirmation-modal/index.js +2 -0
- package/dist/ui/templates/confirmation-modal/props.d.ts +10 -0
- package/dist/ui/templates/confirmation-modal/props.js +1 -0
- package/dist/ui/templates/index.d.ts +4 -0
- package/dist/ui/templates/index.js +4 -0
- package/dist/ui/templates/pinya-page-layout/component.svelte +120 -0
- package/dist/ui/templates/pinya-page-layout/component.svelte.d.ts +9 -0
- package/dist/ui/templates/pinya-page-layout/index.d.ts +2 -0
- package/dist/ui/templates/pinya-page-layout/index.js +2 -0
- package/dist/ui/templates/pinya-page-layout/runes.svelte.d.ts +7 -0
- package/dist/ui/templates/pinya-page-layout/runes.svelte.js +3 -0
- package/dist/ui/templates/seaweed-layout/EntryGroup.svelte +89 -0
- package/dist/ui/templates/seaweed-layout/EntryGroup.svelte.d.ts +4 -0
- package/dist/ui/templates/seaweed-layout/EntryOrderConfig2.svelte +45 -0
- package/dist/ui/templates/seaweed-layout/EntryOrderConfig2.svelte.d.ts +9 -0
- package/dist/ui/templates/seaweed-layout/ProjectComponentProps.d.ts +4 -0
- package/dist/ui/templates/seaweed-layout/ProjectComponentProps.js +1 -0
- package/dist/ui/templates/seaweed-layout/ProjectGroupConfig.svelte +316 -0
- package/dist/ui/templates/seaweed-layout/ProjectGroupConfig.svelte.d.ts +14 -0
- package/dist/ui/templates/seaweed-layout/SeaweedLayout.md +4 -0
- package/dist/ui/templates/seaweed-layout/SeaweedLayout.svelte +196 -0
- package/dist/ui/templates/seaweed-layout/SeaweedLayout.svelte.d.ts +4 -0
- package/dist/ui/templates/seaweed-layout/index.d.ts +4 -0
- package/dist/ui/templates/seaweed-layout/index.js +4 -0
- package/dist/ui/templates/seaweed-layout/props.d.ts +25 -0
- package/dist/ui/templates/seaweed-layout/props.js +1 -0
- package/dist/util/util.d.ts +1 -0
- package/dist/util/util.js +9 -0
- package/package.json +37 -20
- package/src/lib/styles/app.css +144 -0
- package/src/lib/theme.css +114 -0
- package/dist/app.postcss +0 -212
- package/dist/components/SocialSection.svelte +0 -166
- package/dist/components/SocialSection.svelte.d.ts +0 -31
- package/dist/postcss.d.ts +0 -3
- package/dist/styles/DefaultGridContainer.css +0 -61
- package/dist/template/seaweed/ChumBucket.svelte +0 -87
- package/dist/template/seaweed/ChumBucket.svelte.d.ts +0 -14
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ProjectComponentProps } from "../../templates/index";
|
|
2
|
+
declare const key = "Soulwork";
|
|
3
|
+
export { component, key };
|
|
4
|
+
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
5
|
+
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> {
|
|
6
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
7
|
+
$$bindings?: Bindings;
|
|
8
|
+
} & Exports;
|
|
9
|
+
(internal: unknown, props: {
|
|
10
|
+
$$events?: Events;
|
|
11
|
+
$$slots?: Slots;
|
|
12
|
+
}): Exports & {
|
|
13
|
+
$set?: any;
|
|
14
|
+
$on?: any;
|
|
15
|
+
};
|
|
16
|
+
z_$$bindings?: Bindings;
|
|
17
|
+
}
|
|
18
|
+
declare const Soulwork: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
}, {}, {}, string>;
|
|
21
|
+
type Soulwork = InstanceType<typeof Soulwork>;
|
|
22
|
+
export default Soulwork;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import GithubIcon from '../../../assets/icons/github-mark.svg';
|
|
3
|
+
import ThisWebsiteFootage from '../../../assets/others/seaweed-showcase.mp4';
|
|
4
|
+
import type { ProjectComponentProps } from '../../templates/seaweed-layout/ProjectComponentProps';
|
|
5
|
+
|
|
6
|
+
const key = 'This Webpage';
|
|
7
|
+
export { component, key };
|
|
8
|
+
</script>
|
|
9
|
+
<script>
|
|
10
|
+
import { FourPartCard } from "../../components/index";
|
|
11
|
+
import { ButtonVariant, ImageIcon, PinyaButton, TextChip } from "../../elements/index.js";
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
{#snippet component(props: ProjectComponentProps)}
|
|
15
|
+
<FourPartCard>
|
|
16
|
+
|
|
17
|
+
{#snippet headerCover()}
|
|
18
|
+
<video
|
|
19
|
+
playsinline autoplay muted loop preload="none"
|
|
20
|
+
class="game-video-cover"
|
|
21
|
+
>
|
|
22
|
+
<source src={ThisWebsiteFootage} type="video/mp4">
|
|
23
|
+
video unavailable. original video contains clips of this website being resized and light-dark mode being
|
|
24
|
+
toggled.
|
|
25
|
+
</video>
|
|
26
|
+
{/snippet}
|
|
27
|
+
|
|
28
|
+
{#snippet header()}
|
|
29
|
+
<h2>This webpage!</h2>
|
|
30
|
+
{/snippet}
|
|
31
|
+
|
|
32
|
+
<p>
|
|
33
|
+
The webpage is made with two parts. The webpage that has the content for everything here, I've lovingly called
|
|
34
|
+
Seaweed. I kept seaweed as a private package. On the other hand, the base package which I want to use for all
|
|
35
|
+
spin offs of my websites is called Pineapple and have kept that codebase public.
|
|
36
|
+
</p>
|
|
37
|
+
<p>The webpage can dynamically emphasize terms, rearrange the layout, use different terms, and save all these
|
|
38
|
+
configurations as a shortened link. Additionally fetches the latest blog entries from turnipxenon.com via REST
|
|
39
|
+
calls.</p>
|
|
40
|
+
|
|
41
|
+
<div class="text-chip-container">
|
|
42
|
+
<TextChip queryClass="qt-svelte">Svelte 5</TextChip>
|
|
43
|
+
<TextChip queryClass="qt-tailwind">Tailwind 4</TextChip>
|
|
44
|
+
<TextChip queryClass="qt-skeleton">Skeleton (Svelte UI library)</TextChip>
|
|
45
|
+
<TextChip queryClass="qt-ts">Typescript</TextChip>
|
|
46
|
+
<TextChip queryClass="qt-vercel qt-cicd">Vercel</TextChip>
|
|
47
|
+
<TextChip queryClass="qt-gamedev">YarnSpinner</TextChip>
|
|
48
|
+
<TextChip queryClass="qt-postgres qt-db">Postgres (SQL database)</TextChip>
|
|
49
|
+
<TextChip queryClass="qt-prisma qt-db">Prisma ORM</TextChip>
|
|
50
|
+
<TextChip queryClass="qt-rest">RESTful API</TextChip>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<section class="game-link-section">
|
|
54
|
+
<PinyaButton
|
|
55
|
+
buttonVariant={ButtonVariant.Image}
|
|
56
|
+
title="https://github.com/TurnipXenon/pineapple"
|
|
57
|
+
onclick={() => window.open("https://github.com/TurnipXenon/pineapple")}>
|
|
58
|
+
<ImageIcon src={GithubIcon} class="long-btn-image" alt="github icon" />
|
|
59
|
+
</PinyaButton>
|
|
60
|
+
</section>
|
|
61
|
+
</FourPartCard>
|
|
62
|
+
{/snippet}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ProjectComponentProps } from '../../templates/seaweed-layout/ProjectComponentProps';
|
|
2
|
+
declare const key = "This Webpage";
|
|
3
|
+
export { component, key };
|
|
4
|
+
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
5
|
+
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> {
|
|
6
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
7
|
+
$$bindings?: Bindings;
|
|
8
|
+
} & Exports;
|
|
9
|
+
(internal: unknown, props: {
|
|
10
|
+
$$events?: Events;
|
|
11
|
+
$$slots?: Slots;
|
|
12
|
+
}): Exports & {
|
|
13
|
+
$set?: any;
|
|
14
|
+
$on?: any;
|
|
15
|
+
};
|
|
16
|
+
z_$$bindings?: Bindings;
|
|
17
|
+
}
|
|
18
|
+
declare const ThisWebpage: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
}, {}, {}, string>;
|
|
21
|
+
type ThisWebpage = InstanceType<typeof ThisWebpage>;
|
|
22
|
+
export default ThisWebpage;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { type PageMeta } from "../../..";
|
|
3
|
+
import { onMount } from "svelte";
|
|
4
|
+
|
|
5
|
+
let hasTriedGettingChumBucket = $state(false);
|
|
6
|
+
let pageMetaList: PageMeta[] = $state([]);
|
|
7
|
+
const loadPageMeta = async () => {
|
|
8
|
+
fetch("/api/get-latest-blogs").then(resp => resp.json()).then(json => {
|
|
9
|
+
pageMetaList = json as PageMeta[];
|
|
10
|
+
hasTriedGettingChumBucket = true;
|
|
11
|
+
}).catch(_ => {
|
|
12
|
+
hasTriedGettingChumBucket = true;
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
onMount(() => {
|
|
17
|
+
loadPageMeta();
|
|
18
|
+
});
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<div class="chum-bucket">
|
|
22
|
+
<h2 class="text-start">More about me...</h2>
|
|
23
|
+
<p>Check out the latest things I've been rambling about at
|
|
24
|
+
<a href="https://turnipxenon.com" target="_blank">turnipxenon.com</a> or at
|
|
25
|
+
<a href="https://turnipxenon.com/blogs/coding-chagrin" target="_blank">turnipxenon.com/blogs/coding-chagrin.</a>
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
<div class="chum-bucket-grid">
|
|
29
|
+
{#if hasTriedGettingChumBucket}
|
|
30
|
+
{#each pageMetaList as pageMeta}
|
|
31
|
+
<div class="chum-bucket-item">
|
|
32
|
+
{#if pageMeta.imageUrl}
|
|
33
|
+
<img src={`https://turnipxenon.com${pageMeta.imageUrl}`}
|
|
34
|
+
class="chum-bucket-image"
|
|
35
|
+
alt={pageMeta.imageAlt}>
|
|
36
|
+
{/if}
|
|
37
|
+
<div>
|
|
38
|
+
<h3 class="text-start">
|
|
39
|
+
<a href={`https://turnipxenon.com/${pageMeta.relativeLink}`}>{pageMeta.title}</a>
|
|
40
|
+
</h3>
|
|
41
|
+
<p>Published: {pageMeta.datePublished}
|
|
42
|
+
{#if pageMeta.lastUpdated}
|
|
43
|
+
| Last updated: {pageMeta.lastUpdated}
|
|
44
|
+
{/if}
|
|
45
|
+
</p>
|
|
46
|
+
<p>{pageMeta.description}</p>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
{/each}
|
|
50
|
+
{:else}
|
|
51
|
+
{#each { length: 10 } as _}
|
|
52
|
+
<div class="placeholder"></div>
|
|
53
|
+
{/each}
|
|
54
|
+
{/if}
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<style>
|
|
59
|
+
.chum-bucket-item {
|
|
60
|
+
width: 100%;
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-direction: row;
|
|
63
|
+
align-items: flex-start;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.chum-bucket-image {
|
|
67
|
+
max-width: 10em;
|
|
68
|
+
height: auto;
|
|
69
|
+
margin-top: 0.5em;
|
|
70
|
+
margin-inline-end: 1em;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.chum-bucket {
|
|
74
|
+
margin-top: 2lh;
|
|
75
|
+
padding: 1.5lh 0;
|
|
76
|
+
width: 100%;
|
|
77
|
+
max-width: var(--container-3xl);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.chum-bucket-grid {
|
|
81
|
+
display: flex;
|
|
82
|
+
flex-direction: column;
|
|
83
|
+
margin-top: 0.5lh;
|
|
84
|
+
gap: 0.5lh;
|
|
85
|
+
}
|
|
86
|
+
</style>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ModeWatcher } from "mode-watcher";
|
|
3
|
+
import { Modals } from "svelte-modals";
|
|
4
|
+
import { page } from "$app/state";
|
|
5
|
+
import { locales, localizeHref } from "../../paraglide/runtime";
|
|
6
|
+
import "../../styles/global.css";
|
|
7
|
+
|
|
8
|
+
import "../../styles/app.css";
|
|
9
|
+
import { ToastProvider } from "@skeletonlabs/skeleton-svelte";
|
|
10
|
+
|
|
11
|
+
let { children } = $props();
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<Modals>
|
|
15
|
+
<!-- shown when any modal is opened -->
|
|
16
|
+
{#snippet backdrop({ close })}
|
|
17
|
+
<div
|
|
18
|
+
aria-hidden="true"
|
|
19
|
+
class="backdrop"
|
|
20
|
+
onclick={() => close()}
|
|
21
|
+
></div>
|
|
22
|
+
{/snippet}
|
|
23
|
+
</Modals>
|
|
24
|
+
<ModeWatcher defaultTheme="turnip" />
|
|
25
|
+
|
|
26
|
+
<ToastProvider>
|
|
27
|
+
{@render children()}
|
|
28
|
+
</ToastProvider>
|
|
29
|
+
|
|
30
|
+
<!--invisible ink-->
|
|
31
|
+
<div style="display:none">
|
|
32
|
+
{#each locales as locale (locale)}
|
|
33
|
+
<a href={localizeHref(page.url.pathname, { locale })}>{locale}</a>
|
|
34
|
+
{/each}
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<style>
|
|
38
|
+
.backdrop {
|
|
39
|
+
position: fixed;
|
|
40
|
+
z-index: 19;
|
|
41
|
+
top: 0;
|
|
42
|
+
bottom: 0;
|
|
43
|
+
right: 0;
|
|
44
|
+
left: 0;
|
|
45
|
+
background: rgba(0, 0, 0, 0.50);
|
|
46
|
+
backdrop-filter: blur(4px);
|
|
47
|
+
}
|
|
48
|
+
</style>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ConfirmationModalProps } from './props';
|
|
3
|
+
import { ModalBase } from '../../components';
|
|
4
|
+
import { ColorScheme, PinyaButton } from '../../elements';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
children,
|
|
8
|
+
confirm,
|
|
9
|
+
...props
|
|
10
|
+
}: ConfirmationModalProps = $props();
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<ModalBase {...props}>
|
|
14
|
+
<div class="prose-h2:mt-4 max-w-xl">
|
|
15
|
+
|
|
16
|
+
{@render children()}
|
|
17
|
+
|
|
18
|
+
<div class="actions">
|
|
19
|
+
<PinyaButton
|
|
20
|
+
onclick={() => {
|
|
21
|
+
confirm.onclick();
|
|
22
|
+
props.close();
|
|
23
|
+
}}
|
|
24
|
+
title={confirm.hoverOver ?? 'Ok'}
|
|
25
|
+
colorScheme={ColorScheme.Warning}
|
|
26
|
+
>
|
|
27
|
+
{confirm.text ?? 'Ok'}
|
|
28
|
+
</PinyaButton>
|
|
29
|
+
<PinyaButton
|
|
30
|
+
onclick={() => props.close()}
|
|
31
|
+
title="Close modal"
|
|
32
|
+
colorScheme={ColorScheme.Surface}
|
|
33
|
+
>
|
|
34
|
+
Close
|
|
35
|
+
</PinyaButton>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</ModalBase>
|
|
39
|
+
|
|
40
|
+
<style>
|
|
41
|
+
.actions {
|
|
42
|
+
display: flex;
|
|
43
|
+
flex-direction: row-reverse;
|
|
44
|
+
margin-top: 1.4lh;
|
|
45
|
+
gap: 1rem;
|
|
46
|
+
}
|
|
47
|
+
</style>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
import { m } from "../../../paraglide/messages";
|
|
4
|
+
|
|
5
|
+
import AresLogo from "../../../assets/characters/ares/ares_logo.webp";
|
|
6
|
+
import SettingsLogo from "../../../assets/icons/icon-settings.svg";
|
|
7
|
+
import RandomizedBackground from "../../components/randomized-background/RandomizedBackground.svelte";
|
|
8
|
+
import { modals } from "svelte-modals";
|
|
9
|
+
import GeneralSettingsModal from "../../modules/modals/general-settings/GeneralSettingsModal.svelte";
|
|
10
|
+
import { localizeHref } from "../../../paraglide/runtime";
|
|
11
|
+
import { appState } from "..";
|
|
12
|
+
|
|
13
|
+
let {
|
|
14
|
+
children,
|
|
15
|
+
appBarLead = $bindable(),
|
|
16
|
+
footer
|
|
17
|
+
}: {
|
|
18
|
+
children: Snippet
|
|
19
|
+
appBarLead?: Snippet
|
|
20
|
+
footer?: Snippet
|
|
21
|
+
} = $props();
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
const onSettingsClick = () => {
|
|
25
|
+
modals.open(GeneralSettingsModal);
|
|
26
|
+
};
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
{#snippet header(extraClass: string)}
|
|
30
|
+
<header class={`bg-surface-100-900 shadow-md ${extraClass}`}>
|
|
31
|
+
|
|
32
|
+
{#if appState.lead}
|
|
33
|
+
<div class="title-space">
|
|
34
|
+
{@render appState.lead()}
|
|
35
|
+
</div>
|
|
36
|
+
{:else if appBarLead}
|
|
37
|
+
<div class="title-space">
|
|
38
|
+
{@render appBarLead()}
|
|
39
|
+
</div>
|
|
40
|
+
{:else }
|
|
41
|
+
<button onclick={() => { location.href = localizeHref('/'); }} title="Home">
|
|
42
|
+
<img
|
|
43
|
+
aria-hidden="true"
|
|
44
|
+
alt=""
|
|
45
|
+
class="ares-logo"
|
|
46
|
+
src={AresLogo}
|
|
47
|
+
/>
|
|
48
|
+
</button>
|
|
49
|
+
<div class="title-space text-primary-900-100 font-bold">
|
|
50
|
+
{#if appState.title}
|
|
51
|
+
<span class="fake-h3">{appState.title}</span>
|
|
52
|
+
{/if}
|
|
53
|
+
</div>
|
|
54
|
+
{/if}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
<button
|
|
58
|
+
title={m.settings()}
|
|
59
|
+
aria-label={m.settings()}
|
|
60
|
+
class="btn-icon preset-outlined-primary-500 hover:brightness-125"
|
|
61
|
+
onclick={onSettingsClick}
|
|
62
|
+
>
|
|
63
|
+
<img class="icon" src={SettingsLogo} aria-hidden="true" alt="">
|
|
64
|
+
</button>
|
|
65
|
+
</header>
|
|
66
|
+
{/snippet}
|
|
67
|
+
|
|
68
|
+
{@render header('hidden shadow-none w-full')}
|
|
69
|
+
{@render header('fixed z-15 w-[105vw]')}
|
|
70
|
+
|
|
71
|
+
<RandomizedBackground enabled={true} />
|
|
72
|
+
|
|
73
|
+
<div class="default-page-container">
|
|
74
|
+
{@render children?.()}
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
{#if footer}
|
|
78
|
+
{@render footer()}
|
|
79
|
+
{:else }
|
|
80
|
+
<div aria-hidden="true" class="footer-space"></div>
|
|
81
|
+
{/if}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
<style>
|
|
85
|
+
header {
|
|
86
|
+
top: 0;
|
|
87
|
+
display: flex;
|
|
88
|
+
padding: 1rem 1rem 1rem calc(1rem + 5vw);
|
|
89
|
+
align-items: center;
|
|
90
|
+
transform: translateX(-5vw);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.default-page-container {
|
|
94
|
+
display: flex;
|
|
95
|
+
justify-content: center;
|
|
96
|
+
align-items: center;
|
|
97
|
+
margin: 4rem 1rem 0 1rem;
|
|
98
|
+
flex-direction: column;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.ares-logo {
|
|
102
|
+
object-fit: contain;
|
|
103
|
+
height: 2rem;
|
|
104
|
+
margin: 0 1rem 0 0;
|
|
105
|
+
filter: var(--filter-ares-logo);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.title-space {
|
|
109
|
+
flex-grow: 1;
|
|
110
|
+
white-space: nowrap;
|
|
111
|
+
overflow: hidden;
|
|
112
|
+
text-overflow: ellipsis;
|
|
113
|
+
padding-inline: 1em;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.footer-space {
|
|
117
|
+
width: 100%;
|
|
118
|
+
height: calc(var(--dialog-box-height) + 3.5lh);
|
|
119
|
+
}
|
|
120
|
+
</style>
|
|
@@ -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 Component: import("svelte").Component<$$ComponentProps, {}, "appBarLead">;
|
|
8
|
+
type Component = ReturnType<typeof Component>;
|
|
9
|
+
export default Component;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ProjectGroup, SnippetMeta } from "../index";
|
|
3
|
+
import { PinyaCard } from "../../elements/index";
|
|
4
|
+
|
|
5
|
+
let {
|
|
6
|
+
title,
|
|
7
|
+
entryList
|
|
8
|
+
}: ProjectGroup = $props();
|
|
9
|
+
|
|
10
|
+
const isSpecial = entryList.length % 3 === 1;
|
|
11
|
+
|
|
12
|
+
let normalUiList: SnippetMeta[] = isSpecial
|
|
13
|
+
? [...entryList.slice(0, -4)]
|
|
14
|
+
: [...entryList];
|
|
15
|
+
let overflowUiList: SnippetMeta[] = isSpecial
|
|
16
|
+
? [...entryList.slice(-4)]
|
|
17
|
+
: [];
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
// <!--todo: implement in seaweedlayout #migration-->
|
|
21
|
+
let inputValue = $state("");
|
|
22
|
+
let styleStr = $state("");
|
|
23
|
+
$effect(() => {
|
|
24
|
+
const termList = inputValue.split(",");
|
|
25
|
+
|
|
26
|
+
const chipList: string[] = [];
|
|
27
|
+
termList.forEach((_, idx) => {
|
|
28
|
+
termList[idx] = `.qt-${termList[idx]}`;
|
|
29
|
+
chipList.push(`.text-chip${termList[idx]}`);
|
|
30
|
+
});
|
|
31
|
+
styleStr = `<style>
|
|
32
|
+
${termList.join(", ")} {
|
|
33
|
+
font-weight: bold
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
${chipList.join(", ")} {
|
|
37
|
+
background-color: var(--color-secondary-500) /* oklch(55.6% 0 0deg) = #737373 */;
|
|
38
|
+
color: var(--color-secondary-contrast-500) /* var(--color-secondary-contrast-light) */;
|
|
39
|
+
}
|
|
40
|
+
</style>`;
|
|
41
|
+
});
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<div class="mt-8 flex flex-col items-center">
|
|
45
|
+
<PinyaCard widthClass="w-full" className="mb-8">
|
|
46
|
+
<h2>{title}</h2>
|
|
47
|
+
</PinyaCard>
|
|
48
|
+
<div class="normal-project-container">
|
|
49
|
+
{#each normalUiList as ui (ui.key)}
|
|
50
|
+
{@render ui.component({})}
|
|
51
|
+
{/each}
|
|
52
|
+
</div>
|
|
53
|
+
<div class="overflow-project-container">
|
|
54
|
+
{#each overflowUiList as ui (ui.key)}
|
|
55
|
+
{@render ui.component({})}
|
|
56
|
+
{/each}
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<!--todo: implement in seaweedlayout #migration-->
|
|
61
|
+
<!--{@html styleStr}-->
|
|
62
|
+
|
|
63
|
+
<!-- Force tailwind to pickup some classes -->
|
|
64
|
+
<div class="hidden rounded-2xl hover:brightness-110"></div>
|
|
65
|
+
|
|
66
|
+
<style>
|
|
67
|
+
.normal-project-container {
|
|
68
|
+
display: flex;
|
|
69
|
+
flex-wrap: wrap;
|
|
70
|
+
gap: 2rem;
|
|
71
|
+
margin: auto;
|
|
72
|
+
/* 3 containers + 2 gaps + extra rem */
|
|
73
|
+
max-width: calc((28rem * 3) + 5rem);
|
|
74
|
+
justify-content: center;
|
|
75
|
+
margin-bottom: 2rem;
|
|
76
|
+
align-items: start;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.overflow-project-container {
|
|
80
|
+
display: flex;
|
|
81
|
+
flex-wrap: wrap;
|
|
82
|
+
gap: 2rem;
|
|
83
|
+
margin: auto;
|
|
84
|
+
/* 2 containers + 1 gap + extra rem */
|
|
85
|
+
max-width: calc((28rem * 2) + 3rem);
|
|
86
|
+
justify-content: center;
|
|
87
|
+
align-items: start;
|
|
88
|
+
}
|
|
89
|
+
</style>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ProjectGroup, SnippetMeta } from "../index";
|
|
3
|
+
import ProjectGroupConfig from "./ProjectGroupConfig.svelte";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
layout: ProjectGroup[];
|
|
7
|
+
orderUrl: string;
|
|
8
|
+
allEntries: SnippetMeta[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
layout = $bindable(),
|
|
13
|
+
orderUrl = $bindable(),
|
|
14
|
+
allEntries
|
|
15
|
+
}: Props = $props();
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<br>
|
|
19
|
+
<h3>Site ordering</h3>
|
|
20
|
+
<blockquote>Sorry! This part of the website is still WIP, but here it is anyway. As long as it functions</blockquote>
|
|
21
|
+
|
|
22
|
+
<!-- formatting: group1:entry1|entry2,group2:entry3
|
|
23
|
+
: <= separates the group header, the entries, and the class
|
|
24
|
+
| <= separates each entries
|
|
25
|
+
, <= separates each group
|
|
26
|
+
-->
|
|
27
|
+
<div class="advanced-setting-list">
|
|
28
|
+
{#each layout as group, groupIndex (group.key)}
|
|
29
|
+
<ProjectGroupConfig
|
|
30
|
+
bind:layout={layout}
|
|
31
|
+
bind:orderUrl={orderUrl}
|
|
32
|
+
{allEntries}
|
|
33
|
+
{group}
|
|
34
|
+
{groupIndex}
|
|
35
|
+
/>
|
|
36
|
+
{/each}
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<style>
|
|
40
|
+
.advanced-setting-list {
|
|
41
|
+
display: flex;
|
|
42
|
+
flex-direction: column;
|
|
43
|
+
justify-content: center;
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProjectGroup, SnippetMeta } from "../index";
|
|
2
|
+
interface Props {
|
|
3
|
+
layout: ProjectGroup[];
|
|
4
|
+
orderUrl: string;
|
|
5
|
+
allEntries: SnippetMeta[];
|
|
6
|
+
}
|
|
7
|
+
declare const EntryOrderConfig2: import("svelte").Component<Props, {}, "orderUrl" | "layout">;
|
|
8
|
+
type EntryOrderConfig2 = ReturnType<typeof EntryOrderConfig2>;
|
|
9
|
+
export default EntryOrderConfig2;
|