diff --git a/CHANGELOG.md b/CHANGELOG.md index a47930bb3..b1b1cce67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## v. 0.1.1 - WIP +## v. 0.1.1 | 849240 - 2024/06/24 ### Parser @@ -18,6 +18,10 @@ - Added highlight effect to a legend by darkening the color of all the other series on the chart while hovering it with the mouse - Added an API link in the legend for each dataset where applicable (when isn't generated locally) - Save fullscreen preference in local storage and url + - Improved resize bar on desktop + - Changed resize button logo + - Changed the share button to visible on small screen too + - Improved share screen - Fixed time range shifting not being the one in url params or saved in local storage - Fixed time range shifting on series toggling via the legend - Fixed time range shifting on fullscreen @@ -27,10 +31,16 @@ - History - Changed background for the sticky dates from blur to a solid color as it didn't appear properly in Firefox - Build - - Added lazy loads to have split chunks after build + - Tried to add lazy loads to have split chunks after build, to have much faster load times and they worked great ! But they completely broke Safari on iOS, we can't have nice things - Removed many libraries and did some things manually instead to improve build size - Strip - Temporarily removed the Home button on the strip bar on desktop as there is no landing page yet +- Settings + - Add version +- PWA + - Fixed background update + - Changed update check frequency to 1 minute (~1kb to fetch every minute which is very reasonable) + - Added a nice banner to ask the user to install the update - Misc - Removed tracker even though it was a very privacy friendly as it appeared to not be working properly diff --git a/README.md b/README.md index 36a02c03a..684b9cf82 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Description -TLDR: FOSS [glassnode](https://glassnode.com). +TLDR: Free, open source, verifiable and self-hostable Bitcoin on-chain data generator and visualizer Satonomics is an open-source suite of tools that computes, distributes, and displays on-chain data, making it freely available for anyone to use. diff --git a/app/README.md b/app/README.md index 8a34e4ba8..82bb5616d 100644 --- a/app/README.md +++ b/app/README.md @@ -6,5 +6,12 @@ A web app to view the generated datasets in various charts. ## Requirements -- `node` -- `pnpm` +- Install `node` +- Install `pnpm` +- If using `cloudflare`, add cache rule to bypass the cache for `/sw.js` + +## Deployment + +```bash +pnpm deploy-prod +``` diff --git a/app/package.json b/app/package.json index 147cdb518..4c8989247 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "satonomics", "description": "Satoshi Economics", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "type": "module", "scripts": { diff --git a/app/pnpm-lock.yaml b/app/pnpm-lock.yaml index fbc6ff1ff..ef89ea459 100644 --- a/app/pnpm-lock.yaml +++ b/app/pnpm-lock.yaml @@ -2368,11 +2368,11 @@ packages: /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 20.14.7 + '@types/node': 20.14.8 dev: true - /@types/node@20.14.7: - resolution: {integrity: sha512-uTr2m2IbJJucF3KUxgnGOZvYbN0QgkGyWxG6973HCpMYFy2KfcgYuIwkJQMQkt1VbBMlvWRbpshFTLxnxCZjKQ==} + /@types/node@20.14.8: + resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} dependencies: undici-types: 5.26.5 dev: true @@ -2393,7 +2393,7 @@ packages: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 20.14.7 + '@types/node': 20.14.8 dev: true optional: true @@ -2656,7 +2656,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001636 - electron-to-chromium: 1.4.808 + electron-to-chromium: 1.4.810 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.1) dev: true @@ -2793,7 +2793,7 @@ packages: engines: {node: '>=12.13.0'} hasBin: true dependencies: - '@types/node': 20.14.7 + '@types/node': 20.14.8 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -3118,8 +3118,8 @@ packages: jake: 10.9.1 dev: true - /electron-to-chromium@1.4.808: - resolution: {integrity: sha512-0ItWyhPYnww2VOuCGF4s1LTfbrdAV2ajy/TN+ZTuhR23AHI6rWHCrBXJ/uxoXOvRRqw8qjYVrG81HFI7x/2wdQ==} + /electron-to-chromium@1.4.810: + resolution: {integrity: sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==} dev: true /emoji-regex@8.0.0: @@ -3182,7 +3182,7 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 @@ -4461,8 +4461,9 @@ packages: engines: {node: '>= 6'} dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} dev: true /object-keys@1.1.1: @@ -5206,7 +5207,7 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 dev: true /signal-exit@3.0.7: diff --git a/app/src/app/components/frames/chart/components/actions.tsx b/app/src/app/components/frames/chart/components/actions.tsx index 47ded6462..be422a4d2 100644 --- a/app/src/app/components/frames/chart/components/actions.tsx +++ b/app/src/app/components/frames/chart/components/actions.tsx @@ -1,4 +1,4 @@ -import type { Generate } from "lean-qr"; +import { generate } from "lean-qr"; import { chartState } from "/src/scripts/lightweightCharts/chart/state"; import { setTimeScale } from "/src/scripts/lightweightCharts/chart/time"; @@ -14,45 +14,43 @@ export function Actions({ qrcode: RWS; fullscreen?: RWS; }) { - const leanQRGenerate = createRWS(undefined); - - onMount(() => { - import("lean-qr").then((leanQR) => { - leanQRGenerate.set(() => leanQR.generate); - }); - }); - return (
-
diff --git a/app/src/app/components/qrcode.tsx b/app/src/app/components/qrcode.tsx index e873ee8ec..075105380 100644 --- a/app/src/app/components/qrcode.tsx +++ b/app/src/app/components/qrcode.tsx @@ -2,16 +2,34 @@ export function Qrcode({ qrcode }: { qrcode: RWS }) { return ( ); diff --git a/app/src/app/components/strip/components/anchorLogo.tsx b/app/src/app/components/strip/components/anchorLogo.tsx index acabcfb52..303adbdf6 100644 --- a/app/src/app/components/strip/components/anchorLogo.tsx +++ b/app/src/app/components/strip/components/anchorLogo.tsx @@ -1,7 +1,7 @@ export function AnchorLogo() { return ( diff --git a/app/src/app/components/strip/components/buttonRefresh.tsx b/app/src/app/components/strip/components/buttonRefresh.tsx deleted file mode 100644 index 32a0c69de..000000000 --- a/app/src/app/components/strip/components/buttonRefresh.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Button } from "./button"; - -export function ButtonRefresh() { - return ( - - ); -} diff --git a/app/src/app/components/strip/components/clickable.tsx b/app/src/app/components/strip/components/clickable.tsx index be3dcf38e..113fe458d 100644 --- a/app/src/app/components/strip/components/clickable.tsx +++ b/app/src/app/components/strip/components/clickable.tsx @@ -18,8 +18,12 @@ export function Clickable({ ; setSelected: Setter; - needsRefresh: Accessor; }) { return ( <> @@ -33,10 +29,6 @@ export function StripDesktop({
- - - - diff --git a/app/src/app/components/update.tsx b/app/src/app/components/update.tsx new file mode 100644 index 000000000..4bf7d5ebc --- /dev/null +++ b/app/src/app/components/update.tsx @@ -0,0 +1,82 @@ +import { useRegisterSW } from "virtual:pwa-register/solid"; + +export function Update() { + // if ("serviceWorker" in navigator) { + // navigator.serviceWorker.getRegistrations().then((l) => { + // console.log(l); + // if (!l.length) return; + + // wasAlreadySW.set(true); + + // // navigator.serviceWorker.addEventListener("controllerchange", () => { + // // // Will show up in safari and chrome + // // console.log("sw: controller change"); + + // // setTimeout(() => { + // // needsRefresh.set(true); + // // }, 1000); + // // }); + // }); + + // setTimeout(() => { + // navigator.serviceWorker + // .register("/sw.js", { scope: "/" }) + // .then((registration) => { + // // Will show up on safari sw update but not on chrome + // console.log("sw: registration succeeded"); + + // console.log(registration); + + // registration.addEventListener("updatefound", () => { + // if (wasAlreadySW()) { + // setTimeout(() => { + // needsRefresh.set(true); + // }, 1000); + // } + // // will show up on chrome sw update + // console.log("sw: update found"); + // }); + // }) + // .catch((error) => { + // // registration failed + // console.error(`sw: registration failed with ${error}`); + // }); + // }, 5000); + // } + + // useRegisterSW can also return an offlineReady thingy + const { + needRefresh: [needRefresh, setNeedRefresh], + updateServiceWorker, + } = useRegisterSW({ + immediate: true, + onRegisteredSW(swUrl, r) { + console.log("sw: registered: " + r?.scope); + }, + onRegisterError(error: Error) { + console.log("sw: registration error", error); + }, + }); + + return ( + +
+
+ New version available, please + +
+ +
+
+ ); +} diff --git a/app/src/app/index.tsx b/app/src/app/index.tsx index b20ef9606..d4736c000 100644 --- a/app/src/app/index.tsx +++ b/app/src/app/index.tsx @@ -6,6 +6,7 @@ import { chartState } from "../scripts/lightweightCharts/chart/state"; import { setTimeScale } from "../scripts/lightweightCharts/chart/time"; import { createPresets } from "../scripts/presets"; import { priceToUSLocale } from "../scripts/utils/locale"; +import { run } from "../scripts/utils/run"; import { sleep } from "../scripts/utils/sleep"; import { readBooleanFromStorage, @@ -16,9 +17,14 @@ import { webSockets } from "../scripts/ws"; import { classPropToString } from "../solid/classes"; import { Background, LOCAL_STORAGE_MARQUEE_KEY } from "./components/background"; import { ChartFrame } from "./components/frames/chart"; +import { FavoritesFrame } from "./components/frames/favorites"; +import { HistoryFrame } from "./components/frames/history"; +import { SearchFrame } from "./components/frames/search"; +import { SettingsFrame } from "./components/frames/settings"; import { TreeFrame } from "./components/frames/tree"; +import { Qrcode } from "./components/qrcode"; import { StripDesktop, StripMobile } from "./components/strip"; -import { registerServiceWorker } from "./scripts/register"; +import { Update } from "./components/update"; const LOCAL_STORAGE_BAR_KEY = "bar-width"; const LOCAL_STORAGE_FULLSCREEN = "fullscrenn"; @@ -26,8 +32,6 @@ const LOCAL_STORAGE_FULLSCREEN = "fullscrenn"; export const INPUT_PRESET_SEARCH_ID = "input-search-preset"; export function App() { - const needRefresh = registerServiceWorker().needRefresh[0]; - const tabFocused = createRWS(true); const qrcode = createRWS(""); @@ -38,15 +42,8 @@ export function App() { false, ); - const activeResources = createRWS>>(new Set(), { - equals: false, - }); - - const datasets = createDatasets({ - setActiveResources: activeResources.set, - }); - const windowWidth = createRWS(window.innerWidth); + const windowWidth60p = createMemo(() => windowWidth() * 0.6); const windowResizeCallback = () => { windowWidth.set(window.innerWidth); }; @@ -55,8 +52,9 @@ export function App() { const windowSizeIsAtLeastMedium = createMemo(() => windowWidth() >= 720); + const minBarWidth = 384; const barWidth = createRWS( - Number(localStorage.getItem(LOCAL_STORAGE_BAR_KEY)), + Number(localStorage.getItem(LOCAL_STORAGE_BAR_KEY)) || minBarWidth, ); createEffect(() => { @@ -81,11 +79,12 @@ export function App() { : _selectedFrame(), ); - const presets = createPresets(datasets); + const presets = createPresets(); const marquee = createRWS(!localStorage.getItem(LOCAL_STORAGE_MARQUEE_KEY)); const resizingBarStart = createRWS(undefined); + const resizingBarWidth = createRWS(0); createEffect( () => { @@ -98,6 +97,16 @@ export function App() { }, ); + const activeResources = createRWS>>(new Set(), { + equals: false, + }); + + // Can't put datasets inside a signal as it breaks lazy memo + + const datasets = createDatasets({ + setActiveResources: activeResources.set, + }); + onMount(() => { webSockets.openAll(); @@ -114,32 +123,6 @@ export function App() { }); }); - const FavoritesFrame = lazy(() => - import("./components/frames/favorites").then((d) => ({ - default: d.FavoritesFrame, - })), - ); - const HistoryFrame = lazy(() => - import("./components/frames/history").then((d) => ({ - default: d.HistoryFrame, - })), - ); - const SearchFrame = lazy(() => - import("./components/frames/search").then((d) => ({ - default: d.SearchFrame, - })), - ); - const SettingsFrame = lazy(() => - import("./components/frames/settings").then((d) => ({ - default: d.SettingsFrame, - })), - ); - const Qrcode = lazy(() => - import("./components/qrcode").then((d) => ({ - default: d.Qrcode, - })), - ); - const documentVisibilityChange = () => tabFocused.set(document.visibilityState === "visible"); document.addEventListener("visibilitychange", documentVisibilityChange); @@ -186,10 +169,18 @@ export function App() { "user-select": resizingBarStart() !== undefined ? "none" : undefined, }} onMouseMove={(event) => { - const start = resizingBarStart(); + const startingClientX = resizingBarStart(); - if (start !== undefined) { - barWidth.set(event.x - start + 384); + if (startingClientX !== undefined) { + barWidth.set( + Math.min( + Math.max( + resizingBarWidth() + event.clientX - startingClientX, + minBarWidth, + ), + windowWidth60p(), + ), + ); setTimeScale(resizeInitialRange()); } @@ -200,6 +191,7 @@ export function App() { onTouchCancel={() => resizingBarStart.set(undefined)} > +
@@ -213,15 +205,16 @@ export function App() {
{ resizeInitialRange.set(chartState.range); - resizingBarStart() === undefined && - // TODO: set size of bar instead + if (resizingBarStart() === undefined) { resizingBarStart.set(event.clientX); + resizingBarWidth.set(barWidth()); + } }} onTouchStart={(event) => { resizeInitialRange.set(chartState.range); - resizingBarStart() === undefined && + if (resizingBarStart() === undefined) { resizingBarStart.set(event.touches[0].clientX); + resizingBarWidth.set(barWidth()); + } }} onDblClick={() => { resizeInitialRange.set(chartState.range); - barWidth.set(0); - setTimeScale(resizeInitialRange()); }} /> diff --git a/app/src/app/scripts/register.ts b/app/src/app/scripts/register.ts deleted file mode 100644 index a8dad2d4a..000000000 --- a/app/src/app/scripts/register.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { useRegisterSW } from "virtual:pwa-register/solid"; - -import { FIVE_MINUTES_IN_MS } from "/src/scripts/utils/time"; - -export function registerServiceWorker() { - return useRegisterSW({ - onRegisteredSW(swUrl, registered) { - console.log("sw: registered", registered); - - if (registered) { - const callback = async () => { - if (!(!registered.installing && navigator)) return; - - if ("connection" in navigator && !navigator.onLine) return; - - const resp = await fetch(swUrl, { - cache: "no-store", - headers: { - cache: "no-store", - "cache-control": "no-cache", - }, - }); - - if (resp?.status === 200) { - await registered.update(); - } - }; - - callback(); - - setInterval(callback, FIVE_MINUTES_IN_MS); - } - }, - onRegisterError(error) { - console.log("sw: registration error", error); - }, - onNeedRefresh() { - console.log("sw: needs refresh"); - }, - }); -} - -// From update.tsx -// onMount(async () => { -// if ('serviceWorker' in navigator) { -// try { -// const registration = await navigator.serviceWorker.register('/sw.js') - -// registration.addEventListener('updatefound', () => { -// const worker = registration.installing - -// worker?.addEventListener('statechange', () => { -// if ( -// worker.state === 'activated' && -// navigator.serviceWorker.controller -// ) { -// ;(Object.entries(props.resources) as Entries) -// .map(([_, value]) => value.fetch) -// .forEach((fetch) => fetch()) - -// setTimeout(() => updateAvailable.set(true), FIVE_SECOND_IN_MS) -// } -// }) -// }) -// } catch {} -// } -// }) diff --git a/app/src/index.tsx b/app/src/index.tsx index e29363cda..f7cb41394 100644 --- a/app/src/index.tsx +++ b/app/src/index.tsx @@ -3,6 +3,8 @@ import { render } from "solid-js/web"; import "./styles.css"; +import { App } from "./app"; + const root = document.getElementById("root"); if (import.meta.env.DEV && !(root instanceof HTMLElement)) { @@ -11,8 +13,4 @@ if (import.meta.env.DEV && !(root instanceof HTMLElement)) { ); } -render(() => { - const App = lazy(() => import("./app").then((d) => ({ default: d.App }))); - - return ; -}, root!); +render(App, root!); diff --git a/app/src/scripts/datasets/date.ts b/app/src/scripts/datasets/date.ts index 16d35d869..7fd5bf159 100644 --- a/app/src/scripts/datasets/date.ts +++ b/app/src/scripts/datasets/date.ts @@ -1,30 +1,35 @@ -import groupedKeysToPath from "/src/../../datasets/grouped_keys_to_url_path.json"; - import { createResourceDataset } from "./resource"; export { averages } from "./consts/averages"; export function createDateDatasets({ setActiveResources, + groupedKeysToURLPath, }: { setActiveResources: Setter>>; + groupedKeysToURLPath: GroupedKeysToURLPath["date"]; }) { - type Key = keyof typeof groupedKeysToPath.date; + type Key = keyof typeof groupedKeysToURLPath; type ResourceData = ReturnType>; - const resourceDatasets = {} as Record, ResourceData>; + type ResourceDatasets = Record, ResourceData>; - Object.entries(groupedKeysToPath.date).forEach(([_key, path]) => { + for (const _key in groupedKeysToURLPath) { const key = _key as Key; if (key !== "ohlc") { - resourceDatasets[key] = createResourceDataset<"date">({ - scale: "date", - path, - setActiveResources, - }); + const path = groupedKeysToURLPath[key]; + + (groupedKeysToURLPath as any as ResourceDatasets)[key] = + createResourceDataset<"date">({ + scale: "date", + path, + setActiveResources, + }); } - }); + } + + const resourceDatasets = groupedKeysToURLPath as any as ResourceDatasets; const price = createResourceDataset<"date", OHLC>({ scale: "date", diff --git a/app/src/scripts/datasets/height.ts b/app/src/scripts/datasets/height.ts index 3b7325a5d..77f6c6048 100644 --- a/app/src/scripts/datasets/height.ts +++ b/app/src/scripts/datasets/height.ts @@ -1,27 +1,33 @@ -import groupedKeysToPath from "/src/../../datasets/grouped_keys_to_url_path.json"; - import { createResourceDataset } from "./resource"; export function createHeightDatasets({ setActiveResources, + groupedKeysToURLPath, }: { setActiveResources: Setter>>; + groupedKeysToURLPath: GroupedKeysToURLPath["height"]; }) { - type Key = keyof typeof groupedKeysToPath.height; + type Key = keyof typeof groupedKeysToURLPath; type ResourceData = ReturnType>; - const resourceDatasets = {} as Record, ResourceData>; + type ResourceDatasets = Record, ResourceData>; - Object.keys(groupedKeysToPath.height).forEach(([_key, path]) => { + for (const _key in groupedKeysToURLPath) { const key = _key as Key; + if (key !== "ohlc") { - resourceDatasets[key] = createResourceDataset<"height">({ - scale: "height", - path, - setActiveResources, - }); + const path = groupedKeysToURLPath[key]; + + (groupedKeysToURLPath as any as ResourceDatasets)[key] = + createResourceDataset<"height">({ + scale: "height", + path, + setActiveResources, + }); } - }); + } + + const resourceDatasets = groupedKeysToURLPath as any as ResourceDatasets; const price = createResourceDataset<"height", OHLC>({ scale: "height", diff --git a/app/src/scripts/datasets/index.ts b/app/src/scripts/datasets/index.ts index 458b53ad8..9944ae361 100644 --- a/app/src/scripts/datasets/index.ts +++ b/app/src/scripts/datasets/index.ts @@ -1,3 +1,5 @@ +import groupedKeysToURLPath from "/src/../../datasets/grouped_keys_to_url_path.json"; + import { createDateDatasets } from "./date"; import { createHeightDatasets } from "./height"; @@ -10,8 +12,18 @@ export function createDatasets({ }: { setActiveResources: Setter>>; }) { + const date = createDateDatasets({ + setActiveResources, + groupedKeysToURLPath: groupedKeysToURLPath.date, + }); + + const height = createHeightDatasets({ + setActiveResources, + groupedKeysToURLPath: groupedKeysToURLPath.height, + }); + return { - date: createDateDatasets({ setActiveResources }), - height: createHeightDatasets({ setActiveResources }), + date, + height, } satisfies Record; } diff --git a/app/src/scripts/datasets/resource.ts b/app/src/scripts/datasets/resource.ts index 227f92dba..6255c9a5d 100644 --- a/app/src/scripts/datasets/resource.ts +++ b/app/src/scripts/datasets/resource.ts @@ -22,9 +22,10 @@ export function createResourceDataset< setActiveResources: Setter>>; }) { const baseURL = `${ - location.hostname === "localhost" - ? "http://localhost:3110" - : "https://api.satonomics.xyz" + // location.hostname === "localhost" + // ? "http://localhost:3110" + // : "https://api.satonomics.xyz" + "https://api.satonomics.xyz" }${path}`; type Dataset = Scale extends "date" @@ -36,8 +37,8 @@ export function createResourceDataset< >; const fetchedJSONs = new Array( - (new Date().getFullYear() - new Date("2009-01-01").getFullYear()) * - (scale === "date" ? 2 : 8), + (new Date().getFullYear() - new Date("2009-01-01").getFullYear() + 2) * + (scale === "date" ? 1 : 6), ) .fill(null) .map((): FetchedResult => { diff --git a/app/src/scripts/datasets/types.d.ts b/app/src/scripts/datasets/types.d.ts index beb342444..1b682a999 100644 --- a/app/src/scripts/datasets/types.d.ts +++ b/app/src/scripts/datasets/types.d.ts @@ -96,3 +96,6 @@ interface OHLC { low: number; close: number; } + +type GroupedKeysToURLPath = + typeof import("/src/../../datasets/grouped_keys_to_url_path.json"); diff --git a/app/src/scripts/lightweightCharts/chart/time.ts b/app/src/scripts/lightweightCharts/chart/time.ts index a4a0ebbd6..bede3e188 100644 --- a/app/src/scripts/lightweightCharts/chart/time.ts +++ b/app/src/scripts/lightweightCharts/chart/time.ts @@ -17,7 +17,7 @@ const debouncedUpdateURLParams = debounce((range: TimeRange | null) => { writeURLParam(URL_PARAMS_RANGE_TO_KEY, String(range.to)); localStorage.setItem(LOCAL_STORAGE_RANGE_KEY, JSON.stringify(range)); -}, 1000); +}, 500); export function initTimeScale({ activeResources, @@ -101,8 +101,6 @@ export function getInitialRange(): TimeRange { export function setTimeScale(range: TimeRange | null) { if (range) { - console.log(range); - setTimeout(() => { chartState.chart?.timeScale().setVisibleRange(range); }, 1); diff --git a/app/src/scripts/presets/addresses/index.ts b/app/src/scripts/presets/addresses/index.ts index deba6096f..ffed6bf08 100644 --- a/app/src/scripts/presets/addresses/index.ts +++ b/app/src/scripts/presets/addresses/index.ts @@ -9,10 +9,8 @@ import { applyMultipleSeries, SeriesType } from "../templates/multiple"; export function createPresets({ scale, - datasets, }: { scale: ResourceScale; - datasets: Datasets; }): PartialPresetFolder { return { name: "Addresses", @@ -112,7 +110,6 @@ export function createPresets({ name: "By Size", tree: addressCohortsBySize.map(({ key, name }) => createAddressPresetFolder({ - datasets, scale, color: colors[key], name, @@ -125,7 +122,6 @@ export function createPresets({ name: "By Type", tree: addressCohortsByType.map(({ key, name }) => createAddressPresetFolder({ - datasets, scale, color: colors[key], name, @@ -138,13 +134,11 @@ export function createPresets({ } function createAddressPresetFolder({ - datasets, scale, color, name, datasetKey, }: { - datasets: Datasets; scale: Scale; name: string; datasetKey: AddressCohortKey; @@ -156,7 +150,6 @@ function createAddressPresetFolder({ createAddressCountPreset({ scale, name, datasetKey, color }), ...createCohortPresetList({ title: name, - datasets, scale, name, color, @@ -170,7 +163,6 @@ function createAddressPresetFolder({ tree: createCohortPresetList({ title: `${liquidity.name} ${name}`, name: `${liquidity.name} ${name}`, - datasets, scale, color, datasetKey: `${liquidity.key}_${datasetKey}`, diff --git a/app/src/scripts/presets/coinblocks/index.ts b/app/src/scripts/presets/coinblocks/index.ts index ab3c89c01..94a64a304 100644 --- a/app/src/scripts/presets/coinblocks/index.ts +++ b/app/src/scripts/presets/coinblocks/index.ts @@ -3,13 +3,9 @@ import { applyMultipleSeries, SeriesType } from "../templates/multiple"; export function createPresets({ scale, - datasets: _datasets, }: { scale: Scale; - datasets: Datasets; }) { - const datasets = _datasets[scale]; - return { name: "Cointime Economics", tree: [ @@ -29,27 +25,27 @@ export function createPresets({ { title: "Vaulted Price", color: colors.vaultedness, - dataset: datasets.vaulted_price, + dataset: params.datasets[scale].vaulted_price, }, { title: "Active Price", color: colors.liveliness, - dataset: datasets.active_price, + dataset: params.datasets[scale].active_price, }, { title: "True Market Mean", color: colors.trueMarketMeanPrice, - dataset: datasets.true_market_mean, + dataset: params.datasets[scale].true_market_mean, }, { title: "Realized Price", color: colors.bitcoin, - dataset: datasets.realized_price, + dataset: params.datasets[scale].realized_price, }, { title: "Cointime", color: colors.cointimePrice, - dataset: datasets.cointime_price, + dataset: params.datasets[scale].cointime_price, }, ], }); @@ -71,7 +67,7 @@ export function createPresets({ { title: "Active Price", color: colors.liveliness, - dataset: datasets.active_price, + dataset: params.datasets[scale].active_price, }, ], }); @@ -95,7 +91,7 @@ export function createPresets({ { title: "Vaulted Price", color: colors.vaultedness, - dataset: datasets.vaulted_price, + dataset: params.datasets[scale].vaulted_price, }, ], }); @@ -119,7 +115,7 @@ export function createPresets({ { title: "True Market Mean", color: colors.trueMarketMeanPrice, - dataset: datasets.true_market_mean, + dataset: params.datasets[scale].true_market_mean, }, ], }); @@ -143,7 +139,7 @@ export function createPresets({ { title: "Cointime", color: colors.cointimePrice, - dataset: datasets.cointime_price, + dataset: params.datasets[scale].cointime_price, }, ], }); @@ -174,22 +170,22 @@ export function createPresets({ title: "Market Cap", color: colors.white, - dataset: datasets.market_cap, + dataset: params.datasets[scale].market_cap, }, { title: "Realized Cap", color: colors.realizedCap, - dataset: datasets.realized_cap, + dataset: params.datasets[scale].realized_cap, }, { title: "Investor Cap", color: colors.investorCap, - dataset: datasets.investor_cap, + dataset: params.datasets[scale].investor_cap, }, { title: "Thermo Cap", color: colors.thermoCap, - dataset: datasets.thermo_cap, + dataset: params.datasets[scale].thermo_cap, }, ], }); @@ -212,7 +208,7 @@ export function createPresets({ { title: "Thermo Cap", color: colors.thermoCap, - dataset: datasets.thermo_cap, + dataset: params.datasets[scale].thermo_cap, }, ], }); @@ -235,7 +231,7 @@ export function createPresets({ { title: "Investor Cap", color: colors.investorCap, - dataset: datasets.investor_cap, + dataset: params.datasets[scale].investor_cap, }, ], }); @@ -257,7 +253,8 @@ export function createPresets({ { title: "Ratio", color: colors.bitcoin, - dataset: datasets.thermo_cap_to_investor_cap_ratio, + dataset: + params.datasets[scale].thermo_cap_to_investor_cap_ratio, }, ], }); @@ -284,17 +281,17 @@ export function createPresets({ { title: "Coinblocks Created", color: colors.coinblocksCreated, - dataset: datasets.coinblocks_created, + dataset: params.datasets[scale].coinblocks_created, }, { title: "Coinblocks Destroyed", color: colors.coinblocksDestroyed, - dataset: datasets.coinblocks_destroyed, + dataset: params.datasets[scale].coinblocks_destroyed, }, { title: "Coinblocks Stored", color: colors.coinblocksStored, - dataset: datasets.coinblocks_stored, + dataset: params.datasets[scale].coinblocks_stored, }, ], }); @@ -316,7 +313,7 @@ export function createPresets({ { title: "Coinblocks Created", color: colors.coinblocksCreated, - dataset: datasets.coinblocks_created, + dataset: params.datasets[scale].coinblocks_created, }, ], }); @@ -338,7 +335,7 @@ export function createPresets({ { title: "Coinblocks Destroyed", color: colors.coinblocksDestroyed, - dataset: datasets.coinblocks_destroyed, + dataset: params.datasets[scale].coinblocks_destroyed, }, ], }); @@ -360,7 +357,7 @@ export function createPresets({ { title: "Coinblocks Stored", color: colors.coinblocksStored, - dataset: datasets.coinblocks_stored, + dataset: params.datasets[scale].coinblocks_stored, }, ], }); @@ -387,17 +384,20 @@ export function createPresets({ { title: "Cumulative Coinblocks Created", color: colors.coinblocksCreated, - dataset: datasets.cumulative_coinblocks_created, + dataset: + params.datasets[scale].cumulative_coinblocks_created, }, { title: "Cumulative Coinblocks Destroyed", color: colors.coinblocksDestroyed, - dataset: datasets.cumulative_coinblocks_destroyed, + dataset: + params.datasets[scale].cumulative_coinblocks_destroyed, }, { title: "Cumulative Coinblocks Stored", color: colors.coinblocksStored, - dataset: datasets.cumulative_coinblocks_stored, + dataset: + params.datasets[scale].cumulative_coinblocks_stored, }, ], }); @@ -419,7 +419,8 @@ export function createPresets({ { title: "Cumulative Coinblocks Created", color: colors.coinblocksCreated, - dataset: datasets.cumulative_coinblocks_created, + dataset: + params.datasets[scale].cumulative_coinblocks_created, }, ], }); @@ -441,7 +442,8 @@ export function createPresets({ { title: "Cumulative Coinblocks Destroyed", color: colors.coinblocksDestroyed, - dataset: datasets.cumulative_coinblocks_destroyed, + dataset: + params.datasets[scale].cumulative_coinblocks_destroyed, }, ], }); @@ -463,7 +465,8 @@ export function createPresets({ { title: "Cumulative Coinblocks Stored", color: colors.coinblocksStored, - dataset: datasets.cumulative_coinblocks_stored, + dataset: + params.datasets[scale].cumulative_coinblocks_stored, }, ], }); @@ -490,7 +493,7 @@ export function createPresets({ { title: "Liveliness", color: colors.liveliness, - dataset: datasets.liveliness, + dataset: params.datasets[scale].liveliness, }, ], }); @@ -512,7 +515,7 @@ export function createPresets({ { title: "Vaultedness", color: colors.vaultedness, - dataset: datasets.vaultedness, + dataset: params.datasets[scale].vaultedness, }, ], }); @@ -534,12 +537,12 @@ export function createPresets({ { title: "Liveliness", color: colors.liveliness, - dataset: datasets.liveliness, + dataset: params.datasets[scale].liveliness, }, { title: "Vaultedness", color: colors.vaultedness, - dataset: datasets.vaultedness, + dataset: params.datasets[scale].vaultedness, }, ], }); @@ -561,7 +564,8 @@ export function createPresets({ { title: "Activity To Vaultedness Ratio", color: colors.activityToVaultednessRatio, - dataset: datasets.activity_to_vaultedness_ratio, + dataset: + params.datasets[scale].activity_to_vaultedness_ratio, }, ], }); @@ -583,12 +587,13 @@ export function createPresets({ { title: "Concurrent Liveliness 14d Median", color: `${colors.liveliness}66`, - dataset: datasets.concurrent_liveliness_2w_median, + dataset: + params.datasets[scale].concurrent_liveliness_2w_median, }, { title: "Concurrent Liveliness", color: colors.liveliness, - dataset: datasets.concurrent_liveliness, + dataset: params.datasets[scale].concurrent_liveliness, }, ], }); @@ -611,13 +616,14 @@ export function createPresets({ title: "Liveliness Incremental Change", color: colors.darkLiveliness, seriesType: SeriesType.Based, - dataset: datasets.liveliness_net_change, + dataset: params.datasets[scale].liveliness_net_change, }, { title: "Liveliness Incremental Change 14 Day Median", color: colors.liveliness, seriesType: SeriesType.Based, - dataset: datasets.liveliness_net_change_2w_median, + dataset: + params.datasets[scale].liveliness_net_change_2w_median, }, ], }); @@ -644,7 +650,7 @@ export function createPresets({ { title: "Vaulted Supply", color: colors.vaultedness, - dataset: datasets.vaulted_supply, + dataset: params.datasets[scale].vaulted_supply, }, ], }); @@ -666,7 +672,7 @@ export function createPresets({ { title: "Active Supply", color: colors.liveliness, - dataset: datasets.active_supply, + dataset: params.datasets[scale].active_supply, }, ], }); @@ -688,17 +694,17 @@ export function createPresets({ { title: "Circulating Supply", color: colors.coinblocksCreated, - dataset: datasets.supply, + dataset: params.datasets[scale].supply, }, { title: "Vaulted Supply", color: colors.vaultedness, - dataset: datasets.vaulted_supply, + dataset: params.datasets[scale].vaulted_supply, }, { title: "Active Supply", color: colors.liveliness, - dataset: datasets.active_supply, + dataset: params.datasets[scale].active_supply, }, ], }); @@ -722,13 +728,13 @@ export function createPresets({ // id: 'min-vaulted', // title: 'Min Vaulted Supply', // color: colors.vaultedness, - // dataset: params.datasets.dateToMinVaultedSupply, + // dataset: params.params.datasets[scale].dateToMinVaultedSupply, // }, // { // id: 'max-active', // title: 'Max Active Supply', // color: colors.liveliness, - // dataset: params.datasets.dateToMaxActiveSupply, + // dataset: params.params.datasets[scale].dateToMaxActiveSupply, // }, // ], // }) @@ -750,7 +756,7 @@ export function createPresets({ { title: "Vaulted Supply Net Change", color: colors.vaultedness, - dataset: datasets.vaulted_supply, + dataset: params.datasets[scale].vaulted_supply, }, ], }); @@ -772,7 +778,7 @@ export function createPresets({ { title: "Active Supply Net Change", color: colors.liveliness, - dataset: datasets.active_supply_net_change, + dataset: params.datasets[scale].active_supply_net_change, }, ], }); @@ -794,14 +800,15 @@ export function createPresets({ { title: "Active Supply Net Change", color: `${colors.liveliness}80`, - dataset: datasets.active_supply_3m_net_change, + dataset: params.datasets[scale].active_supply_3m_net_change, seriesType: SeriesType.Based, }, { title: "Vaulted Supply Net Change", color: `${colors.vaultedPrice}80`, seriesType: SeriesType.Based, - dataset: datasets.vaulted_supply_3m_net_change, + dataset: + params.datasets[scale].vaulted_supply_3m_net_change, }, ], }); @@ -826,7 +833,7 @@ export function createPresets({ // title: 'Vaulted Supply Annualized Net Change', // color: colors.vaultedness, // dataset: - // datasets.vaultedAnnualizedSupplyNetChange, + // params.datasets[scale].vaultedAnnualizedSupplyNetChange, // }, // ], // }) @@ -851,13 +858,13 @@ export function createPresets({ // id: 'vaulting-rate', // title: 'Vaulting Rate', // color: colors.vaultedness, - // dataset: datasets.vaultingRate, + // dataset: params.datasets[scale].vaultingRate, // }, // { // id: 'nominal-inflation-rate', // title: 'Nominal Inflation Rate', // color: colors.orange, - // dataset: params.datasets.dateToYearlyInflationRate, + // dataset: params.params.datasets[scale].dateToYearlyInflationRate, // }, // ], // }) @@ -883,7 +890,7 @@ export function createPresets({ // title: 'Change From Issuance', // color: colors.emerald, // dataset: - // params.datasets + // params.params.datasets[scale] // [scale].activeSupplyChangeFromIssuance90dChange, // }, // { @@ -891,14 +898,14 @@ export function createPresets({ // title: 'Change From Transactions', // color: colors.rose, // dataset: - // params.datasets + // params.params.datasets[scale] // [scale].activeSupplyChangeFromTransactions90dChange, // }, // // { // // id: 'active', // // title: 'Active Supply', // // color: colors.liveliness, - // // dataset: datasets.activeSupply, + // // dataset: params.datasets[scale].activeSupply, // // }, // ], // }) @@ -921,17 +928,17 @@ export function createPresets({ { title: "Circulating Supply", color: colors.coinblocksCreated, - dataset: datasets.supply, + dataset: params.datasets[scale].supply, }, { title: "Vaulted Supply", color: colors.vaultedness, - dataset: datasets.vaulted_supply, + dataset: params.datasets[scale].vaulted_supply, }, { title: "Supply in profit", color: colors.bitcoin, - dataset: datasets.supply_in_profit, + dataset: params.datasets[scale].supply_in_profit, }, ], }); @@ -953,17 +960,17 @@ export function createPresets({ { title: "Circulating Supply", color: colors.coinblocksCreated, - dataset: datasets.supply, + dataset: params.datasets[scale].supply, }, { title: "Active Supply", color: colors.liveliness, - dataset: datasets.active_supply, + dataset: params.datasets[scale].active_supply, }, { title: "Supply in Loss", color: colors.bitcoin, - dataset: datasets.supply_in_loss, + dataset: params.datasets[scale].supply_in_loss, }, ], }); @@ -988,12 +995,14 @@ export function createPresets({ { title: "Cointime Adjusted", color: colors.coinblocksCreated, - dataset: datasets.cointime_adjusted_yearly_inflation_rate, + dataset: + params.datasets[scale] + .cointime_adjusted_yearly_inflation_rate, }, { title: "Nominal", color: colors.bitcoin, - dataset: datasets.yearly_inflation_rate, + dataset: params.datasets[scale].yearly_inflation_rate, }, ], }); @@ -1016,12 +1025,12 @@ export function createPresets({ { title: "Cointime Adjusted", color: colors.coinblocksCreated, - dataset: datasets.cointime_adjusted_velocity, + dataset: params.datasets[scale].cointime_adjusted_velocity, }, { title: "Nominal", color: colors.bitcoin, - dataset: datasets.transaction_velocity, + dataset: params.datasets[scale].transaction_velocity, }, ], }); diff --git a/app/src/scripts/presets/hodlers/index.ts b/app/src/scripts/presets/hodlers/index.ts index 833f89736..f9115c4c4 100644 --- a/app/src/scripts/presets/hodlers/index.ts +++ b/app/src/scripts/presets/hodlers/index.ts @@ -9,13 +9,7 @@ import { colors } from "../../utils/colors"; import { createCohortPresetFolder } from "../templates/cohort"; import { applyMultipleSeries } from "../templates/multiple"; -export function createPresets({ - scale, - datasets, -}: { - scale: ResourceScale; - datasets: Datasets; -}) { +export function createPresets({ scale }: { scale: ResourceScale }) { return { name: "Hodlers", tree: [ @@ -62,7 +56,6 @@ export function createPresets({ }, ...xthCohorts.map(({ key, name, legend }) => createCohortPresetFolder({ - datasets, scale, color: colors[key], name: legend, @@ -74,7 +67,6 @@ export function createPresets({ name: "Up To X", tree: upToCohorts.map(({ key, name }) => createCohortPresetFolder({ - datasets, scale, color: colors[key], name, @@ -87,7 +79,6 @@ export function createPresets({ name: "From X To Y", tree: fromXToYCohorts.map(({ key, name }) => createCohortPresetFolder({ - datasets, scale, color: colors[key], name, @@ -100,7 +91,6 @@ export function createPresets({ name: "From X", tree: fromXCohorts.map(({ key, name }) => createCohortPresetFolder({ - datasets, scale, color: colors[key], name, @@ -113,7 +103,6 @@ export function createPresets({ name: "Years", tree: yearCohorts.map(({ key, name }) => createCohortPresetFolder({ - datasets, scale, color: colors[key], name, diff --git a/app/src/scripts/presets/index.ts b/app/src/scripts/presets/index.ts index c9af34be7..b21988cd8 100644 --- a/app/src/scripts/presets/index.ts +++ b/app/src/scripts/presets/index.ts @@ -19,7 +19,7 @@ export const LOCAL_STORAGE_HISTORY_KEY = "history"; export const LOCAL_STORAGE_SELECTED_KEY = "preset"; export const LOCAL_STORAGE_VISITED_KEY = "visited"; -export function createPresets(datasets: Datasets): Presets { +export function createPresets(): Presets { const partialTree = [ { name: "Dashboards (Coming soon)", @@ -31,21 +31,20 @@ export function createPresets(datasets: Datasets): Presets { { name: "By Date", tree: [ - createMarketPresets({ scale: "date", datasets }), + createMarketPresets({ scale: "date" }), createBlocksPresets(), createMinersPresets("date"), createTransactionsPresets("date"), ...createCohortPresetList({ - datasets, scale: "date", color: colors.bitcoin, datasetKey: "", name: "", title: "", }), - createHodlersPresets({ scale: "date", datasets }), - createAddressesPresets({ scale: "date", datasets }), - createCoinblocksPresets({ scale: "date", datasets }), + createHodlersPresets({ scale: "date" }), + createAddressesPresets({ scale: "date" }), + createCoinblocksPresets({ scale: "date" }), ], } satisfies PartialPresetFolder, { diff --git a/app/src/scripts/presets/market/averages/index.ts b/app/src/scripts/presets/market/averages/index.ts index 14111f348..f3f880c9a 100644 --- a/app/src/scripts/presets/market/averages/index.ts +++ b/app/src/scripts/presets/market/averages/index.ts @@ -3,7 +3,7 @@ import { colors } from "/src/scripts/utils/colors"; import { applyMultipleSeries } from "../../templates/multiple"; -export function createPresets(datasets: Datasets): PartialPresetFolder { +export function createPresets(): PartialPresetFolder { const scale: ResourceScale = "date"; return { @@ -28,7 +28,6 @@ export function createPresets(datasets: Datasets): PartialPresetFolder { }, ...averages.map(({ name, key }) => createPresetFolder({ - datasets, scale, color: colors[`_${key}`], name, @@ -41,12 +40,10 @@ export function createPresets(datasets: Datasets): PartialPresetFolder { function createPresetFolder({ scale, - datasets, color, name, key, }: { - datasets: Datasets; scale: ResourceScale; color: string; name: string; @@ -69,7 +66,7 @@ function createPresetFolder({ { title: `SMA`, color, - dataset: datasets.date[`price_${key}_sma`], + dataset: params.datasets.date[`price_${key}_sma`], }, ], }); diff --git a/app/src/scripts/presets/market/index.ts b/app/src/scripts/presets/market/index.ts index 0803c2826..88718014e 100644 --- a/app/src/scripts/presets/market/index.ts +++ b/app/src/scripts/presets/market/index.ts @@ -4,13 +4,7 @@ import { createPresets as createAveragesPresets } from "./averages"; import { createPresets as createIndicatorsPresets } from "./indicators"; import { createPresets as createReturnsPresets } from "./returns"; -export function createPresets({ - scale, - datasets, -}: { - scale: ResourceScale; - datasets: Datasets; -}) { +export function createPresets({ scale }: { scale: ResourceScale }) { return { name: "Market", tree: [ @@ -67,9 +61,9 @@ export function createPresets({ }, ...(scale === "date" ? ([ - createAveragesPresets(datasets), - createReturnsPresets(datasets), - createIndicatorsPresets(datasets), + createAveragesPresets(), + createReturnsPresets(), + createIndicatorsPresets(), ] satisfies PartialPresetTree) : []), ], diff --git a/app/src/scripts/presets/market/indicators/index.ts b/app/src/scripts/presets/market/indicators/index.ts index 3fc892f49..c0ae328cf 100644 --- a/app/src/scripts/presets/market/indicators/index.ts +++ b/app/src/scripts/presets/market/indicators/index.ts @@ -1,4 +1,4 @@ -export function createPresets(datasets: Datasets) { +export function createPresets() { return { name: "Indicators", tree: [], diff --git a/app/src/scripts/presets/market/returns/index.ts b/app/src/scripts/presets/market/returns/index.ts index 6610a7bf5..0162ccfdd 100644 --- a/app/src/scripts/presets/market/returns/index.ts +++ b/app/src/scripts/presets/market/returns/index.ts @@ -5,7 +5,7 @@ import { import { applyMultipleSeries, SeriesType } from "../../templates/multiple"; -export function createPresets(datasets: Datasets) { +export function createPresets() { return { name: "Returns", tree: [ @@ -15,7 +15,6 @@ export function createPresets(datasets: Datasets) { ...totalReturns.map(({ name, key }) => createPreset({ scale: "date", - datasets, name, title: `${name} Total`, key: `${key}_total`, @@ -29,7 +28,6 @@ export function createPresets(datasets: Datasets) { ...compoundReturns.map(({ name, key }) => createPreset({ scale: "date", - datasets, name, title: `${name} Compound`, key: `${key}_compound`, @@ -43,13 +41,11 @@ export function createPresets(datasets: Datasets) { function createPreset({ scale, - datasets, name, title, key, }: { scale: ResourceScale; - datasets: Datasets; name: string; title: string; key: `${TotalReturnKey}_total` | `${CompoundReturnKey}_compound`; @@ -70,7 +66,7 @@ function createPreset({ { title: `Return (%)`, seriesType: SeriesType.Based, - dataset: datasets.date[`price_${key}_return`], + dataset: params.datasets.date[`price_${key}_return`], }, ], }); diff --git a/app/src/scripts/presets/templates/cohort.ts b/app/src/scripts/presets/templates/cohort.ts index 76d102c11..1d8cca23a 100644 --- a/app/src/scripts/presets/templates/cohort.ts +++ b/app/src/scripts/presets/templates/cohort.ts @@ -3,14 +3,12 @@ import { colors } from "../../utils/colors"; import { applyMultipleSeries, SeriesType } from "./multiple"; export function createCohortPresetFolder({ - datasets, scale, color, name, datasetKey, title, }: { - datasets: Datasets; scale: Scale; name: string; datasetKey: AnyPossibleCohortKey; @@ -21,7 +19,6 @@ export function createCohortPresetFolder({ name, tree: createCohortPresetList({ title, - datasets, name, scale, color, @@ -32,14 +29,12 @@ export function createCohortPresetFolder({ export function createCohortPresetList({ name, - datasets, scale, color, datasetKey, title, }: { name: string; - datasets: Datasets; scale: Scale; datasetKey: AnyPossibleCohortKey; title: string; diff --git a/app/src/styles.css b/app/src/styles.css index 70c113a68..52dbe66f4 100644 --- a/app/src/styles.css +++ b/app/src/styles.css @@ -21,6 +21,10 @@ } } +a { + @apply text-orange-300 hover:underline; +} + mark { @apply bg-transparent p-0 text-orange-400; } diff --git a/app/src/types/auto-imports.d.ts b/app/src/types/auto-imports.d.ts index 2c3cd3972..ad43beb8c 100644 --- a/app/src/types/auto-imports.d.ts +++ b/app/src/types/auto-imports.d.ts @@ -22,8 +22,8 @@ declare global { const IconTablerArrowForward: typeof import('~icons/tabler/arrow-forward.jsx')['default'] const IconTablerArrowRight: (typeof import("~icons/tabler/arrow-right.jsx"))["default"] const IconTablerArrowsCross: typeof import('~icons/tabler/arrows-cross.jsx')['default'] - const IconTablerArrowsMaximize: (typeof import("~icons/tabler/arrows-maximize.jsx"))["default"] - const IconTablerArrowsMinimize: (typeof import("~icons/tabler/arrows-minimize.jsx"))["default"] + const IconTablerArrowsMaximize: typeof import('~icons/tabler/arrows-maximize.jsx')['default'] + const IconTablerArrowsMinimize: typeof import('~icons/tabler/arrows-minimize.jsx')['default'] const IconTablerArrowsSearch: (typeof import("~icons/tabler/arrows-search.jsx"))["default"] const IconTablerArrowsShuffle: (typeof import("~icons/tabler/arrows-shuffle.jsx"))["default"] const IconTablerArrowsShuffle2: typeof import('~icons/tabler/arrows-shuffle2.jsx')['default'] @@ -146,6 +146,8 @@ declare global { const IconTablerInfoSmall: (typeof import("~icons/tabler/info-small.jsx"))["default"] const IconTablerInfoSquareRounded: (typeof import("~icons/tabler/info-square-rounded.jsx"))["default"] const IconTablerJetpack: typeof import('~icons/tabler/jetpack.jsx')['default'] + const IconTablerLayoutSidebarLeftExpand: typeof import('~icons/tabler/layout-sidebar-left-expand.jsx')['default'] + const IconTablerLayoutSidebarRightExpand: typeof import('~icons/tabler/layout-sidebar-right-expand.jsx')['default'] const IconTablerLetterB: typeof import('~icons/tabler/letter-b.jsx')['default'] const IconTablerLetterG: typeof import('~icons/tabler/letter-g.jsx')['default'] const IconTablerLetterK: typeof import('~icons/tabler/letter-k.jsx')['default'] @@ -233,7 +235,7 @@ declare global { const IconTablerWallet: typeof import('~icons/tabler/wallet.jsx')['default'] const IconTablerWeight: typeof import('~icons/tabler/weight.jsx')['default'] const IconTablerWind: typeof import('~icons/tabler/wind.jsx')['default'] - const IconTablerX: (typeof import("~icons/tabler/x.jsx"))["default"] + const IconTablerX: typeof import('~icons/tabler/x.jsx')['default'] const IconTablerZoomFilled: typeof import('~icons/tabler/zoom-filled.jsx')['default'] const Index: typeof import('solid-js')['Index'] const Link: typeof import('@solidjs/router')['Link'] diff --git a/app/vite.config.ts b/app/vite.config.ts index 87a308885..9616a4820 100644 --- a/app/vite.config.ts +++ b/app/vite.config.ts @@ -15,11 +15,9 @@ export default defineConfig({ solidPlugin(), VitePWA({ + registerType: "prompt", injectRegister: false, workbox: { - skipWaiting: true, - clientsClaim: true, - cleanupOutdatedCaches: true, globPatterns: ["**/*.{js,css,html,ico,png,svg,json,woff2,ttf,md}"], }, manifest: false, diff --git a/parser/Cargo.lock b/parser/Cargo.lock index 90d33d786..b982f5e06 100644 --- a/parser/Cargo.lock +++ b/parser/Cargo.lock @@ -1272,7 +1272,7 @@ dependencies = [ [[package]] name = "parser" -version = "0.1.0" +version = "0.1.1" dependencies = [ "allocative", "bincode", diff --git a/parser/Cargo.toml b/parser/Cargo.toml index dea57ebe2..f00300e65 100644 --- a/parser/Cargo.toml +++ b/parser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "parser" -version = "0.1.0" +version = "0.1.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/server/Cargo.lock b/server/Cargo.lock index 9bb55aebf..dd469a9dd 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -1463,7 +1463,7 @@ dependencies = [ [[package]] name = "parser" -version = "0.1.0" +version = "0.1.1" dependencies = [ "allocative", "bincode", @@ -1907,7 +1907,7 @@ dependencies = [ [[package]] name = "server" -version = "0.1.0" +version = "0.1.1" dependencies = [ "axum", "bincode", diff --git a/server/Cargo.toml b/server/Cargo.toml index 7c5951f7f..d1ff27616 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "server" -version = "0.1.0" +version = "0.1.1" edition = "2021" [dependencies] diff --git a/server/src/routes.rs b/server/src/routes.rs index e6bc26b0b..954c85006 100644 --- a/server/src/routes.rs +++ b/server/src/routes.rs @@ -17,7 +17,7 @@ pub struct Route { #[derive(Clone, Default, Deref, DerefMut)] pub struct Routes(pub Grouped>); -const DATASETS_PATH: &str = "../datasets_bkp"; +const DATASETS_PATH: &str = "../datasets"; impl Routes { pub fn build() -> Self {