From ad138b5de5838564e1c72c29ce416d152a193f65 Mon Sep 17 00:00:00 2001 From: BOTAlex Date: Thu, 29 Jan 2026 02:16:43 +0100 Subject: [PATCH] multi lang CV --- deprecated/tools/+page.svelte | 56 - .../battery-life-calculator/+page.svelte | 183 --- .../pageSrc/BatteryCalc.ts | 123 -- .../pageSrc/MCU_defs.ts | 63 - deprecated/tools/comps/ToolButton.svelte | 27 - deprecated/zhen/Comps/AboutMe.svelte | 18 - deprecated/zhen/Comps/TopNameTextPlate.svelte | 57 - .../zhen/Comps/ZhenInformatikTimeline.svelte | 67 - deprecated/zhen/Utils/Vector2.ts | 21 - .../zhen/cv/CompsRev3/AlexWatermark.svelte | 23 - .../zhen/cv/CompsRev3/BiggestFlex.svelte | 25 - .../zhen/cv/CompsRev3/BottomRightDecor.svelte | 53 - .../zhen/cv/CompsRev3/CombinedContacts.svelte | 7 - deprecated/zhen/cv/CompsRev3/Contact.svelte | 75 -- deprecated/zhen/cv/CompsRev3/Education.svelte | 47 - .../zhen/cv/CompsRev3/Experience.svelte | 78 -- .../zhen/cv/CompsRev3/IconAndText.svelte | 43 - .../zhen/cv/CompsRev3/IconAndText2.svelte | 31 - .../zhen/cv/CompsRev3/LeftTopDecor.svelte | 66 - .../zhen/cv/CompsRev3/LinkToSource.svelte | 106 -- .../zhen/cv/CompsRev3/LinkedInQR.svelte | 58 - .../zhen/cv/CompsRev3/NameAndImage.svelte | 26 - deprecated/zhen/cv/CompsRev3/NamePlate.svelte | 21 - .../zhen/cv/CompsRev3/OtherContact.svelte | 70 - deprecated/zhen/cv/CompsRev3/Profile.svelte | 34 - .../zhen/cv/CompsRev3/RepeatedSkills.svelte | 62 - .../zhen/cv/CompsRev3/ShortProfile.svelte | 29 - .../zhen/cv/CompsRev3/TableOfProjects.svelte | 88 -- deprecated/zhen/cv/cv.zip | Bin 28198 -> 0 bytes deprecated/zhen/cv/rev3/+page.svelte | 306 ----- .../zhen/notes/physics/sharedComps/A4.svelte | 16 - jsconfig.json | 3 + messages/dk.json | 28 + messages/en.json | 27 + package-lock.json | 1162 ++++++++++++++++- package.json | 9 +- project.inlang/settings.json | 12 + src/routes/cv/+page.svelte | 51 +- src/routes/cv/comps/BiggestFlex.svelte | 39 +- src/routes/cv/comps/Profile.svelte | 15 +- src/routes/cv/comps/TableOfProjects.svelte | 52 +- src/ts/store.ts | 1 + vite.config.js | 11 +- 43 files changed, 1315 insertions(+), 1974 deletions(-) delete mode 100644 deprecated/tools/+page.svelte delete mode 100644 deprecated/tools/battery-life-calculator/+page.svelte delete mode 100644 deprecated/tools/battery-life-calculator/pageSrc/BatteryCalc.ts delete mode 100644 deprecated/tools/battery-life-calculator/pageSrc/MCU_defs.ts delete mode 100644 deprecated/tools/comps/ToolButton.svelte delete mode 100644 deprecated/zhen/Comps/AboutMe.svelte delete mode 100644 deprecated/zhen/Comps/TopNameTextPlate.svelte delete mode 100644 deprecated/zhen/Comps/ZhenInformatikTimeline.svelte delete mode 100644 deprecated/zhen/Utils/Vector2.ts delete mode 100644 deprecated/zhen/cv/CompsRev3/AlexWatermark.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/BiggestFlex.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/BottomRightDecor.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/CombinedContacts.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/Contact.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/Education.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/Experience.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/IconAndText.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/IconAndText2.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/LeftTopDecor.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/LinkToSource.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/LinkedInQR.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/NameAndImage.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/NamePlate.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/OtherContact.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/Profile.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/RepeatedSkills.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/ShortProfile.svelte delete mode 100644 deprecated/zhen/cv/CompsRev3/TableOfProjects.svelte delete mode 100644 deprecated/zhen/cv/cv.zip delete mode 100644 deprecated/zhen/cv/rev3/+page.svelte delete mode 100644 deprecated/zhen/notes/physics/sharedComps/A4.svelte create mode 100644 messages/dk.json create mode 100644 messages/en.json create mode 100644 project.inlang/settings.json diff --git a/deprecated/tools/+page.svelte b/deprecated/tools/+page.svelte deleted file mode 100644 index 8c8e891..0000000 --- a/deprecated/tools/+page.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - -
- -
-

- Tools (NOT FINISHED. come back in the future.) -

- These are the tools collected from different places of the internet - - -
- -
-

MPUs/SoCs

- Whatever acronym you want lol -
- - -
-
- -
- I if you have tool suggestions, then either create an issue, create a - pull request, or send an email. I probably wont add it though, since - this is free work lol. -
-
-
-
diff --git a/deprecated/tools/battery-life-calculator/+page.svelte b/deprecated/tools/battery-life-calculator/+page.svelte deleted file mode 100644 index ab35b3c..0000000 --- a/deprecated/tools/battery-life-calculator/+page.svelte +++ /dev/null @@ -1,183 +0,0 @@ - - -
- -
-

Battery life calculator

- - Calculates the time a battery will last. Too lazy to explain - more. - - - -
- -
-

Software

-
-
- Duration of code execution -
- -
- sec -
-
-
-
- sleep time -
- -
- sec -
-
-
- -
-

Hardware

-
-
- Use custom values -
- -
-
- - {#if !useCustom} -
- - - {#if selectedMcu != undefined && selectedMcu?.wifi != undefined} -

- wifi -

- {/if} - {#if selectedMcu != undefined && selectedMcu?.wifi != undefined} -

- ble -

- {/if} -
- {:else} -
- Duration of code execution -
- -
- sec -
-
-
-
- sleep time -
- -
- sec -
-
-
- {/if} -
-
- -
- Source for the calculations is at this - github - and the - original website. - I just mearly made additions. -
-
-
-
- - diff --git a/deprecated/tools/battery-life-calculator/pageSrc/BatteryCalc.ts b/deprecated/tools/battery-life-calculator/pageSrc/BatteryCalc.ts deleted file mode 100644 index 2d05ee8..0000000 --- a/deprecated/tools/battery-life-calculator/pageSrc/BatteryCalc.ts +++ /dev/null @@ -1,123 +0,0 @@ -export class BatteryLifeCalculator { - timeRunSeconds: number; - timeSleepSeconds: number; - consumptionActiveMilliAmpHours: number; - consumptionSleepMilliAmpHours: number; - powerBatteryTotalMilliAmpHours: number; - powerBatteryBufferBeforeEmptyPercent: number; - - constructor( - timeRunSeconds: number, - timeSleepSeconds: number, - consumptionActiveMilliAmpHours: number, - consumptionSleepMilliAmpHours: number, - powerBatteryTotalMilliAmpHours: number, - powerBatteryBufferBeforeEmptyPercent: number = 20 - ) { - this.timeRunSeconds = timeRunSeconds; - this.timeSleepSeconds = timeSleepSeconds; - this.consumptionActiveMilliAmpHours = consumptionActiveMilliAmpHours; - this.consumptionSleepMilliAmpHours = consumptionSleepMilliAmpHours; - this.powerBatteryTotalMilliAmpHours = powerBatteryTotalMilliAmpHours; - this.powerBatteryBufferBeforeEmptyPercent = powerBatteryBufferBeforeEmptyPercent; - - console.log( - "The source of this battery calc is here: https://github.com/simonneutert/batterylife-calculator\nI was too lazy to make the math myself." - ); - } - - // public API - - milliAmpToMicroAmp(milliAmps: number): number { - return milliAmps * 1000; - } - - microAmpToMilliAmp(milliAmps: number): number { - return milliAmps * 0.001; - } - - calculate(): { - powerAveragePerHour: number; - runtimeHoursEstimated: number; - runtimeDaysEstimated: number; - runtimeDaysRemainingHoursEstimated: number; - } { - return { - powerAveragePerHour: this.powerEstimatedHourly(), - runtimeHoursEstimated: this.runtimeHoursEstimated(), - runtimeDaysEstimated: this.runtimeDaysEstimated(), - runtimeDaysRemainingHoursEstimated: this.runtimeDaysRemainingHoursEstimated(), - }; - } - - powerEstimatedHourly(): number { - return this.calcPowerEst( - this.powerRun(), - this.consumptionActiveMilliAmpHours, - this.powerSleep(), - this.consumptionSleepMilliAmpHours - ); - } - - runtimeHoursEstimated(): number { - return parseInt((this.powerLipo() / this.powerEstimatedHourly()).toString(), 10); - } - - runtimeDaysEstimated(): number { - return parseInt((this.runtimeHoursEstimated() / 24).toString(), 10); - } - - runtimeDaysRemainingHoursEstimated(): number { - return parseInt((this.runtimeHoursEstimated() % 24).toString(), 10); - } - - // private methods - - private roundOff(x: number): number { - return Math.round(x * 100.0) / 100.0; - } - - private calcPowerLipo(x: number, y: number): number { - return parseFloat(((x * (100 - y)) / 100).toString()); - } - - private calcRuns(x: number, y: number): number { - return parseFloat((60 / (x + y)).toString()); - } - - private calcRunsHour(x: number, y: number): number { - return parseFloat((3600 / (x + y)).toString()); - } - - private calcPowerRun(x: number, y: number): number { - return parseFloat(((x / (x + y)) * 3600).toString()); - } - - private calcPowerSleep(x: number, y: number): number { - return parseFloat(((y / (x + y)) * 3600).toString()); - } - - powerLipo(): number { - return this.calcPowerLipo(this.powerBatteryTotalMilliAmpHours, this.powerBatteryBufferBeforeEmptyPercent); - } - - runs(): number { - return this.calcRuns(this.timeRunSeconds, this.timeSleepSeconds); - } - - runsHour(): number { - return this.calcRunsHour(this.timeRunSeconds, this.timeSleepSeconds); - } - - powerRun(): number { - return this.calcPowerRun(this.timeRunSeconds, this.timeSleepSeconds); - } - - powerSleep(): number { - return this.calcPowerSleep(this.timeRunSeconds, this.timeSleepSeconds); - } - - private calcPowerEst(a: number, b: number, c: number, d: number): number { - return parseFloat(((a / 3600) * b + (c / 3600) * d).toString()); - } -} diff --git a/deprecated/tools/battery-life-calculator/pageSrc/MCU_defs.ts b/deprecated/tools/battery-life-calculator/pageSrc/MCU_defs.ts deleted file mode 100644 index d4372f2..0000000 --- a/deprecated/tools/battery-life-calculator/pageSrc/MCU_defs.ts +++ /dev/null @@ -1,63 +0,0 @@ -export interface MCU_Type { - name: string; - cpu: { [key: string]: Number }; // state: power consumption - sleep: { [key: string]: Number }; - wifi?: { [key: string]: Number }; - bluetooth?: { [key: string]: Number }; -} - -const MCUs: MCU_Type[] = [ - { - name: "esp32-s3", - cpu: { // mili amps - single_core_40MHz: 21.8, - dual_core_40MHz: 24.4, - single_core_80MHz: 42.6, - dual_core_80MHz: 47.3, - single_core_160MHz: 54.6, - dual_core_160MHz: 54.1, - single_core_240MHz: 65.9, - dual_core_240MHz: 81.3, - }, - sleep: { - - }, - wifi: { // - dBm_21: 318.2, - sleep: 10 - }, - bluetooth: { - active: 100, - sleep: 5 - } - }, - - { - name: "esp32-c3", - cpu: { - single_core_80MHz: 22, - single_core_160MHz: 54.6, - }, - sleep: { - - }, - wifi: { - active: 110, - sleep: 9 - }, - bluetooth: { - active: 90, - sleep: 4 - } - } -]; - -export function getMCU(name: string): MCU_Type | undefined{ - for (let i = 0; i < MCUs.length; i++) { - const element = MCUs[i]; - if (element.name == name) - return element - } - - return undefined; -} \ No newline at end of file diff --git a/deprecated/tools/comps/ToolButton.svelte b/deprecated/tools/comps/ToolButton.svelte deleted file mode 100644 index 8c369c6..0000000 --- a/deprecated/tools/comps/ToolButton.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - -
-
-
-
{title}
- -
-
{desc}
- -
- {#if toolIcon != undefined} - - {/if} - {btnText} -
-
-
\ No newline at end of file diff --git a/deprecated/zhen/Comps/AboutMe.svelte b/deprecated/zhen/Comps/AboutMe.svelte deleted file mode 100644 index 240d33a..0000000 --- a/deprecated/zhen/Comps/AboutMe.svelte +++ /dev/null @@ -1,18 +0,0 @@ -
-

Public CVs

-
- Rev1: Rev1.pdf -
-
- - \ No newline at end of file diff --git a/deprecated/zhen/Comps/TopNameTextPlate.svelte b/deprecated/zhen/Comps/TopNameTextPlate.svelte deleted file mode 100644 index 0373a2a..0000000 --- a/deprecated/zhen/Comps/TopNameTextPlate.svelte +++ /dev/null @@ -1,57 +0,0 @@ - - -
-
-
- - Zhentao Wei -
-

Alex

-
-
-
-
- - \ No newline at end of file diff --git a/deprecated/zhen/Comps/ZhenInformatikTimeline.svelte b/deprecated/zhen/Comps/ZhenInformatikTimeline.svelte deleted file mode 100644 index c1944be..0000000 --- a/deprecated/zhen/Comps/ZhenInformatikTimeline.svelte +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/deprecated/zhen/Utils/Vector2.ts b/deprecated/zhen/Utils/Vector2.ts deleted file mode 100644 index b455320..0000000 --- a/deprecated/zhen/Utils/Vector2.ts +++ /dev/null @@ -1,21 +0,0 @@ -export class Vector2 { - x: number; - y: number; - - constructor(x: number, y: number) { - this.x = x; - this.y = y; - } - - Add(vec2: Vector2) { - return new Vector2(this.x + vec2.x, this.y + vec2.y); - } - - Sub(vec2: Vector2) { - return new Vector2(this.x - vec2.x, this.y - vec2.y); - } - - Scale(mult: number) { - return new Vector2(this.x * mult, this.y * mult);; - } -} diff --git a/deprecated/zhen/cv/CompsRev3/AlexWatermark.svelte b/deprecated/zhen/cv/CompsRev3/AlexWatermark.svelte deleted file mode 100644 index 1f040f3..0000000 --- a/deprecated/zhen/cv/CompsRev3/AlexWatermark.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -
- ALEX -
- - diff --git a/deprecated/zhen/cv/CompsRev3/BiggestFlex.svelte b/deprecated/zhen/cv/CompsRev3/BiggestFlex.svelte deleted file mode 100644 index 0fa5cc4..0000000 --- a/deprecated/zhen/cv/CompsRev3/BiggestFlex.svelte +++ /dev/null @@ -1,25 +0,0 @@ -
-
- - Biggest flex - -

*Gamejams that had competitions.

-
-
- The deprived devs has won every gamejam, we've participated.
-
- -
- - diff --git a/deprecated/zhen/cv/CompsRev3/BottomRightDecor.svelte b/deprecated/zhen/cv/CompsRev3/BottomRightDecor.svelte deleted file mode 100644 index d777cf8..0000000 --- a/deprecated/zhen/cv/CompsRev3/BottomRightDecor.svelte +++ /dev/null @@ -1,53 +0,0 @@ - - -
-
-
-
-
- - - diff --git a/deprecated/zhen/cv/CompsRev3/CombinedContacts.svelte b/deprecated/zhen/cv/CompsRev3/CombinedContacts.svelte deleted file mode 100644 index 5c1dba2..0000000 --- a/deprecated/zhen/cv/CompsRev3/CombinedContacts.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/deprecated/zhen/cv/CompsRev3/Contact.svelte b/deprecated/zhen/cv/CompsRev3/Contact.svelte deleted file mode 100644 index ac17410..0000000 --- a/deprecated/zhen/cv/CompsRev3/Contact.svelte +++ /dev/null @@ -1,75 +0,0 @@ -
-
- - Contact - -
-
-
-
Email
-
Zhen@deprived.dev
-
-
-
Phone
-
+45 42535723
-
-
-
LinkedIn
- Zhentao-Wei -
-
-
- - diff --git a/deprecated/zhen/cv/CompsRev3/Education.svelte b/deprecated/zhen/cv/CompsRev3/Education.svelte deleted file mode 100644 index d4d14e0..0000000 --- a/deprecated/zhen/cv/CompsRev3/Education.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - -
-
- Education -
-
- - DTU
-

AI and data

-
- - Next
-

Computer science

-
- - Master class
-

SAS Programming

-
- - Emphasys center
-

VR development

-
-
-
- - - diff --git a/deprecated/zhen/cv/CompsRev3/Experience.svelte b/deprecated/zhen/cv/CompsRev3/Experience.svelte deleted file mode 100644 index 6dcaf8e..0000000 --- a/deprecated/zhen/cv/CompsRev3/Experience.svelte +++ /dev/null @@ -1,78 +0,0 @@ - - -
-
- Experience -
-
-
- - Full-stack
- Yaaumma
- Feb 2025 - Now -
-
-
- - Data annotator
- GrazperAI
- Jul 2024 - Now -
-
-
- - 3D printer manager - Volunteer
- Makerspace - kildevæld Kulturcenter
- Nov 2023 - Now -
-
-
- - Machine Learning Engineer - Short term intern
- Product design department - Epos
- Apr 2024 - Apr 2024 -
-
-
- - Assistant - Short term intern
- Khora Virtual Reality
- Oct 2020 - Oct 2020 -
-
-
-
- - diff --git a/deprecated/zhen/cv/CompsRev3/IconAndText.svelte b/deprecated/zhen/cv/CompsRev3/IconAndText.svelte deleted file mode 100644 index e2b2463..0000000 --- a/deprecated/zhen/cv/CompsRev3/IconAndText.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - -
- {imageCaption} -
- - - -
-
- - - diff --git a/deprecated/zhen/cv/CompsRev3/IconAndText2.svelte b/deprecated/zhen/cv/CompsRev3/IconAndText2.svelte deleted file mode 100644 index b2e0c94..0000000 --- a/deprecated/zhen/cv/CompsRev3/IconAndText2.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - -
-
- {imageCaption} -
-
- - - -
-
- - - diff --git a/deprecated/zhen/cv/CompsRev3/LeftTopDecor.svelte b/deprecated/zhen/cv/CompsRev3/LeftTopDecor.svelte deleted file mode 100644 index 741fe6a..0000000 --- a/deprecated/zhen/cv/CompsRev3/LeftTopDecor.svelte +++ /dev/null @@ -1,66 +0,0 @@ - - -
-
- -
-
-
-
- -
-
-
- - diff --git a/deprecated/zhen/cv/CompsRev3/LinkToSource.svelte b/deprecated/zhen/cv/CompsRev3/LinkToSource.svelte deleted file mode 100644 index a58cf61..0000000 --- a/deprecated/zhen/cv/CompsRev3/LinkToSource.svelte +++ /dev/null @@ -1,106 +0,0 @@ - - -
-
-
-
- This CV was made using html, css and SvelteKit logo -
- Sources: - CV source code - and - My Website -
-
-
- - diff --git a/deprecated/zhen/cv/CompsRev3/LinkedInQR.svelte b/deprecated/zhen/cv/CompsRev3/LinkedInQR.svelte deleted file mode 100644 index 0e9d2f8..0000000 --- a/deprecated/zhen/cv/CompsRev3/LinkedInQR.svelte +++ /dev/null @@ -1,58 +0,0 @@ - - -
-
LinkedIn
-
{@html QRCode}
-
- - diff --git a/deprecated/zhen/cv/CompsRev3/NameAndImage.svelte b/deprecated/zhen/cv/CompsRev3/NameAndImage.svelte deleted file mode 100644 index 2d4ec7a..0000000 --- a/deprecated/zhen/cv/CompsRev3/NameAndImage.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - -
- -
- Zhentao Wei - -
-
- - diff --git a/deprecated/zhen/cv/CompsRev3/NamePlate.svelte b/deprecated/zhen/cv/CompsRev3/NamePlate.svelte deleted file mode 100644 index b752996..0000000 --- a/deprecated/zhen/cv/CompsRev3/NamePlate.svelte +++ /dev/null @@ -1,21 +0,0 @@ -
- - - Zhentao Wei -
- (He/Him) - -
- -
- - diff --git a/deprecated/zhen/cv/CompsRev3/OtherContact.svelte b/deprecated/zhen/cv/CompsRev3/OtherContact.svelte deleted file mode 100644 index 96bb5d5..0000000 --- a/deprecated/zhen/cv/CompsRev3/OtherContact.svelte +++ /dev/null @@ -1,70 +0,0 @@ -
-
- - Other - -
-
-
-
Itch.io
- botalex.itch.io -
-
-
Github
- @MagicBOTAlex -
-
-
- - diff --git a/deprecated/zhen/cv/CompsRev3/Profile.svelte b/deprecated/zhen/cv/CompsRev3/Profile.svelte deleted file mode 100644 index 5677009..0000000 --- a/deprecated/zhen/cv/CompsRev3/Profile.svelte +++ /dev/null @@ -1,34 +0,0 @@ -
-
- - About me - -
- I know the languages listed above in the decor! -
-
- - I love learning on my own. I've placed my education at the bottom of my CV. - This is because everything I've learnt is on my own, and I refuse to give too much credit to my education. - I encurage you to checkout which Open-source projects I've worked on, on my github. -
-
- Other than my github, I've listed some projectss highlighted below. :) -
- -
- - diff --git a/deprecated/zhen/cv/CompsRev3/RepeatedSkills.svelte b/deprecated/zhen/cv/CompsRev3/RepeatedSkills.svelte deleted file mode 100644 index acc7e7e..0000000 --- a/deprecated/zhen/cv/CompsRev3/RepeatedSkills.svelte +++ /dev/null @@ -1,62 +0,0 @@ - - -
- {#each { length: targetTextHeight } as _, i} - - {GrabRandomString()} - - {/each} -
- - \ No newline at end of file diff --git a/deprecated/zhen/cv/CompsRev3/ShortProfile.svelte b/deprecated/zhen/cv/CompsRev3/ShortProfile.svelte deleted file mode 100644 index 6773bd2..0000000 --- a/deprecated/zhen/cv/CompsRev3/ShortProfile.svelte +++ /dev/null @@ -1,29 +0,0 @@ -
-
- - Short profile - -
-
- ◾ Full-stack at Yaaumma
- ◾ "AI and data" at DTU.
- ◾ Working at GrazperAI
- ◾ Volunteer at Kildevæld Makerspace. -
- -
- - diff --git a/deprecated/zhen/cv/CompsRev3/TableOfProjects.svelte b/deprecated/zhen/cv/CompsRev3/TableOfProjects.svelte deleted file mode 100644 index b2f470d..0000000 --- a/deprecated/zhen/cv/CompsRev3/TableOfProjects.svelte +++ /dev/null @@ -1,88 +0,0 @@ -
-
- - List of big projects - -
- It is likely I'm working on something new, as you're reading this. -
- Contact me if you're curious! :D -
-
-
-
-
Computer vision
-
Implimented YoloV1 from scratch. (object detection)
-
-
-
Arduino
-
Built my own claw machine from scratch.
-
-
-
App dev
-
Made an Doulingo'ish app for learning chinese.
-
-
-
Open-source
-
I contribute often to Open-source
-
-
-
PCB designing
-
I am currently designing my own circuit board
-
-
-
- - diff --git a/deprecated/zhen/cv/cv.zip b/deprecated/zhen/cv/cv.zip deleted file mode 100644 index 469b29647a0bb974aff2be82a296cc555bc9bf93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28198 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 J_QrrlPXIQ_Ys~-v diff --git a/deprecated/zhen/cv/rev3/+page.svelte b/deprecated/zhen/cv/rev3/+page.svelte deleted file mode 100644 index ad1757b..0000000 --- a/deprecated/zhen/cv/rev3/+page.svelte +++ /dev/null @@ -1,306 +0,0 @@ - - -Zhentao Wei's CV {getFormattedDate()} - - - - - -
-
- Under here is my CV rev1 for an application made entirely in HTML and CSS. - The page is designed to be saved as PDF. This can be done by pressing
- P -
- + -
CTRL
- , then set scaling to 100% and no margins. Lastly, select save to PDF or print. -
-
- I have to sadly recommend chrome for this process. Firefox somehow messes with - the quality of the PDF :( -
-
- -
-
-
- - -
-
-
- -
- -
- -
- -
-
-
-
-
- -
- -
-
- - - - - -
-
-
-
- - diff --git a/deprecated/zhen/notes/physics/sharedComps/A4.svelte b/deprecated/zhen/notes/physics/sharedComps/A4.svelte deleted file mode 100644 index f7ab836..0000000 --- a/deprecated/zhen/notes/physics/sharedComps/A4.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
-
-
- -
- - {#if bottomBorder} -
- {/if} -
-
\ No newline at end of file diff --git a/jsconfig.json b/jsconfig.json index b3052b0..fd81206 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -35,6 +35,9 @@ ], "@e/*": [ "./src/optimizers/*" + ], + "$paraglide/*": [ + "./src/paraglide/*" ] } } diff --git a/messages/dk.json b/messages/dk.json new file mode 100644 index 0000000..19134b3 --- /dev/null +++ b/messages/dk.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "example_message": "Guten Tag {username}", + "zhen": { + "cv": { + "profile": { + "title": "Om mig", + "tooltip": "Jeg kender de sprog I baggrunden!", + "long": "Jeg elsker at lære på egen hånd, og jeg prøver altid at være ærlig. eg er meget selvmotiveret og fuldfører som regel de opgaver, jeg sætter mig for. Det giver mig overskud til utallige hobbyer såsom 3D-print, lodning, programmering, og VR.\n\nUdover min GitHub har jeg fremhævet nogle projekter nedenfor. :)" + }, + "flex": { + "title": "Størreste bedrift", + "tooltip": "*Gamejams der havde konkurancer", + "body": "Mit hold
The deprived devs har vundet alle Game Jams, som vi har deltaget!" + }, + "projects": { + "title": "Fremhævet projekter", + "tooltip": "Jeg arbejder sikkert på noget nyt. Du er altid velkommen til at spørge!", + "cv": "Denne CV er lavet fuldstændig I HTML, CSS, og Svelte", + "CV": "Implimenteret YoloV1 fra bunden (Objekt genkendelse)", + "embedded": "Designet og bygget en CN Maskine", + "open": "Bidrager ofte til open-source", + "pcb": "Har designet flere printed circuit boards (PCB'er)", + "kube": "Multi node HA kube cluster med venner" + } + } + } +} diff --git a/messages/en.json b/messages/en.json new file mode 100644 index 0000000..ddf9f08 --- /dev/null +++ b/messages/en.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "example_message": "Guten Tag {username}", + "zhen": { + "cv": { + "profile": { + "title": "About me", + "tooltip": "I know the languages in the decor!", + "long": "I love learning on my own, and I try to be honest. I am highly self-motivated and I usually archive any task I put my mind to. This enables me to have countless hobbies, such as 3D printing, soldering, programming, and VR.\n\nOther than my github, I've listed some projects highlighted below. :)" + }, + "flex": { + "title": "Key Achievement", + "body": "The The deprived devs has won every gamejam we've participated in!" + }, + "projects": { + "title": "Big projects", + "tooltip": "Contact me if you're curious! :D", + "cv": "This CV is made with HTML, CSS, and Svelte", + "CV": "Implimented YoloV1 from scratch. (object detection)", + "embedded": "Built custom CNC machine", + "open": "Often contribute to Open-source", + "pcb": "I have designed multiple Printed Circuit Boards (PCBs)", + "kube": "Multi node HA Kubernetes cluster with my friends" + } + } + } +} diff --git a/package-lock.json b/package-lock.json index 501db8a..4f4fc0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,15 +10,19 @@ "dependencies": { "@lucide/svelte": "^0.487.0", "@tailwindcss/vite": "^4.1.3", + "i18n": "^0.15.3", "lucide-svelte": "^0.475.0", "marked": "^16.2.0", "pocketbase": "^0.26.2", + "svelte-i18n": "^4.0.1", "svelte-katex": "^0.1.2", "svelte-media-queries": "^1.6.2", "theme-change": "^2.5.0", "zod": "^4.1.11" }, "devDependencies": { + "@inlang/cli": "^3.0.0", + "@inlang/paraglide-js": "^2.9.1", "@sveltejs/adapter-auto": "^3.0.0", "@sveltejs/adapter-static": "^3.0.1", "@sveltejs/kit": "^2.20.4", @@ -78,6 +82,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", "dev": true, + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -619,6 +624,130 @@ "node": ">=12" } }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz", + "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==", + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/intl-localematcher": "0.6.2", + "decimal.js": "^10.4.3", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz", + "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz", + "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==", + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.6", + "@formatjs/icu-skeleton-parser": "1.8.16", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.16", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz", + "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==", + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.6", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", + "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@inlang/cli": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@inlang/cli/-/cli-3.1.4.tgz", + "integrity": "sha512-nVW1fzJVoNNX1EdBcfrg7TO7kpzKgo+lxWBwSPBNUrU3Z9Yv4QXeJCpEYJ5spR69L2O7jujMMQkxbYaOVEldZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@inlang/sdk": "2.6.2", + "esbuild-wasm": "^0.19.2" + }, + "bin": { + "inlang": "bin/run.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@inlang/paraglide-js": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@inlang/paraglide-js/-/paraglide-js-2.9.1.tgz", + "integrity": "sha512-hciFnOKGVA10BmLixmFFIOZwNFqlyhKwvC8V+mEh/XP1WaEUtwijBlcIn2odwN9obuGxI8Fu05KHOUuETrpj+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inlang/recommend-sherlock": "^0.2.1", + "@inlang/sdk": "2.6.2", + "commander": "11.1.0", + "consola": "3.4.0", + "json5": "2.2.3", + "unplugin": "^2.1.2", + "urlpattern-polyfill": "^10.0.0" + }, + "bin": { + "paraglide-js": "bin/run.js" + } + }, + "node_modules/@inlang/paraglide-js/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/@inlang/recommend-sherlock": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@inlang/recommend-sherlock/-/recommend-sherlock-0.2.1.tgz", + "integrity": "sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "comment-json": "^4.2.3" + } + }, + "node_modules/@inlang/sdk": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@inlang/sdk/-/sdk-2.6.2.tgz", + "integrity": "sha512-eOgAX+eQpHvD/H4BMILc4tZ85XviTlwr/51RKkKUHozVVthj5avUPKP+4N4vcTUrqSscl2atTh9NbNTuvoBN0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lix-js/sdk": "0.4.7", + "@sinclair/typebox": "^0.31.17", + "kysely": "^0.27.4", + "sqlite-wasm-kysely": "0.3.0", + "uuid": "^13.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", @@ -639,6 +768,17 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -661,6 +801,46 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@lix-js/sdk": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/@lix-js/sdk/-/sdk-0.4.7.tgz", + "integrity": "sha512-pRbW+joG12L0ULfMiWYosIW0plmW4AsUdiPCp+Z8rAsElJ+wJ6in58zhD3UwUcd4BNcpldEGjg6PdA7e0RgsDQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@lix-js/server-protocol-schema": "0.1.1", + "dedent": "1.5.1", + "human-id": "^4.1.1", + "js-sha256": "^0.11.0", + "kysely": "^0.27.4", + "sqlite-wasm-kysely": "0.3.0", + "uuid": "^10.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@lix-js/sdk/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@lix-js/server-protocol-schema": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@lix-js/server-protocol-schema/-/server-protocol-schema-0.1.1.tgz", + "integrity": "sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/@lucide/svelte": { "version": "0.487.0", "resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-0.487.0.tgz", @@ -669,6 +849,50 @@ "svelte": "^5" } }, + "node_modules/@messageformat/core": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@messageformat/core/-/core-3.4.0.tgz", + "integrity": "sha512-NgCFubFFIdMWJGN5WuQhHCNmzk7QgiVfrViFxcS99j7F5dDS5EP6raR54I+2ydhe4+5/XTn/YIEppFaqqVWHsw==", + "license": "MIT", + "dependencies": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.1.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "node_modules/@messageformat/date-skeleton": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@messageformat/date-skeleton/-/date-skeleton-1.1.0.tgz", + "integrity": "sha512-rmGAfB1tIPER+gh3p/RgA+PVeRE/gxuQ2w4snFWPF5xtb5mbWR7Cbw7wCOftcUypbD6HVoxrVdyyghPm3WzP5A==", + "license": "MIT" + }, + "node_modules/@messageformat/number-skeleton": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@messageformat/number-skeleton/-/number-skeleton-1.2.0.tgz", + "integrity": "sha512-xsgwcL7J7WhlHJ3RNbaVgssaIwcEyFkBqxHdcdaiJzwTZAWEOD8BuUFxnxV9k5S0qHN3v/KzUpq0IUpjH1seRg==", + "license": "MIT" + }, + "node_modules/@messageformat/parser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.1.tgz", + "integrity": "sha512-3p0YRGCcTUCYvBKLIxtDDyrJ0YijGIwrTRu1DT8gIviIDZru8H23+FkY6MJBzM1n9n20CiM4VeDYuBsrrwnLjg==", + "license": "MIT", + "dependencies": { + "moo": "^0.5.1" + } + }, + "node_modules/@messageformat/runtime": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@messageformat/runtime/-/runtime-3.0.2.tgz", + "integrity": "sha512-dkIPDCjXcfhSHgNE1/qV6TeczQZR59Yx0xXeafVKgK3QVWoxc38ljwpksUpnzCGvN151KUbCJTDZVmahtf1YZw==", + "license": "MIT", + "dependencies": { + "make-plural": "^7.0.0" + } + }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -1243,6 +1467,23 @@ "win32" ] }, + "node_modules/@sinclair/typebox": { + "version": "0.31.28", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.31.28.tgz", + "integrity": "sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sqlite.org/sqlite-wasm": { + "version": "3.48.0-build4", + "resolved": "https://registry.npmjs.org/@sqlite.org/sqlite-wasm/-/sqlite-wasm-3.48.0-build4.tgz", + "integrity": "sha512-hI6twvUkzOmyGZhQMza1gpfqErZxXRw6JEsiVjUbo7tFanVD+8Oil0Ih3l2nGzHdxPI41zFmfUQG7GHqhciKZQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "sqlite-wasm": "bin/index.js" + } + }, "node_modules/@sveltejs/acorn-typescript": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", @@ -1277,6 +1518,7 @@ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.22.2.tgz", "integrity": "sha512-2MvEpSYabUrsJAoq5qCOBGAlkICjfjunrnLcx3YAk2XV7TvAIhomlKsAgR4H/4uns5rAfYmj7Wet5KRtc8dPIg==", "dev": true, + "peer": true, "dependencies": { "@sveltejs/acorn-typescript": "^1.0.5", "@types/cookie": "^0.6.0", @@ -1309,6 +1551,7 @@ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.2.tgz", "integrity": "sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==", "dev": true, + "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", "debug": "^4.3.4", @@ -1528,6 +1771,7 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -1865,6 +2109,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1899,6 +2144,13 @@ "node": ">= 0.4" } }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true, + "license": "MIT" + }, "node_modules/autoprefixer": { "version": "10.4.21", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", @@ -2003,6 +2255,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001726", "electron-to-chromium": "^1.5.173", @@ -2089,6 +2342,22 @@ "node": ">=18" } }, + "node_modules/cli-color": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", + "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.64", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -2105,12 +2374,37 @@ "node": ">= 12" } }, + "node_modules/comment-json": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.5.1.tgz", + "integrity": "sha512-taEtr3ozUmOB7it68Jll7s0Pwm+aoiHyXKrEC8SEodL4rNpdfDLqa7PfBlrgFoCNNdR8ImL+muti5IGvktJAAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/consola": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", + "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -2126,6 +2420,13 @@ "node": ">= 0.6" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -2164,6 +2465,19 @@ "node": ">=4" } }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/daisyui": { "version": "5.0.46", "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.0.46.tgz", @@ -2174,10 +2488,10 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -2190,11 +2504,31 @@ } } }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2271,12 +2605,64 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, "node_modules/es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", "dev": true }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -2314,6 +2700,19 @@ "@esbuild/win32-x64": "0.21.5" } }, + "node_modules/esbuild-wasm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.19.12.tgz", + "integrity": "sha512-Zmc4hk6FibJZBcTx5/8K/4jT3/oG1vkGTEeKJUQFCUQKimD6Q7+adp/bdVQyYJFolMKaXkQnVZdV4O5ZaTYmyQ==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2328,6 +2727,35 @@ "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esrap": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.0.tgz", @@ -2339,8 +2767,35 @@ "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/fast-printf": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.10.tgz", + "integrity": "sha512-GwTgG9O4FVIdShhbVF3JxOgSBY2+ePGsu2V/UONgoCPzF9VY6ZdBMKsHKCYQHZwNk3qNouUolRDsgVxcVA5G1w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=10.0" + } }, "node_modules/fill-range": { "version": "7.1.1", @@ -2428,6 +2883,18 @@ "node": ">= 6" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "license": "MIT" + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "license": "MIT" + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -2442,6 +2909,36 @@ "node": ">=12.0.0" } }, + "node_modules/human-id": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.3.tgz", + "integrity": "sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==", + "dev": true, + "license": "MIT", + "bin": { + "human-id": "dist/cli.js" + } + }, + "node_modules/i18n": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.15.3.tgz", + "integrity": "sha512-tW/AA5R4lJZLnd60Agcd0PfXB1C2G7UqTrdNewuv/SIYdxcHkCE8w4Zx1SgCjJ+2BLuAAGIG/KXb/xNYF1lO5Q==", + "license": "MIT", + "dependencies": { + "@messageformat/core": "^3.4.0", + "debug": "^4.4.3", + "fast-printf": "^1.6.10", + "make-plural": "^7.4.0", + "math-interval-parser": "^2.0.1", + "mustache": "^4.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/mashpie" + } + }, "node_modules/immutable": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", @@ -2491,6 +2988,18 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/intl-messageformat": { + "version": "10.7.18", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz", + "integrity": "sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==", + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.6", + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/icu-messageformat-parser": "2.11.4", + "tslib": "^2.8.0" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -2539,6 +3048,12 @@ "node": ">=0.12.0" } }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "license": "MIT" + }, "node_modules/is-reference": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", @@ -2555,6 +3070,13 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/js-sha256": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.11.1.tgz", + "integrity": "sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==", + "dev": true, + "license": "MIT" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2627,6 +3149,17 @@ "node": ">=6" } }, + "node_modules/kysely": { + "version": "0.27.6", + "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.27.6.tgz", + "integrity": "sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/lightningcss": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", @@ -2897,6 +3430,15 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "license": "MIT", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, "node_modules/lucide-svelte": { "version": "0.475.0", "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.475.0.tgz", @@ -2913,6 +3455,12 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/make-plural": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.5.0.tgz", + "integrity": "sha512-0booA+aVYyVFoR67JBHdfVk0U08HmrBH2FrtmBqBa+NldlqXv/G2Z9VQuQq6Wgp2jDWdybEWGfBkk1cq5264WA==", + "license": "Unicode-DFS-2016" + }, "node_modules/marked": { "version": "16.4.2", "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", @@ -2925,6 +3473,34 @@ "node": ">= 20" } }, + "node_modules/math-interval-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz", + "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/memoizee": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "es5-ext": "^0.10.64", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -2999,11 +3575,16 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "license": "BSD-3-Clause" + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, "engines": { "node": ">=4" } @@ -3020,8 +3601,16 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + } }, "node_modules/nanoid": { "version": "3.3.11", @@ -3040,6 +3629,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -3178,6 +3773,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -3212,6 +3808,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -3310,7 +3907,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, "dependencies": { "mri": "^1.1.0" }, @@ -3318,6 +3914,12 @@ "node": ">=6" } }, + "node_modules/safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", + "license": "ISC" + }, "node_modules/sander": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", @@ -3335,6 +3937,7 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", "devOptional": true, + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -3412,6 +4015,18 @@ "node": ">=0.10.0" } }, + "node_modules/sqlite-wasm-kysely": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/sqlite-wasm-kysely/-/sqlite-wasm-kysely-0.3.0.tgz", + "integrity": "sha512-TzjBNv7KwRw6E3pdKdlRyZiTmUIE0UttT/Sl56MVwVARl/u5gp978KepazCJZewFUnlWHz9i3NQd4kOtP/Afdg==", + "dev": true, + "dependencies": { + "@sqlite.org/sqlite-wasm": "^3.48.0-build2" + }, + "peerDependencies": { + "kysely": "*" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -3428,6 +4043,7 @@ "version": "5.35.2", "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.35.2.tgz", "integrity": "sha512-uW/rRXYrhZ7Dh4UQNZ0t+oVGL1dEM+95GavCO8afAk1IY2cPq9BcZv9C3um5aLIya2y8lIeLPxLII9ASGg9Dzw==", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -3513,6 +4129,436 @@ "highlight.js": "11.11.1" } }, + "node_modules/svelte-i18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-4.0.1.tgz", + "integrity": "sha512-jaykGlGT5PUaaq04JWbJREvivlCnALtT+m87Kbm0fxyYHynkQaxQMnIKHLm2WeIuBRoljzwgyvz0Z6/CMwfdmQ==", + "license": "MIT", + "dependencies": { + "cli-color": "^2.0.3", + "deepmerge": "^4.2.2", + "esbuild": "^0.19.2", + "estree-walker": "^2", + "intl-messageformat": "^10.5.3", + "sade": "^1.8.1", + "tiny-glob": "^0.2.9" + }, + "bin": { + "svelte-i18n": "dist/cli.js" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "svelte": "^3 || ^4 || ^5" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/svelte-i18n/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, "node_modules/svelte-katex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/svelte-katex/-/svelte-katex-0.1.2.tgz", @@ -3597,7 +4643,8 @@ "node_modules/tailwindcss": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", - "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==" + "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", + "peer": true }, "node_modules/tapable": { "version": "2.2.2", @@ -3642,6 +4689,29 @@ "resolved": "https://registry.npmjs.org/theme-change/-/theme-change-2.5.0.tgz", "integrity": "sha512-B/UdsgdHAGhSKHTAQnxg/etN0RaMDpehuJmZIjLMDVJ6DGIliRHGD6pODi1CXLQAN9GV0GSyB3G6yCuK05PkPQ==" }, + "node_modules/timers-ext": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "license": "MIT", + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3666,14 +4736,20 @@ "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3682,6 +4758,35 @@ "node": ">=14.17" } }, + "node_modules/unplugin": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -3712,16 +4817,38 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/urlpattern-polyfill": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "dev": true, + "license": "MIT" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/uuid": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, "node_modules/vite": { "version": "5.4.19", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -3804,6 +4931,13 @@ } } }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true, + "license": "MIT" + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 76f1686..618ad9a 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "build": "vite build", "preview": "vite preview", "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --compiler-warnings \"css-unused-selector:ignore,unused-export-let:ignore\" --threshold error", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch --threshold error" + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch --threshold error", + "machine-translate": "inlang machine translate --project project.inlang" }, "devDependencies": { "@sveltejs/adapter-auto": "^3.0.0", @@ -26,15 +27,19 @@ "tailwindcss": "^4.1.3", "typescript": "^5.0.0", "vite": "^5.0.3", - "vite-plugin-svgr": "^4.2.0" + "vite-plugin-svgr": "^4.2.0", + "@inlang/paraglide-js": "^2.9.1", + "@inlang/cli": "^3.0.0" }, "type": "module", "dependencies": { "@lucide/svelte": "^0.487.0", "@tailwindcss/vite": "^4.1.3", + "i18n": "^0.15.3", "lucide-svelte": "^0.475.0", "marked": "^16.2.0", "pocketbase": "^0.26.2", + "svelte-i18n": "^4.0.1", "svelte-katex": "^0.1.2", "svelte-media-queries": "^1.6.2", "theme-change": "^2.5.0", diff --git a/project.inlang/settings.json b/project.inlang/settings.json new file mode 100644 index 0000000..c56c0e9 --- /dev/null +++ b/project.inlang/settings.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://inlang.com/schema/project-settings", + "baseLocale": "en", + "locales": ["en", "dk"], + "modules": [ + "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js" + ], + "plugin.inlang.messageFormat": { + "pathPattern": "./messages/{locale}.json" + } +} diff --git a/src/routes/cv/+page.svelte b/src/routes/cv/+page.svelte index 25402a0..e5b1609 100644 --- a/src/routes/cv/+page.svelte +++ b/src/routes/cv/+page.svelte @@ -1,5 +1,7 @@ +
+
+ {m["zhen.cv.flex.title"]()} +

+ {m["zhen.cv.flex.tooltip"]()} +

+
+
+ {@html m["zhen.cv.flex.body"]()} +
diff --git a/src/routes/cv/comps/Profile.svelte b/src/routes/cv/comps/Profile.svelte index 083ce18..556c5c1 100644 --- a/src/routes/cv/comps/Profile.svelte +++ b/src/routes/cv/comps/Profile.svelte @@ -1,17 +1,16 @@ + +
- About me + {m["zhen.cv.profile.title"]()}
- I know the languages listed above in the decor! + {m["zhen.cv.profile.tooltip"]()}
- I love learning on my own, and I try to be honest. I am highly - self-motivated and I usually archive any task I put my mind to. This enables - me to have countless hobbies, such as 3D printing, soldering, programming. -
-
- Other than my github, I've listed some projects highlighted below. :) + {m["zhen.cv.profile.long"]()}
diff --git a/src/routes/cv/comps/TableOfProjects.svelte b/src/routes/cv/comps/TableOfProjects.svelte index 2e9a93b..641ab57 100644 --- a/src/routes/cv/comps/TableOfProjects.svelte +++ b/src/routes/cv/comps/TableOfProjects.svelte @@ -1,24 +1,28 @@ -
+ + +
- List of big projects + + {m["zhen.cv.projects.title"]()} +
- It is likely I'm working on something new, as you're reading this. -
- Contact me if you're curious! :D + {m["zhen.cv.projects.tooltip"]()}
-
+
HTML
-
This CV is made with HTML, CSS, and Svelte
+
{m["zhen.cv.projects.cv"]()}
Computer vision
-
Implimented YoloV1 from scratch. (object detection)
+
{m["zhen.cv.projects.CV"]()}
Arduino/embedded
-
Built custom CNC machine
+
{m["zhen.cv.projects.embedded"]()}
@@ -26,35 +30,30 @@
Open-source
-
I often contribute to Open-source
+
{m["zhen.cv.projects.open"]()}
PCB design
-
I have designed multiple Printed Circuit Boards (PCBs)
+
{m["zhen.cv.projects.pcb"]()}
Kubernetes
-
WIP: Multi node HA Kubernetes cluster with my friends
+
{m["zhen.cv.projects.kube"]()}
diff --git a/src/ts/store.ts b/src/ts/store.ts index 5519f84..860d69e 100644 --- a/src/ts/store.ts +++ b/src/ts/store.ts @@ -1,3 +1,4 @@ import { ApiService } from "./api/api"; +import path from "path"; export let api = ApiService; diff --git a/vite.config.js b/vite.config.js index 8cd8521..e3e10a7 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,3 +1,4 @@ +import { paraglideVitePlugin } from "@inlang/paraglide-js"; import tailwindcss from "@tailwindcss/vite"; import sveltekit from "./src/optimizers/sveltekit.ts"; import path from "path"; @@ -13,7 +14,14 @@ const buildTime = new Intl.DateTimeFormat("da-DK", { }).format(new Date()); export default { - plugins: [tailwindcss(), sveltekit()], + plugins: [ + paraglideVitePlugin({ + project: "./project.inlang", + outdir: "./src/paraglide", + }), + tailwindcss(), + sveltekit(), + ], define: { __BUILD_TIME__: JSON.stringify(buildTime), }, @@ -27,6 +35,7 @@ export default { "@shop": path.resolve("./src/pages/shop"), "@stores": path.resolve("./src/ts/store.ts"), "@e": path.resolve("./src/optimizers"), + $paraglide: path.resolve("src/paraglide"), }, }, server: {