@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.
- package/README.md +103 -0
- package/dist/components/RandomizedBackground.svelte +4 -0
- package/dist/components/RandomizedBackground.svelte.d.ts +1 -0
- package/dist/components/blog_template/BlogTemplate.svelte +15 -18
- package/dist/components/blog_template/BlogTemplate.svelte.d.ts +3 -2
- package/dist/components/blog_template/BlogTemplateInner.svelte +1 -1
- package/dist/components/blog_template/BlogTemplateInner.svelte.d.ts +1 -1
- package/dist/components/dialog_manager/DialogManager.d.ts +3 -2
- package/dist/components/dialog_manager/DialogManager.js +6 -4
- package/dist/components/dialog_manager/DialogProcessor.d.ts +4 -2
- package/dist/components/dialog_manager/DialogProcessor.js +23 -18
- package/dist/components/dialog_manager/IDialogManager.d.ts +1 -2
- package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.d.ts +2 -2
- package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.js +4 -5
- package/dist/components/dialog_overlay/DialogOverlay.svelte +149 -51
- package/dist/components/layouts/SeaweedBaseLayout.svelte +0 -6
- package/dist/components/pineapple/PineappleBaseLayout.svelte +3 -23
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/scripts/pineapple_fiber/PineappleWeaver.js +1 -2
- package/dist/styles/app.css +11 -14
- package/dist/styles/turnip-theme.css +17 -7
- package/dist/ui/components/ModalBase.svelte +74 -74
- package/dist/ui/components/SocialSection.svelte +2 -1
- package/dist/ui/components/accordion/PinyaAccordion.svelte +20 -20
- package/dist/ui/components/accordion/PinyaAccordionItem.svelte +28 -28
- package/dist/ui/components/randomized-background/RandomizedBackground.svelte +9 -1
- package/dist/ui/elements/CodeBlock/CodeBlock.svelte +65 -64
- package/dist/ui/elements/CodeBlock/CodeBlockProps.d.ts +1 -1
- package/dist/ui/elements/ImageIcon.svelte +53 -53
- package/dist/ui/elements/ImageIcon.svelte.d.ts +1 -1
- package/dist/ui/elements/PinyaAnchorButton/PinyaAnchorButton.svelte +25 -0
- package/dist/ui/elements/PinyaAnchorButton/PinyaAnchorButton.svelte.d.ts +4 -0
- package/dist/ui/elements/PinyaAnchorButton/PinyaAnchorButtonProps.d.ts +4 -0
- package/dist/ui/elements/PinyaAnchorButton/index.d.ts +2 -0
- package/dist/ui/elements/PinyaAnchorButton/index.js +2 -0
- package/dist/ui/elements/PinyaButton/PinyaButton.svelte +8 -31
- package/dist/ui/elements/PinyaButton/PinyaButton.svelte.d.ts +1 -1
- package/dist/ui/elements/PinyaButton/PinyaButtonProps.d.ts +4 -14
- package/dist/ui/elements/PinyaButton/PinyaButtonProps.js +1 -6
- package/dist/ui/elements/PinyaButtonCommon/ButtonVariant.d.ts +5 -0
- package/dist/ui/elements/PinyaButtonCommon/ButtonVariant.js +6 -0
- package/dist/ui/elements/PinyaButtonCommon/PinyaButtonCommonProps.d.ts +8 -0
- package/dist/ui/elements/PinyaButtonCommon/PinyaButtonCommonProps.js +2 -0
- package/dist/ui/elements/PinyaButtonCommon/createButtonClass.d.ts +2 -0
- package/dist/ui/elements/PinyaButtonCommon/createButtonClass.js +31 -0
- package/dist/ui/elements/PinyaButtonCommon/index.d.ts +3 -0
- package/dist/ui/elements/PinyaButtonCommon/index.js +3 -0
- package/dist/ui/elements/PinyaCard/PinyaCard.svelte +30 -0
- package/dist/ui/elements/PinyaCard/PinyaCard.svelte.d.ts +7 -0
- package/dist/ui/elements/{pinya-card/props.d.ts → PinyaCard/PinyaCardProps.d.ts} +1 -0
- package/dist/ui/elements/PinyaCard/PinyaCardProps.js +1 -0
- package/dist/ui/elements/PinyaCard/index.d.ts +2 -0
- package/dist/ui/elements/PinyaCard/index.js +2 -0
- package/dist/ui/elements/Placeholder.svelte +17 -17
- package/dist/ui/elements/TextLink.svelte +16 -16
- package/dist/ui/elements/index.d.ts +7 -5
- package/dist/ui/elements/index.js +9 -5
- package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte +34 -34
- package/dist/ui/elements/text-chip/TextChip.svelte +14 -14
- package/dist/{components/navigation_component → ui/modules/NavigationMenu}/NavigationControl.svelte +24 -20
- package/dist/{components/navigation_component/NavigationComponent.svelte → ui/modules/NavigationMenu/NavigationMenu.svelte} +69 -43
- package/dist/{components/navigation_component/NavigationComponent.svelte.d.ts → ui/modules/NavigationMenu/NavigationMenu.svelte.d.ts} +6 -6
- package/dist/{components/navigation_component → ui/modules/NavigationMenu}/PageMeta.d.ts +4 -4
- package/dist/ui/modules/NavigationMenu/index.d.ts +2 -0
- package/dist/ui/modules/NavigationMenu/index.js +2 -0
- package/dist/ui/modules/index.d.ts +1 -1
- package/dist/ui/modules/index.js +1 -1
- package/dist/ui/modules/modals/general-settings/GeneralSettingsModal.svelte +109 -109
- package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte +42 -42
- package/dist/ui/modules/projects/Hepcat.svelte +1 -1
- package/dist/ui/modules/projects/Pengi.svelte +61 -61
- package/dist/ui/modules/projects/Soulwork.svelte +1 -1
- package/dist/ui/modules/projects/ThisWebpage.svelte +11 -9
- package/dist/ui/templates/PinyaPageLayout/PinyaPageLayout.svelte +7 -3
- package/dist/ui/templates/PinyaPageLayout/runes.svelte.d.ts +3 -0
- package/dist/ui/templates/PinyaPageLayout/runes.svelte.js +1 -0
- package/dist/ui/{modules/seaweed → templates/SeaweedLayout}/ChumBucket.svelte +1 -1
- package/dist/ui/templates/SeaweedLayout/EntryGroup.svelte +65 -88
- package/dist/ui/templates/SeaweedLayout/ProjectComponentProps.d.ts +1 -0
- package/dist/ui/templates/SeaweedLayout/ProjectGroupConfig.svelte +316 -316
- package/dist/ui/templates/SeaweedLayout/SeaweedLayout.md +3 -3
- package/dist/ui/templates/SeaweedLayout/SeaweedLayout.svelte +278 -276
- package/dist/ui/templates/SeaweedLayout/props.d.ts +2 -2
- package/dist/ui/templates/confirmation-modal/component.svelte +46 -46
- package/package.json +1 -1
- package/src/lib/styles/app.css +11 -14
- package/dist/components/dialog_manager/DialogMangerInit.d.ts +0 -2
- package/dist/components/dialog_manager/DialogMangerInit.js +0 -21
- package/dist/components/navigation_component/index.d.ts +0 -2
- package/dist/components/navigation_component/index.js +0 -3
- package/dist/ui/elements/pinya-card/component.svelte +0 -21
- package/dist/ui/elements/pinya-card/component.svelte.d.ts +0 -7
- package/dist/ui/elements/pinya-card/index.d.ts +0 -2
- package/dist/ui/elements/pinya-card/index.js +0 -2
- package/dist/ui/modules/seaweed/index.d.ts +0 -3
- package/dist/ui/modules/seaweed/index.js +0 -4
- /package/dist/ui/elements/{pinya-card/props.js → PinyaAnchorButton/PinyaAnchorButtonProps.js} +0 -0
- /package/dist/{components/navigation_component → ui/modules/NavigationMenu}/NavigationControl.svelte.d.ts +0 -0
- /package/dist/{components/navigation_component → ui/modules/NavigationMenu}/PageMeta.js +0 -0
- /package/dist/ui/{modules/seaweed → templates/SeaweedLayout}/ChumBucket.svelte.d.ts +0 -0
|
@@ -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 {
|
|
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
|
-
|
|
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
|
-
|
|
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 "./
|
|
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 {
|
|
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 "./
|
|
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 {
|
|
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
|
|
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[] = [
|
package/dist/styles/app.css
CHANGED
|
@@ -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
|
|
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 {
|
|
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
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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>
|