katanakit-js 2.2.1 → 2.12.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -437
- package/dist/adapters/astro/astro.service.d.ts +103 -15
- package/dist/adapters/astro/astro.service.d.ts.map +1 -1
- package/dist/adapters/astro/astro.service.js +145 -75
- package/dist/adapters/astro/astro.service.js.map +1 -1
- package/dist/adapters/astro/index.d.ts +1 -1
- package/dist/adapters/astro/index.d.ts.map +1 -1
- package/dist/adapters/astro/index.js +1 -1
- package/dist/adapters/astro/index.js.map +1 -1
- package/dist/adapters/astro/rss.service.d.ts +85 -105
- package/dist/adapters/astro/rss.service.d.ts.map +1 -1
- package/dist/adapters/astro/rss.service.js +172 -168
- package/dist/adapters/astro/rss.service.js.map +1 -1
- package/dist/adapters/astro/seo.service.d.ts +10 -0
- package/dist/adapters/astro/seo.service.d.ts.map +1 -0
- package/dist/adapters/astro/seo.service.js +3 -0
- package/dist/adapters/astro/seo.service.js.map +1 -0
- package/dist/adapters/express/app.d.ts +30 -1
- package/dist/adapters/express/app.d.ts.map +1 -1
- package/dist/adapters/express/app.js +31 -3
- package/dist/adapters/express/app.js.map +1 -1
- package/dist/adapters/express/index.d.ts +2 -2
- package/dist/adapters/express/index.d.ts.map +1 -1
- package/dist/adapters/express/index.js +2 -2
- package/dist/adapters/express/index.js.map +1 -1
- package/dist/adapters/express/main.js +2 -2
- package/dist/adapters/express/main.js.map +1 -1
- package/dist/adapters/express/products.controller.d.ts +67 -8
- package/dist/adapters/express/products.controller.d.ts.map +1 -1
- package/dist/adapters/express/products.controller.js +105 -49
- package/dist/adapters/express/products.controller.js.map +1 -1
- package/dist/adapters/express/server.d.ts +37 -13
- package/dist/adapters/express/server.d.ts.map +1 -1
- package/dist/adapters/express/server.js +118 -53
- package/dist/adapters/express/server.js.map +1 -1
- package/dist/adapters/nuxt/nuxt.service.d.ts +8 -6
- package/dist/adapters/nuxt/nuxt.service.d.ts.map +1 -1
- package/dist/adapters/nuxt/nuxt.service.js +34 -10
- package/dist/adapters/nuxt/nuxt.service.js.map +1 -1
- package/dist/adapters/vue/vue.service.d.ts +5 -2
- package/dist/adapters/vue/vue.service.d.ts.map +1 -1
- package/dist/adapters/vue/vue.service.js +41 -7
- package/dist/adapters/vue/vue.service.js.map +1 -1
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/seo-meta.types.d.ts +177 -0
- package/dist/config/seo-meta.types.d.ts.map +1 -0
- package/dist/config/seo-meta.types.js +11 -0
- package/dist/config/seo-meta.types.js.map +1 -0
- package/dist/config/seo.service.d.ts +41 -58
- package/dist/config/seo.service.d.ts.map +1 -1
- package/dist/config/seo.service.js +468 -136
- package/dist/config/seo.service.js.map +1 -1
- package/dist/config/site.config.d.ts +10 -50
- package/dist/config/site.config.d.ts.map +1 -1
- package/dist/config/site.config.js +8 -36
- package/dist/config/site.config.js.map +1 -1
- package/dist/core/index.d.ts +1 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/services/dates.service.d.ts +149 -22
- package/dist/core/services/dates.service.d.ts.map +1 -1
- package/dist/core/services/dates.service.js +201 -54
- package/dist/core/services/dates.service.js.map +1 -1
- package/dist/core/services/error.service.d.ts +32 -20
- package/dist/core/services/error.service.d.ts.map +1 -1
- package/dist/core/services/error.service.js +44 -32
- package/dist/core/services/error.service.js.map +1 -1
- package/dist/core/services/formatter.service.d.ts +245 -35
- package/dist/core/services/formatter.service.d.ts.map +1 -1
- package/dist/core/services/formatter.service.js +281 -57
- package/dist/core/services/formatter.service.js.map +1 -1
- package/dist/core/services/generator.service.d.ts +115 -26
- package/dist/core/services/generator.service.d.ts.map +1 -1
- package/dist/core/services/generator.service.js +191 -56
- package/dist/core/services/generator.service.js.map +1 -1
- package/dist/core/services/geometry.service.d.ts +369 -39
- package/dist/core/services/geometry.service.d.ts.map +1 -1
- package/dist/core/services/geometry.service.js +424 -66
- package/dist/core/services/geometry.service.js.map +1 -1
- package/dist/core/services/http.service.d.ts +244 -21
- package/dist/core/services/http.service.d.ts.map +1 -1
- package/dist/core/services/http.service.js +419 -98
- package/dist/core/services/http.service.js.map +1 -1
- package/dist/core/services/logger.service.d.ts +95 -29
- package/dist/core/services/logger.service.d.ts.map +1 -1
- package/dist/core/services/logger.service.js +167 -41
- package/dist/core/services/logger.service.js.map +1 -1
- package/dist/core/services/reactive.service.d.ts +146 -19
- package/dist/core/services/reactive.service.d.ts.map +1 -1
- package/dist/core/services/reactive.service.js +278 -137
- package/dist/core/services/reactive.service.js.map +1 -1
- package/dist/core/services/timing.service.d.ts +142 -20
- package/dist/core/services/timing.service.d.ts.map +1 -1
- package/dist/core/services/timing.service.js +324 -185
- package/dist/core/services/timing.service.js.map +1 -1
- package/dist/core/services/utils.service.d.ts +228 -43
- package/dist/core/services/utils.service.d.ts.map +1 -1
- package/dist/core/services/utils.service.js +305 -125
- package/dist/core/services/utils.service.js.map +1 -1
- package/dist/infrastructure/dom/dom.service.d.ts +307 -44
- package/dist/infrastructure/dom/dom.service.d.ts.map +1 -1
- package/dist/infrastructure/dom/dom.service.js +408 -129
- package/dist/infrastructure/dom/dom.service.js.map +1 -1
- package/dist/infrastructure/index.d.ts +0 -3
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +0 -3
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/infrastructure/observer/observer.service.d.ts +124 -31
- package/dist/infrastructure/observer/observer.service.d.ts.map +1 -1
- package/dist/infrastructure/observer/observer.service.js +227 -131
- package/dist/infrastructure/observer/observer.service.js.map +1 -1
- package/dist/infrastructure/sensors/sensors.service.d.ts +154 -22
- package/dist/infrastructure/sensors/sensors.service.d.ts.map +1 -1
- package/dist/infrastructure/sensors/sensors.service.js +264 -112
- package/dist/infrastructure/sensors/sensors.service.js.map +1 -1
- package/dist/infrastructure/storage/storage.service.d.ts +123 -45
- package/dist/infrastructure/storage/storage.service.d.ts.map +1 -1
- package/dist/infrastructure/storage/storage.service.js +236 -66
- package/dist/infrastructure/storage/storage.service.js.map +1 -1
- package/dist/infrastructure/theme/theme.service.d.ts +93 -29
- package/dist/infrastructure/theme/theme.service.d.ts.map +1 -1
- package/dist/infrastructure/theme/theme.service.js +198 -96
- package/dist/infrastructure/theme/theme.service.js.map +1 -1
- package/dist/infrastructure/viewport/viewport.service.d.ts +233 -35
- package/dist/infrastructure/viewport/viewport.service.d.ts.map +1 -1
- package/dist/infrastructure/viewport/viewport.service.js +358 -139
- package/dist/infrastructure/viewport/viewport.service.js.map +1 -1
- package/dist/infrastructure/worker/worker.service.d.ts +84 -38
- package/dist/infrastructure/worker/worker.service.d.ts.map +1 -1
- package/dist/infrastructure/worker/worker.service.js +234 -133
- package/dist/infrastructure/worker/worker.service.js.map +1 -1
- package/dist/prisma/index.d.ts +2 -0
- package/dist/prisma/index.d.ts.map +1 -0
- package/dist/prisma/index.js +2 -0
- package/dist/prisma/index.js.map +1 -0
- package/dist/prisma/schema.json +11 -33
- package/dist/prisma/use-prisma.d.ts +68 -0
- package/dist/prisma/use-prisma.d.ts.map +1 -0
- package/dist/prisma/use-prisma.js +82 -0
- package/dist/prisma/use-prisma.js.map +1 -0
- package/dist/types/index.d.ts +20 -12
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +124 -125
- package/CHANGELOG.md +0 -101
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.service.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/theme/theme.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"theme.service.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/theme/theme.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA+FpE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,YAAY,aAAa,YAAY,KAAQ,IAczD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,YAAa,SAAS,KAAG,IAMpD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,QAAO,SAAiB,CAAC;AAErD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,QAAO,OAAO,GAAG,MAG3C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,QAAO,OAGxC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,QAAO,IAGjC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,QAAO,IAKhC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,QAAO,IAMlC,CAAC"}
|
|
@@ -1,104 +1,206 @@
|
|
|
1
1
|
import { useAddClass, useGetRoot, useOn, useRemoveClass, useSetAttribute, } from "../dom/dom.service.js";
|
|
2
2
|
import { useGetStorage, useRemoveStorage, useSetStorage } from "../storage/storage.service.js";
|
|
3
|
+
// ============================================================
|
|
4
|
+
// Constants and helpers
|
|
5
|
+
// ============================================================
|
|
6
|
+
const VALID_THEME_MODES = ["light", "dark", "system"];
|
|
7
|
+
function isThemeMode(value) {
|
|
8
|
+
return typeof value === "string" && VALID_THEME_MODES.includes(value);
|
|
9
|
+
}
|
|
10
|
+
function isBrowser() {
|
|
11
|
+
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
12
|
+
}
|
|
13
|
+
// ============================================================
|
|
14
|
+
// Module-level state
|
|
15
|
+
// ============================================================
|
|
16
|
+
let mode = "system";
|
|
17
|
+
let storageKey = "theme";
|
|
18
|
+
let attribute = "data-theme";
|
|
19
|
+
let target = null;
|
|
20
|
+
let onChange;
|
|
21
|
+
let mediaQuery = null;
|
|
22
|
+
let cleanMediaQueryListener = null;
|
|
23
|
+
// ============================================================
|
|
24
|
+
// Internal helpers
|
|
25
|
+
// ============================================================
|
|
3
26
|
/**
|
|
4
|
-
*
|
|
27
|
+
* Resolves the current theme to a concrete `"light"` or `"dark"` value.
|
|
28
|
+
*
|
|
29
|
+
* @returns The resolved color scheme.
|
|
5
30
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
function getResolved() {
|
|
32
|
+
if (mode !== "system")
|
|
33
|
+
return mode;
|
|
34
|
+
return usePrefersColorScheme() ? "dark" : "light";
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Applies the current theme to the DOM target (attribute + CSS classes).
|
|
38
|
+
*/
|
|
39
|
+
function applyTheme() {
|
|
40
|
+
if (!target)
|
|
41
|
+
return;
|
|
42
|
+
const resolved = getResolved();
|
|
43
|
+
// Set the attribute, e.g. data-theme="dark".
|
|
44
|
+
useSetAttribute(target, attribute, resolved);
|
|
45
|
+
// Toggle CSS classes.
|
|
46
|
+
useRemoveClass(target, ["light", "dark"]);
|
|
47
|
+
useAddClass(target, resolved);
|
|
48
|
+
onChange?.(mode, resolved);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Registers a `matchMedia` listener that re-applies the theme when the
|
|
52
|
+
* system color scheme changes (only relevant in `"system"` mode).
|
|
53
|
+
*/
|
|
54
|
+
function setupMediaQueryListener() {
|
|
55
|
+
if (!isBrowser() || !window.matchMedia)
|
|
56
|
+
return;
|
|
57
|
+
// Clean up any existing listener before registering a new one.
|
|
58
|
+
if (cleanMediaQueryListener) {
|
|
59
|
+
cleanMediaQueryListener();
|
|
60
|
+
cleanMediaQueryListener = null;
|
|
21
61
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return;
|
|
28
|
-
this.storageKey = options.storageKey ?? "theme";
|
|
29
|
-
this.attribute = options.attribute ?? "data-theme";
|
|
30
|
-
this.target = options.target ?? useGetRoot();
|
|
31
|
-
this.onChange = options.onChange;
|
|
32
|
-
const stored = useGetStorage(this.storageKey);
|
|
33
|
-
this.mode = stored ?? options.defaultMode ?? "system";
|
|
34
|
-
this.APPLY_THEME();
|
|
35
|
-
this.SETUP_MEDIA_QUERY_LISTENER();
|
|
36
|
-
};
|
|
37
|
-
useSetThemeMode = (mode) => {
|
|
38
|
-
if (!this.IS_BROWSER())
|
|
39
|
-
return;
|
|
40
|
-
this.mode = mode ?? "system";
|
|
41
|
-
useSetStorage(this.storageKey, this.mode, "localStorage");
|
|
42
|
-
this.APPLY_THEME();
|
|
43
|
-
};
|
|
44
|
-
useGetThemeMode = () => this.mode;
|
|
45
|
-
useGetResolved = () => {
|
|
46
|
-
if (this.mode !== "system")
|
|
47
|
-
return this.mode;
|
|
48
|
-
return this.usePrefersColorScheme() ? "dark" : "light";
|
|
49
|
-
};
|
|
50
|
-
usePrefersColorScheme = () => {
|
|
51
|
-
if (!this.IS_BROWSER() || !window.matchMedia)
|
|
52
|
-
return false;
|
|
53
|
-
return window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
54
|
-
};
|
|
55
|
-
useToggleTheme = () => {
|
|
56
|
-
const current = this.useGetResolved();
|
|
57
|
-
this.useSetThemeMode(current === "light" ? "dark" : "light");
|
|
58
|
-
};
|
|
59
|
-
useResetTheme = () => {
|
|
60
|
-
if (!this.IS_BROWSER())
|
|
61
|
-
return;
|
|
62
|
-
useRemoveStorage(this.storageKey);
|
|
63
|
-
this.mode = "system";
|
|
64
|
-
this.APPLY_THEME();
|
|
65
|
-
};
|
|
66
|
-
useDestroyTheme = () => {
|
|
67
|
-
if (this.cleanMediaQueryListener) {
|
|
68
|
-
this.cleanMediaQueryListener();
|
|
69
|
-
this.cleanMediaQueryListener = null;
|
|
70
|
-
this.mediaQuery = null;
|
|
62
|
+
mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
63
|
+
// Register the listener using DomService.
|
|
64
|
+
cleanMediaQueryListener = useOn(mediaQuery, "change", () => {
|
|
65
|
+
if (mode === "system") {
|
|
66
|
+
applyTheme();
|
|
71
67
|
}
|
|
72
|
-
};
|
|
73
|
-
APPLY_THEME = () => {
|
|
74
|
-
if (!this.target)
|
|
75
|
-
return;
|
|
76
|
-
const resolved = this.useGetResolved();
|
|
77
|
-
// Set the attribute, e.g. data-theme="dark".
|
|
78
|
-
useSetAttribute(this.target, this.attribute, resolved);
|
|
79
|
-
// Toggle CSS classes.
|
|
80
|
-
useRemoveClass(this.target, ["light", "dark"]);
|
|
81
|
-
useAddClass(this.target, resolved);
|
|
82
|
-
this.onChange?.(this.mode, resolved);
|
|
83
|
-
};
|
|
84
|
-
SETUP_MEDIA_QUERY_LISTENER = () => {
|
|
85
|
-
if (!this.IS_BROWSER() || !window.matchMedia)
|
|
86
|
-
return;
|
|
87
|
-
// Clean up any existing listener before registering a new one.
|
|
88
|
-
if (this.cleanMediaQueryListener) {
|
|
89
|
-
this.cleanMediaQueryListener();
|
|
90
|
-
this.cleanMediaQueryListener = null;
|
|
91
|
-
}
|
|
92
|
-
this.mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
93
|
-
// Register the listener using DomService.
|
|
94
|
-
this.cleanMediaQueryListener = useOn(this.mediaQuery, "change", () => {
|
|
95
|
-
if (this.mode === "system") {
|
|
96
|
-
this.APPLY_THEME();
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
};
|
|
68
|
+
});
|
|
100
69
|
}
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
70
|
+
// ============================================================
|
|
71
|
+
// Public API
|
|
72
|
+
// ============================================================
|
|
73
|
+
/**
|
|
74
|
+
* Initializes the theme system. Reads the stored preference (or falls back
|
|
75
|
+
* to `defaultMode`), applies the theme, and registers a system color-scheme
|
|
76
|
+
* listener for `"system"` mode.
|
|
77
|
+
*
|
|
78
|
+
* @param options - Configuration for the theme system.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* useInitTheme({
|
|
83
|
+
* defaultMode: "dark",
|
|
84
|
+
* storageKey: "app-theme",
|
|
85
|
+
* onChange: (mode, resolved) => console.log(mode, resolved),
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export const useInitTheme = (options = {}) => {
|
|
90
|
+
if (!isBrowser())
|
|
91
|
+
return;
|
|
92
|
+
storageKey = options.storageKey ?? "theme";
|
|
93
|
+
attribute = options.attribute ?? "data-theme";
|
|
94
|
+
target = options.target ?? useGetRoot();
|
|
95
|
+
onChange = options.onChange;
|
|
96
|
+
const stored = useGetStorage(storageKey);
|
|
97
|
+
const defaultMode = isThemeMode(options.defaultMode) ? options.defaultMode : "system";
|
|
98
|
+
mode = isThemeMode(stored) ? stored : defaultMode;
|
|
99
|
+
applyTheme();
|
|
100
|
+
setupMediaQueryListener();
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Sets the theme mode and persists it to storage.
|
|
104
|
+
*
|
|
105
|
+
* @param newMode - The desired theme mode (`"light"`, `"dark"`, or `"system"`).
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* useSetThemeMode("dark");
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export const useSetThemeMode = (newMode) => {
|
|
113
|
+
if (!isBrowser())
|
|
114
|
+
return;
|
|
115
|
+
mode = isThemeMode(newMode) ? newMode : "system";
|
|
116
|
+
useSetStorage(storageKey, mode, "localStorage");
|
|
117
|
+
applyTheme();
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Returns the current theme mode (may be `"system"`).
|
|
121
|
+
*
|
|
122
|
+
* @returns The active {@link ThemeMode}.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* const current = useGetThemeMode(); // "light" | "dark" | "system"
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
export const useGetThemeMode = () => mode;
|
|
130
|
+
/**
|
|
131
|
+
* Returns the resolved theme (`"light"` or `"dark"`), accounting for system
|
|
132
|
+
* preference when mode is `"system"`.
|
|
133
|
+
*
|
|
134
|
+
* @returns The resolved color scheme.
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```ts
|
|
138
|
+
* const scheme = useGetResolved(); // "light" or "dark"
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export const useGetResolved = () => {
|
|
142
|
+
if (mode !== "system")
|
|
143
|
+
return mode;
|
|
144
|
+
return usePrefersColorScheme() ? "dark" : "light";
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Checks whether the user's OS is set to prefer a dark color scheme.
|
|
148
|
+
*
|
|
149
|
+
* @returns `true` if the system prefers dark mode.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```ts
|
|
153
|
+
* if (usePrefersColorScheme()) {
|
|
154
|
+
* // user prefers dark
|
|
155
|
+
* }
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
export const usePrefersColorScheme = () => {
|
|
159
|
+
if (!isBrowser() || !window.matchMedia)
|
|
160
|
+
return false;
|
|
161
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Toggles between `"light"` and `"dark"` (ignores `"system"`).
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```ts
|
|
168
|
+
* useToggleTheme(); // light -> dark, dark -> light
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
export const useToggleTheme = () => {
|
|
172
|
+
const current = getResolved();
|
|
173
|
+
useSetThemeMode(current === "light" ? "dark" : "light");
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Resets the theme to `"system"` and removes the stored preference.
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```ts
|
|
180
|
+
* useResetTheme();
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
export const useResetTheme = () => {
|
|
184
|
+
if (!isBrowser())
|
|
185
|
+
return;
|
|
186
|
+
useRemoveStorage(storageKey);
|
|
187
|
+
mode = "system";
|
|
188
|
+
applyTheme();
|
|
189
|
+
};
|
|
190
|
+
/**
|
|
191
|
+
* Cleans up the media-query listener. Call this when the theme system is
|
|
192
|
+
* no longer needed (e.g. during teardown in tests).
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```ts
|
|
196
|
+
* useDestroyTheme();
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export const useDestroyTheme = () => {
|
|
200
|
+
if (cleanMediaQueryListener) {
|
|
201
|
+
cleanMediaQueryListener();
|
|
202
|
+
cleanMediaQueryListener = null;
|
|
203
|
+
mediaQuery = null;
|
|
204
|
+
}
|
|
205
|
+
};
|
|
104
206
|
//# sourceMappingURL=theme.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.service.js","sourceRoot":"","sources":["../../../src/infrastructure/theme/theme.service.ts"],"names":[],"mappings":"AACA,OAAO,EACN,WAAW,EACX,UAAU,EACV,KAAK,EACL,cAAc,EACd,eAAe,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE/F
|
|
1
|
+
{"version":3,"file":"theme.service.js","sourceRoot":"","sources":["../../../src/infrastructure/theme/theme.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +1,236 @@
|
|
|
1
1
|
import type { ScrollOptions, ScrollPosition, ViewportSize } from "../../types/index.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
3
|
+
* Returns the current viewport dimensions.
|
|
4
|
+
*
|
|
5
|
+
* @returns A {@link ViewportSize} object with `width` and `height` (or `{0, 0}` in SSR).
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const { width, height } = useGetViewportSize();
|
|
10
|
+
* if (width < 768) { /* mobile */ }
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare const useGetViewportSize: () => ViewportSize;
|
|
14
|
+
/**
|
|
15
|
+
* Tests a CSS media query against the current viewport.
|
|
16
|
+
*
|
|
17
|
+
* @param query - A CSS media query string (e.g. `"(min-width: 768px)"`).
|
|
18
|
+
* @returns `true` if the query matches.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* if (useMatchesMedia("(prefers-reduced-motion: reduce)")) {
|
|
23
|
+
* // disable animations
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare const useMatchesMedia: (query: string) => boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Checks whether the user prefers reduced motion.
|
|
30
|
+
*
|
|
31
|
+
* @returns `true` if `prefers-reduced-motion: reduce` is active.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* const smooth = !usePrefersReducedMotion();
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare const usePrefersReducedMotion: () => boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Checks whether the user's OS prefers dark mode.
|
|
41
|
+
*
|
|
42
|
+
* @returns `true` if `prefers-color-scheme: dark` is active.
|
|
43
|
+
*/
|
|
44
|
+
export declare const usePrefersDarkMode: () => boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Returns the current vertical scroll position.
|
|
47
|
+
*
|
|
48
|
+
* @returns `window.scrollY` or `0` in SSR.
|
|
49
|
+
*/
|
|
50
|
+
export declare const useGetScrollY: () => number;
|
|
51
|
+
/**
|
|
52
|
+
* Returns the current horizontal scroll position.
|
|
53
|
+
*
|
|
54
|
+
* @returns `window.scrollX` or `0` in SSR.
|
|
55
|
+
*/
|
|
56
|
+
export declare const useGetScrollX: () => number;
|
|
57
|
+
/**
|
|
58
|
+
* Returns the current scroll position as `{ x, y }`.
|
|
59
|
+
*
|
|
60
|
+
* @returns A {@link ScrollPosition} object.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```ts
|
|
64
|
+
* const { x, y } = useGetScrollPosition();
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare const useGetScrollPosition: () => ScrollPosition;
|
|
68
|
+
/**
|
|
69
|
+
* Returns the vertical scroll progress as a value between `0` (top) and `1` (bottom).
|
|
70
|
+
*
|
|
71
|
+
* @returns A number in `[0, 1]`.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* const progress = useGetScrollProgress();
|
|
76
|
+
* progressBar.style.width = `${progress * 100}%`;
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare const useGetScrollProgress: () => number;
|
|
80
|
+
/**
|
|
81
|
+
* Checks whether the page is scrolled to (or near) the top.
|
|
82
|
+
*
|
|
83
|
+
* @param threshold - Pixel tolerance (default: `0`).
|
|
84
|
+
* @returns `true` if `scrollY <= threshold`.
|
|
85
|
+
*/
|
|
86
|
+
export declare const useIsAtTop: (threshold?: number) => boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Checks whether the page is scrolled to (or near) the bottom.
|
|
89
|
+
*
|
|
90
|
+
* @param threshold - Pixel tolerance from the bottom (default: `50`).
|
|
91
|
+
* @returns `true` if within `threshold` pixels of the bottom.
|
|
92
|
+
*/
|
|
93
|
+
export declare const useIsAtBottom: (threshold?: number) => boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Scrolls the window to a specific position, respecting `prefers-reduced-motion`.
|
|
96
|
+
*
|
|
97
|
+
* @param x - Horizontal scroll target (default: `0`).
|
|
98
|
+
* @param y - Vertical scroll target (default: `0`).
|
|
99
|
+
* @param behavior - Scroll behavior (default: `"smooth"`).
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```ts
|
|
103
|
+
* useScrollTo(0, 500); // scroll to 500px from top
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare const useScrollTo: (x?: number, y?: number, behavior?: ScrollBehavior) => void;
|
|
107
|
+
/**
|
|
108
|
+
* Scrolls to the top of the page.
|
|
109
|
+
*
|
|
110
|
+
* @param smooth - Whether to use smooth scrolling (default: `true`).
|
|
111
|
+
*/
|
|
112
|
+
export declare const useScrollToTop: (smooth?: boolean) => void;
|
|
113
|
+
/**
|
|
114
|
+
* Scrolls to the bottom of the page.
|
|
115
|
+
*
|
|
116
|
+
* @param smooth - Whether to use smooth scrolling (default: `true`).
|
|
117
|
+
*/
|
|
118
|
+
export declare const useScrollToBottom: (smooth?: boolean) => void;
|
|
119
|
+
/**
|
|
120
|
+
* Scrolls an element into view.
|
|
121
|
+
*
|
|
122
|
+
* @param target - An HTMLElement or a CSS selector string.
|
|
123
|
+
* @param options - Scroll options (`behavior`, `block`, `inline`).
|
|
124
|
+
* @returns `true` if the element was found and scrolled to.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```ts
|
|
128
|
+
* useScrollToElement("#section-2", { behavior: "smooth", block: "start" });
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export declare const useScrollToElement: (target: HTMLElement | string, options?: ScrollOptions) => boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Triggers the browser print dialog.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```ts
|
|
137
|
+
* usePrintPage();
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export declare const usePrintPage: () => void;
|
|
141
|
+
/**
|
|
142
|
+
* Focuses an element.
|
|
143
|
+
*
|
|
144
|
+
* @param target - An HTMLElement or a CSS selector string.
|
|
145
|
+
* @returns `true` if the element was found and focused.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```ts
|
|
149
|
+
* useFocusElement("#search-input");
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export declare const useFocusElement: (target: HTMLElement | string) => boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Removes focus from the currently active element.
|
|
155
|
+
*/
|
|
156
|
+
export declare const useBlurActiveElement: () => void;
|
|
157
|
+
/**
|
|
158
|
+
* Returns the currently focused element.
|
|
159
|
+
*
|
|
160
|
+
* @returns The active element, or `null` in SSR.
|
|
161
|
+
*/
|
|
162
|
+
export declare const useGetActiveElement: () => Element | null;
|
|
163
|
+
/**
|
|
164
|
+
* Requests fullscreen on the given element (or the document root).
|
|
165
|
+
*
|
|
166
|
+
* @param target - The element to make fullscreen (defaults to `document.documentElement`).
|
|
167
|
+
* @throws {Error} If fullscreen is not supported.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```ts
|
|
171
|
+
* await useRequestFullscreen(videoElement);
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
export declare const useRequestFullscreen: (target?: HTMLElement) => Promise<void>;
|
|
175
|
+
/**
|
|
176
|
+
* Exits fullscreen mode.
|
|
177
|
+
*/
|
|
178
|
+
export declare const useExitFullscreen: () => Promise<void>;
|
|
179
|
+
/**
|
|
180
|
+
* Checks whether the document is currently in fullscreen mode.
|
|
181
|
+
*
|
|
182
|
+
* @returns `true` if fullscreen is active.
|
|
183
|
+
*/
|
|
184
|
+
export declare const useIsFullscreen: () => boolean;
|
|
185
|
+
/**
|
|
186
|
+
* Checks whether the document tab is currently visible.
|
|
187
|
+
*
|
|
188
|
+
* @returns `true` if `document.visibilityState === "visible"`.
|
|
189
|
+
*/
|
|
190
|
+
export declare const useIsDocumentVisible: () => boolean;
|
|
191
|
+
/**
|
|
192
|
+
* Registers a callback for document visibility changes.
|
|
193
|
+
*
|
|
194
|
+
* @param callback - Called with `true` when visible, `false` when hidden.
|
|
195
|
+
* @returns A cleanup function that removes the listener.
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```ts
|
|
199
|
+
* const off = useOnVisibilityChange((visible) => {
|
|
200
|
+
* if (visible) resumePolling();
|
|
201
|
+
* else pausePolling();
|
|
202
|
+
* });
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
export declare const useOnVisibilityChange: (callback: (isVisible: boolean) => void) => (() => void);
|
|
206
|
+
/**
|
|
207
|
+
* Returns the current document title.
|
|
208
|
+
*
|
|
209
|
+
* @returns The title string, or `""` in SSR.
|
|
210
|
+
*/
|
|
211
|
+
export declare const useGetTitle: () => string;
|
|
212
|
+
/**
|
|
213
|
+
* Sets the document title.
|
|
214
|
+
*
|
|
215
|
+
* @param title - The new title.
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```ts
|
|
219
|
+
* useSetTitle("My Page");
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
export declare const useSetTitle: (title: string) => void;
|
|
223
|
+
/**
|
|
224
|
+
* Temporarily changes the document title, restoring the original after `durationMs`.
|
|
225
|
+
*
|
|
226
|
+
* @param tempTitle - The temporary title to display.
|
|
227
|
+
* @param durationMs - How long to show it (default: `3000`).
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* ```ts
|
|
231
|
+
* useSetTempTitle("(2) New messages!", 5000);
|
|
232
|
+
* // title reverts after 5 seconds
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
export declare const useSetTempTitle: (tempTitle: string, durationMs?: number) => void;
|
|
38
236
|
//# sourceMappingURL=viewport.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport.service.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/viewport/viewport.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"viewport.service.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/viewport/viewport.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA0BxF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,QAAO,YAGrC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,UAAW,MAAM,KAAG,OAG/C,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,QAAO,OACS,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,OAA0D,CAAC;AAEjG;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,MAA4C,CAAC;AAE9E;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,MAA4C,CAAC;AAE9E;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,QAAO,cAGtC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,QAAO,MAKvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,0BAAoB,OAAuC,CAAC;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,0BAAqB,OAI9C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,sCAA4B,cAAc,KAAc,IAI/E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,wBAAoB,IAI9C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,wBAAoB,IAKjD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,WACtB,WAAW,GAAG,MAAM,YACnB,aAAa,KACpB,OAkBF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,QAAO,IAE/B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,WAAY,WAAW,GAAG,MAAM,KAAG,OAS9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAAO,IAGvC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAO,OAAO,GAAG,IACL,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,YAAmB,WAAW,KAAG,OAAO,CAAC,IAAI,CAO7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,IAAI,CAGtD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAO,OAAsD,CAAC;AAE1F;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAAO,OAGvC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,aAAc,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAOzF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,QAAO,MAA6C,CAAC;AAE7E;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,UAAW,MAAM,KAAG,IAE3C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,cAAe,MAAM,0BAAsB,IAqBtE,CAAC"}
|