[M] Migrate usage

matching
Azalea 2024-12-23 18:32:20 -05:00
parent 6631bb593c
commit 9cffb19332
5 changed files with 33 additions and 5603 deletions

View File

@ -1,35 +0,0 @@
## Technical considerations
**Why use this over SvelteKit?**
- It brings its own routing solution which might not be preferable for some users.
- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app.
This template contains as little as possible to get started with Vite + TypeScript + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project.
Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate.
**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?**
Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information.
**Why include `.vscode/extensions.json`?**
Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project.
**Why enable `allowJs` in the TS template?**
While `allowJs: false` would indeed prevent the use of `.js` files in the project, it does not prevent the use of JavaScript syntax in `.svelte` files. In addition, it would force `checkJs: false`, bringing the worst of both worlds: not being able to guarantee the entire codebase is TypeScript, and also having worse typechecking for the existing JavaScript. In addition, there are valid use cases in which a mixed codebase may be relevant.
**Why is HMR not preserving my local component state?**
HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr).
If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR.
```ts
// store.ts
// An extremely simple external store
import { writable } from 'svelte/store'
export default writable(0)
```

View File

@ -0,0 +1,29 @@
<script lang="ts">
import { Chart, Tooltip, type ChartData, type ChartOptions } from 'chart.js';
import type { HTMLCanvasAttributes } from 'svelte/elements';
import 'chart.js/auto';
interface Props extends HTMLCanvasAttributes {
data: ChartData<'line', any, string>
options: ChartOptions<'line'>
}
const { data, options, ...rest }: Props = $props()
Chart.register(Tooltip)
let canvasElem: HTMLCanvasElement
let chart: Chart
$effect(() => {
chart = new Chart(canvasElem, { type: 'line', data, options })
return () => chart.destroy()
})
$effect(() => {
if (!chart) return
chart.data = data
chart.update()
})
</script>
<canvas bind:this={canvasElem} {...rest}></canvas>

View File

@ -1,6 +1,7 @@
import { mount } from 'svelte';
import './app.sass'
import App from './App.svelte'
const app = new App({ target: document.getElementById('app')! })
const app = mount(App, { target: document.getElementById("app")! });
export default app
export default app

View File

@ -12,7 +12,6 @@
} from "../libs/generalTypes";
import { DATA_HOST } from "../libs/config";
import 'cal-heatmap/cal-heatmap.css';
import { Line } from 'svelte-chartjs';
import moment from "moment";
import 'chartjs-adapter-moment';
import { CARD, DATA, GAME, USER } from "../libs/sdk";
@ -23,6 +22,7 @@
import RankDetails from "../components/RankDetails.svelte";
import RatingComposition from "../components/RatingComposition.svelte";
import useLocalStorage from "../libs/hooks/useLocalStorage.svelte";
import Line from "../components/chart/Line.svelte";
const TREND_DAYS = 60

File diff suppressed because it is too large Load Diff