@turnipxenon/pineapple 5.0.0 → 5.1.0
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 +11 -11
- package/dist/ui/components/FourPartCard.svelte +4 -0
- package/dist/ui/components/SortDropdown.svelte +50 -0
- package/dist/ui/components/SortDropdown.svelte.d.ts +9 -0
- package/dist/ui/components/SortDropdown.svelte.d.ts.map +1 -0
- package/dist/ui/components/TagFilter.svelte +32 -0
- package/dist/ui/components/TagFilter.svelte.d.ts +9 -0
- package/dist/ui/components/TagFilter.svelte.d.ts.map +1 -0
- package/dist/ui/components/accordion/PinyaAccordion.svelte +5 -3
- package/dist/ui/components/accordion/PinyaAccordion.svelte.d.ts.map +1 -1
- package/dist/ui/elements/CodeBlock/CodeBlock.svelte +12 -6
- package/dist/ui/elements/PineappleSwitch.svelte +2 -2
- package/dist/ui/elements/PineappleSwitch.svelte.d.ts +1 -1
- package/dist/ui/elements/PineappleSwitch.svelte.d.ts.map +1 -1
- package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte +169 -26
- package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte.d.ts.map +1 -1
- package/dist/ui/elements/pinya-combobox/PinyaComboboxProps.d.ts +6 -7
- package/dist/ui/elements/pinya-combobox/PinyaComboboxProps.d.ts.map +1 -1
- package/dist/ui/modules/experience/ExampleJob1.svelte +79 -0
- package/dist/ui/modules/experience/ExampleJob1.svelte.d.ts +26 -0
- package/dist/ui/modules/experience/ExampleJob1.svelte.d.ts.map +1 -0
- package/dist/ui/modules/experience/ExampleJob2.svelte +74 -0
- package/dist/ui/modules/experience/ExampleJob2.svelte.d.ts +25 -0
- package/dist/ui/modules/experience/ExampleJob2.svelte.d.ts.map +1 -0
- package/dist/ui/modules/experience/index.d.ts +3 -0
- package/dist/ui/modules/experience/index.d.ts.map +1 -0
- package/dist/ui/modules/experience/index.js +2 -0
- package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte +7 -9
- package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte.d.ts.map +1 -1
- package/dist/ui/modules/projects/Hepcat.svelte +5 -1
- package/dist/ui/modules/projects/Hepcat.svelte.d.ts +4 -1
- package/dist/ui/modules/projects/Hepcat.svelte.d.ts.map +1 -1
- package/dist/ui/modules/projects/Pengi.svelte +4 -1
- package/dist/ui/modules/projects/Pengi.svelte.d.ts +4 -1
- package/dist/ui/modules/projects/Pengi.svelte.d.ts.map +1 -1
- package/dist/ui/modules/projects/Soulwork.svelte +4 -1
- package/dist/ui/modules/projects/Soulwork.svelte.d.ts +4 -1
- package/dist/ui/modules/projects/Soulwork.svelte.d.ts.map +1 -1
- package/dist/ui/modules/projects/ThisWebpage.svelte +4 -2
- package/dist/ui/modules/projects/ThisWebpage.svelte.d.ts +3 -1
- package/dist/ui/modules/projects/ThisWebpage.svelte.d.ts.map +1 -1
- package/dist/ui/modules/universal-overlay/UniversalOverlay.svelte +0 -1
- package/dist/ui/modules/universal-overlay/UniversalOverlay.svelte.d.ts.map +1 -1
- package/dist/ui/templates/SeaweedLayout/EntryGroup.svelte +177 -29
- package/dist/ui/templates/SeaweedLayout/EntryGroup.svelte.d.ts.map +1 -1
- package/dist/ui/templates/SeaweedLayout/ProjectGroupConfig.svelte +1 -3
- package/dist/ui/templates/SeaweedLayout/SeaweedLayout.svelte +188 -44
- package/dist/ui/templates/SeaweedLayout/SeaweedLayout.svelte.d.ts.map +1 -1
- package/dist/ui/templates/SeaweedLayout/props.d.ts +18 -2
- package/dist/ui/templates/SeaweedLayout/props.d.ts.map +1 -1
- package/dist/ui/templates/SeaweedLayout/props.js +8 -1
- package/package.json +2 -2
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
2
|
+
declare const key = "Software Engineer at Old Company";
|
|
3
|
+
declare const dateStarted = "2022-01-01";
|
|
4
|
+
declare const dateFinished = "2024-12-31";
|
|
5
|
+
declare const tags: string[];
|
|
6
|
+
export { component, key, dateStarted, dateFinished, tags };
|
|
7
|
+
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
8
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
9
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
10
|
+
$$bindings?: Bindings;
|
|
11
|
+
} & Exports;
|
|
12
|
+
(internal: unknown, props: {
|
|
13
|
+
$$events?: Events;
|
|
14
|
+
$$slots?: Slots;
|
|
15
|
+
}): Exports & {
|
|
16
|
+
$set?: any;
|
|
17
|
+
$on?: any;
|
|
18
|
+
};
|
|
19
|
+
z_$$bindings?: Bindings;
|
|
20
|
+
}
|
|
21
|
+
declare const ExampleJob1: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
22
|
+
[evt: string]: CustomEvent<any>;
|
|
23
|
+
}, {}, {}, string>;
|
|
24
|
+
type ExampleJob1 = InstanceType<typeof ExampleJob1>;
|
|
25
|
+
export default ExampleJob1;
|
|
26
|
+
//# sourceMappingURL=ExampleJob1.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExampleJob1.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/experience/ExampleJob1.svelte.ts"],"names":[],"mappings":"AAKC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAEnG,QAAA,MAAM,GAAG,qCAAqC,CAAC;AAC/C,QAAA,MAAM,WAAW,eAAe,CAAC;AACjC,QAAA,MAAM,YAAY,eAAe,CAAC;AAClC,QAAA,MAAM,IAAI,UAAkC,CAAC;AAI7C,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACzD,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CAyBlG,CAAC;AAe9B,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,WAAW;;kBAA+E,CAAC;AAC/E,KAAK,WAAW,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AACtD,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<!-- TODO: Documentation: consider documentation showcase -->
|
|
2
|
+
|
|
3
|
+
<script module lang="ts">
|
|
4
|
+
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
5
|
+
import { default as FourPartCard } from "../../components/FourPartCard.svelte";
|
|
6
|
+
import { TextChip } from "../../elements/TextChip";
|
|
7
|
+
|
|
8
|
+
const key = "Senior Developer at Current Company";
|
|
9
|
+
const dateStarted = "2024-01-01";
|
|
10
|
+
// No dateFinished export - indicates ongoing position
|
|
11
|
+
// qt-ongoing, qt-systems, qt-performance, qt-infrastructure
|
|
12
|
+
const tags = ["ongoing", "rust", "systems", "performance", "infrastructure"];
|
|
13
|
+
export { component, key, dateStarted, tags };
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
{#snippet component(props: ProjectComponentProps)}
|
|
17
|
+
<FourPartCard>
|
|
18
|
+
{#snippet headerCover()}
|
|
19
|
+
<div class="company-logo-placeholder">
|
|
20
|
+
<h1>CC</h1>
|
|
21
|
+
</div>
|
|
22
|
+
{/snippet}
|
|
23
|
+
|
|
24
|
+
{#snippet header()}
|
|
25
|
+
<h3>Senior Developer</h3>
|
|
26
|
+
<h4>Current Company</h4>
|
|
27
|
+
<p class="date-range">Jan 2024 - Present</p>
|
|
28
|
+
{/snippet}
|
|
29
|
+
|
|
30
|
+
<p>
|
|
31
|
+
Currently working on high-performance systems using
|
|
32
|
+
<span class="qt-rust">Rust</span>.
|
|
33
|
+
Leading development of critical infrastructure components and mentoring junior developers to preach our love of
|
|
34
|
+
<span class="qt-rust">Rust</span>. Did I forget to mention <span class="qt-rust">RUST</span>?!?!
|
|
35
|
+
</p>
|
|
36
|
+
|
|
37
|
+
<div class="text-chip-container">
|
|
38
|
+
{#each tags as t (t)}
|
|
39
|
+
<TextChip queryClass="qt-{t}">{t}</TextChip>
|
|
40
|
+
{/each}
|
|
41
|
+
</div>
|
|
42
|
+
</FourPartCard>
|
|
43
|
+
{/snippet}
|
|
44
|
+
|
|
45
|
+
<style>
|
|
46
|
+
.company-logo-placeholder {
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
width: 100%;
|
|
51
|
+
height: 100%;
|
|
52
|
+
min-height: 150px;
|
|
53
|
+
background: linear-gradient(135deg, var(--color-secondary-500), var(--color-tertiary-500));
|
|
54
|
+
color: white;
|
|
55
|
+
font-size: 2rem;
|
|
56
|
+
font-weight: bold;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.date-range {
|
|
60
|
+
font-size: 0.875rem;
|
|
61
|
+
color: var(--color-text-secondary);
|
|
62
|
+
margin-bottom: 0.5rem;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
h4 {
|
|
66
|
+
margin-top: 0.25rem;
|
|
67
|
+
margin-bottom: 0.5rem;
|
|
68
|
+
color: var(--color-text-secondary);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.ongoing-badge {
|
|
72
|
+
margin-top: 0.5rem;
|
|
73
|
+
}
|
|
74
|
+
</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
2
|
+
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
3
|
+
declare const key = "Senior Developer at Current Company";
|
|
4
|
+
declare const dateStarted = "2024-01-01";
|
|
5
|
+
declare const tags: string[];
|
|
6
|
+
export { component, key, dateStarted, tags };
|
|
7
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
8
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
9
|
+
$$bindings?: Bindings;
|
|
10
|
+
} & Exports;
|
|
11
|
+
(internal: unknown, props: {
|
|
12
|
+
$$events?: Events;
|
|
13
|
+
$$slots?: Slots;
|
|
14
|
+
}): Exports & {
|
|
15
|
+
$set?: any;
|
|
16
|
+
$on?: any;
|
|
17
|
+
};
|
|
18
|
+
z_$$bindings?: Bindings;
|
|
19
|
+
}
|
|
20
|
+
declare const ExampleJob2: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
21
|
+
[evt: string]: CustomEvent<any>;
|
|
22
|
+
}, {}, {}, string>;
|
|
23
|
+
type ExampleJob2 = InstanceType<typeof ExampleJob2>;
|
|
24
|
+
export default ExampleJob2;
|
|
25
|
+
//# sourceMappingURL=ExampleJob2.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExampleJob2.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/experience/ExampleJob2.svelte.ts"],"names":[],"mappings":"AAGC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAGnG,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CA2BhG,CAAC;AAE7B,QAAA,MAAM,GAAG,wCAAwC,CAAC;AAClD,QAAA,MAAM,WAAW,eAAe,CAAC;AAGjC,QAAA,MAAM,IAAI,UAAkE,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAW9C,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,WAAW;;kBAA+E,CAAC;AAC/E,KAAK,WAAW,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AACtD,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/experience/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAC"}
|
|
@@ -16,16 +16,15 @@
|
|
|
16
16
|
{ label: "Tagalog", value: "tl" }
|
|
17
17
|
];
|
|
18
18
|
|
|
19
|
-
let selectedCountry = $state(getLocale());
|
|
19
|
+
let selectedCountry = $state([getLocale()]);
|
|
20
20
|
|
|
21
|
-
const onValueChange = (e:
|
|
22
|
-
if (!e.
|
|
21
|
+
const onValueChange = (e: ComboxData["value"][] | undefined) => {
|
|
22
|
+
if (!e || e.length === 0) return;
|
|
23
23
|
|
|
24
|
-
const data = comboboxData.
|
|
25
|
-
if (data) {
|
|
26
|
-
selectedCountry = data.value;
|
|
24
|
+
const data = comboboxData.filter(v => e.includes(v.value));
|
|
25
|
+
if (data && data.length > 0) {
|
|
27
26
|
const pathname = deLocalizeHref(location.href);
|
|
28
|
-
location.href = localizeHref(pathname, { locale: data.value });
|
|
27
|
+
location.href = localizeHref(pathname, { locale: data[0].value });
|
|
29
28
|
}
|
|
30
29
|
};
|
|
31
30
|
|
|
@@ -34,8 +33,7 @@
|
|
|
34
33
|
|
|
35
34
|
<PinyaCombobox
|
|
36
35
|
data={comboboxData}
|
|
37
|
-
value={selectedCountry}
|
|
38
|
-
defaultValue={selectedCountry}
|
|
36
|
+
bind:value={selectedCountry}
|
|
39
37
|
label="Select Language"
|
|
40
38
|
placeholder="Select Language"
|
|
41
39
|
{onValueChange}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LanguagePicker.svelte.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ui/modules/modals/general-settings/LanguagePicker.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LanguagePicker.svelte.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ui/modules/modals/general-settings/LanguagePicker.svelte.ts"],"names":[],"mappings":"AA4CA,QAAA,MAAM,cAAc,2DAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
import { ButtonVariant } from "../../elements/PinyaButtonCommon/ButtonVariant";
|
|
12
12
|
|
|
13
13
|
const key = "Hepcat";
|
|
14
|
-
|
|
14
|
+
const dateStarted = "2020-01-01";
|
|
15
|
+
const dateFinished = "2020-04-15";
|
|
16
|
+
const tags = ["unity", "csharp", "game", "rhythm", "rpgmaker"];
|
|
17
|
+
// type SnippetMeta at src/lib/ui/templates/SeaweedLayout/props.ts:6
|
|
18
|
+
export { component, key, dateStarted, dateFinished, tags };
|
|
15
19
|
</script>
|
|
16
20
|
|
|
17
21
|
{#snippet component(props: ProjectComponentProps)}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
2
2
|
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
3
3
|
declare const key = "Hepcat";
|
|
4
|
-
|
|
4
|
+
declare const dateStarted = "2020-01-01";
|
|
5
|
+
declare const dateFinished = "2020-04-15";
|
|
6
|
+
declare const tags: string[];
|
|
7
|
+
export { component, key, dateStarted, dateFinished, tags };
|
|
5
8
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
6
9
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
7
10
|
$$bindings?: Bindings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hepcat.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/projects/Hepcat.svelte.ts"],"names":[],"mappings":"AAKC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAMnG,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CAwChG,CAAC;AAE7B,QAAA,MAAM,GAAG,WAAW,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Hepcat.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/projects/Hepcat.svelte.ts"],"names":[],"mappings":"AAKC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAMnG,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CAwChG,CAAC;AAE7B,QAAA,MAAM,GAAG,WAAW,CAAC;AACrB,QAAA,MAAM,WAAW,eAAe,CAAC;AACjC,QAAA,MAAM,YAAY,eAAe,CAAC;AAClC,QAAA,MAAM,IAAI,UAAoD,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAY5D,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,MAAM;;kBAA+E,CAAC;AAC1E,KAAK,MAAM,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,CAAC;AAC5C,eAAe,MAAM,CAAC"}
|
|
@@ -11,7 +11,10 @@
|
|
|
11
11
|
import { ButtonVariant } from "../../elements/PinyaButtonCommon/ButtonVariant";
|
|
12
12
|
|
|
13
13
|
const key = "Pengi";
|
|
14
|
-
|
|
14
|
+
const dateStarted = "2020-08-01";
|
|
15
|
+
const dateFinished = "2020-12-15";
|
|
16
|
+
const tags = ["unity", "csharp", "game", "narrative", "yarnspinner"];
|
|
17
|
+
export { component, key, dateStarted, dateFinished, tags };
|
|
15
18
|
</script>
|
|
16
19
|
|
|
17
20
|
{#snippet component(props: ProjectComponentProps)}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
2
2
|
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
3
3
|
declare const key = "Pengi";
|
|
4
|
-
|
|
4
|
+
declare const dateStarted = "2020-08-01";
|
|
5
|
+
declare const dateFinished = "2020-12-15";
|
|
6
|
+
declare const tags: string[];
|
|
7
|
+
export { component, key, dateStarted, dateFinished, tags };
|
|
5
8
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
6
9
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
7
10
|
$$bindings?: Bindings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pengi.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/projects/Pengi.svelte.ts"],"names":[],"mappings":"AAKC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAMnG,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CAoChG,CAAC;AAE7B,QAAA,MAAM,GAAG,UAAU,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Pengi.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/projects/Pengi.svelte.ts"],"names":[],"mappings":"AAKC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAMnG,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CAoChG,CAAC;AAE7B,QAAA,MAAM,GAAG,UAAU,CAAC;AACpB,QAAA,MAAM,WAAW,eAAe,CAAC;AACjC,QAAA,MAAM,YAAY,eAAe,CAAC;AAClC,QAAA,MAAM,IAAI,UAA0D,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAS5D,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,KAAK;;kBAA+E,CAAC;AACzE,KAAK,KAAK,GAAG,YAAY,CAAC,OAAO,KAAK,CAAC,CAAC;AAC1C,eAAe,KAAK,CAAC"}
|
|
@@ -11,7 +11,10 @@
|
|
|
11
11
|
import { ButtonVariant } from "../../elements/PinyaButtonCommon/ButtonVariant";
|
|
12
12
|
|
|
13
13
|
const key = "Soulwork";
|
|
14
|
-
|
|
14
|
+
const dateStarted = "2019-11-09";
|
|
15
|
+
const dateFinished = "2019-11-10";
|
|
16
|
+
const tags = ["unity", "csharp", "game", "gamejam", "physics"];
|
|
17
|
+
export { component, key, dateStarted, dateFinished, tags };
|
|
15
18
|
</script>
|
|
16
19
|
|
|
17
20
|
{#snippet component(props: ProjectComponentProps)}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ProjectComponentProps } from "../../templates/SeaweedLayout";
|
|
2
2
|
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
3
3
|
declare const key = "Soulwork";
|
|
4
|
-
|
|
4
|
+
declare const dateStarted = "2019-11-09";
|
|
5
|
+
declare const dateFinished = "2019-11-10";
|
|
6
|
+
declare const tags: string[];
|
|
7
|
+
export { component, key, dateStarted, dateFinished, tags };
|
|
5
8
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
6
9
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
7
10
|
$$bindings?: Bindings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Soulwork.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/projects/Soulwork.svelte.ts"],"names":[],"mappings":"AAKC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAM7E,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CAiChG,CAAC;AAE7B,QAAA,MAAM,GAAG,aAAa,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Soulwork.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/projects/Soulwork.svelte.ts"],"names":[],"mappings":"AAKC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAM7E,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CAiChG,CAAC;AAE7B,QAAA,MAAM,GAAG,aAAa,CAAC;AACvB,QAAA,MAAM,WAAW,eAAe,CAAC;AACjC,QAAA,MAAM,YAAY,eAAe,CAAC;AAClC,QAAA,MAAM,IAAI,UAAoD,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAS5D,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,QAAQ;;kBAA+E,CAAC;AAC5E,KAAK,QAAQ,GAAG,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;AAChD,eAAe,QAAQ,CAAC"}
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
import { ButtonVariant } from "../../elements/PinyaButtonCommon/ButtonVariant";
|
|
13
13
|
|
|
14
14
|
const key = "This Webpage";
|
|
15
|
-
|
|
15
|
+
const dateStarted = "2023-06-01";
|
|
16
|
+
const tags = ["svelte", "typescript", "web", "tailwind", "postgres", "prisma", "ongoing", "database"];
|
|
17
|
+
export { component, key, dateStarted, tags };
|
|
16
18
|
</script>
|
|
17
19
|
|
|
18
20
|
{#snippet component(props: ProjectComponentProps)}
|
|
@@ -48,7 +50,7 @@
|
|
|
48
50
|
<TextChip queryClass="qt-svelte">Svelte 5</TextChip>
|
|
49
51
|
<TextChip queryClass="qt-tailwind">Tailwind 4</TextChip>
|
|
50
52
|
<TextChip queryClass="qt-skeleton">Skeleton (Svelte UI library)</TextChip>
|
|
51
|
-
<TextChip queryClass="qt-
|
|
53
|
+
<TextChip queryClass="qt-typescript">Typescript</TextChip>
|
|
52
54
|
<TextChip queryClass="qt-vercel qt-cicd">Vercel</TextChip>
|
|
53
55
|
<TextChip queryClass="qt-gamedev">YarnSpinner</TextChip>
|
|
54
56
|
<TextChip queryClass="qt-postgres qt-db">Postgres (SQL database)</TextChip>
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { ProjectComponentProps } from "../../templates/SeaweedLayout/ProjectComponentProps";
|
|
2
2
|
declare const component: (props: ProjectComponentProps) => ReturnType<import("svelte").Snippet>;
|
|
3
3
|
declare const key = "This Webpage";
|
|
4
|
-
|
|
4
|
+
declare const dateStarted = "2023-06-01";
|
|
5
|
+
declare const tags: string[];
|
|
6
|
+
export { component, key, dateStarted, tags };
|
|
5
7
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
6
8
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
7
9
|
$$bindings?: Bindings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThisWebpage.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/projects/ThisWebpage.svelte.ts"],"names":[],"mappings":"AAMC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAMnG,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CAgDhG,CAAC;AAE7B,QAAA,MAAM,GAAG,iBAAiB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ThisWebpage.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/projects/ThisWebpage.svelte.ts"],"names":[],"mappings":"AAMC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAMnG,QAAA,MAAM,SAAS,GAAyB,OAAO,qBAAqB,KAAqB,UAAU,CAAC,OAAO,QAAQ,EAAE,OAAO,CAgDhG,CAAC;AAE7B,QAAA,MAAM,GAAG,iBAAiB,CAAC;AAC3B,QAAA,MAAM,WAAW,eAAe,CAAC;AACjC,QAAA,MAAM,IAAI,UAA2F,CAAC;AACtG,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAS9C,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,WAAW;;kBAA+E,CAAC;AAC/E,KAAK,WAAW,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AACtD,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalOverlay.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/universal-overlay/UniversalOverlay.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UniversalOverlay.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/universal-overlay/UniversalOverlay.svelte.ts"],"names":[],"mappings":"AAkHA;;;;;;;GAOG;AACH,QAAA,MAAM,gBAAgB,2DAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,42 +1,161 @@
|
|
|
1
1
|
<!-- TODO: Documentation: consider documentation showcase -->
|
|
2
2
|
|
|
3
3
|
<script lang="ts">
|
|
4
|
+
import SortDropdown from "../../components/SortDropdown.svelte";
|
|
5
|
+
import TagFilter from "../../components/TagFilter.svelte";
|
|
4
6
|
import { PinyaCard } from "../../elements/PinyaCard";
|
|
5
7
|
import type { ProjectGroup, SnippetMeta } from "./";
|
|
8
|
+
import { SectionType } from "./props";
|
|
6
9
|
|
|
7
10
|
let {
|
|
8
11
|
title,
|
|
9
12
|
entryList,
|
|
10
|
-
projectComponentProps
|
|
13
|
+
projectComponentProps,
|
|
14
|
+
// New props for Seaweed 3
|
|
15
|
+
sectionType = SectionType.Projects,
|
|
16
|
+
showFilter = false,
|
|
17
|
+
showSort = false,
|
|
18
|
+
showMoreLimit = 0
|
|
11
19
|
}: ProjectGroup = $props();
|
|
12
20
|
|
|
13
|
-
|
|
21
|
+
// State
|
|
22
|
+
let selectedTags = $state<string[]>([]);
|
|
23
|
+
let sortBy = $state<string[]>(["default"]);
|
|
24
|
+
let isExpanded = $state(false);
|
|
14
25
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
// Derived values
|
|
27
|
+
const allTags = $derived([...new Set(entryList.flatMap(e => e.tags ?? []))]);
|
|
28
|
+
|
|
29
|
+
const filteredList = $derived(
|
|
30
|
+
selectedTags.length === 0
|
|
31
|
+
? entryList
|
|
32
|
+
: entryList.filter(e => e.tags?.some(t => selectedTags.includes(t)))
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
function sortEntries(list: SnippetMeta[], sort: string): SnippetMeta[] {
|
|
36
|
+
const sorted = [...list];
|
|
37
|
+
switch (sort) {
|
|
38
|
+
case "date-desc":
|
|
39
|
+
return sorted.sort((a, b) => {
|
|
40
|
+
// Entries without dateFinished go to the bottom
|
|
41
|
+
if (!a.dateFinished) return 1;
|
|
42
|
+
if (!b.dateFinished) return -1;
|
|
43
|
+
return new Date(b.dateFinished).getTime() - new Date(a.dateFinished).getTime();
|
|
44
|
+
});
|
|
45
|
+
case "date-asc":
|
|
46
|
+
return sorted.sort((a, b) => {
|
|
47
|
+
// Entries without dateFinished go to the bottom
|
|
48
|
+
if (!a.dateFinished) return 1;
|
|
49
|
+
if (!b.dateFinished) return -1;
|
|
50
|
+
return new Date(a.dateFinished).getTime() - new Date(b.dateFinished).getTime();
|
|
51
|
+
});
|
|
52
|
+
case "duration-desc":
|
|
53
|
+
return sorted.sort((a, b) => {
|
|
54
|
+
const durationA = getDuration(a);
|
|
55
|
+
const durationB = getDuration(b);
|
|
56
|
+
// Entries without valid dates go to the bottom
|
|
57
|
+
if (durationA === 0) return 1;
|
|
58
|
+
if (durationB === 0) return -1;
|
|
59
|
+
return durationB - durationA;
|
|
60
|
+
});
|
|
61
|
+
case "duration-asc":
|
|
62
|
+
return sorted.sort((a, b) => {
|
|
63
|
+
const durationA = getDuration(a);
|
|
64
|
+
const durationB = getDuration(b);
|
|
65
|
+
// Entries without valid dates go to the bottom
|
|
66
|
+
if (durationA === 0) return 1;
|
|
67
|
+
if (durationB === 0) return -1;
|
|
68
|
+
return durationA - durationB;
|
|
69
|
+
});
|
|
70
|
+
default:
|
|
71
|
+
return sorted;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function getDuration(entry: SnippetMeta): number {
|
|
76
|
+
if (!entry.dateStarted) return 0;
|
|
77
|
+
|
|
78
|
+
if (!entry.dateFinished) {
|
|
79
|
+
return new Date().getTime() - new Date(entry.dateStarted).getTime();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return new Date(entry.dateFinished).getTime() - new Date(entry.dateStarted).getTime();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const sortedList = $derived(sortEntries(filteredList, sortBy.length > 0 ? sortBy[0] : "default"));
|
|
86
|
+
|
|
87
|
+
const visibleList = $derived(
|
|
88
|
+
showMoreLimit > 0 && !isExpanded
|
|
89
|
+
? sortedList.slice(0, showMoreLimit)
|
|
90
|
+
: sortedList
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
const hasMore = $derived(showMoreLimit > 0 && sortedList.length > showMoreLimit);
|
|
21
94
|
</script>
|
|
22
95
|
|
|
23
|
-
<div class="
|
|
96
|
+
<div class="flex flex-col items-center entry-group-wrapper">
|
|
24
97
|
<PinyaCard class="group-header">
|
|
25
|
-
<
|
|
98
|
+
<div class="header-content">
|
|
99
|
+
<h2>{title}</h2>
|
|
100
|
+
<div class="header-controls">
|
|
101
|
+
{#if showFilter && allTags.length > 0}
|
|
102
|
+
<TagFilter bind:selectedTags {allTags} />
|
|
103
|
+
{/if}
|
|
104
|
+
{#if showSort}
|
|
105
|
+
<SortDropdown bind:sortBy={sortBy} {sectionType} />
|
|
106
|
+
{/if}
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
26
109
|
</PinyaCard>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
{
|
|
35
|
-
|
|
36
|
-
|
|
110
|
+
|
|
111
|
+
{#if sortedList.length === 0}
|
|
112
|
+
<div class="no-results">
|
|
113
|
+
<p>No items match your filter</p>
|
|
114
|
+
</div>
|
|
115
|
+
{:else}
|
|
116
|
+
<div class="normal-project-container">
|
|
117
|
+
{#each visibleList as ui (ui.key)}
|
|
118
|
+
{@render ui.component(projectComponentProps ?? {})}
|
|
119
|
+
{/each}
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
{#if hasMore}
|
|
123
|
+
<button class="show-more-btn" onclick={() => isExpanded = !isExpanded}>
|
|
124
|
+
{isExpanded ? "Show less" : `Click to see ${sortedList.length - visibleList.length} more...`}
|
|
125
|
+
</button>
|
|
126
|
+
{/if}
|
|
127
|
+
{/if}
|
|
37
128
|
</div>
|
|
38
129
|
|
|
39
130
|
<style>
|
|
131
|
+
.header-content {
|
|
132
|
+
display: flex;
|
|
133
|
+
flex-direction: column;
|
|
134
|
+
gap: 1rem;
|
|
135
|
+
width: 100%;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
@media (min-width: 768px) {
|
|
139
|
+
.header-content {
|
|
140
|
+
flex-direction: row;
|
|
141
|
+
justify-content: space-between;
|
|
142
|
+
align-items: center;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.header-controls {
|
|
147
|
+
display: flex;
|
|
148
|
+
flex-direction: column;
|
|
149
|
+
gap: 0.5rem;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@media (min-width: 768px) {
|
|
153
|
+
.header-controls {
|
|
154
|
+
flex-direction: row;
|
|
155
|
+
gap: 1rem;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
40
159
|
.normal-project-container {
|
|
41
160
|
display: flex;
|
|
42
161
|
flex-wrap: wrap;
|
|
@@ -49,21 +168,50 @@
|
|
|
49
168
|
align-items: start;
|
|
50
169
|
}
|
|
51
170
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
171
|
+
:global {
|
|
172
|
+
.upper-section-style .normal-project-container > .pinya-four-part-card {
|
|
173
|
+
max-width: revert;
|
|
174
|
+
flex-grow: revert;
|
|
175
|
+
flex-basis: revert;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.normal-project-container > .pinya-four-part-card {
|
|
179
|
+
max-width: 30em;
|
|
180
|
+
flex-grow: 1;
|
|
181
|
+
flex-basis: 25em;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.show-more-btn {
|
|
186
|
+
margin-bottom: 1.5lh;
|
|
187
|
+
padding: 0.5rem 1rem;
|
|
188
|
+
border-radius: var(--radius-lg);
|
|
189
|
+
border: 2px solid var(--color-primary-500);
|
|
190
|
+
background: transparent;
|
|
191
|
+
cursor: pointer;
|
|
192
|
+
transition: background-color 0.2s;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.show-more-btn:hover {
|
|
196
|
+
background: var(--color-primary-100);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.no-results {
|
|
200
|
+
padding: 2rem;
|
|
201
|
+
text-align: center;
|
|
202
|
+
color: var(--color-text-secondary);
|
|
61
203
|
}
|
|
62
204
|
|
|
63
205
|
:global {
|
|
64
206
|
.group-header.pinya-card {
|
|
65
207
|
margin-bottom: calc(var(--spacing) * 8);
|
|
66
208
|
max-width: unset;
|
|
209
|
+
width: 100%;
|
|
67
210
|
}
|
|
68
211
|
}
|
|
212
|
+
|
|
213
|
+
.entry-group-wrapper {
|
|
214
|
+
max-width: calc((28rem * 3) + 5rem);
|
|
215
|
+
width: 100%;
|
|
216
|
+
}
|
|
69
217
|
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntryGroup.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/templates/SeaweedLayout/EntryGroup.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EntryGroup.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/templates/SeaweedLayout/EntryGroup.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,iCAAiC,CAAC;AAwIjF,QAAA,MAAM,UAAU,kDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
};
|
|
103
103
|
});
|
|
104
104
|
|
|
105
|
-
let comboboxValue = $state(comboboxData[0].value);
|
|
105
|
+
let comboboxValue = $state([comboboxData[0].value]);
|
|
106
106
|
|
|
107
107
|
const addEntry = () => {
|
|
108
108
|
const c = allEntries.find(e => e.key === comboboxValue[0]);
|
|
@@ -205,11 +205,9 @@
|
|
|
205
205
|
<PinyaCombobox
|
|
206
206
|
class="project-group-config"
|
|
207
207
|
data={comboboxData}
|
|
208
|
-
defaultValue={comboboxValue}
|
|
209
208
|
bind:value={comboboxValue}
|
|
210
209
|
label="New entry"
|
|
211
210
|
placeholder="Add new entry"
|
|
212
|
-
contentZIndex="10"
|
|
213
211
|
/>
|
|
214
212
|
</td>
|
|
215
213
|
</tr>
|