diff --git a/websites/default/index.html b/websites/default/index.html index 5c7f2cd0a..7072a4aa9 100644 --- a/websites/default/index.html +++ b/websites/default/index.html @@ -1,8 +1,7 @@ - + - { updateThemeColor(matches); - } + }, ); if ("standalone" in window.navigator && !!window.navigator.standalone) { diff --git a/websites/default/packages/solid-signals/wrapper.js b/websites/default/packages/solid-signals/wrapper.js index 550fb9a8c..80753e40c 100644 --- a/websites/default/packages/solid-signals/wrapper.js +++ b/websites/default/packages/solid-signals/wrapper.js @@ -3,7 +3,7 @@ /** * @import { SignalOptions } from "./v0.3.2-treeshaked/types/core/core" * @import { getOwner as GetOwner, onCleanup as OnCleanup } from "./v0.3.2-treeshaked/types/core/owner" - * @import { createSignal as CreateSignal, createEffect as CreateEffect, createMemo as CreateMemo, createRoot as CreateRoot, runWithOwner as RunWithOwner } from "./v0.3.2-treeshaked/types/signals"; + * @import { createSignal as CreateSignal, createEffect as CreateEffect, createMemo as CreateMemo, createRoot as CreateRoot, runWithOwner as RunWithOwner, Accessor } from "./v0.3.2-treeshaked/types/signals"; * @import { Signal } from "./types"; */ @@ -40,13 +40,13 @@ const importSignals = import("./v0.3.2-treeshaked/script.js").then( /** * @template T * @param {T} initialValue - * @param {SignalOptions & {save?: {keyPrefix: string; key: string; serialize: (v: T) => string; deserialize: (v: string) => T; serializeParam?: boolean}}} [options] + * @param {SignalOptions & {save?: {keyPrefix: string | Accessor; key: string; serialize: (v: T) => string; deserialize: (v: string) => T; serializeParam?: boolean}}} [options] * @returns {Signal} */ createSignal(initialValue, options) { const [get, set] = this.createSolidSignal( /** @type {any} */ (initialValue), - options + options, ); // @ts-ignore @@ -59,27 +59,42 @@ const importSignals = import("./v0.3.2-treeshaked/script.js").then( const save = options.save; const paramKey = save.key; - const storageKey = `${save.keyPrefix}-${paramKey}`; + const storageKey = this.createMemo( + () => + `${typeof save.keyPrefix === "string" ? save.keyPrefix : save.keyPrefix()}-${paramKey}`, + ); let serialized = /** @type {string | null} */ (null); if (options.save.serializeParam !== false) { serialized = new URLSearchParams(window.location.search).get( - paramKey + paramKey, + ); + } + if (serialized === null) { + serialized = localStorage.getItem(storageKey()); + } + if (serialized) { + set(() => + serialized ? save.deserialize(serialized) : initialValue, ); } - if (serialized === null) { - serialized = localStorage.getItem(storageKey); - } - if (serialized) { - set(() => save.deserialize(serialized)); - } + let firstRun1 = true; + this.createEffect(storageKey, (storageKey) => { + if (!firstRun1) { + serialized = localStorage.getItem(storageKey); + set(() => + serialized ? save.deserialize(serialized) : initialValue, + ); + } + firstRun1 = false; + }); - let firstEffect = true; + let firstRun2 = true; this.createEffect(get, (value) => { if (!save) return; - if (!firstEffect) { + if (!firstRun2) { if ( value !== undefined && value !== null && @@ -87,9 +102,9 @@ const importSignals = import("./v0.3.2-treeshaked/script.js").then( initialValue === null || save.serialize(value) !== save.serialize(initialValue)) ) { - localStorage.setItem(storageKey, save.serialize(value)); + localStorage.setItem(storageKey(), save.serialize(value)); } else { - localStorage.removeItem(storageKey); + localStorage.removeItem(storageKey()); } } @@ -105,7 +120,7 @@ const importSignals = import("./v0.3.2-treeshaked/script.js").then( removeParam(paramKey); } - firstEffect = false; + firstRun2 = false; }); } @@ -115,7 +130,7 @@ const importSignals = import("./v0.3.2-treeshaked/script.js").then( }; return signals; - } + }, ); /** @@ -135,7 +150,7 @@ function writeParam(key, value) { window.history.replaceState( null, "", - `${window.location.pathname}?${urlParams.toString()}` + `${window.location.pathname}?${urlParams.toString()}`, ); } catch (_) {} } diff --git a/websites/default/scripts/main.js b/websites/default/scripts/main.js index 27672cc54..672c4a8f8 100644 --- a/websites/default/scripts/main.js +++ b/websites/default/scripts/main.js @@ -2,14 +2,14 @@ /** * @import { Option, PartialChartOption, ChartOption, AnyPartialOption, ProcessedOptionAddons, OptionsTree, SimulationOption, AnySeriesBlueprint, ChartableIndex,CreatePriceLineOptions, CreatePriceLine } from "./options" - * @import {Valued, SingleValueData, CandlestickData, ChartData, OHLCTuple} from "../packages/lightweight-charts/wrapper" + * @import { Valued, SingleValueData, CandlestickData, ChartData, OHLCTuple, Series } from "../packages/lightweight-charts/wrapper" * @import * as _ from "../packages/ufuzzy/v1.0.18/types" * @import { createChart as CreateClassicChart, LineStyleOptions, DeepPartial, ChartOptions, IChartApi, IHorzScaleBehavior, WhitespaceData, ISeriesApi, Time, LineData, LogicalRange, BaselineStyleOptions, SeriesOptionsCommon, BaselineData, CandlestickStyleOptions } from "../packages/lightweight-charts/v5.0.7-treeshaked/types" * @import { SignalOptions } from "../packages/solid-signals/v0.3.2-treeshaked/types/core/core" * @import {Signal, Signals} from "../packages/solid-signals/types"; * @import { getOwner as GetOwner, onCleanup as OnCleanup, Owner } from "../packages/solid-signals/v0.3.2-treeshaked/types/core/owner" * @import { createEffect as CreateEffect, Accessor, Setter, createMemo as CreateMemo } from "../packages/solid-signals/v0.3.2-treeshaked/types/signals"; - * @import {DateIndex, DecadeIndex, DifficultyEpoch, Index, HalvingEpoch, Height, MonthIndex, P2PK33Index, P2PK65Index, P2PKHIndex, P2SHIndex, P2MSIndex, P2AIndex, P2TRIndex, P2WPKHIndex, P2WSHIndex, TxIndex, InputIndex, OutputIndex, VecId, WeekIndex, YearIndex, VecIdToIndexes, QuarterIndex, EmptyOutputIndex, OpReturnIndex, UnknownOutputIndex} from "./vecid-to-indexes" + * @import { DateIndex, DecadeIndex, DifficultyEpoch, Index, HalvingEpoch, Height, MonthIndex, P2PK33Index, P2PK65Index, P2PKHIndex, P2SHIndex, P2MSIndex, P2AIndex, P2TRIndex, P2WPKHIndex, P2WSHIndex, TxIndex, InputIndex, OutputIndex, VecId, WeekIndex, YearIndex, VecIdToIndexes, QuarterIndex, EmptyOutputIndex, OpReturnIndex, UnknownOutputIndex } from "./vecid-to-indexes" */ /** @@ -378,7 +378,11 @@ function createUtils() { sorted, }) { const choices = sorted - ? /** @type {T} */ (/** @type {any} */ (unsortedChoices.toSorted())) + ? /** @type {T} */ ( + /** @type {any} */ ( + unsortedChoices.toSorted((a, b) => a.localeCompare(b)) + ) + ) : unsortedChoices; /** @type {Signal} */ @@ -389,7 +393,9 @@ function createUtils() { key, }, }); + if (!choices.includes(selected())) { + console.log(choices, "don't include", selected()); selected.set(() => defaultValue); } @@ -424,15 +430,14 @@ function createUtils() { return { field, selected }; }, /** - * @param {Object} args - * @param {1 | 2 | 3} [args.level] - * @param {string} [args.title] + * @param {string} [title] + * @param {1 | 2 | 3} [level] */ - createHeader({ title, level = 1 }) { + createHeader(title = "", level = 1) { const headerElement = window.document.createElement("header"); const headingElement = window.document.createElement(`h${level}`); - headingElement.innerHTML = title || ""; + headingElement.innerHTML = title; headerElement.append(headingElement); headingElement.style.display = "block"; diff --git a/websites/default/scripts/simulation.js b/websites/default/scripts/simulation.js index 75fbff58a..9445b311f 100644 --- a/websites/default/scripts/simulation.js +++ b/websites/default/scripts/simulation.js @@ -391,9 +391,7 @@ export function init({ }; parametersElement.append( - utils.dom.createHeader({ - title: "Save in Bitcoin", - }).headerElement, + utils.dom.createHeader("Save in Bitcoin").headerElement, ); /** @@ -698,7 +696,11 @@ export function init({ }, ); + const index = () => /** @type {DateIndex} */ (0); + lightweightCharts.createChartElement({ + index, + owner, parent: resultsElement, signals, colors, @@ -743,6 +745,8 @@ export function init({ }); lightweightCharts.createChartElement({ + index, + owner, parent: resultsElement, signals, colors, @@ -767,6 +771,8 @@ export function init({ }); lightweightCharts.createChartElement({ + index, + owner, parent: resultsElement, signals, colors, @@ -797,6 +803,8 @@ export function init({ }); lightweightCharts.createChartElement({ + index, + owner, parent: resultsElement, signals, colors, @@ -805,7 +813,6 @@ export function init({ fitContentOnResize: true, utils, elements, - config: [ { unit: "USD", @@ -821,6 +828,7 @@ export function init({ }); lightweightCharts.createChartElement({ + index, parent: resultsElement, signals, colors, diff --git a/websites/default/scripts/table.js b/websites/default/scripts/table.js index ddad02c9c..4663ff3e1 100644 --- a/websites/default/scripts/table.js +++ b/websites/default/scripts/table.js @@ -29,11 +29,11 @@ function createTable({ keyPrefix: "table", key: "index", }, - } + }, ) ); const index = signals.createMemo(() => - serializedIndexToIndex(serializedIndex()) + serializedIndexToIndex(serializedIndex()), ); const table = window.document.createElement("table"); @@ -73,7 +73,7 @@ function createTable({ table.append(tbody); const rowElements = signals.createSignal( - /** @type {HTMLTableRowElement[]} */ ([]) + /** @type {HTMLTableRowElement[]} */ ([]), ); /** @@ -197,7 +197,7 @@ function createTable({ }); signals.createEffect(vecIdOption, (vecIdOption) => { - select.style.width = `${30 + 8.5 * vecIdOption.name.length}px`; + select.style.width = `${21 + 7.25 * vecIdOption.name.length}px`; }); if (_colIndex === columns().length) { @@ -323,7 +323,7 @@ function createTable({ }); return () => vecId; - } + }, ); }); }); @@ -368,9 +368,7 @@ export function init({ vecIdToIndexes, }) { const parent = elements.table; - const { headerElement } = utils.dom.createHeader({ - title: "Table", - }); + const { headerElement } = utils.dom.createHeader("Table"); parent.append(headerElement); const div = window.document.createElement("div"); @@ -394,7 +392,7 @@ export function init({ }, inside: span, title: "Click or tap to add a column to the table", - }) + }), ); } @@ -499,7 +497,7 @@ function createIndexToVecIds(vecIdToIndexes) { }); return arr; }, - /** @type {VecId[][]} */ (new Array(24)) + /** @type {VecId[][]} */ (new Array(24)), ); indexToVecIds.forEach((arr) => { arr.sort(); diff --git a/websites/default/scripts/vecid-to-indexes.js b/websites/default/scripts/vecid-to-indexes.js index fee95870c..bf5493df2 100644 --- a/websites/default/scripts/vecid-to-indexes.js +++ b/websites/default/scripts/vecid-to-indexes.js @@ -2,7 +2,7 @@ // File auto-generated, any modifications will be overwritten // -export const VERSION = "v0.0.47"; +export const VERSION = "v0.0.48"; /** @typedef {0} DateIndex */ /** @typedef {1} DecadeIndex */ diff --git a/websites/default/service-worker.js b/websites/default/service-worker.js index e0e34d493..7f452cbfe 100644 --- a/websites/default/service-worker.js +++ b/websites/default/service-worker.js @@ -16,11 +16,9 @@ sw.addEventListener("activate", (event) => { .keys() .then((keys) => Promise.all( - keys - .filter((key) => key !== CACHE_NAME && key !== "api") - .map((key) => caches.delete(key)) - ) - ) + keys.filter((key) => key !== "api").map((key) => caches.delete(key)), + ), + ), ); }); @@ -63,7 +61,7 @@ sw.addEventListener("fetch", (event) => { throw new Error("Non-2xx on shell"); }) // On any failure, fall back to the cached shell - .catch(indexHTMLOrOffline) + .catch(indexHTMLOrOffline), ); return; } @@ -86,6 +84,6 @@ sw.addEventListener("fetch", (event) => { }) .catch(indexHTMLOrOffline); }) - .catch(indexHTMLOrOffline) + .catch(indexHTMLOrOffline), ); }); diff --git a/websites/default/styles/table.css b/websites/default/styles/table.css index a92ec0ed7..08edef138 100644 --- a/websites/default/styles/table.css +++ b/websites/default/styles/table.css @@ -7,7 +7,9 @@ > div { display: flex; - font-size: var(--font-size-sm); + font-size: var(--font-size-xs); + line--line-height: var(--line-height-xs); + font-weight: 450; margin-left: var(--negative-main-padding); margin-right: var(--negative-main-padding); @@ -36,7 +38,7 @@ border-bottom: 1px; border-color: var(--off-color); border-style: dashed !important; - padding: 0.25rem 1rem; + padding: 0.25rem 0.75rem; } td { @@ -84,7 +86,7 @@ > button { padding: 0 0.25rem; margin: 0 -0.25rem; - font-size: 1rem; + font-size: 0.75rem; line-height: 0; } } @@ -126,7 +128,6 @@ position: relative; border-top-width: 1px; width: 100%; - /* border-right-width: 1px; */ border-bottom-width: 1px; border-style: dashed !important;