@turnipxenon/pineapple 3.0.0 → 3.1.0-alpha.10

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 (101) hide show
  1. package/README.md +103 -0
  2. package/dist/components/RandomizedBackground.svelte +4 -0
  3. package/dist/components/RandomizedBackground.svelte.d.ts +1 -0
  4. package/dist/components/blog_template/BlogTemplate.svelte +15 -18
  5. package/dist/components/blog_template/BlogTemplate.svelte.d.ts +3 -2
  6. package/dist/components/blog_template/BlogTemplateInner.svelte +1 -1
  7. package/dist/components/blog_template/BlogTemplateInner.svelte.d.ts +1 -1
  8. package/dist/components/dialog_manager/DialogManager.d.ts +3 -2
  9. package/dist/components/dialog_manager/DialogManager.js +6 -4
  10. package/dist/components/dialog_manager/DialogProcessor.d.ts +4 -2
  11. package/dist/components/dialog_manager/DialogProcessor.js +23 -18
  12. package/dist/components/dialog_manager/IDialogManager.d.ts +1 -2
  13. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.d.ts +2 -2
  14. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.js +4 -5
  15. package/dist/components/dialog_overlay/DialogOverlay.svelte +149 -51
  16. package/dist/components/layouts/SeaweedBaseLayout.svelte +0 -6
  17. package/dist/components/pineapple/PineappleBaseLayout.svelte +3 -23
  18. package/dist/index.d.ts +2 -2
  19. package/dist/index.js +2 -2
  20. package/dist/scripts/pineapple_fiber/PineappleWeaver.js +1 -2
  21. package/dist/styles/app.css +11 -14
  22. package/dist/styles/turnip-theme.css +17 -7
  23. package/dist/ui/components/ModalBase.svelte +74 -74
  24. package/dist/ui/components/SocialSection.svelte +2 -1
  25. package/dist/ui/components/accordion/PinyaAccordion.svelte +20 -20
  26. package/dist/ui/components/accordion/PinyaAccordionItem.svelte +28 -28
  27. package/dist/ui/components/randomized-background/RandomizedBackground.svelte +9 -1
  28. package/dist/ui/elements/CodeBlock/CodeBlock.svelte +65 -64
  29. package/dist/ui/elements/CodeBlock/CodeBlockProps.d.ts +1 -1
  30. package/dist/ui/elements/ImageIcon.svelte +53 -53
  31. package/dist/ui/elements/ImageIcon.svelte.d.ts +1 -1
  32. package/dist/ui/elements/PinyaAnchorButton/PinyaAnchorButton.svelte +25 -0
  33. package/dist/ui/elements/PinyaAnchorButton/PinyaAnchorButton.svelte.d.ts +4 -0
  34. package/dist/ui/elements/PinyaAnchorButton/PinyaAnchorButtonProps.d.ts +4 -0
  35. package/dist/ui/elements/PinyaAnchorButton/index.d.ts +2 -0
  36. package/dist/ui/elements/PinyaAnchorButton/index.js +2 -0
  37. package/dist/ui/elements/PinyaButton/PinyaButton.svelte +8 -31
  38. package/dist/ui/elements/PinyaButton/PinyaButton.svelte.d.ts +1 -1
  39. package/dist/ui/elements/PinyaButton/PinyaButtonProps.d.ts +4 -14
  40. package/dist/ui/elements/PinyaButton/PinyaButtonProps.js +1 -6
  41. package/dist/ui/elements/PinyaButtonCommon/ButtonVariant.d.ts +5 -0
  42. package/dist/ui/elements/PinyaButtonCommon/ButtonVariant.js +6 -0
  43. package/dist/ui/elements/PinyaButtonCommon/PinyaButtonCommonProps.d.ts +8 -0
  44. package/dist/ui/elements/PinyaButtonCommon/PinyaButtonCommonProps.js +2 -0
  45. package/dist/ui/elements/PinyaButtonCommon/createButtonClass.d.ts +2 -0
  46. package/dist/ui/elements/PinyaButtonCommon/createButtonClass.js +31 -0
  47. package/dist/ui/elements/PinyaButtonCommon/index.d.ts +3 -0
  48. package/dist/ui/elements/PinyaButtonCommon/index.js +3 -0
  49. package/dist/ui/elements/PinyaCard/PinyaCard.svelte +30 -0
  50. package/dist/ui/elements/PinyaCard/PinyaCard.svelte.d.ts +7 -0
  51. package/dist/ui/elements/{pinya-card/props.d.ts → PinyaCard/PinyaCardProps.d.ts} +1 -0
  52. package/dist/ui/elements/PinyaCard/PinyaCardProps.js +1 -0
  53. package/dist/ui/elements/PinyaCard/index.d.ts +2 -0
  54. package/dist/ui/elements/PinyaCard/index.js +2 -0
  55. package/dist/ui/elements/Placeholder.svelte +17 -17
  56. package/dist/ui/elements/TextLink.svelte +16 -16
  57. package/dist/ui/elements/index.d.ts +7 -5
  58. package/dist/ui/elements/index.js +9 -5
  59. package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte +34 -34
  60. package/dist/ui/elements/text-chip/TextChip.svelte +14 -14
  61. package/dist/{components/navigation_component → ui/modules/NavigationMenu}/NavigationControl.svelte +24 -20
  62. package/dist/{components/navigation_component/NavigationComponent.svelte → ui/modules/NavigationMenu/NavigationMenu.svelte} +69 -43
  63. package/dist/{components/navigation_component/NavigationComponent.svelte.d.ts → ui/modules/NavigationMenu/NavigationMenu.svelte.d.ts} +6 -6
  64. package/dist/{components/navigation_component → ui/modules/NavigationMenu}/PageMeta.d.ts +4 -4
  65. package/dist/ui/modules/NavigationMenu/index.d.ts +2 -0
  66. package/dist/ui/modules/NavigationMenu/index.js +2 -0
  67. package/dist/ui/modules/index.d.ts +1 -1
  68. package/dist/ui/modules/index.js +1 -1
  69. package/dist/ui/modules/modals/general-settings/GeneralSettingsModal.svelte +109 -109
  70. package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte +42 -42
  71. package/dist/ui/modules/projects/Hepcat.svelte +1 -1
  72. package/dist/ui/modules/projects/Pengi.svelte +61 -61
  73. package/dist/ui/modules/projects/Soulwork.svelte +1 -1
  74. package/dist/ui/modules/projects/ThisWebpage.svelte +11 -9
  75. package/dist/ui/templates/PinyaPageLayout/PinyaPageLayout.svelte +7 -3
  76. package/dist/ui/templates/PinyaPageLayout/runes.svelte.d.ts +3 -0
  77. package/dist/ui/templates/PinyaPageLayout/runes.svelte.js +1 -0
  78. package/dist/ui/{modules/seaweed → templates/SeaweedLayout}/ChumBucket.svelte +1 -1
  79. package/dist/ui/templates/SeaweedLayout/EntryGroup.svelte +65 -88
  80. package/dist/ui/templates/SeaweedLayout/ProjectComponentProps.d.ts +1 -0
  81. package/dist/ui/templates/SeaweedLayout/ProjectGroupConfig.svelte +316 -316
  82. package/dist/ui/templates/SeaweedLayout/SeaweedLayout.md +3 -3
  83. package/dist/ui/templates/SeaweedLayout/SeaweedLayout.svelte +278 -276
  84. package/dist/ui/templates/SeaweedLayout/props.d.ts +2 -2
  85. package/dist/ui/templates/confirmation-modal/component.svelte +46 -46
  86. package/package.json +1 -1
  87. package/src/lib/styles/app.css +11 -14
  88. package/dist/components/dialog_manager/DialogMangerInit.d.ts +0 -2
  89. package/dist/components/dialog_manager/DialogMangerInit.js +0 -21
  90. package/dist/components/navigation_component/index.d.ts +0 -2
  91. package/dist/components/navigation_component/index.js +0 -3
  92. package/dist/ui/elements/pinya-card/component.svelte +0 -21
  93. package/dist/ui/elements/pinya-card/component.svelte.d.ts +0 -7
  94. package/dist/ui/elements/pinya-card/index.d.ts +0 -2
  95. package/dist/ui/elements/pinya-card/index.js +0 -2
  96. package/dist/ui/modules/seaweed/index.d.ts +0 -3
  97. package/dist/ui/modules/seaweed/index.js +0 -4
  98. /package/dist/ui/elements/{pinya-card/props.js → PinyaAnchorButton/PinyaAnchorButtonProps.js} +0 -0
  99. /package/dist/{components/navigation_component → ui/modules/NavigationMenu}/NavigationControl.svelte.d.ts +0 -0
  100. /package/dist/{components/navigation_component → ui/modules/NavigationMenu}/PageMeta.js +0 -0
  101. /package/dist/ui/{modules/seaweed → templates/SeaweedLayout}/ChumBucket.svelte.d.ts +0 -0
@@ -90,12 +90,6 @@
90
90
  </div>
91
91
 
92
92
  <style>
93
- :root {
94
- --dialog-start-pad: clamp(0em, 5vw, 2em);
95
- --dialog-box-width: min(calc(50em + 4em), calc(100vw - var(--dialog-start-pad) - var(--theme-border-base)));
96
- --dialog-box-height: clamp(15em, 50vw, 18em);
97
- }
98
-
99
93
  .default-page-container {
100
94
  max-width: 2100px;
101
95
  margin: 4em auto;
@@ -20,7 +20,7 @@
20
20
  import Toast from "./toast/Toast.svelte";
21
21
  import DialogOverlay from "../dialog_overlay/DialogOverlay.svelte";
22
22
  import { fade } from "svelte/transition";
23
- import { getDialogManager } from "../dialog_manager/DialogMangerInit";
23
+ import { dialogManager } from "../dialog_manager/DialogManager";
24
24
 
25
25
  interface Props {
26
26
  showDialogByDefault?: boolean;
@@ -77,7 +77,7 @@
77
77
 
78
78
  <!--todo: turn off hidden when it's time-->
79
79
  <button class="fab" onclick={()=>{
80
- getDialogManager().then(dm => dm.toggleDialogOverlay());
80
+ dialogManager.toggleDialogOverlay();
81
81
  }}>
82
82
  {#if (enableDialogueOverlayValue)}
83
83
  <img class="turnip-icon" src={CloseIcon} alt="interactive floating action button represented as a turnip">
@@ -137,25 +137,6 @@
137
137
  </div>
138
138
 
139
139
  <style>
140
- :root {
141
- --dialog-start-pad: clamp(0em, 5vw, 2em);
142
- --dialog-box-width: min(calc(50em + 4em), calc(100vw - var(--dialog-start-pad) - var(--theme-border-base)));
143
- --dialog-box-height: clamp(15em, 50vw, 18em);
144
-
145
- /** FAB icon margin/position calculation origin:
146
- Criteria:
147
- - We want at mobile (360px) our margin to be at 1em (16px)
148
- - We want at web (1960px) our margin to be at 2em (32px)
149
-
150
- A useful scaling factor might vw. At 360px, 16px would be around 4.44vw (360/16).
151
- At 360px: margin is at 16px or 1em.
152
- At 1960px: 4.44vw is at 87px but that will be clamped to 32px or 2em.
153
- The calculation implies that the natural point that the margin becomes 2em is clamped on
154
- wider screens is at 727px.
155
- */
156
- --fab-margin: clamp(1em, 4.44vw, 2em);
157
- }
158
-
159
140
  /*todo*/
160
141
  /*@apply flex justify-center items-center;*/
161
142
  .default-page-container {
@@ -208,9 +189,8 @@
208
189
  }
209
190
 
210
191
  .fab {
211
- /*@apply btn preset-filled-tertiary-500;*/
192
+ position: fixed;
212
193
  padding: 0;
213
- position: fixed;
214
194
  bottom: var(--fab-margin);
215
195
  width: 4em;
216
196
  border-radius: 50%;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { default as PineappleLayoutBase } from "./components/pineapple/PineappleBaseLayout.svelte";
2
2
  export * from "./components/index";
3
3
  export * from "./components/overrideable_meta/index";
4
- export * from "./components/navigation_component/index";
4
+ export * from "./ui/modules/NavigationMenu/index";
5
5
  export * from "./types/api/index";
6
6
  export * from "./components/dialog_manager/DialogManagerStore";
7
7
  export * from "./components/dialog_manager/DialogManager";
@@ -11,4 +11,4 @@ export * from "./types/pineapple_fiber/DialogDetail";
11
11
  export * from "./util/util";
12
12
  export * from "./api/index";
13
13
  export type { IDialogManager } from "./components/dialog_manager/IDialogManager";
14
- export { getDialogManager } from "./components/dialog_manager/DialogMangerInit";
14
+ export { dialogManager } from "./components/dialog_manager/DialogManager";
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  export { default as PineappleLayoutBase } from "./components/pineapple/PineappleBaseLayout.svelte";
3
3
  export * from "./components/index";
4
4
  export * from "./components/overrideable_meta/index";
5
- export * from "./components/navigation_component/index";
5
+ export * from "./ui/modules/NavigationMenu/index";
6
6
  export * from "./types/api/index";
7
7
  export * from "./components/dialog_manager/DialogManagerStore";
8
8
  export * from "./components/dialog_manager/DialogManager";
@@ -11,4 +11,4 @@ export * from "./types/pineapple_fiber/PortraitType";
11
11
  export * from "./types/pineapple_fiber/DialogDetail";
12
12
  export * from "./util/util";
13
13
  export * from "./api/index";
14
- export { getDialogManager } from "./components/dialog_manager/DialogMangerInit";
14
+ export { dialogManager } from "./components/dialog_manager/DialogManager";
@@ -44,8 +44,7 @@ const pineappleWeaverRun = () => {
44
44
  const template = `// this file was generated by PineappleWeaver.ts
45
45
  // do not edit!
46
46
 
47
- import type { DialogDetail } from "@turnipxenon/pineapple";
48
- import { dialogManager, PortraitType } from "@turnipxenon/pineapple";
47
+ import { type DialogDetail, dialogManager, PortraitType } from "@turnipxenon/pineapple";
49
48
 
50
49
  class _${fileName}Yarn {
51
50
  dialogList: DialogDetail[] = [
@@ -10,11 +10,22 @@
10
10
 
11
11
  @custom-variant turnip (&:where([data-theme=turnip], [data-theme=turnip] *));
12
12
 
13
+ html {
14
+ --dialog-start-pad: clamp(0em, 5vw, 2em);
15
+ --dialog-box-width: min(calc(54em), calc(100vw - var(--dialog-start-pad) - 2px));
16
+ --dialog-box-height: clamp(15em, 50vw, 18em);
17
+ --fab-margin: 1rem;
18
+ }
19
+
13
20
  .footer-space {
14
21
  width: 100%;
15
22
  height: calc(var(--dialog-box-height) + 4em);
16
23
  }
17
24
 
25
+ .dialog-box a, .dialog-box b, .dialog-box i {
26
+ font-size: inherit;
27
+ }
28
+
18
29
  a.dialog-choice {
19
30
  cursor: url("$pkg/assets/icons/chat-cursor.svg"), auto;
20
31
  }
@@ -37,20 +48,6 @@ a.external-link {
37
48
  background: rgba(var(--color-secondary-500));
38
49
  }
39
50
 
40
- .dialog-box {
41
- background-color: rgb(var(--color-surface-500) / 0.9);
42
- position: fixed;
43
- bottom: 0;
44
- width: var(--dialog-box-width); /*75em + 4em padding*/
45
- height: var(--dialog-box-height);
46
- max-width: calc(100vw - ((var(--fab-margin) * 2) + 4em));
47
- }
48
-
49
- .dark .dialog-box {
50
- background-color: rgb(var(--color-surface-900) / 0.95);
51
- --tw-ring-color: rgb(var(--color-text-400));
52
- /*background-color: red;*/
53
- }
54
51
 
55
52
  @layer base {
56
53
  .game-link-section {
@@ -250,7 +250,7 @@ blockquote {
250
250
  filter: brightness(140%);
251
251
  }
252
252
 
253
- h1, h2, h3, h4, h5, h6, .fake-h2, .fake-h3, .fake-h4 {
253
+ h1, h2, h3, h4, h5, h6, .fake-h1, .fake-h2, .fake-h3, .fake-h4 {
254
254
  text-align: center;
255
255
  margin-top: 0;
256
256
  font-weight: bolder;
@@ -265,7 +265,7 @@ h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, .fake-h2 + p, .fake-h3 + p, .fak
265
265
  margin-top: 0.5lh;
266
266
  }
267
267
 
268
- h1 {
268
+ h1, .fake-h1 {
269
269
  @apply text-4xl;
270
270
  }
271
271
 
@@ -289,7 +289,11 @@ h6 {
289
289
  text-decoration: underline;
290
290
  }
291
291
 
292
- a {
292
+ a.a-as-btn {
293
+ text-decoration: none;
294
+ }
295
+
296
+ a:not(.a-as-btn) {
293
297
  text-decoration: underline;
294
298
  color: var(--color-secondary-500);
295
299
 
@@ -298,11 +302,16 @@ a {
298
302
  }
299
303
  }
300
304
 
301
- a:hover, a:focus {
305
+ a:not(.a-as-btn):hover, a:not(.a-as-btn):focus {
302
306
  filter: brightness(150%);
303
307
  }
304
308
 
305
- a:visited {
309
+ /* we're fighting a specificity war with skeleton components */
310
+ a.a-as-btn:hover {
311
+ filter: brightness(110%);
312
+ }
313
+
314
+ a:not(.a-as-btn):visited {
306
315
  color: var(--color-secondary-950);
307
316
 
308
317
  @variant dark {
@@ -310,6 +319,7 @@ a:visited {
310
319
  }
311
320
  }
312
321
 
322
+
313
323
  ul {
314
324
  list-style: inside;
315
325
  }
@@ -318,10 +328,10 @@ ol {
318
328
  list-style: decimal inside;
319
329
  }
320
330
 
321
- p{
331
+ p {
322
332
  @apply mb-3;
323
333
  }
324
334
 
325
335
  @theme {
326
336
  --color-secondary-0: oklch(99% 0.02 38.38deg);
327
- }
337
+ }
@@ -1,75 +1,75 @@
1
- <script lang="ts">
2
- import { scale } from 'svelte/transition';
3
- import { elasticOut } from 'svelte/easing';
4
-
5
- import type { ModalProps } from 'svelte-modals';
6
-
7
- import { onMount, type Snippet } from 'svelte';
8
- import { PinyaCard } from '../elements';
9
-
10
- // https://svelte-modals.mattjennin.gs/modal-components/props/#typescript
11
- interface ModalBaseProps extends ModalProps {
12
- children: Snippet,
13
- }
14
-
15
- let {
16
- children,
17
- isOpen,
18
- close
19
- }: ModalBaseProps = $props();
20
-
21
- let container: HTMLDivElement;
22
- onMount(() => {
23
- const focusableElement = container.querySelector('input, select, textarea, button, object, a, area[href], [tabindex]');
24
- if (focusableElement) {
25
- (focusableElement as HTMLElement).focus();
26
- }
27
-
28
- document.addEventListener('keydown', (e) => {
29
- if (e.code === 'Escape') {
30
- close();
31
- }
32
- });
33
- });
34
- </script>
35
-
36
- {#if isOpen}
37
- <dialog aria-modal="true" in:scale|global={{
38
- start: 0.95,
39
- duration: 750,
40
- easing: elasticOut,
41
- opacity: 0.9
42
- }}>
43
- <div class="interactable" bind:this={container}>
44
- <PinyaCard
45
- widthClass="max-w-xl2"
46
- paddingClass="pl-8 pr-8 pt-4 pb-8"
47
- >
48
- {@render children?.()}
49
- </PinyaCard>
50
- </div>
51
- </dialog>
52
- {/if}
53
-
54
- <style>
55
- dialog {
56
- padding: 0;
57
- background-color: transparent;
58
- border-color: transparent;
59
- z-index: 20;
60
- position: fixed;
61
- top: 0;
62
- width: 100%;
63
- height: 100%;
64
- display: flex;
65
- justify-content: center;
66
- align-items: center;
67
-
68
- /* allow click-through to backdrop */
69
- pointer-events: none;
70
- }
71
-
72
- .interactable {
73
- pointer-events: auto;
74
- }
1
+ <script lang="ts">
2
+ import { scale } from 'svelte/transition';
3
+ import { elasticOut } from 'svelte/easing';
4
+
5
+ import type { ModalProps } from 'svelte-modals';
6
+
7
+ import { onMount, type Snippet } from 'svelte';
8
+ import { PinyaCard } from '../elements';
9
+
10
+ // https://svelte-modals.mattjennin.gs/modal-components/props/#typescript
11
+ interface ModalBaseProps extends ModalProps {
12
+ children: Snippet,
13
+ }
14
+
15
+ let {
16
+ children,
17
+ isOpen,
18
+ close
19
+ }: ModalBaseProps = $props();
20
+
21
+ let container: HTMLDivElement;
22
+ onMount(() => {
23
+ const focusableElement = container.querySelector('input, select, textarea, button, object, a, area[href], [tabindex]');
24
+ if (focusableElement) {
25
+ (focusableElement as HTMLElement).focus();
26
+ }
27
+
28
+ document.addEventListener('keydown', (e) => {
29
+ if (e.code === 'Escape') {
30
+ close();
31
+ }
32
+ });
33
+ });
34
+ </script>
35
+
36
+ {#if isOpen}
37
+ <dialog aria-modal="true" in:scale|global={{
38
+ start: 0.95,
39
+ duration: 750,
40
+ easing: elasticOut,
41
+ opacity: 0.9
42
+ }}>
43
+ <div class="interactable" bind:this={container}>
44
+ <PinyaCard
45
+ widthClass="max-w-xl2"
46
+ paddingClass="pl-8 pr-8 pt-4 pb-8"
47
+ >
48
+ {@render children?.()}
49
+ </PinyaCard>
50
+ </div>
51
+ </dialog>
52
+ {/if}
53
+
54
+ <style>
55
+ dialog {
56
+ padding: 0;
57
+ background-color: transparent;
58
+ border-color: transparent;
59
+ z-index: 20;
60
+ position: fixed;
61
+ top: 0;
62
+ width: 100%;
63
+ height: 100%;
64
+ display: flex;
65
+ justify-content: center;
66
+ align-items: center;
67
+
68
+ /* allow click-through to backdrop */
69
+ pointer-events: none;
70
+ }
71
+
72
+ .interactable {
73
+ pointer-events: auto;
74
+ }
75
75
  </style>
@@ -6,8 +6,9 @@
6
6
  import GithubIcon from "../../assets/icons/github-mark.svg";
7
7
  import LinkedinIcon from "../../assets/icons/linkedin.svg";
8
8
  import { ItchLogoHotLink } from "../../consts";
9
- import { ButtonVariant, PinyaButton } from "../elements/PinyaButton/index";
9
+ import { PinyaButton } from "../elements/PinyaButton/index";
10
10
  import ImageIcon from "../elements/ImageIcon.svelte";
11
+ import { ButtonVariant } from "../elements/PinyaButtonCommon/ButtonVariant";
11
12
 
12
13
  /** @type {{isSmallVersion?: boolean, email?: string, linkedinSlug?: string, isSlot?: boolean, allowLinkedIn?: boolean}} */
13
14
  let {
@@ -1,21 +1,21 @@
1
- <script lang="ts">
2
- import { Accordion } from "@skeletonlabs/skeleton-svelte";
3
- import type { Snippet } from "svelte";
4
-
5
- let {
6
- value = $bindable(),
7
- children,
8
- }: {
9
- value: string[],
10
- children: Snippet,
11
- } = $props();
12
- </script>
13
-
14
- <Accordion
15
- classes="bg-primary-100 dark:bg-tertiary-900 dark:saturate-75"
16
- {value}
17
- onValueChange={(e) => (value = e.value)}
18
- collapsible
19
- >
20
- {@render children()}
1
+ <script lang="ts">
2
+ import { Accordion } from "@skeletonlabs/skeleton-svelte";
3
+ import type { Snippet } from "svelte";
4
+
5
+ let {
6
+ value = $bindable(),
7
+ children,
8
+ }: {
9
+ value: string[],
10
+ children: Snippet,
11
+ } = $props();
12
+ </script>
13
+
14
+ <Accordion
15
+ classes="bg-primary-100 dark:bg-tertiary-900 dark:saturate-75"
16
+ {value}
17
+ onValueChange={(e) => (value = e.value)}
18
+ collapsible
19
+ >
20
+ {@render children()}
21
21
  </Accordion>
@@ -1,29 +1,29 @@
1
- <script lang="ts">
2
- // noinspection ES6UnusedImports
3
- import { Accordion } from "@skeletonlabs/skeleton-svelte";
4
- import type { Snippet } from "svelte";
5
-
6
- let {
7
- value,
8
- control: controlSnippet,
9
- panel: panelSnippet,
10
- }: {
11
- value: string,
12
- control: Snippet;
13
- panel: Snippet;
14
- } = $props();
15
- </script>
16
-
17
- <Accordion.Item
18
- {value}
19
- controlHover="hover:bg-primary-500 dark:hover:bg-secondary-600"
20
- >
21
- <!-- Control -->
22
- {#snippet control()}
23
- {@render controlSnippet()}
24
- {/snippet}
25
- <!-- Panel -->
26
- {#snippet panel()}
27
- {@render panelSnippet()}
28
- {/snippet}
1
+ <script lang="ts">
2
+ // noinspection ES6UnusedImports
3
+ import { Accordion } from "@skeletonlabs/skeleton-svelte";
4
+ import type { Snippet } from "svelte";
5
+
6
+ let {
7
+ value,
8
+ control: controlSnippet,
9
+ panel: panelSnippet,
10
+ }: {
11
+ value: string,
12
+ control: Snippet;
13
+ panel: Snippet;
14
+ } = $props();
15
+ </script>
16
+
17
+ <Accordion.Item
18
+ {value}
19
+ controlHover="hover:bg-primary-500 dark:hover:bg-secondary-600"
20
+ >
21
+ <!-- Control -->
22
+ {#snippet control()}
23
+ {@render controlSnippet()}
24
+ {/snippet}
25
+ <!-- Panel -->
26
+ {#snippet panel()}
27
+ {@render panelSnippet()}
28
+ {/snippet}
29
29
  </Accordion.Item>
@@ -9,6 +9,7 @@
9
9
  import BgTiledTurnip from '../../../assets/bg_tiled/bg_tiled_turnip.png';
10
10
  import RandomizedImage from './RandomizedImage.svelte';
11
11
  import { generatedDailySeed, mulberry32Generator } from '../../../util/util';
12
+ import { appState } from "../../templates/PinyaPageLayout/runes.svelte";
12
13
 
13
14
  let { enabled }: {
14
15
  enabled: boolean
@@ -47,6 +48,8 @@
47
48
  }
48
49
  generatedImageList = gi;
49
50
  });
51
+
52
+ let bgStyle = $derived(`opacity: ${appState.bgOpacity}`);
50
53
  </script>
51
54
 
52
55
  <svelte:head>
@@ -63,7 +66,12 @@
63
66
 
64
67
  <!--todo: add a letterbox beyond 1960px + 16 rem-->
65
68
  {#if enabled && generatedImageList.length > 0}
66
- <div class="default-background" aria-hidden="true" transition:fade>
69
+ <div
70
+ class="default-background"
71
+ aria-hidden="true"
72
+ style={bgStyle}
73
+ transition:fade
74
+ >
67
75
  {#each generatedImageList as imageItem, idx (idx)}
68
76
  <RandomizedImage src={imageItem} {rng} />
69
77
  {/each}
@@ -1,65 +1,66 @@
1
- <!-- @component Code Block based on: https://shiki.style/ and https://www.skeleton.dev/docs/integrations/code-block/svelte/ -->
2
-
3
- <script module>
4
- import { addCopyButton } from "shiki-transformer-copy-button";
5
- import { createHighlighterCoreSync } from "shiki/core";
6
- import { createJavaScriptRegexEngine } from "shiki/engine/javascript";
7
- // Themes
8
- // https://shiki.style/themes
9
- import themeLight from "shiki/themes/catppuccin-latte.mjs";
10
- import themeDark from "shiki/themes/catppuccin-frappe.mjs";
11
- // Languages
12
- // https://shiki.style/languages
13
- import console from "shiki/langs/console.mjs";
14
- import html from "shiki/langs/html.mjs";
15
- import css from "shiki/langs/css.mjs";
16
- import js from "shiki/langs/javascript.mjs";
17
- import ts from "shiki/langs/typescript.mjs";
18
- import markdown from "shiki/langs/markdown.mjs";
19
-
20
- // https://shiki.style/guide/sync-usage
21
- const shiki = createHighlighterCoreSync({
22
- engine: createJavaScriptRegexEngine(),
23
- // Implement your import theme.
24
- themes: [themeLight, themeDark],
25
- // Implement your imported and supported languages.
26
- langs: [console, html, css, js, ts, markdown]
27
- });
28
- </script>
29
-
30
- <script lang="ts">
31
- import type { CodeBlockProps } from "./CodeBlockProps";
32
-
33
- let {
34
- code = "",
35
- lang = "console",
36
- // Base Style Props
37
- base = " overflow-hidden",
38
- rounded = "rounded-container",
39
- shadow = "",
40
- classes = "",
41
- // Pre Style Props
42
- preBase = "",
43
- prePadding = "[&>pre]:p-4",
44
- preClasses = ""
45
- }: CodeBlockProps = $props();
46
-
47
- // Shiki convert to HTML
48
- const generatedHtml = $derived(shiki.codeToHtml(code, {
49
- lang,
50
- themes: {
51
- light: "catppuccin-latte",
52
- dark: "catppuccin-frappe"
53
- },
54
- transformers: [
55
- addCopyButton({ toggle: 2000 })
56
- ]
57
- }));
58
- </script>
59
-
60
- <div
61
- class="{base} {rounded} {shadow} {classes} {preBase} {prePadding} {preClasses}"
62
- >
63
- <!-- Output Shiki's Generated HTML -->
64
- {@html generatedHtml}
1
+ <!-- @component Code Block based on: https://shiki.style/ and https://www.skeleton.dev/docs/integrations/code-block/svelte/ -->
2
+
3
+ <script module>
4
+ import { addCopyButton } from "shiki-transformer-copy-button";
5
+ import { createHighlighterCoreSync } from "shiki/core";
6
+ import { createJavaScriptRegexEngine } from "shiki/engine/javascript";
7
+ // Themes
8
+ // https://shiki.style/themes
9
+ import themeLight from "shiki/themes/catppuccin-latte.mjs";
10
+ import themeDark from "shiki/themes/catppuccin-frappe.mjs";
11
+ // Languages
12
+ // https://shiki.style/languages
13
+ import console from "shiki/langs/console.mjs";
14
+ import html from "shiki/langs/html.mjs";
15
+ import css from "shiki/langs/css.mjs";
16
+ import js from "shiki/langs/javascript.mjs";
17
+ import ts from "shiki/langs/typescript.mjs";
18
+ import markdown from "shiki/langs/markdown.mjs";
19
+ import xml from "shiki/langs/xml.mjs";
20
+
21
+ // https://shiki.style/guide/sync-usage
22
+ const shiki = createHighlighterCoreSync({
23
+ engine: createJavaScriptRegexEngine(),
24
+ // Implement your import theme.
25
+ themes: [themeLight, themeDark],
26
+ // Implement your imported and supported languages.
27
+ langs: [console, html, css, js, ts, markdown, xml]
28
+ });
29
+ </script>
30
+
31
+ <script lang="ts">
32
+ import type { CodeBlockProps } from "./CodeBlockProps";
33
+
34
+ let {
35
+ code = "",
36
+ lang = "console",
37
+ // Base Style Props
38
+ base = " overflow-hidden",
39
+ rounded = "rounded-container",
40
+ shadow = "",
41
+ classes = "",
42
+ // Pre Style Props
43
+ preBase = "",
44
+ prePadding = "[&>pre]:p-4",
45
+ preClasses = ""
46
+ }: CodeBlockProps = $props();
47
+
48
+ // Shiki convert to HTML
49
+ const generatedHtml = $derived(shiki.codeToHtml(code, {
50
+ lang,
51
+ themes: {
52
+ light: "catppuccin-latte",
53
+ dark: "catppuccin-frappe"
54
+ },
55
+ transformers: [
56
+ addCopyButton({ toggle: 2000 })
57
+ ]
58
+ }));
59
+ </script>
60
+
61
+ <div
62
+ class="{base} {rounded} {shadow} {classes} {preBase} {prePadding} {preClasses}"
63
+ >
64
+ <!-- Output Shiki's Generated HTML -->
65
+ {@html generatedHtml}
65
66
  </div>
@@ -1,6 +1,6 @@
1
1
  export interface CodeBlockProps {
2
2
  code?: string;
3
- lang?: 'console' | 'html' | 'css' | 'js' | 'ts' | 'markdown';
3
+ lang?: 'console' | 'html' | 'css' | 'js' | 'ts' | 'markdown' | 'xml';
4
4
  base?: string;
5
5
  rounded?: string;
6
6
  shadow?: string;