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:
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);
+};