@turnipxenon/pineapple 2.4.28 → 2.4.30

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 (53) hide show
  1. package/.idea/workspace.xml +170 -158
  2. package/.svelte-kit/__package__/components/navigation_component/NavigationComponent.svelte +229 -0
  3. package/.svelte-kit/__package__/components/navigation_component/NavigationComponent.svelte.d.ts +24 -0
  4. package/.svelte-kit/__package__/components/navigation_component/NavigationControl.svelte +121 -0
  5. package/.svelte-kit/__package__/components/navigation_component/NavigationControl.svelte.d.ts +18 -0
  6. package/.svelte-kit/__package__/components/navigation_component/PageMeta.d.ts +23 -0
  7. package/.svelte-kit/__package__/components/navigation_component/PageMeta.js +76 -0
  8. package/.svelte-kit/__package__/components/pineapple/PineappleBaseLayout.svelte +1 -0
  9. package/.svelte-kit/generated/client/app.js +19 -3
  10. package/.svelte-kit/generated/client/nodes/10.js +1 -0
  11. package/.svelte-kit/generated/client/nodes/11.js +1 -0
  12. package/.svelte-kit/generated/client/nodes/12.js +1 -0
  13. package/.svelte-kit/generated/client/nodes/13.js +1 -0
  14. package/.svelte-kit/generated/client/nodes/14.js +3 -0
  15. package/.svelte-kit/generated/client/nodes/15.js +3 -0
  16. package/.svelte-kit/generated/client/nodes/6.js +1 -3
  17. package/.svelte-kit/generated/client/nodes/7.js +1 -3
  18. package/.svelte-kit/generated/client/nodes/8.js +1 -1
  19. package/.svelte-kit/generated/client/nodes/9.js +1 -1
  20. package/.svelte-kit/generated/server/internal.js +1 -1
  21. package/.svelte-kit/types/route_meta_data.json +8 -0
  22. package/.svelte-kit/types/src/routes/$types.d.ts +1 -1
  23. package/.svelte-kit/types/src/routes/(pineapple)/$types.d.ts +1 -1
  24. package/.svelte-kit/types/src/routes/(pineapple)/pineapple/(extra-pages)/page1/$types.d.ts +17 -0
  25. package/.svelte-kit/types/src/routes/(pineapple)/pineapple/(extra-pages)/page2/$types.d.ts +17 -0
  26. package/.svelte-kit/types/src/routes/(pineapple)/pineapple/(extra-pages)/page3/$types.d.ts +17 -0
  27. package/.svelte-kit/types/src/routes/(pineapple)/pineapple/(extra-pages)/page3/page5/$types.d.ts +17 -0
  28. package/.svelte-kit/types/src/routes/(pineapple)/pineapple/(extra-pages)/page3/page6/$types.d.ts +17 -0
  29. package/.svelte-kit/types/src/routes/(pineapple)/pineapple/(extra-pages)/page3/page7/$types.d.ts +17 -0
  30. package/.svelte-kit/types/src/routes/(pineapple)/pineapple/(extra-pages)/page3/page7/(test_layout)/page8/$types.d.ts +17 -0
  31. package/.svelte-kit/types/src/routes/(pineapple)/pineapple/(extra-pages)/page4/$types.d.ts +17 -0
  32. package/dist/components/navigation_component/NavigationComponent.svelte +229 -0
  33. package/dist/components/navigation_component/NavigationComponent.svelte.d.ts +24 -0
  34. package/dist/components/navigation_component/NavigationControl.svelte +121 -0
  35. package/dist/components/navigation_component/NavigationControl.svelte.d.ts +18 -0
  36. package/dist/components/navigation_component/PageMeta.d.ts +23 -0
  37. package/dist/components/navigation_component/PageMeta.js +76 -0
  38. package/dist/components/pineapple/PineappleBaseLayout.svelte +1 -0
  39. package/package.json +1 -1
  40. package/src/lib/components/navigation_component/NavigationComponent.svelte +118 -0
  41. package/src/lib/components/navigation_component/NavigationControl.svelte +61 -0
  42. package/src/lib/components/navigation_component/PageMeta.ts +118 -0
  43. package/src/lib/components/pineapple/PineappleBaseLayout.svelte +1 -0
  44. package/src/routes/(pineapple)/+page.svelte +1 -1
  45. package/src/routes/(pineapple)/pineapple/(extra-pages)/page1/+page.svelte +13 -0
  46. package/src/routes/(pineapple)/pineapple/(extra-pages)/page2/+page.svelte +8 -0
  47. package/src/routes/(pineapple)/pineapple/(extra-pages)/page3/+page.svelte +8 -0
  48. package/src/routes/(pineapple)/pineapple/(extra-pages)/page3/page5/+page.svelte +8 -0
  49. package/src/routes/(pineapple)/pineapple/(extra-pages)/page3/page6/+page.svelte +8 -0
  50. package/src/routes/(pineapple)/pineapple/(extra-pages)/page3/page7/(test_layout)/page8/+page.svelte +8 -0
  51. package/src/routes/(pineapple)/pineapple/(extra-pages)/page3/page7/+page.svelte +8 -0
  52. package/src/routes/(pineapple)/pineapple/(extra-pages)/page4/+page.svelte +7 -0
  53. package/src/routes/(pineapple)/pineapple/+page.svelte +32 -14
@@ -0,0 +1,118 @@
1
+ import type { RawGlob } from "$pkg";
2
+
3
+ export interface PageMeta {
4
+ // generated meta
5
+ relativeLink: string;
6
+ nestedPages: PageMeta[];
7
+
8
+ // defined meta
9
+ title: string; // defaults to directory name
10
+ tags: string[];
11
+
12
+ /**
13
+ * Images are only limited to absolute paths (includes files in static folder)
14
+ */
15
+ image?: string;
16
+ imageAlt?: string;
17
+ description?: string;
18
+ datePublished?: string;
19
+ lastUpdated?: string;
20
+ shouldGroup?: boolean;
21
+ }
22
+
23
+ /**
24
+ * todo: doc
25
+ * @param parentList
26
+ * @param child
27
+ */
28
+ export const findPageMetaParent = (parentList: PageMeta[], child: PageMeta): boolean => {
29
+ let isChild = false;
30
+
31
+ parentList.every(parent => {
32
+ if (child.relativeLink.startsWith(`${parent.relativeLink}/`)) {
33
+ const isNestedChild = findPageMetaParent(parent.nestedPages, child);
34
+ if (!isNestedChild) {
35
+ parent.nestedPages.push(child);
36
+ }
37
+ isChild = true;
38
+ return false;
39
+ }
40
+
41
+ return true;
42
+ });
43
+
44
+ return isChild;
45
+ };
46
+
47
+ export type ParsePageMetaCompareFn = ((a: PageMeta, b: PageMeta) => number);
48
+
49
+ export const parsePageMeta = (fileList: Record<string, unknown>,
50
+ compareFn?: ParsePageMetaCompareFn): PageMeta[] => {
51
+ const pageFlatList: PageMeta[] = [];
52
+ // save for the future
53
+ // let pageGroupedList: PageMeta[] = [];
54
+
55
+ for (const path in fileList) {
56
+ const pathParts = path.split("/");
57
+ pathParts.pop();
58
+
59
+ // get title
60
+ const title = pathParts[pathParts.length - 1].replaceAll("-", " ");
61
+
62
+ // get url path
63
+ const subPath = pathParts.filter(s => {
64
+ return s !== "." && s.indexOf("(") !== 0;
65
+ });
66
+
67
+
68
+ // todo: consider
69
+ // subPath.unshift("/misc");
70
+ const meta: PageMeta = {
71
+ relativeLink: subPath.join("/"),
72
+ title,
73
+ tags: [],
74
+ nestedPages: []
75
+ // todo: transform the data in server.ts?
76
+ };
77
+
78
+
79
+ const body = (fileList[path] as RawGlob).default as string;
80
+ // let metadata : undefined | Map<string, string | string[]>;
81
+ if (body.startsWith("<!--")) {
82
+ // todo: absorb more metadata
83
+ const metadata = JSON.parse(body.slice("<!--".length, body.indexOf("-->")));
84
+ meta.title = metadata["title"] ?? meta.title;
85
+ meta.tags = metadata["tags"];
86
+ meta.description = metadata["description"];
87
+ meta.datePublished = metadata["datePublished"];
88
+ meta.lastUpdated = metadata["lastUpdated"];
89
+ meta.shouldGroup = metadata["shouldGroup"] as boolean;
90
+
91
+ meta.image = metadata["image"];
92
+ if (meta.image) {
93
+ meta.imageAlt = metadata["imageAlt"];
94
+ if (!meta.imageAlt) {
95
+ console.warn(`Accessibility issues: image alt missing for image ${meta.image}`);
96
+ }
97
+ }
98
+ }
99
+
100
+ pageFlatList.push(meta);
101
+ }
102
+
103
+ pageFlatList.sort((a, b) => a.relativeLink.localeCompare(b.relativeLink));
104
+
105
+ // find groupings
106
+ // todo: we don't even have use for this yet!
107
+ // pageFlatList.forEach(p => {
108
+ // if (!findPageMetaParent(pageGroupedList, p)) {
109
+ // pageGroupedList.push(p);
110
+ // }
111
+ // });
112
+
113
+ if (compareFn) {
114
+ pageFlatList.sort(compareFn);
115
+ }
116
+
117
+ return pageFlatList;
118
+ };
@@ -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 {
@@ -1,4 +1,4 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import { createGoToFunction } from "$pkg/util/util";
3
3
  import { Card } from "$pkg";
4
4
  </script>
@@ -0,0 +1,13 @@
1
+ <!--{
2
+ "title": "Custom title for page 1",
3
+ "image": "/favicon.png",
4
+ "tags": ["random"]
5
+ }-->
6
+ <script>
7
+ import { Card } from "$pkg";
8
+ import { page } from "$app/stores";
9
+ </script>
10
+
11
+ <Card>
12
+ <h1 slot="content" class="default-card">{$page.url}</h1>
13
+ </Card>
@@ -0,0 +1,8 @@
1
+ <script>
2
+ import { Card } from "$pkg";
3
+ import { page } from "$app/stores";
4
+ </script>
5
+
6
+ <Card>
7
+ <h1 slot="content" class="default-card">{$page.url}</h1>
8
+ </Card>
@@ -0,0 +1,8 @@
1
+ <script>
2
+ import { Card } from "$pkg";
3
+ import { page } from "$app/stores";
4
+ </script>
5
+
6
+ <Card>
7
+ <h1 slot="content" class="default-card">{$page.url}</h1>
8
+ </Card>
@@ -0,0 +1,8 @@
1
+ <script>
2
+ import { Card } from "$pkg";
3
+ import { page } from "$app/stores";
4
+ </script>
5
+
6
+ <Card>
7
+ <h1 slot="content" class="default-card">{$page.url}</h1>
8
+ </Card>
@@ -0,0 +1,8 @@
1
+ <script>
2
+ import { Card } from "$pkg";
3
+ import { page } from "$app/stores";
4
+ </script>
5
+
6
+ <Card>
7
+ <h1 slot="content" class="default-card">{$page.url}</h1>
8
+ </Card>
@@ -0,0 +1,8 @@
1
+ <script>
2
+ import { Card } from "$pkg";
3
+ import { page } from "$app/stores";
4
+ </script>
5
+
6
+ <Card>
7
+ <h1 slot="content" class="default-card">{$page.url}</h1>
8
+ </Card>
@@ -0,0 +1,8 @@
1
+ <script>
2
+ import { Card } from "$pkg";
3
+ import { page } from "$app/stores";
4
+ </script>
5
+
6
+ <Card>
7
+ <h1 slot="content" class="default-card">{$page.url}</h1>
8
+ </Card>
@@ -0,0 +1,7 @@
1
+ <script>
2
+ import { Card } from "$pkg";
3
+ </script>
4
+
5
+ <Card>
6
+ <h1 slot="content" class="default-card">Page 1</h1>
7
+ </Card>
@@ -3,8 +3,9 @@
3
3
  import TestCard from "$pkg/components/pineapple/toast/custom-toast/TestCustomToast.svelte";
4
4
  import TestDialogYarn from "./TestDialog.yarn?raw";
5
5
  import { Card, dialogManager } from "$pkg";
6
+ import NavigationComponent from "$pkg/components/navigation_component/NavigationComponent.svelte";
6
7
 
7
-
8
+ // region Toast test scripts
8
9
  let testingQueueNumber = 1;
9
10
  const testingRandomPhrases = [
10
11
  "Niko",
@@ -24,26 +25,38 @@
24
25
  dialogManager.toggleDialogOverlay();
25
26
  }
26
27
  };
28
+ // endregion
29
+
30
+
31
+ // todo: fix fragile relative reference to the root
32
+ const fileList = import.meta.glob("./**/+page.svelte", { query: "?raw", eager: true });
27
33
  </script>
28
34
 
29
- <Card>
30
- <div slot="content" class="default-card">
31
- <button
32
- class="btn variant-filled-secondary"
33
- on:click={() => {
35
+ <div class="pineapple-container">
36
+ <Card>
37
+ <div slot="content" class="default-card">
38
+ <button
39
+ class="btn variant-filled-secondary"
40
+ on:click={() => {
34
41
  showComponentInToast({componentAndProps: {component: TestCard, props: undefined}});
35
42
  }}><h3>Test custom toast</h3></button>
36
- <button
37
- class="btn variant-filled-secondary"
38
- on:click={() => {
43
+ <button
44
+ class="btn variant-filled-secondary"
45
+ on:click={() => {
39
46
  showTextInToast(`${testingQueueNumber} ${testingRandomPhrases[testingQueueNumber]}`);
40
47
  testingQueueNumber = (testingQueueNumber + 1) % testingRandomPhrases.length;
41
48
  }}><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>
49
+ <button
50
+ class="btn variant-filled-secondary"
51
+ on:click={onTestDialogClick}><h3>Test dialog</h3></button>
52
+ </div>
53
+ </Card>
54
+
55
+ <NavigationComponent title="Navigation Component Test"
56
+ fileList={fileList}
57
+ parentSubpath="/pineapple/">
58
+ </NavigationComponent>
59
+ </div>
47
60
 
48
61
  <style lang="postcss">
49
62
  .default-card {
@@ -51,4 +64,9 @@
51
64
  flex-wrap: wrap;
52
65
  gap: 2em;
53
66
  }
67
+
68
+ .pineapple-container {
69
+ display: flex;
70
+ flex-direction: column;
71
+ }
54
72
  </style>