web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

commit b5e6740c36dae4c42d79426a3e96406faade370e
parent 1d56f7190e62c2c9cf778475cc8358d41a5ef5de
Author: triesap <137732411+triesap@users.noreply.github.com>
Date:   Thu, 24 Oct 2024 20:50:36 +0000

apps-lib: import all from \$lib

Diffstat:
Mapps-lib/src/lib/components/app_controls.svelte | 3+--
Mapps-lib/src/lib/components/entry_line.svelte | 2+-
Mapps-lib/src/lib/components/entry_multiline.svelte | 9+++++++--
Mapps-lib/src/lib/components/entry_option.svelte | 10++++++++--
Mapps-lib/src/lib/components/envelope.svelte | 2+-
Mapps-lib/src/lib/components/envelope_buttons.svelte | 3+--
Mapps-lib/src/lib/components/envelope_titled.svelte | 2+-
Mapps-lib/src/lib/components/layout_trellis.svelte | 5++---
Mapps-lib/src/lib/components/loading_view.svelte | 2+-
Mapps-lib/src/lib/components/nav.svelte | 4++--
Mapps-lib/src/lib/components/splash_screen.svelte | 2+-
Mapps-lib/src/lib/components/trellis.svelte | 25++++++++++++++-----------
Mapps-lib/src/lib/components/trellis_default_label.svelte | 2+-
Mapps-lib/src/lib/components/trellis_end.svelte | 2+-
Mapps-lib/src/lib/components/trellis_input.svelte | 12++++++++----
Mapps-lib/src/lib/components/trellis_offset.svelte | 8++++----
Mapps-lib/src/lib/components/trellis_row_display_value.svelte | 8++++----
Mapps-lib/src/lib/components/trellis_row_label.svelte | 10+++++++---
Mapps-lib/src/lib/components/trellis_title.svelte | 7++-----
Mapps-lib/src/lib/components/trellis_touch.svelte | 12++++++++----
Mapps-lib/src/lib/locales/en/common.json | 1+
Mapps-lib/src/lib/locales/en/error.json | 3++-
Mapps-lib/src/lib/locales/en/icu.json | 1+
Mapps-lib/src/lib/locales/en/model.json | 24++++++++++++------------
Mapps-lib/src/lib/stores/client.ts | 2++
Mapps-lib/src/lib/types/components.ts | 4+---
Mapps-lib/src/lib/types/trellis.ts | 3+--
Mapps-lib/src/lib/ui/glyph.svelte | 4+---
Mapps-lib/src/lib/ui/toast.svelte | 2+-
Mapps-lib/src/lib/utils/client.ts | 21++++++++++++++++++++-
Mapps-lib/src/lib/utils/conf.ts | 2+-
Mapps-lib/src/lib/utils/time.ts | 2+-
32 files changed, 119 insertions(+), 80 deletions(-)

diff --git a/apps-lib/src/lib/components/app_controls.svelte b/apps-lib/src/lib/components/app_controls.svelte @@ -1,6 +1,5 @@ <script lang="ts"> - import { app_layout, app_toast, app_win, wind } from "$lib"; - import Toast from "$lib/ui/toast.svelte"; + import { app_layout, app_toast, app_win, Toast, wind } from "$lib"; import { onMount } from "svelte"; onMount(async () => { diff --git a/apps-lib/src/lib/components/entry_line.svelte b/apps-lib/src/lib/components/entry_line.svelte @@ -2,12 +2,12 @@ import { fmt_cl, Glyph, + InputElement, Loading, parse_layer, type IEntryLine, type ILoadingDimension, } from "$lib"; - import InputElement from "$lib/ui/input_element.svelte"; export let basis: IEntryLine; $: basis = basis; diff --git a/apps-lib/src/lib/components/entry_multiline.svelte b/apps-lib/src/lib/components/entry_multiline.svelte @@ -1,6 +1,11 @@ <script lang="ts"> - import { fmt_cl, Glyph, parse_layer, type IEntryMultiLine } from "$lib"; - import TextareaElement from "$lib/ui/textarea_element.svelte"; + import { + fmt_cl, + Glyph, + parse_layer, + TextareaElement, + type IEntryMultiLine, + } from "$lib"; export let basis: IEntryMultiLine; $: basis = basis; diff --git a/apps-lib/src/lib/components/entry_option.svelte b/apps-lib/src/lib/components/entry_option.svelte @@ -1,7 +1,13 @@ <!-- svelte-ignore a11y-no-noninteractive-tabindex --> <script lang="ts"> - import { fmt_cl, type IEntryOption, kv, Loading, parse_layer } from "$lib"; - import Glyph from "$lib/ui/glyph.svelte"; + import { + fmt_cl, + Glyph, + type IEntryOption, + kv, + Loading, + parse_layer, + } from "$lib"; import { onMount } from "svelte"; let el: HTMLSelectElement | null; diff --git a/apps-lib/src/lib/components/envelope.svelte b/apps-lib/src/lib/components/envelope.svelte @@ -1,5 +1,6 @@ <script lang="ts"> import { + EnvelopeTitled, Fill, fmt_cl, parse_layer, @@ -9,7 +10,6 @@ import { quintInOut } from "svelte/easing"; import { writable } from "svelte/store"; import { slide } from "svelte/transition"; - import EnvelopeTitled from "./envelope_titled.svelte"; export let basis: IEnvelopeBasis; $: basis = basis; diff --git a/apps-lib/src/lib/components/envelope_buttons.svelte b/apps-lib/src/lib/components/envelope_buttons.svelte @@ -1,6 +1,5 @@ <script lang="ts"> - import type { CallbackPromise } from "$lib/types/client"; - import { fmt_cl } from "$lib/utils/client"; + import { type CallbackPromise, fmt_cl } from "$lib"; import { quintInOut } from "svelte/easing"; import { fly } from "svelte/transition"; diff --git a/apps-lib/src/lib/components/envelope_titled.svelte b/apps-lib/src/lib/components/envelope_titled.svelte @@ -1,12 +1,12 @@ <script lang="ts"> import { type CallbackPromise, + Fill, fmt_cl, Glyph, type IEnvelopeTitledBasis, t, } from "$lib"; - import Fill from "$lib/ui/fill.svelte"; import type { ThemeLayer } from "@radroots/theme"; export let basis: IEnvelopeTitledBasis; diff --git a/apps-lib/src/lib/components/layout_trellis.svelte b/apps-lib/src/lib/components/layout_trellis.svelte @@ -1,12 +1,11 @@ <script lang="ts"> - import type { IClOpt } from "$lib/types/client"; - import { fmt_cl } from "$lib/utils/client"; + import { fmt_cl, type IClOpt } from "$lib"; export let basis: IClOpt | undefined = undefined; </script> <div - class={`${fmt_cl(basis?.classes)} flex flex-col w-full pt-4 pb-12 gap-4 justify-center items-center scroll-hide`} + class={`${fmt_cl(basis?.classes)} flex flex-col pt-4 pb-12 gap-4 justify-center items-center scroll-hide`} > <slot /> </div> diff --git a/apps-lib/src/lib/components/loading_view.svelte b/apps-lib/src/lib/components/loading_view.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import { Loading } from ".."; + import { Loading } from "$lib"; </script> <div diff --git a/apps-lib/src/lib/components/nav.svelte b/apps-lib/src/lib/components/nav.svelte @@ -2,6 +2,7 @@ import { goto } from "$app/navigation"; import { app_layout, + ButtonArrow, encode_qp_route, Fill, fmt_cl, @@ -9,11 +10,10 @@ nav_blur, nav_prev, nav_visible, + NavOption, type INavBasis, } from "$lib"; import { onDestroy, onMount } from "svelte"; - import ButtonArrow from "./button_arrow.svelte"; - import NavOption from "./nav_option.svelte"; export let basis: INavBasis; $: basis = basis; diff --git a/apps-lib/src/lib/components/splash_screen.svelte b/apps-lib/src/lib/components/splash_screen.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import { Fill } from ".."; + import { Fill } from "$lib"; </script> <div diff --git a/apps-lib/src/lib/components/trellis.svelte b/apps-lib/src/lib/components/trellis.svelte @@ -1,12 +1,16 @@ <script lang="ts"> - import { app_layout, fmt_cl, parse_layer, t, type ITrellis } from ".."; - import TrellisDefaultLabel from "./trellis_default_label.svelte"; - import TrellisInput from "./trellis_input.svelte"; - import TrellisOffset from "./trellis_offset.svelte"; - import TrellisTitle from "./trellis_title.svelte"; - import TrellisTouch from "./trellis_touch.svelte"; - - const class_rounded = `2xl`; + import { + app_layout, + fmt_cl, + parse_layer, + t, + TrellisDefaultLabel, + TrellisInput, + TrellisOffset, + TrellisTitle, + TrellisTouch, + type ITrellis, + } from "$lib"; export let basis: { args: ITrellis }; $: ({ args } = basis); @@ -30,7 +34,7 @@ <div id={basis.args.id || ""} - class={`${fmt_cl(args.classes)} flex flex-col w-full`} + class={`${fmt_cl(args.classes)} flex flex-col`} data-view={basis.args.view || ""} > <div @@ -65,7 +69,7 @@ <div class={`flex flex-col w-full justify-center items-center`}> {#each args.list as basis} <div - class={`${basis.hide_field ? "hidden" : ""} group flex flex-row h-full w-full justify-end items-center bg-layer-${args.layer}-surface ${basis.full_rounded ? `rounded-${class_rounded}` : ``} ${hide_rounded ? `` : `first:rounded-t-${class_rounded} last:rounded-b-${class_rounded}`} ${!basis.hide_active ? `active:bg-layer-${args.layer}-surface_a` : ``} transition-all`} + class={`${basis.hide_field ? "hidden" : ""} group flex flex-row h-full w-full justify-end items-center bg-layer-${args.layer}-surface ${basis.full_rounded ? `rounded-touch` : ``} ${hide_rounded ? `` : `first:rounded-t-touch last:rounded-b-touch`} ${!basis.hide_active ? `active:bg-layer-${args.layer}-surface_a` : ``} transition-all`} > <div class={`flex flex-row h-full w-full gap-1 items-center overflow-y-hidden`} @@ -109,4 +113,3 @@ </div> {/if} </div> -<div class={`hidden rounded-2xl first:rounded-t-2xl last:rounded-b-2xl`}></div> diff --git a/apps-lib/src/lib/components/trellis_default_label.svelte b/apps-lib/src/lib/components/trellis_default_label.svelte @@ -1,6 +1,6 @@ <script lang="ts"> + import { fmt_cl, type ITrellisDefaultLabel } from "$lib"; import type { ThemeLayer } from "@radroots/theme"; - import { fmt_cl, type ITrellisDefaultLabel } from ".."; export let classes = ``; export let layer: ThemeLayer; diff --git a/apps-lib/src/lib/components/trellis_end.svelte b/apps-lib/src/lib/components/trellis_end.svelte @@ -1,6 +1,6 @@ <script lang="ts"> + import { Glyph, type ITrellisBasisTouchEnd } from "$lib"; import type { ThemeLayer } from "@radroots/theme"; - import { Glyph, type ITrellisBasisTouchEnd } from ".."; export let basis: ITrellisBasisTouchEnd; export let layer: ThemeLayer; diff --git a/apps-lib/src/lib/components/trellis_input.svelte b/apps-lib/src/lib/components/trellis_input.svelte @@ -1,8 +1,12 @@ <script lang="ts"> - import { fmt_cl, fmt_trellis, type ITrellisBasisInput } from "$lib"; - import Glyph from "$lib/ui/glyph.svelte"; - import InputElement from "$lib/ui/input_element.svelte"; - import Loading from "$lib/ui/loading.svelte"; + import { + fmt_cl, + fmt_trellis, + Glyph, + InputElement, + Loading, + type ITrellisBasisInput, + } from "$lib"; import type { ThemeLayer } from "@radroots/theme"; export let basis: ITrellisBasisInput; diff --git a/apps-lib/src/lib/components/trellis_offset.svelte b/apps-lib/src/lib/components/trellis_offset.svelte @@ -1,14 +1,14 @@ <script lang="ts"> - import GlyphCircle from "$lib/ui/glyph_circle.svelte"; - import Loading from "$lib/ui/loading.svelte"; - import type { ThemeLayer } from "@radroots/theme"; import { Fill, fmt_cl, Glyph, + GlyphCircle, + Loading, type ITrellisBasisOffset, type ITrellisBasisOffsetMod, - } from ".."; + } from "$lib"; + import type { ThemeLayer } from "@radroots/theme"; export let basis: ITrellisBasisOffset | undefined = undefined; export let layer: ThemeLayer; diff --git a/apps-lib/src/lib/components/trellis_row_display_value.svelte b/apps-lib/src/lib/components/trellis_row_display_value.svelte @@ -1,11 +1,11 @@ <script lang="ts"> - import Glyph from "$lib/ui/glyph.svelte"; - import type { ThemeLayer } from "@radroots/theme"; import { fmt_cl, get_label_classes, + Glyph, type ITrellisKindDisplayValue, - } from ".."; + } from "$lib"; + import type { ThemeLayer } from "@radroots/theme"; export let basis: ITrellisKindDisplayValue; export let layer: ThemeLayer; @@ -33,7 +33,7 @@ {:else if basis.label} {#if `value` in basis.label} <p - class={`${fmt_cl(basis.label.classes)} font-sans text-line_display line-clamp-1 ${get_label_classes(layer, basis.label.kind, hide_active)} transition-all`} + class={`${fmt_cl(basis.label.classes)} font-circ text-line_display line-clamp-1 ${get_label_classes(layer, basis.label.kind, hide_active)} transition-all`} > {basis.label.value} </p> diff --git a/apps-lib/src/lib/components/trellis_row_label.svelte b/apps-lib/src/lib/components/trellis_row_label.svelte @@ -1,7 +1,11 @@ <script lang="ts"> - import Glyph from "$lib/ui/glyph.svelte"; + import { + fmt_cl, + get_label_classes, + Glyph, + type ILabelTupFields, + } from "$lib"; import type { ThemeLayer } from "@radroots/theme"; - import { fmt_cl, get_label_classes, type ILabelTupFields } from ".."; export let basis: ILabelTupFields; export let layer: ThemeLayer; @@ -25,7 +29,7 @@ </div> {:else if `value` in title_l} <p - class={`${fmt_cl(title_l.classes)} ${get_label_classes(layer, title_l.kind, hide_active)} ${title_l.hide_truncate ? `` : `truncate`} font-sans text-line_display transition-all`} + class={`${fmt_cl(title_l.classes)} ${get_label_classes(layer, title_l.kind, hide_active)} ${title_l.hide_truncate ? `` : `truncate`} font-circ text-line_display transition-all`} > {title_l.value || ``} </p> diff --git a/apps-lib/src/lib/components/trellis_title.svelte b/apps-lib/src/lib/components/trellis_title.svelte @@ -1,9 +1,6 @@ <script lang="ts"> - import Fill from "$lib/ui/fill.svelte"; - import Glyph from "$lib/ui/glyph.svelte"; - import LabelSwap from "$lib/ui/label_swap.svelte"; + import { Fill, fmt_cl, Glyph, type ITrellisTitle, LabelSwap } from "$lib"; import type { ThemeLayer } from "@radroots/theme"; - import { fmt_cl, type ITrellisTitle } from ".."; export let basis: ITrellisTitle; export let layer: ThemeLayer; @@ -12,7 +9,7 @@ </script> <div - class={`${fmt_cl(basis.classes)} flex flex-row h-[24px] w-full pl-[6px] gap-1 items-center`} + class={`${fmt_cl(basis.classes)} flex flex-row h-[24px] w-full pl-[2px] gap-1 items-center`} > <button class={`flex flex-row h-full w-max items-center gap-1 ${mod === `glyph` ? `pl-[36px]` : mod === `sm` ? `pl-[16px]` : ``}`} diff --git a/apps-lib/src/lib/components/trellis_touch.svelte b/apps-lib/src/lib/components/trellis_touch.svelte @@ -1,9 +1,13 @@ <script lang="ts"> + import { + fmt_trellis, + sleep, + TrellisEnd, + TrellisRowDisplayValue, + TrellisRowLabel, + type ITrellisBasisTouch, + } from "$lib"; import type { ThemeLayer } from "@radroots/theme"; - import { fmt_trellis, sleep, type ITrellisBasisTouch } from ".."; - import TrellisEnd from "./trellis_end.svelte"; - import TrellisRowDisplayValue from "./trellis_row_display_value.svelte"; - import TrellisRowLabel from "./trellis_row_label.svelte"; export let basis: ITrellisBasisTouch; export let layer: ThemeLayer; diff --git a/apps-lib/src/lib/locales/en/common.json b/apps-lib/src/lib/locales/en/common.json @@ -1,4 +1,5 @@ { + "do_you_want_to_continue_q": "Do you want to continue?", "accept": "Accept", "activation": "Activation", "active": "Active", diff --git a/apps-lib/src/lib/locales/en/error.json b/apps-lib/src/lib/locales/en/error.json @@ -4,7 +4,8 @@ "page": { "status": { "404": "The page was not found" - } + }, + "load": "There was an error loading the page" }, "request_failure": "The request was not successful", "unhandled": "There was an error during your request" diff --git a/apps-lib/src/lib/locales/en/icu.json b/apps-lib/src/lib/locales/en/icu.json @@ -1,4 +1,5 @@ { + "*_list": "{value} list", "*_as": "{value} as", "*_available": "{value} Available", "*_copied": "{value} copied", diff --git a/apps-lib/src/lib/locales/en/model.json b/apps-lib/src/lib/locales/en/model.json @@ -1,15 +1,15 @@ { "location_gcs": { - "gc_admin1_id": "", - "gc_admin1_name": "", - "gc_country_id": "", - "gc_country_name": "", - "gc_id": "", - "gc_name": "", "geohash": "Geohash", "label": "Label", "lat": "Latitude", - "lng": "Longitude" + "lng": "Longitude", + "gc_id": "", + "gc_name": "", + "gc_admin1_id": "", + "gc_admin1_name": "", + "gc_country_id": "", + "gc_country_name": "" }, "nostr_profile": { "about": "About", @@ -29,11 +29,11 @@ "description": "Relay description", "name": "Relay name", "pubkey": "Administrator", - "relay_id": "", "software": "Software", "supported_nips": "Supported NIPs", "url": "Relay endpoint", - "version": "Software version" + "version": "Software version", + "relay_id": "" }, "trade_product": { "key": "Product name", @@ -41,8 +41,6 @@ "notes": "Notes", "price_amt": "Price", "price_currency": "Currency", - "price_qty_amt": "", - "price_qty_unit": "", "process": "Processing method", "profile": "Flavor profile", "qty_amt": "Quantity", @@ -51,6 +49,8 @@ "qty_unit": "Quantity unit", "summary": "Listing summary", "title": "Listing title", - "year": "Year" + "year": "Year", + "price_qty_amt": "", + "price_qty_unit": "" } } \ No newline at end of file diff --git a/apps-lib/src/lib/stores/client.ts b/apps-lib/src/lib/stores/client.ts @@ -33,6 +33,8 @@ export const app_geoc = writable<boolean>(false); export const app_thc = writable<ColorMode>(`dark`); export const app_th = writable<ThemeKey>(`os`); export const app_nostr_key = writable<string>(``); +export const app_nostr_profiles = writable<string[]>([]); + export const app_pwa_polyfills = writable<boolean>(false); export const nav_visible = writable<boolean>(false); diff --git a/apps-lib/src/lib/types/components.ts b/apps-lib/src/lib/types/components.ts @@ -1,6 +1,4 @@ -import type { NavigationRoute } from "$lib/utils/routes"; -import type { CallbackPromise, CallbackPromiseGeneric, ICb, ICbG, ICbGOpt, ICbOpt, IClOpt, IClWrapOpt, IGl, IGlOpt, IIdOpt, IIdWrapOpt, ILabel, ILabelFieldsOpt, ILabelOpt, ILabelOptFieldsOpt, ILabelValue, ILoadingOpt, ILyOpt, ILyOptTs, NavigationParamTuple } from "./client"; -import type { GlyphKey, GlyphWeight, IGlyph, IInputElement, ITextAreaElement } from "./ui"; +import type { CallbackPromise, CallbackPromiseGeneric, GlyphKey, GlyphWeight, ICb, ICbG, ICbGOpt, ICbOpt, IClOpt, IClWrapOpt, IGl, IGlOpt, IGlyph, IIdOpt, IIdWrapOpt, IInputElement, ILabel, ILabelFieldsOpt, ILabelOpt, ILabelOptFieldsOpt, ILabelValue, ILoadingOpt, ILyOpt, ILyOptTs, ITextAreaElement, NavigationParamTuple, NavigationRoute } from "$lib"; export type ITabsBasisList = IClOpt & { icon: GlyphKey; diff --git a/apps-lib/src/lib/types/trellis.ts b/apps-lib/src/lib/types/trellis.ts @@ -1,5 +1,4 @@ -import type { CallbackPromise, ICbGOpt, ICbOpt, ICbROpt, IClOpt, IGlOpt, ILabel, ILabelOpt, ILabelTup, ILy } from "./client"; -import type { GlyphKey, IGlyph, IGlyphCircle, IInputElement } from "./ui"; +import type { CallbackPromise, GlyphKey, ICbGOpt, ICbOpt, ICbROpt, IClOpt, IGlOpt, IGlyph, IGlyphCircle, IInputElement, ILabel, ILabelOpt, ILabelTup, ILy } from "$lib"; export type ITrellis = ILy & IClOpt & diff --git a/apps-lib/src/lib/ui/glyph.svelte b/apps-lib/src/lib/ui/glyph.svelte @@ -1,7 +1,5 @@ <script lang="ts"> - import { fmt_cl } from "$lib/utils/client"; - import { glyph_style_map } from "$lib/utils/styles"; - import type { IGlyph } from "../types/ui"; + import { fmt_cl, glyph_style_map, type IGlyph } from "$lib"; export let basis: IGlyph; $: basis = basis; diff --git a/apps-lib/src/lib/ui/toast.svelte b/apps-lib/src/lib/ui/toast.svelte @@ -3,13 +3,13 @@ app_layout, fmt_cl, get_layout, + Glyph, parse_layer, toast_layout_map, toast_style_map, type IToast, type IToastKind, } from "$lib"; - import Glyph from "./glyph.svelte"; export let basis: IToast; $: basis = basis; diff --git a/apps-lib/src/lib/utils/client.ts b/apps-lib/src/lib/utils/client.ts @@ -1,6 +1,7 @@ import { goto } from "$app/navigation"; -import { app_toast, TOAST_MS, type AnchorRoute, type AppConfigType, type AppLayoutKey, type CallbackPromise, type CallbackPromiseGeneric, type GlyphKey, type IToast, type LabelFieldKind, type NavigationParamTuple, type NavigationRoute, type NavigationRouteParamKey } from "$lib"; +import { app_toast, nav_prev, TOAST_MS, type AnchorRoute, type AppConfigType, type AppLayoutKey, type CallbackPromise, type CallbackPromiseGeneric, type GlyphKey, type IToast, type LabelFieldKind, type NavigationParamTuple, type NavigationRoute, type NavigationRouteParamKey } from "$lib"; import type { ColorMode, ThemeKey, ThemeLayer } from "@radroots/theme"; +import { get as get_store } from "svelte/store"; export const sleep = async (ms: number): Promise<void> => { await new Promise((resolve) => setTimeout(resolve, ms)); @@ -180,3 +181,21 @@ export const parse_cfg_type = (value?: string): AppConfigType => { return `personal` }; }; + +export const route_prev = async (route_fallback: NavigationRoute = `/`, params_fallback: NavigationParamTuple[] = []): Promise<void> => { + try { + let route_to = encode_qp_route(route_fallback, params_fallback); + const $nav_prev = get_store(nav_prev); + if ($nav_prev.length) { + const nav_prev_li = $nav_prev.pop(); + if (nav_prev_li) + route_to = encode_qp_route( + nav_prev_li.route, + nav_prev_li.params, + ); + } + await goto(route_to); + } catch (e) { + console.log(`(error) route_prev `, e); + } +}; diff --git a/apps-lib/src/lib/utils/conf.ts b/apps-lib/src/lib/utils/conf.ts @@ -1,4 +1,4 @@ -import type { ClientWindow } from "$lib/types/conf"; +import type { ClientWindow } from "$lib"; export const TOAST_MS = 1500; diff --git a/apps-lib/src/lib/utils/time.ts b/apps-lib/src/lib/utils/time.ts @@ -1,4 +1,4 @@ -import { locale } from "$lib/locales/i18n"; +import { locale } from "$lib"; import { DateTime, type DateTimeFormatOptions } from "luxon"; import { get } from "svelte/store";