web_lib

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

commit 9443e0a83a7a3eb082f543b61de8e4db6e6fcea3
parent 552aaaf53cc7cc79394d459c8ebae72f3e147061
Author: triesap <137732411+triesap@users.noreply.github.com>
Date:   Sun, 25 Aug 2024 09:23:14 +0000

apps-lib: adds client stores and utils

Diffstat:
Mapps-lib/package.json | 3++-
Mapps-lib/src/lib/index.ts | 3+++
Aapps-lib/src/lib/stores/client.ts | 24++++++++++++++++++++++++
Aapps-lib/src/lib/types.ts | 14++++++++++++++
Mapps-lib/src/lib/utils/client.ts | 9+++++++++
Aapps-lib/src/lib/utils/dom.ts | 9+++++++++
6 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/apps-lib/package.json b/apps-lib/package.json @@ -42,7 +42,8 @@ }, "dependencies": { "@sveltekit-i18n/base": "^1.3.7", - "@sveltekit-i18n/parser-icu": "^1.0.8" + "@sveltekit-i18n/parser-icu": "^1.0.8", + "@radroots/theme": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/apps-lib/src/lib/index.ts b/apps-lib/src/lib/index.ts @@ -1,3 +1,6 @@ export * from "./locales/i18n" +export * from "./stores/client" +export * from "./types" export { default as css_static } from "./ui/css_static.svelte" export * from "./utils/client" +export * from "./utils/dom" diff --git a/apps-lib/src/lib/stores/client.ts b/apps-lib/src/lib/stores/client.ts @@ -0,0 +1,24 @@ +import type { AppLayoutKey, NavigationPreviousParam } from "$lib/types"; +import { type ColorMode, type ThemeKey } from "@radroots/theme"; +import { writable } from "svelte/store"; + +export const app_thc = writable<ColorMode>(`light`); +export const app_thm = writable<ThemeKey>(`os`); + +export const app_config = writable<boolean>(true); +export const app_render = writable<boolean>(true); +export const app_lo = writable<AppLayoutKey>(`base`); +export const app_win = writable<[number, number]>([0, 0]); + +export const app_nav_visible = writable<boolean>(false); +export const app_nav_blur = writable<boolean>(false); + +export const app_tabs_visible = writable<boolean>(false); +export const app_tabs_blur = writable<boolean>(false); +export const app_tab_active = writable<number>(0); + +export const app_key = writable<string>(``); +export const app_pwa_polyfills = writable<boolean>(false); +export const app_sqlite = writable<boolean>(false); + +export const app_nav = writable<NavigationPreviousParam[]>([]); diff --git a/apps-lib/src/lib/types.ts b/apps-lib/src/lib/types.ts @@ -0,0 +1,14 @@ +import type { Snippet } from "svelte"; + +export type AppLayoutKey = 'lg' | 'base'; +type NavigationRouteBasis = string; +export type AnchorRoute = `/${string}`; +export type NavigationRouteParamPublicKey = `pk`; +export type NavigationRouteParamId = `id`; +export type NavigationRouteParamKey = NavigationRouteParamPublicKey | NavigationRouteParamId; +export type NavigationParamTuple = [NavigationRouteParamKey, string]; +export type NavigationPreviousParam = { route: NavigationRouteBasis, params?: NavigationParamTuple[] } + +export type PropChildren = { + children: Snippet; +}; diff --git a/apps-lib/src/lib/utils/client.ts b/apps-lib/src/lib/utils/client.ts @@ -1,3 +1,12 @@ export const sleep = async (ms: number): Promise<void> => { await new Promise((resolve) => setTimeout(resolve, ms)); +}; + +export const theme_set = (theme_key: string, color_mode: string): void => { + const data_theme = `${theme_key}_${color_mode}`; + document.documentElement.setAttribute("data-theme", data_theme); +}; + +export const fmtcl = (classes?: string): string => { + return classes ? classes : ``; }; \ No newline at end of file diff --git a/apps-lib/src/lib/utils/dom.ts b/apps-lib/src/lib/utils/dom.ts @@ -0,0 +1,9 @@ +export const el_id = (id: string): HTMLElement | undefined => { + const el = document.getElementById(id); + return el ? el : undefined; +}; + +export const el_toggle = (id: string, toggle_class: string): void => { + const el = document.getElementById(id); + if (el) el.classList.toggle(toggle_class); +};