@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.
Files changed (223) hide show
  1. package/dist/assets/icons/icon-check-dark-contrast.svg +1 -0
  2. package/dist/assets/icons/icon-check-light-contrast.svg +1 -0
  3. package/dist/assets/icons/icon-contrast.svg +1 -0
  4. package/dist/assets/icons/icon-copy-dark-contrast.svg +1 -0
  5. package/dist/assets/icons/icon-copy-light-contrast.svg +1 -0
  6. package/dist/assets/icons/icon-dark-mode.svg +1 -0
  7. package/dist/assets/icons/icon-light-mode.svg +1 -0
  8. package/dist/assets/icons/icon-settings.svg +1 -0
  9. package/dist/components/Card.svelte +43 -41
  10. package/dist/components/Card.svelte.d.ts +11 -24
  11. package/dist/components/CarouselElement.svelte +15 -8
  12. package/dist/components/CarouselElement.svelte.d.ts +7 -18
  13. package/dist/components/ElementVisbilityDetector.svelte +23 -14
  14. package/dist/components/ElementVisbilityDetector.svelte.d.ts +6 -17
  15. package/dist/components/LazyAsset.svelte +93 -65
  16. package/dist/components/LazyAsset.svelte.d.ts +9 -19
  17. package/dist/components/PineappleSlideToggle.svelte +28 -10
  18. package/dist/components/PineappleSlideToggle.svelte.d.ts +9 -19
  19. package/dist/components/RandomizedBackground.svelte +46 -27
  20. package/dist/components/RandomizedBackground.svelte.d.ts +5 -15
  21. package/dist/components/RandomizedImage.svelte +15 -8
  22. package/dist/components/RandomizedImage.svelte.d.ts +6 -16
  23. package/dist/components/StickyElement.svelte +25 -16
  24. package/dist/components/StickyElement.svelte.d.ts +6 -17
  25. package/dist/components/ToggleableContent.svelte +88 -59
  26. package/dist/components/ToggleableContent.svelte.d.ts +6 -17
  27. package/dist/components/blog_template/BlogTemplate.svelte +45 -25
  28. package/dist/components/blog_template/BlogTemplate.svelte.d.ts +9 -20
  29. package/dist/components/blog_template/BlogTemplateInner.svelte +11 -3
  30. package/dist/components/blog_template/BlogTemplateInner.svelte.d.ts +6 -17
  31. package/dist/components/chip/Chip.svelte +33 -57
  32. package/dist/components/chip/Chip.svelte.d.ts +7 -18
  33. package/dist/components/combo_box/ComboBox.svelte +10 -4
  34. package/dist/components/combo_box/ComboBox.svelte.d.ts +6 -16
  35. package/dist/components/combo_box/ComboBoxWithButton.svelte +16 -9
  36. package/dist/components/combo_box/ComboBoxWithButton.svelte.d.ts +7 -17
  37. package/dist/components/combo_box/combo-box.postcss +2 -2
  38. package/dist/components/dialog_manager/DialogManager.d.ts +0 -1
  39. package/dist/components/dialog_manager/DialogManagerStore.d.ts +0 -1
  40. package/dist/components/dialog_manager/DialogManagerStore.js +1 -1
  41. package/dist/components/dialog_overlay/DialogOverlay.svelte +42 -34
  42. package/dist/components/dialog_overlay/DialogOverlay.svelte.d.ts +3 -14
  43. package/dist/components/index.d.ts +1 -1
  44. package/dist/components/index.js +1 -1
  45. package/dist/components/layouts/SeaweedBaseLayout.svelte +80 -43
  46. package/dist/components/layouts/SeaweedBaseLayout.svelte.d.ts +8 -21
  47. package/dist/components/navigation_component/NavigationComponent.svelte +52 -141
  48. package/dist/components/navigation_component/NavigationComponent.svelte.d.ts +17 -26
  49. package/dist/components/navigation_component/NavigationControl.svelte +52 -103
  50. package/dist/components/navigation_component/NavigationControl.svelte.d.ts +7 -17
  51. package/dist/components/overrideable_meta/OverridableMeta.svelte +37 -22
  52. package/dist/components/overrideable_meta/OverridableMeta.svelte.d.ts +9 -19
  53. package/dist/components/pineapple/PineappleBaseLayout.svelte +132 -188
  54. package/dist/components/pineapple/PineappleBaseLayout.svelte.d.ts +6 -17
  55. package/dist/components/pineapple/toast/DefaultToastBody.svelte +14 -16
  56. package/dist/components/pineapple/toast/DefaultToastBody.svelte.d.ts +7 -17
  57. package/dist/components/pineapple/toast/Toast.d.ts +0 -1
  58. package/dist/components/pineapple/toast/Toast.svelte +92 -64
  59. package/dist/components/pineapple/toast/Toast.svelte.d.ts +3 -14
  60. package/dist/components/pineapple/toast/custom-toast/TestCustomToast.svelte.d.ts +22 -19
  61. package/dist/paraglide/messages/_index.d.ts +2 -0
  62. package/dist/paraglide/messages/_index.js +3 -0
  63. package/dist/paraglide/messages/example_message.d.ts +5 -0
  64. package/dist/paraglide/messages/example_message.js +39 -0
  65. package/dist/paraglide/messages/settings.d.ts +3 -0
  66. package/dist/paraglide/messages/settings.js +38 -0
  67. package/dist/paraglide/messages.d.ts +2 -0
  68. package/dist/paraglide/messages.js +4 -0
  69. package/dist/paraglide/registry.d.ts +21 -0
  70. package/dist/paraglide/registry.js +31 -0
  71. package/dist/paraglide/runtime.d.ts +400 -0
  72. package/dist/paraglide/runtime.js +1060 -0
  73. package/dist/paraglide/server.d.ts +64 -0
  74. package/dist/paraglide/server.js +161 -0
  75. package/dist/scripts/util/FileManagement.d.ts +1 -1
  76. package/dist/store.d.ts +0 -1
  77. package/dist/styles/app.css +144 -0
  78. package/dist/styles/turnip-theme.css +327 -0
  79. package/dist/template/seaweed/CreateUrlForm.svelte +59 -41
  80. package/dist/template/seaweed/CreateUrlForm.svelte.d.ts +8 -15
  81. package/dist/template/seaweed/SeaweedTemplate.svelte +244 -195
  82. package/dist/template/seaweed/SeaweedTemplate.svelte.d.ts +28 -25
  83. package/dist/template/seaweed/ToastSettings.d.ts +15 -0
  84. package/dist/template/seaweed/ToastSettings.js +1 -0
  85. package/dist/template/seaweed/entries/ChefWings.svelte +37 -39
  86. package/dist/template/seaweed/entries/ChefWings.svelte.d.ts +5 -15
  87. package/dist/template/seaweed/entries/CustomizedYarnspinner.svelte +32 -24
  88. package/dist/template/seaweed/entries/CustomizedYarnspinner.svelte.d.ts +5 -15
  89. package/dist/template/seaweed/entries/Hepcat.svelte +58 -49
  90. package/dist/template/seaweed/entries/Hepcat.svelte.d.ts +5 -15
  91. package/dist/template/seaweed/entries/Pengi.svelte +51 -43
  92. package/dist/template/seaweed/entries/Pengi.svelte.d.ts +5 -15
  93. package/dist/template/seaweed/entries/Soulwork.svelte +44 -36
  94. package/dist/template/seaweed/entries/Soulwork.svelte.d.ts +5 -15
  95. package/dist/template/seaweed/entries/ThisWebpage.svelte +47 -38
  96. package/dist/template/seaweed/entries/ThisWebpage.svelte.d.ts +5 -15
  97. package/dist/template/seaweed/entries/WorkExperience.svelte +109 -92
  98. package/dist/template/seaweed/entries/WorkExperience.svelte.d.ts +6 -16
  99. package/dist/template/seaweed/entries/Workset.svelte +51 -42
  100. package/dist/template/seaweed/entries/Workset.svelte.d.ts +5 -15
  101. package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte +169 -259
  102. package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte.d.ts +10 -21
  103. package/dist/template/seaweed/seaweed.postcss +1 -9
  104. package/dist/{theme.postcss → theme.css} +1 -4
  105. package/dist/ui/components/FourPartCard.svelte +47 -0
  106. package/dist/ui/components/FourPartCard.svelte.d.ts +10 -0
  107. package/dist/ui/components/ModalBase.svelte +75 -0
  108. package/dist/ui/components/ModalBase.svelte.d.ts +8 -0
  109. package/dist/ui/components/SocialSection.svelte +87 -0
  110. package/dist/ui/components/SocialSection.svelte.d.ts +9 -0
  111. package/dist/ui/components/index.d.ts +3 -0
  112. package/dist/ui/components/index.js +3 -0
  113. package/dist/ui/components/randomized-background/RandomizedBackground.svelte +87 -0
  114. package/dist/ui/components/randomized-background/RandomizedBackground.svelte.d.ts +6 -0
  115. package/dist/ui/components/randomized-background/RandomizedImage.svelte +42 -0
  116. package/dist/ui/components/randomized-background/RandomizedImage.svelte.d.ts +7 -0
  117. package/dist/ui/elements/CodeBlock/CodeBlock.svelte +65 -0
  118. package/dist/ui/elements/CodeBlock/CodeBlock.svelte.d.ts +5 -0
  119. package/dist/ui/elements/CodeBlock/CodeBlockProps.d.ts +11 -0
  120. package/dist/ui/elements/CodeBlock/CodeBlockProps.js +1 -0
  121. package/dist/ui/elements/CodeBlock/index.d.ts +2 -0
  122. package/dist/ui/elements/CodeBlock/index.js +2 -0
  123. package/dist/ui/elements/ColorScheme.d.ts +10 -0
  124. package/dist/ui/elements/ColorScheme.js +11 -0
  125. package/dist/ui/elements/GeneralUIProps.d.ts +12 -0
  126. package/dist/ui/elements/GeneralUIProps.js +1 -0
  127. package/dist/ui/elements/ImageIcon.svelte +54 -0
  128. package/dist/ui/elements/ImageIcon.svelte.d.ts +6 -0
  129. package/dist/ui/elements/OnBackground.d.ts +3 -0
  130. package/dist/ui/elements/OnBackground.js +4 -0
  131. package/dist/ui/elements/PineappleSwitch.svelte +29 -0
  132. package/dist/ui/elements/PineappleSwitch.svelte.d.ts +10 -0
  133. package/dist/ui/elements/TextLink.svelte +17 -0
  134. package/dist/ui/elements/TextLink.svelte.d.ts +8 -0
  135. package/dist/ui/elements/WrapperProps.d.ts +4 -0
  136. package/dist/ui/elements/WrapperProps.js +1 -0
  137. package/dist/ui/elements/index.d.ts +10 -0
  138. package/dist/ui/elements/index.js +10 -0
  139. package/dist/ui/elements/pinya-button/component.svelte +47 -0
  140. package/dist/ui/elements/pinya-button/component.svelte.d.ts +4 -0
  141. package/dist/ui/elements/pinya-button/index.d.ts +2 -0
  142. package/dist/ui/elements/pinya-button/index.js +2 -0
  143. package/dist/ui/elements/pinya-button/props.d.ts +13 -0
  144. package/dist/ui/elements/pinya-button/props.js +6 -0
  145. package/dist/ui/elements/pinya-card/component.svelte +21 -0
  146. package/dist/ui/elements/pinya-card/component.svelte.d.ts +7 -0
  147. package/dist/ui/elements/pinya-card/index.d.ts +2 -0
  148. package/dist/ui/elements/pinya-card/index.js +2 -0
  149. package/dist/ui/elements/pinya-card/props.d.ts +10 -0
  150. package/dist/ui/elements/pinya-card/props.js +1 -0
  151. package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte +35 -0
  152. package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte.d.ts +18 -0
  153. package/dist/ui/elements/pinya-combobox/PinyaComboboxProps.d.ts +18 -0
  154. package/dist/ui/elements/pinya-combobox/PinyaComboboxProps.js +1 -0
  155. package/dist/ui/elements/text-chip/TextChip.svelte +15 -0
  156. package/dist/ui/elements/text-chip/TextChip.svelte.d.ts +4 -0
  157. package/dist/ui/elements/text-chip/TextChipProps.d.ts +4 -0
  158. package/dist/ui/elements/text-chip/TextChipProps.js +1 -0
  159. package/dist/ui/elements/text-chip/index.d.ts +2 -0
  160. package/dist/ui/elements/text-chip/index.js +2 -0
  161. package/dist/ui/modules/index.d.ts +2 -0
  162. package/dist/ui/modules/index.js +2 -0
  163. package/dist/ui/modules/modals/general-settings/GeneralSettingsModal.svelte +110 -0
  164. package/dist/ui/modules/modals/general-settings/GeneralSettingsModal.svelte.d.ts +4 -0
  165. package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte +38 -0
  166. package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte.d.ts +3 -0
  167. package/dist/ui/modules/projects/Hepcat.svelte +71 -0
  168. package/dist/ui/modules/projects/Hepcat.svelte.d.ts +22 -0
  169. package/dist/ui/modules/projects/Pengi.svelte +60 -0
  170. package/dist/ui/modules/projects/Pengi.svelte.d.ts +22 -0
  171. package/dist/ui/modules/projects/Soulwork.svelte +55 -0
  172. package/dist/ui/modules/projects/Soulwork.svelte.d.ts +22 -0
  173. package/dist/ui/modules/projects/ThisWebpage.svelte +62 -0
  174. package/dist/ui/modules/projects/ThisWebpage.svelte.d.ts +22 -0
  175. package/dist/ui/modules/projects/index.d.ts +4 -0
  176. package/dist/ui/modules/projects/index.js +4 -0
  177. package/dist/ui/modules/seaweed/ChumBucket.svelte +86 -0
  178. package/dist/ui/modules/seaweed/ChumBucket.svelte.d.ts +3 -0
  179. package/dist/ui/modules/seaweed/index.d.ts +3 -0
  180. package/dist/ui/modules/seaweed/index.js +4 -0
  181. package/dist/ui/templates/PinyaBase.svelte +48 -0
  182. package/dist/ui/templates/PinyaBase.svelte.d.ts +7 -0
  183. package/dist/ui/templates/confirmation-modal/component.svelte +47 -0
  184. package/dist/ui/templates/confirmation-modal/component.svelte.d.ts +4 -0
  185. package/dist/ui/templates/confirmation-modal/index.d.ts +2 -0
  186. package/dist/ui/templates/confirmation-modal/index.js +2 -0
  187. package/dist/ui/templates/confirmation-modal/props.d.ts +10 -0
  188. package/dist/ui/templates/confirmation-modal/props.js +1 -0
  189. package/dist/ui/templates/index.d.ts +4 -0
  190. package/dist/ui/templates/index.js +4 -0
  191. package/dist/ui/templates/pinya-page-layout/component.svelte +120 -0
  192. package/dist/ui/templates/pinya-page-layout/component.svelte.d.ts +9 -0
  193. package/dist/ui/templates/pinya-page-layout/index.d.ts +2 -0
  194. package/dist/ui/templates/pinya-page-layout/index.js +2 -0
  195. package/dist/ui/templates/pinya-page-layout/runes.svelte.d.ts +7 -0
  196. package/dist/ui/templates/pinya-page-layout/runes.svelte.js +3 -0
  197. package/dist/ui/templates/seaweed-layout/EntryGroup.svelte +89 -0
  198. package/dist/ui/templates/seaweed-layout/EntryGroup.svelte.d.ts +4 -0
  199. package/dist/ui/templates/seaweed-layout/EntryOrderConfig2.svelte +45 -0
  200. package/dist/ui/templates/seaweed-layout/EntryOrderConfig2.svelte.d.ts +9 -0
  201. package/dist/ui/templates/seaweed-layout/ProjectComponentProps.d.ts +4 -0
  202. package/dist/ui/templates/seaweed-layout/ProjectComponentProps.js +1 -0
  203. package/dist/ui/templates/seaweed-layout/ProjectGroupConfig.svelte +316 -0
  204. package/dist/ui/templates/seaweed-layout/ProjectGroupConfig.svelte.d.ts +14 -0
  205. package/dist/ui/templates/seaweed-layout/SeaweedLayout.md +4 -0
  206. package/dist/ui/templates/seaweed-layout/SeaweedLayout.svelte +196 -0
  207. package/dist/ui/templates/seaweed-layout/SeaweedLayout.svelte.d.ts +4 -0
  208. package/dist/ui/templates/seaweed-layout/index.d.ts +4 -0
  209. package/dist/ui/templates/seaweed-layout/index.js +4 -0
  210. package/dist/ui/templates/seaweed-layout/props.d.ts +25 -0
  211. package/dist/ui/templates/seaweed-layout/props.js +1 -0
  212. package/dist/util/util.d.ts +1 -0
  213. package/dist/util/util.js +9 -0
  214. package/package.json +37 -20
  215. package/src/lib/styles/app.css +144 -0
  216. package/src/lib/theme.css +114 -0
  217. package/dist/app.postcss +0 -212
  218. package/dist/components/SocialSection.svelte +0 -166
  219. package/dist/components/SocialSection.svelte.d.ts +0 -31
  220. package/dist/postcss.d.ts +0 -3
  221. package/dist/styles/DefaultGridContainer.css +0 -61
  222. package/dist/template/seaweed/ChumBucket.svelte +0 -87
  223. 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,4 @@
1
+ export * as Hepcat from "./Hepcat.svelte";
2
+ export * as Pengi from "./Pengi.svelte";
3
+ export * as Soulwork from "./Soulwork.svelte";
4
+ export * as ThisWebpage from "./ThisWebpage.svelte";
@@ -0,0 +1,4 @@
1
+ export * as Hepcat from "./Hepcat.svelte";
2
+ export * as Pengi from "./Pengi.svelte";
3
+ export * as Soulwork from "./Soulwork.svelte";
4
+ export * as ThisWebpage from "./ThisWebpage.svelte";
@@ -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,3 @@
1
+ declare const ChumBucket: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type ChumBucket = ReturnType<typeof ChumBucket>;
3
+ export default ChumBucket;
@@ -0,0 +1,3 @@
1
+ export declare const Seaweed: {
2
+ ChumBucket: import("svelte").Component<Record<string, never>, {}, "">;
3
+ };
@@ -0,0 +1,4 @@
1
+ import { default as ChumBucket } from "./ChumBucket.svelte";
2
+ export const Seaweed = {
3
+ ChumBucket
4
+ };
@@ -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,7 @@
1
+ import "../../styles/global.css";
2
+ import "../../styles/app.css";
3
+ declare const PinyaBase: import("svelte").Component<{
4
+ children: any;
5
+ }, {}, "">;
6
+ type PinyaBase = ReturnType<typeof PinyaBase>;
7
+ export default PinyaBase;
@@ -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,4 @@
1
+ import type { ConfirmationModalProps } from './props';
2
+ declare const Component: import("svelte").Component<ConfirmationModalProps, {}, "">;
3
+ type Component = ReturnType<typeof Component>;
4
+ export default Component;
@@ -0,0 +1,2 @@
1
+ export { default as ConfirmationModal } from "./component.svelte";
2
+ export * from "./props";
@@ -0,0 +1,2 @@
1
+ export { default as ConfirmationModal } from "./component.svelte";
2
+ export * from "./props";
@@ -0,0 +1,10 @@
1
+ import type { ModalProps } from 'svelte-modals';
2
+ import type { Snippet } from 'svelte';
3
+ export interface ConfirmationModalProps extends ModalProps {
4
+ children: Snippet;
5
+ confirm: {
6
+ onclick: () => void;
7
+ hoverOver?: string;
8
+ text?: string;
9
+ };
10
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export { default as PinyaBase } from "./PinyaBase.svelte";
2
+ export * from "./pinya-page-layout";
3
+ export * from "./seaweed-layout";
4
+ export * from "./confirmation-modal";
@@ -0,0 +1,4 @@
1
+ export { default as PinyaBase } from "./PinyaBase.svelte";
2
+ export * from "./pinya-page-layout";
3
+ export * from "./seaweed-layout";
4
+ export * from "./confirmation-modal";
@@ -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,2 @@
1
+ export { default as PinyaPageLayout } from "./component.svelte";
2
+ export * from "./runes.svelte";
@@ -0,0 +1,2 @@
1
+ export { default as PinyaPageLayout } from "./component.svelte";
2
+ export * from "./runes.svelte";
@@ -0,0 +1,7 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface AppStore {
3
+ title: string;
4
+ lead?: Snippet;
5
+ }
6
+ export declare const appState: AppStore;
7
+ export {};
@@ -0,0 +1,3 @@
1
+ export const appState = $state({
2
+ title: ''
3
+ });
@@ -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,4 @@
1
+ import type { ProjectGroup } from "../index";
2
+ declare const EntryGroup: import("svelte").Component<ProjectGroup, {}, "">;
3
+ type EntryGroup = ReturnType<typeof EntryGroup>;
4
+ export default EntryGroup;
@@ -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;