@turnipxenon/pineapple 2.4.27 → 2.4.29

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.
@@ -4,8 +4,9 @@
4
4
  <option name="autoReloadType" value="SELECTIVE" />
5
5
  </component>
6
6
  <component name="ChangeListManager">
7
- <list default="true" id="accb6ba2-c343-4f84-ad30-6e2d71eceee5" name="Changes" comment="Fix package main index">
8
- <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
7
+ <list default="true" id="accb6ba2-c343-4f84-ad30-6e2d71eceee5" name="Changes" comment="Fix dialog positioning&#10;&#10;Dialog positioning seemed to be broken when the styles from Seaweed moved to postcss, even if the dialog solely exists in Pineapple">
8
+ <change beforePath="$PROJECT_DIR$/src/lib/components/pineapple/PineappleBaseLayout.svelte" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib/components/pineapple/PineappleBaseLayout.svelte" afterDir="false" />
9
+ <change beforePath="$PROJECT_DIR$/src/routes/(pineapple)/pineapple/+page.svelte" beforeDir="false" afterPath="$PROJECT_DIR$/src/routes/(pineapple)/pineapple/+page.svelte" afterDir="false" />
9
10
  </list>
10
11
  <option name="SHOW_DIALOG" value="false" />
11
12
  <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -40,13 +41,14 @@
40
41
  <option value="+page.svelte" />
41
42
  <option value="OverrideableMeta" />
42
43
  <option value="index.ts" />
44
+ <option value="CSS File" />
43
45
  </list>
44
46
  </option>
45
47
  </component>
46
48
  <component name="Git.Settings">
47
49
  <option name="RECENT_BRANCH_BY_REPOSITORY">
48
50
  <map>
49
- <entry key="$PROJECT_DIR$" value="main" />
51
+ <entry key="$PROJECT_DIR$" value="6265bc453ce0896e47aa5b4c13ed4923220ea380" />
50
52
  </map>
51
53
  </option>
52
54
  <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
@@ -80,32 +82,33 @@
80
82
  <option name="hideEmptyMiddlePackages" value="true" />
81
83
  <option name="showLibraryContents" value="true" />
82
84
  </component>
83
- <component name="PropertiesComponent"><![CDATA[{
84
- "keyToString": {
85
- "DefaultHtmlFileTemplate": "HTML File",
86
- "RunOnceActivity.OpenProjectViewOnStart": "true",
87
- "RunOnceActivity.ShowReadmeOnStart": "true",
88
- "WebServerToolWindowFactoryState": "false",
89
- "git-widget-placeholder": "turnip/meta",
90
- "ignore.virus.scanning.warn.message": "true",
91
- "last_opened_file_path": "C:/Users/Pumpkin/Projects/Web/pineapple/src/routes/(seaweed)/portfolio/actual",
92
- "node.js.detected.package.eslint": "true",
93
- "node.js.detected.package.tslint": "true",
94
- "node.js.selected.package.eslint": "(autodetect)",
95
- "node.js.selected.package.tslint": "(autodetect)",
96
- "nodejs_interpreter_path": "node",
97
- "nodejs_package_manager_path": "yarn",
98
- "npm.build.executor": "Run",
99
- "npm.dev (1).executor": "Run",
100
- "npm.dev --open.executor": "Run",
101
- "npm.dev offline.executor": "Run",
102
- "npm.dev-offline.executor": "Run",
103
- "npm.dev.executor": "Run",
104
- "settings.editor.selected.configurable": "inlay.hints",
105
- "ts.external.directory.path": "C:\\Users\\Pumpkin\\Projects\\Web\\pineapple\\node_modules\\typescript\\lib",
106
- "vue.rearranger.settings.migration": "true"
85
+ <component name="PropertiesComponent">{
86
+ &quot;keyToString&quot;: {
87
+ &quot;DefaultHtmlFileTemplate&quot;: &quot;HTML File&quot;,
88
+ &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
89
+ &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
90
+ &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
91
+ &quot;git-widget-placeholder&quot;: &quot;turnip/meta&quot;,
92
+ &quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
93
+ &quot;last_opened_file_path&quot;: &quot;C:/Users/Pumpkin/Projects/Web/pineapple/src/routes/(seaweed)/portfolio/actual&quot;,
94
+ &quot;list.type.of.created.stylesheet&quot;: &quot;CSS&quot;,
95
+ &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
96
+ &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
97
+ &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
98
+ &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
99
+ &quot;nodejs_interpreter_path&quot;: &quot;node&quot;,
100
+ &quot;nodejs_package_manager_path&quot;: &quot;yarn&quot;,
101
+ &quot;npm.build.executor&quot;: &quot;Run&quot;,
102
+ &quot;npm.dev (1).executor&quot;: &quot;Run&quot;,
103
+ &quot;npm.dev --open.executor&quot;: &quot;Run&quot;,
104
+ &quot;npm.dev offline.executor&quot;: &quot;Run&quot;,
105
+ &quot;npm.dev-offline.executor&quot;: &quot;Run&quot;,
106
+ &quot;npm.dev.executor&quot;: &quot;Run&quot;,
107
+ &quot;settings.editor.selected.configurable&quot;: &quot;inlay.hints&quot;,
108
+ &quot;ts.external.directory.path&quot;: &quot;C:\\Users\\Pumpkin\\Projects\\Web\\pineapple\\node_modules\\typescript\\lib&quot;,
109
+ &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
107
110
  }
108
- }]]></component>
111
+ }</component>
109
112
  <component name="RecentsManager">
110
113
  <key name="CopyFile.RECENT_KEYS">
111
114
  <recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(seaweed)\portfolio\actual" />
@@ -115,11 +118,11 @@
115
118
  <recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(pineapple)\about" />
116
119
  </key>
117
120
  <key name="MoveFile.RECENT_KEYS">
121
+ <recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\components\dialog_overlay" />
118
122
  <recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\components\overrideable_meta" />
119
123
  <recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\types" />
120
124
  <recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib" />
121
125
  <recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\template\Seaweed" />
122
- <recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\(pineapple)\about" />
123
126
  </key>
124
127
  <key name="es6.move.members.recent.items">
125
128
  <recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\routes\types\RootLayoutProps.ts" />
@@ -156,9 +159,9 @@
156
159
  <list>
157
160
  <item itemvalue="npm.dev --open" />
158
161
  <item itemvalue="npm.dev-offline" />
159
- <item itemvalue="npm.dev --open" />
160
162
  <item itemvalue="npm.dev-offline" />
161
163
  <item itemvalue="npm.dev --open" />
164
+ <item itemvalue="npm.dev-offline" />
162
165
  </list>
163
166
  </recent_temporary>
164
167
  </component>
@@ -225,15 +228,8 @@
225
228
  <workItem from="1711115902471" duration="148000" />
226
229
  <workItem from="1711116299202" duration="1291000" />
227
230
  <workItem from="1711179012668" duration="14397000" />
228
- <workItem from="1711206704484" duration="4312000" />
229
- </task>
230
- <task id="LOCAL-00045" summary="Solve videos not dynamically loading">
231
- <option name="closed" value="true" />
232
- <created>1710203392528</created>
233
- <option name="number" value="00045" />
234
- <option name="presentableId" value="LOCAL-00045" />
235
- <option name="project" value="LOCAL" />
236
- <updated>1710203392528</updated>
231
+ <workItem from="1711206704484" duration="9686000" />
232
+ <workItem from="1711323704651" duration="348000" />
237
233
  </task>
238
234
  <task id="LOCAL-00046" summary="Remove unnecessary iframe requests">
239
235
  <option name="closed" value="true" />
@@ -619,7 +615,15 @@
619
615
  <option name="project" value="LOCAL" />
620
616
  <updated>1711210905814</updated>
621
617
  </task>
622
- <option name="localTasksCounter" value="94" />
618
+ <task id="LOCAL-00094" summary="Fix dialog positioning&#10;&#10;Dialog positioning seemed to be broken when the styles from Seaweed moved to postcss, even if the dialog solely exists in Pineapple">
619
+ <option name="closed" value="true" />
620
+ <created>1711214822227</created>
621
+ <option name="number" value="00094" />
622
+ <option name="presentableId" value="LOCAL-00094" />
623
+ <option name="project" value="LOCAL" />
624
+ <updated>1711214822227</updated>
625
+ </task>
626
+ <option name="localTasksCounter" value="95" />
623
627
  <servers />
624
628
  </component>
625
629
  <component name="TypeScriptGeneratedFilesManager">
@@ -657,7 +661,7 @@
657
661
  <entry key="branch">
658
662
  <value>
659
663
  <list>
660
- <option value="turnip/dev" />
664
+ <option value="turnip/meta" />
661
665
  </list>
662
666
  </value>
663
667
  </entry>
@@ -677,7 +681,6 @@
677
681
  </option>
678
682
  </component>
679
683
  <component name="VcsManagerConfiguration">
680
- <MESSAGE value="Add dismissable toast" />
681
684
  <MESSAGE value="Adjust default toast body styling and add shadow to toast" />
682
685
  <MESSAGE value="Clean up todos" />
683
686
  <MESSAGE value="Add default PR template" />
@@ -702,6 +705,7 @@
702
705
  <MESSAGE value="Hide advanced settings when letChaos is true" />
703
706
  <MESSAGE value="Add OverridableMeta component" />
704
707
  <MESSAGE value="Fix package main index" />
705
- <option name="LAST_COMMIT_MESSAGE" value="Fix package main index" />
708
+ <MESSAGE value="Fix dialog positioning&#10;&#10;Dialog positioning seemed to be broken when the styles from Seaweed moved to postcss, even if the dialog solely exists in Pineapple" />
709
+ <option name="LAST_COMMIT_MESSAGE" value="Fix dialog positioning&#10;&#10;Dialog positioning seemed to be broken when the styles from Seaweed moved to postcss, even if the dialog solely exists in Pineapple" />
706
710
  </component>
707
711
  </project>
@@ -1,7 +1,7 @@
1
- <script>import AresHappy from "../assets/characters/ares/ares_happy.webp";
1
+ <script>import AresHappy from "../../assets/characters/ares/ares_happy.webp";
2
2
  import { onMount } from "svelte";
3
- import { dialogManager } from "./dialog_manager/DialogManagerStore";
4
- import { DialogState } from "../types/pineapple_fiber/DialogState";
3
+ import { dialogManager } from "../dialog_manager/DialogManagerStore";
4
+ import { DialogState } from "../../types/pineapple_fiber/DialogState";
5
5
  let currentMessage = "";
6
6
  dialogManager.currentMessage.subscribe((value) => {
7
7
  currentMessage = value;
@@ -35,7 +35,9 @@ const onDialogClick = () => {
35
35
  hidden={isHidden}
36
36
  style="--hidePercentWidth: -{hidePercent}vw;
37
37
  --hidePercentHeight: {hidePercent}vh;">
38
- <img src={currentPortrait} alt="Ares" class="dialog-portrait" />
38
+ <div class="dialog-portrait-container">
39
+ <img src={currentPortrait} alt="Ares" class="dialog-portrait" />
40
+ </div>
39
41
  <div class="card dialog-box variant-ghost-primary" on:click={onDialogClick}>
40
42
  <div class="card dialog-name">
41
43
  <p><b>Turnip</b></p>
@@ -53,8 +55,12 @@ const onDialogClick = () => {
53
55
  z-index: 10;
54
56
  }
55
57
 
56
- .dialog-elements > img {
57
- transform: translateX(var(--hidePercentWidth));
58
+ .dialog-elements:dir(ltr) {
59
+ left: 0;
60
+ }
61
+
62
+ .dialog-elements:dir(rtl) {
63
+ right: 0;
58
64
  }
59
65
 
60
66
  .dialog-elements > div {
@@ -81,16 +87,40 @@ const onDialogClick = () => {
81
87
  padding-right: 1rem;
82
88
  padding-top: 0.5rem;
83
89
  position: fixed;
90
+ }
84
91
 
92
+ .dialog-name:dir(ltr) {
85
93
  /* for centering vertically */
86
94
  transform: translateX(clamp(0em, 5vw - 0.5em, 1em)) translateY(-50%);
87
- }
95
+ }
88
96
 
89
- .dialog-portrait {
97
+ .dialog-name:dir(rtl) {
98
+ /* for centering vertically */
99
+ transform: translateX(calc(clamp(0em, 5vw - 0.5em, 1em) * -1)) translateY(-50%);
100
+ }
101
+
102
+ .dialog-portrait-container {
90
103
  position: fixed;
91
104
  bottom: 0;
92
- left: clamp(-4rem, calc(5vw - 5em), 0rem);
93
105
  height: clamp(30rem, 75vw, 40rem);
94
106
  width: auto;
95
107
  }
108
+
109
+ .dialog-portrait-container:dir(ltr) {
110
+ transform: translateX(var(--hidePercentWidth));
111
+ left: clamp(-4rem, calc(5vw - 5em), 0rem);
112
+ }
113
+
114
+ .dialog-portrait-container:dir(rtl) {
115
+ transform: translateX(calc(var(--hidePercentWidth) * -1));
116
+ right: clamp(-4rem, calc(5vw - 5em), 0rem);
117
+ }
118
+
119
+ .dialog-portrait {
120
+ height: 100%;
121
+ }
122
+
123
+ .dialog-portrait:dir(rtl) {
124
+ transform: scaleX(-1);
125
+ }
96
126
  </style>
@@ -1,21 +1,21 @@
1
- <!--
2
- OverridableMeta is convenient Svelte component allowing each page to override the head meta values
3
- based on their +page.ts.
4
-
5
- For example:
6
- <code>
7
- // +page.ts
8
-
9
- import type { OverridableMetaProps } from "../..";
10
-
11
- export const load = async (): Promise<OverridableMetaProps> => {
12
- return {
13
- title: "CustomTitle",
14
- };
15
- };
16
- </code>
17
- -->
18
-
1
+ <!--
2
+ OverridableMeta is convenient Svelte component allowing each page to override the head meta values
3
+ based on their +page.ts.
4
+
5
+ For example:
6
+ <code>
7
+ // +page.ts
8
+
9
+ import type { OverridableMetaProps } from "../..";
10
+
11
+ export const load = async (): Promise<OverridableMetaProps> => {
12
+ return {
13
+ title: "CustomTitle",
14
+ };
15
+ };
16
+ </code>
17
+ -->
18
+
19
19
  <script>import WebThumbnailImage from "../../assets/placeholder/placeholder_circle.png";
20
20
  export let rootUrl = "http://localhost:5173";
21
21
  export let title = "Welcome to my portfolio";
@@ -38,14 +38,14 @@ page.subscribe((p) => {
38
38
  data.ogDescription = pageData.ogDescription ?? ogDescription;
39
39
  data.ogImage = pageData.ogImage ?? ogImage;
40
40
  });
41
- </script>
42
-
43
- <svelte:head>
44
- <meta charset="utf-8" />
45
- <title>{data.title}</title>
46
- <meta name="twitter:card" content="summary" />
47
- <meta property="og:url" content={data.ogUrl} />
48
- <meta property="og:title" content={data.ogTitle} />
49
- <meta property="og:description" content={data.ogDescription} />
50
- <meta property="og:image" content={data.ogImage} />
51
- </svelte:head>
41
+ </script>
42
+
43
+ <svelte:head>
44
+ <meta charset="utf-8" />
45
+ <title>{data.title}</title>
46
+ <meta name="twitter:card" content="summary" />
47
+ <meta property="og:url" content={data.ogUrl} />
48
+ <meta property="og:title" content={data.ogTitle} />
49
+ <meta property="og:description" content={data.ogDescription} />
50
+ <meta property="og:image" content={data.ogImage} />
51
+ </svelte:head>
@@ -8,7 +8,7 @@ import FABIcon from "../../assets/bg_tiled/bg_tiled_turnip.png";
8
8
  import CloseIcon from "../../assets/icons/close.svg";
9
9
  import { dialogManager, enableDialogueOverlay } from "../dialog_manager/DialogManagerStore";
10
10
  import Toast from "./toast/Toast.svelte";
11
- import DialogOverlay from "../DialogOverlay.svelte";
11
+ import DialogOverlay from "../dialog_overlay/DialogOverlay.svelte";
12
12
  import { fade } from "svelte/transition";
13
13
  let pages = [];
14
14
  const updateBreadcrumb = (pathname) => {
@@ -269,6 +269,7 @@ enableDialogueOverlay.set(showDialogByDefault);
269
269
  bottom: var(--fab-margin);
270
270
  width: 4em;
271
271
  border-radius: 50%;
272
+ z-index: 100;
272
273
  }
273
274
 
274
275
  .fab > img {
@@ -21,7 +21,7 @@ export const options = {
21
21
  app: ({ head, body, assets, nonce, env }) => "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"" + assets + "/favicon.png\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width\" />\n\t\t" + head + "\n\t</head>\n\n\t<body data-sveltekit-preload-data=\"hover\" data-theme=\"crimson\">\n\t\t<div style=\"display: contents\" class=\"h-full overflow-hidden\">" + body + "</div>\n\t</body>\n</html>\n",
22
22
  error: ({ status, message }) => "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>" + message + "</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\t--bg: white;\n\t\t\t\t--fg: #222;\n\t\t\t\t--divider: #ccc;\n\t\t\t\tbackground: var(--bg);\n\t\t\t\tcolor: var(--fg);\n\t\t\t\tfont-family:\n\t\t\t\t\tsystem-ui,\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tOxygen,\n\t\t\t\t\tUbuntu,\n\t\t\t\t\tCantarell,\n\t\t\t\t\t'Open Sans',\n\t\t\t\t\t'Helvetica Neue',\n\t\t\t\t\tsans-serif;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmax-width: 32rem;\n\t\t\t\tmargin: 0 1rem;\n\t\t\t}\n\n\t\t\t.status {\n\t\t\t\tfont-weight: 200;\n\t\t\t\tfont-size: 3rem;\n\t\t\t\tline-height: 1;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: -0.05rem;\n\t\t\t}\n\n\t\t\t.message {\n\t\t\t\tborder-left: 1px solid var(--divider);\n\t\t\t\tpadding: 0 0 0 1rem;\n\t\t\t\tmargin: 0 0 0 1rem;\n\t\t\t\tmin-height: 2.5rem;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\n\t\t\t.message h1 {\n\t\t\t\tfont-weight: 400;\n\t\t\t\tfont-size: 1em;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t@media (prefers-color-scheme: dark) {\n\t\t\t\tbody {\n\t\t\t\t\t--bg: #222;\n\t\t\t\t\t--fg: #ddd;\n\t\t\t\t\t--divider: #666;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"error\">\n\t\t\t<span class=\"status\">" + status + "</span>\n\t\t\t<div class=\"message\">\n\t\t\t\t<h1>" + message + "</h1>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n</html>\n"
23
23
  },
24
- version_hash: "10fknr1"
24
+ version_hash: "h76do5"
25
25
  };
26
26
 
27
27
  export async function get_hooks() {
@@ -1,7 +1,7 @@
1
- <script>import AresHappy from "../assets/characters/ares/ares_happy.webp";
1
+ <script>import AresHappy from "../../assets/characters/ares/ares_happy.webp";
2
2
  import { onMount } from "svelte";
3
- import { dialogManager } from "./dialog_manager/DialogManagerStore";
4
- import { DialogState } from "../types/pineapple_fiber/DialogState";
3
+ import { dialogManager } from "../dialog_manager/DialogManagerStore";
4
+ import { DialogState } from "../../types/pineapple_fiber/DialogState";
5
5
  let currentMessage = "";
6
6
  dialogManager.currentMessage.subscribe((value) => {
7
7
  currentMessage = value;
@@ -35,7 +35,9 @@ const onDialogClick = () => {
35
35
  hidden={isHidden}
36
36
  style="--hidePercentWidth: -{hidePercent}vw;
37
37
  --hidePercentHeight: {hidePercent}vh;">
38
- <img src={currentPortrait} alt="Ares" class="dialog-portrait" />
38
+ <div class="dialog-portrait-container">
39
+ <img src={currentPortrait} alt="Ares" class="dialog-portrait" />
40
+ </div>
39
41
  <div class="card dialog-box variant-ghost-primary" on:click={onDialogClick}>
40
42
  <div class="card dialog-name">
41
43
  <p><b>Turnip</b></p>
@@ -53,8 +55,12 @@ const onDialogClick = () => {
53
55
  z-index: 10;
54
56
  }
55
57
 
56
- .dialog-elements > img {
57
- transform: translateX(var(--hidePercentWidth));
58
+ .dialog-elements:dir(ltr) {
59
+ left: 0;
60
+ }
61
+
62
+ .dialog-elements:dir(rtl) {
63
+ right: 0;
58
64
  }
59
65
 
60
66
  .dialog-elements > div {
@@ -81,16 +87,40 @@ const onDialogClick = () => {
81
87
  padding-right: 1rem;
82
88
  padding-top: 0.5rem;
83
89
  position: fixed;
90
+ }
84
91
 
92
+ .dialog-name:dir(ltr) {
85
93
  /* for centering vertically */
86
94
  transform: translateX(clamp(0em, 5vw - 0.5em, 1em)) translateY(-50%);
87
- }
95
+ }
88
96
 
89
- .dialog-portrait {
97
+ .dialog-name:dir(rtl) {
98
+ /* for centering vertically */
99
+ transform: translateX(calc(clamp(0em, 5vw - 0.5em, 1em) * -1)) translateY(-50%);
100
+ }
101
+
102
+ .dialog-portrait-container {
90
103
  position: fixed;
91
104
  bottom: 0;
92
- left: clamp(-4rem, calc(5vw - 5em), 0rem);
93
105
  height: clamp(30rem, 75vw, 40rem);
94
106
  width: auto;
95
107
  }
108
+
109
+ .dialog-portrait-container:dir(ltr) {
110
+ transform: translateX(var(--hidePercentWidth));
111
+ left: clamp(-4rem, calc(5vw - 5em), 0rem);
112
+ }
113
+
114
+ .dialog-portrait-container:dir(rtl) {
115
+ transform: translateX(calc(var(--hidePercentWidth) * -1));
116
+ right: clamp(-4rem, calc(5vw - 5em), 0rem);
117
+ }
118
+
119
+ .dialog-portrait {
120
+ height: 100%;
121
+ }
122
+
123
+ .dialog-portrait:dir(rtl) {
124
+ transform: scaleX(-1);
125
+ }
96
126
  </style>
@@ -1,21 +1,21 @@
1
- <!--
2
- OverridableMeta is convenient Svelte component allowing each page to override the head meta values
3
- based on their +page.ts.
4
-
5
- For example:
6
- <code>
7
- // +page.ts
8
-
9
- import type { OverridableMetaProps } from "../..";
10
-
11
- export const load = async (): Promise<OverridableMetaProps> => {
12
- return {
13
- title: "CustomTitle",
14
- };
15
- };
16
- </code>
17
- -->
18
-
1
+ <!--
2
+ OverridableMeta is convenient Svelte component allowing each page to override the head meta values
3
+ based on their +page.ts.
4
+
5
+ For example:
6
+ <code>
7
+ // +page.ts
8
+
9
+ import type { OverridableMetaProps } from "../..";
10
+
11
+ export const load = async (): Promise<OverridableMetaProps> => {
12
+ return {
13
+ title: "CustomTitle",
14
+ };
15
+ };
16
+ </code>
17
+ -->
18
+
19
19
  <script>import WebThumbnailImage from "../../assets/placeholder/placeholder_circle.png";
20
20
  export let rootUrl = "http://localhost:5173";
21
21
  export let title = "Welcome to my portfolio";
@@ -38,14 +38,14 @@ page.subscribe((p) => {
38
38
  data.ogDescription = pageData.ogDescription ?? ogDescription;
39
39
  data.ogImage = pageData.ogImage ?? ogImage;
40
40
  });
41
- </script>
42
-
43
- <svelte:head>
44
- <meta charset="utf-8" />
45
- <title>{data.title}</title>
46
- <meta name="twitter:card" content="summary" />
47
- <meta property="og:url" content={data.ogUrl} />
48
- <meta property="og:title" content={data.ogTitle} />
49
- <meta property="og:description" content={data.ogDescription} />
50
- <meta property="og:image" content={data.ogImage} />
51
- </svelte:head>
41
+ </script>
42
+
43
+ <svelte:head>
44
+ <meta charset="utf-8" />
45
+ <title>{data.title}</title>
46
+ <meta name="twitter:card" content="summary" />
47
+ <meta property="og:url" content={data.ogUrl} />
48
+ <meta property="og:title" content={data.ogTitle} />
49
+ <meta property="og:description" content={data.ogDescription} />
50
+ <meta property="og:image" content={data.ogImage} />
51
+ </svelte:head>
@@ -8,7 +8,7 @@ import FABIcon from "../../assets/bg_tiled/bg_tiled_turnip.png";
8
8
  import CloseIcon from "../../assets/icons/close.svg";
9
9
  import { dialogManager, enableDialogueOverlay } from "../dialog_manager/DialogManagerStore";
10
10
  import Toast from "./toast/Toast.svelte";
11
- import DialogOverlay from "../DialogOverlay.svelte";
11
+ import DialogOverlay from "../dialog_overlay/DialogOverlay.svelte";
12
12
  import { fade } from "svelte/transition";
13
13
  let pages = [];
14
14
  const updateBreadcrumb = (pathname) => {
@@ -269,6 +269,7 @@ enableDialogueOverlay.set(showDialogByDefault);
269
269
  bottom: var(--fab-margin);
270
270
  width: 4em;
271
271
  border-radius: 50%;
272
+ z-index: 100;
272
273
  }
273
274
 
274
275
  .fab > img {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@turnipxenon/pineapple",
3
3
  "description": "personal package for base styling for other personal projects",
4
- "version": "2.4.27",
4
+ "version": "2.4.29",
5
5
  "scripts": {
6
6
  "dev": "vite dev",
7
7
  "build": "npm run check-requirements && vite build && yarn package",
@@ -1,8 +1,7 @@
1
1
  <script lang="ts">
2
- import AresHappy from "$lib/assets/characters/ares/ares_happy.webp";
2
+ import AresHappy from "$pkg/assets/characters/ares/ares_happy.webp";
3
3
  import { onMount } from "svelte";
4
-
5
- import { dialogManager } from "$lib/components/dialog_manager/DialogManagerStore";
4
+ import { dialogManager } from "$pkg/components/dialog_manager/DialogManagerStore";
6
5
  import { DialogState } from "$pkg/types/pineapple_fiber/DialogState";
7
6
 
8
7
  let currentMessage = "";
@@ -43,7 +42,9 @@
43
42
  hidden={isHidden}
44
43
  style="--hidePercentWidth: -{hidePercent}vw;
45
44
  --hidePercentHeight: {hidePercent}vh;">
46
- <img src={currentPortrait} alt="Ares" class="dialog-portrait" />
45
+ <div class="dialog-portrait-container">
46
+ <img src={currentPortrait} alt="Ares" class="dialog-portrait" />
47
+ </div>
47
48
  <div class="card dialog-box variant-ghost-primary" on:click={onDialogClick}>
48
49
  <div class="card dialog-name">
49
50
  <p><b>Turnip</b></p>
@@ -61,8 +62,12 @@
61
62
  z-index: 10;
62
63
  }
63
64
 
64
- .dialog-elements > img {
65
- transform: translateX(var(--hidePercentWidth));
65
+ .dialog-elements:dir(ltr) {
66
+ left: 0;
67
+ }
68
+
69
+ .dialog-elements:dir(rtl) {
70
+ right: 0;
66
71
  }
67
72
 
68
73
  .dialog-elements > div {
@@ -87,16 +92,40 @@
87
92
  .dialog-name {
88
93
  @apply pt-2 px-4;
89
94
  position: fixed;
95
+ }
90
96
 
97
+ .dialog-name:dir(ltr) {
91
98
  /* for centering vertically */
92
99
  transform: translateX(clamp(0em, 5vw - 0.5em, 1em)) translateY(-50%);
93
100
  }
94
101
 
95
- .dialog-portrait {
102
+ .dialog-name:dir(rtl) {
103
+ /* for centering vertically */
104
+ transform: translateX(calc(clamp(0em, 5vw - 0.5em, 1em) * -1)) translateY(-50%);
105
+ }
106
+
107
+ .dialog-portrait-container {
96
108
  position: fixed;
97
109
  bottom: 0;
98
- left: clamp(-4rem, calc(5vw - 5em), 0rem);
99
110
  height: clamp(30rem, 75vw, 40rem);
100
111
  width: auto;
101
112
  }
113
+
114
+ .dialog-portrait-container:dir(ltr) {
115
+ transform: translateX(var(--hidePercentWidth));
116
+ left: clamp(-4rem, calc(5vw - 5em), 0rem);
117
+ }
118
+
119
+ .dialog-portrait-container:dir(rtl) {
120
+ transform: translateX(calc(var(--hidePercentWidth) * -1));
121
+ right: clamp(-4rem, calc(5vw - 5em), 0rem);
122
+ }
123
+
124
+ .dialog-portrait {
125
+ height: 100%;
126
+ }
127
+
128
+ .dialog-portrait:dir(rtl) {
129
+ transform: scaleX(-1);
130
+ }
102
131
  </style>
@@ -1,56 +1,56 @@
1
- <!--
2
- OverridableMeta is convenient Svelte component allowing each page to override the head meta values
3
- based on their +page.ts.
4
-
5
- For example:
6
- <code>
7
- // +page.ts
8
-
9
- import type { OverridableMetaProps } from "$pkg";
10
-
11
- export const load = async (): Promise<OverridableMetaProps> => {
12
- return {
13
- title: "CustomTitle",
14
- };
15
- };
16
- </code>
17
- -->
18
-
19
- <script lang="ts">
20
- import WebThumbnailImage from "$pkg/assets/placeholder/placeholder_circle.png";
21
-
22
- export let rootUrl = "http://localhost:5173";
23
- export let title = "Welcome to my portfolio";
24
- export let ogTitle = "Turnip time!";
25
- export let ogDescription = "Welcome to Turnip's test portfolio";
26
- export let ogImage = WebThumbnailImage;
27
-
28
- import { page } from "$app/stores";
29
- import type { OverridableMetaProps } from "./OverridableMetaProps";
30
-
31
- const data: OverridableMetaProps = {
32
- title: "Welcome to my portfolio",
33
- ogUrl: "https://www.crouton.net/",
34
- ogTitle: "Turnip time!",
35
- ogDescription: "Welcome to Turnip's test portfolio",
36
- ogImage: WebThumbnailImage
37
- };
38
- page.subscribe(p => {
39
- const pageData: OverridableMetaProps = p.data;
40
- data.title = pageData.title ?? title;
41
- data.ogUrl = `${rootUrl}${p.url.pathname}`;
42
- data.ogTitle = pageData.ogTitle ?? ogTitle;
43
- data.ogDescription = pageData.ogDescription ?? ogDescription;
44
- data.ogImage = pageData.ogImage ?? ogImage;
45
- });
46
- </script>
47
-
48
- <svelte:head>
49
- <meta charset="utf-8" />
50
- <title>{data.title}</title>
51
- <meta name="twitter:card" content="summary" />
52
- <meta property="og:url" content={data.ogUrl} />
53
- <meta property="og:title" content={data.ogTitle} />
54
- <meta property="og:description" content={data.ogDescription} />
55
- <meta property="og:image" content={data.ogImage} />
56
- </svelte:head>
1
+ <!--
2
+ OverridableMeta is convenient Svelte component allowing each page to override the head meta values
3
+ based on their +page.ts.
4
+
5
+ For example:
6
+ <code>
7
+ // +page.ts
8
+
9
+ import type { OverridableMetaProps } from "$pkg";
10
+
11
+ export const load = async (): Promise<OverridableMetaProps> => {
12
+ return {
13
+ title: "CustomTitle",
14
+ };
15
+ };
16
+ </code>
17
+ -->
18
+
19
+ <script lang="ts">
20
+ import WebThumbnailImage from "$pkg/assets/placeholder/placeholder_circle.png";
21
+
22
+ export let rootUrl = "http://localhost:5173";
23
+ export let title = "Welcome to my portfolio";
24
+ export let ogTitle = "Turnip time!";
25
+ export let ogDescription = "Welcome to Turnip's test portfolio";
26
+ export let ogImage = WebThumbnailImage;
27
+
28
+ import { page } from "$app/stores";
29
+ import type { OverridableMetaProps } from "./OverridableMetaProps";
30
+
31
+ const data: OverridableMetaProps = {
32
+ title: "Welcome to my portfolio",
33
+ ogUrl: "https://www.crouton.net/",
34
+ ogTitle: "Turnip time!",
35
+ ogDescription: "Welcome to Turnip's test portfolio",
36
+ ogImage: WebThumbnailImage
37
+ };
38
+ page.subscribe(p => {
39
+ const pageData: OverridableMetaProps = p.data;
40
+ data.title = pageData.title ?? title;
41
+ data.ogUrl = `${rootUrl}${p.url.pathname}`;
42
+ data.ogTitle = pageData.ogTitle ?? ogTitle;
43
+ data.ogDescription = pageData.ogDescription ?? ogDescription;
44
+ data.ogImage = pageData.ogImage ?? ogImage;
45
+ });
46
+ </script>
47
+
48
+ <svelte:head>
49
+ <meta charset="utf-8" />
50
+ <title>{data.title}</title>
51
+ <meta name="twitter:card" content="summary" />
52
+ <meta property="og:url" content={data.ogUrl} />
53
+ <meta property="og:title" content={data.ogTitle} />
54
+ <meta property="og:description" content={data.ogDescription} />
55
+ <meta property="og:image" content={data.ogImage} />
56
+ </svelte:head>
@@ -1,7 +1,7 @@
1
- export interface OverridableMetaProps {
2
- title?: string;
3
- ogUrl?: string;
4
- ogTitle?: string;
5
- ogDescription?: string;
6
- ogImage?: string;
7
- }
1
+ export interface OverridableMetaProps {
2
+ title?: string;
3
+ ogUrl?: string;
4
+ ogTitle?: string;
5
+ ogDescription?: string;
6
+ ogImage?: string;
7
+ }
@@ -1,4 +1,4 @@
1
- // noinspection JSUnusedGlobalSymbols
2
-
3
- export { default as OverridableMeta } from "./OverridableMeta.svelte";
4
- export * from "./OverridableMetaProps";
1
+ // noinspection JSUnusedGlobalSymbols
2
+
3
+ export { default as OverridableMeta } from "./OverridableMeta.svelte";
4
+ export * from "./OverridableMetaProps";
@@ -17,7 +17,7 @@
17
17
  import CloseIcon from "$pkg/assets/icons/close.svg";
18
18
  import { dialogManager, enableDialogueOverlay } from "$pkg/components/dialog_manager/DialogManagerStore";
19
19
  import Toast from "$pkg/components/pineapple/toast/Toast.svelte";
20
- import DialogOverlay from "$pkg/components/DialogOverlay.svelte";
20
+ import DialogOverlay from "$pkg/components/dialog_overlay/DialogOverlay.svelte";
21
21
  import { fade } from "svelte/transition";
22
22
  // todo: clean up all these imports!
23
23
 
@@ -201,6 +201,7 @@
201
201
  bottom: var(--fab-margin);
202
202
  width: 4em;
203
203
  border-radius: 50%;
204
+ z-index: 100;
204
205
  }
205
206
 
206
207
  .fab > img {
@@ -26,24 +26,28 @@
26
26
  };
27
27
  </script>
28
28
 
29
- <Card>
30
- <div slot="content" class="default-card">
31
- <button
32
- class="btn variant-filled-secondary"
33
- on:click={() => {
29
+ <div class="pineapple-container">
30
+ <Card>
31
+ <div slot="content" class="default-card">
32
+ <button
33
+ class="btn variant-filled-secondary"
34
+ on:click={() => {
34
35
  showComponentInToast({componentAndProps: {component: TestCard, props: undefined}});
35
36
  }}><h3>Test custom toast</h3></button>
36
- <button
37
- class="btn variant-filled-secondary"
38
- on:click={() => {
37
+ <button
38
+ class="btn variant-filled-secondary"
39
+ on:click={() => {
39
40
  showTextInToast(`${testingQueueNumber} ${testingRandomPhrases[testingQueueNumber]}`);
40
41
  testingQueueNumber = (testingQueueNumber + 1) % testingRandomPhrases.length;
41
42
  }}><h3>Handy toast</h3></button>
42
- <button
43
- class="btn variant-filled-secondary"
44
- on:click={onTestDialogClick}><h3>Test dialog</h3></button>
45
- </div>
46
- </Card>
43
+ <button
44
+ class="btn variant-filled-secondary"
45
+ on:click={onTestDialogClick}><h3>Test dialog</h3></button>
46
+ </div>
47
+ </Card>
48
+ <Card><h1 class="filler" slot="content">Card</h1></Card>
49
+ <Card><h1 class="filler" slot="content">Card</h1></Card>
50
+ </div>
47
51
 
48
52
  <style lang="postcss">
49
53
  .default-card {
@@ -51,4 +55,13 @@
51
55
  flex-wrap: wrap;
52
56
  gap: 2em;
53
57
  }
58
+
59
+ .pineapple-container {
60
+ display: flex;
61
+ flex-direction: column;
62
+ }
63
+
64
+ .filler {
65
+ padding: 2em;
66
+ }
54
67
  </style>
@@ -1,8 +1,8 @@
1
- import type { OverridableMetaProps } from "$pkg/components/overrideable_meta/OverridableMetaProps";
2
-
3
- export const load = async (): Promise<OverridableMetaProps> => {
4
- return {
5
- title: "Pineapple",
6
- ogTitle: "Pineapple"
7
- };
8
- };
1
+ import type { OverridableMetaProps } from "$pkg/components/overrideable_meta/OverridableMetaProps";
2
+
3
+ export const load = async (): Promise<OverridableMetaProps> => {
4
+ return {
5
+ title: "Pineapple",
6
+ ogTitle: "Pineapple"
7
+ };
8
+ };
@@ -1,8 +1,8 @@
1
- import type { OverridableMetaProps } from "$pkg/components/overrideable_meta/OverridableMetaProps";
2
-
3
- export const load = async (): Promise<OverridableMetaProps> => {
4
- return {
5
- title: "Niko",
6
- ogTitle: "Niko"
7
- };
8
- };
1
+ import type { OverridableMetaProps } from "$pkg/components/overrideable_meta/OverridableMetaProps";
2
+
3
+ export const load = async (): Promise<OverridableMetaProps> => {
4
+ return {
5
+ title: "Niko",
6
+ ogTitle: "Niko"
7
+ };
8
+ };