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.
Files changed (148) hide show
  1. package/README.md +72 -437
  2. package/dist/adapters/astro/astro.service.d.ts +103 -15
  3. package/dist/adapters/astro/astro.service.d.ts.map +1 -1
  4. package/dist/adapters/astro/astro.service.js +145 -75
  5. package/dist/adapters/astro/astro.service.js.map +1 -1
  6. package/dist/adapters/astro/index.d.ts +1 -1
  7. package/dist/adapters/astro/index.d.ts.map +1 -1
  8. package/dist/adapters/astro/index.js +1 -1
  9. package/dist/adapters/astro/index.js.map +1 -1
  10. package/dist/adapters/astro/rss.service.d.ts +85 -105
  11. package/dist/adapters/astro/rss.service.d.ts.map +1 -1
  12. package/dist/adapters/astro/rss.service.js +172 -168
  13. package/dist/adapters/astro/rss.service.js.map +1 -1
  14. package/dist/adapters/astro/seo.service.d.ts +10 -0
  15. package/dist/adapters/astro/seo.service.d.ts.map +1 -0
  16. package/dist/adapters/astro/seo.service.js +3 -0
  17. package/dist/adapters/astro/seo.service.js.map +1 -0
  18. package/dist/adapters/express/app.d.ts +30 -1
  19. package/dist/adapters/express/app.d.ts.map +1 -1
  20. package/dist/adapters/express/app.js +31 -3
  21. package/dist/adapters/express/app.js.map +1 -1
  22. package/dist/adapters/express/index.d.ts +2 -2
  23. package/dist/adapters/express/index.d.ts.map +1 -1
  24. package/dist/adapters/express/index.js +2 -2
  25. package/dist/adapters/express/index.js.map +1 -1
  26. package/dist/adapters/express/main.js +2 -2
  27. package/dist/adapters/express/main.js.map +1 -1
  28. package/dist/adapters/express/products.controller.d.ts +67 -8
  29. package/dist/adapters/express/products.controller.d.ts.map +1 -1
  30. package/dist/adapters/express/products.controller.js +105 -49
  31. package/dist/adapters/express/products.controller.js.map +1 -1
  32. package/dist/adapters/express/server.d.ts +37 -13
  33. package/dist/adapters/express/server.d.ts.map +1 -1
  34. package/dist/adapters/express/server.js +118 -53
  35. package/dist/adapters/express/server.js.map +1 -1
  36. package/dist/adapters/nuxt/nuxt.service.d.ts +8 -6
  37. package/dist/adapters/nuxt/nuxt.service.d.ts.map +1 -1
  38. package/dist/adapters/nuxt/nuxt.service.js +34 -10
  39. package/dist/adapters/nuxt/nuxt.service.js.map +1 -1
  40. package/dist/adapters/vue/vue.service.d.ts +5 -2
  41. package/dist/adapters/vue/vue.service.d.ts.map +1 -1
  42. package/dist/adapters/vue/vue.service.js +41 -7
  43. package/dist/adapters/vue/vue.service.js.map +1 -1
  44. package/dist/config/index.d.ts +2 -1
  45. package/dist/config/index.d.ts.map +1 -1
  46. package/dist/config/index.js +1 -1
  47. package/dist/config/index.js.map +1 -1
  48. package/dist/config/seo-meta.types.d.ts +177 -0
  49. package/dist/config/seo-meta.types.d.ts.map +1 -0
  50. package/dist/config/seo-meta.types.js +11 -0
  51. package/dist/config/seo-meta.types.js.map +1 -0
  52. package/dist/config/seo.service.d.ts +41 -58
  53. package/dist/config/seo.service.d.ts.map +1 -1
  54. package/dist/config/seo.service.js +468 -136
  55. package/dist/config/seo.service.js.map +1 -1
  56. package/dist/config/site.config.d.ts +10 -50
  57. package/dist/config/site.config.d.ts.map +1 -1
  58. package/dist/config/site.config.js +8 -36
  59. package/dist/config/site.config.js.map +1 -1
  60. package/dist/core/index.d.ts +1 -3
  61. package/dist/core/index.d.ts.map +1 -1
  62. package/dist/core/index.js +1 -3
  63. package/dist/core/index.js.map +1 -1
  64. package/dist/core/services/dates.service.d.ts +149 -22
  65. package/dist/core/services/dates.service.d.ts.map +1 -1
  66. package/dist/core/services/dates.service.js +201 -54
  67. package/dist/core/services/dates.service.js.map +1 -1
  68. package/dist/core/services/error.service.d.ts +32 -20
  69. package/dist/core/services/error.service.d.ts.map +1 -1
  70. package/dist/core/services/error.service.js +44 -32
  71. package/dist/core/services/error.service.js.map +1 -1
  72. package/dist/core/services/formatter.service.d.ts +245 -35
  73. package/dist/core/services/formatter.service.d.ts.map +1 -1
  74. package/dist/core/services/formatter.service.js +281 -57
  75. package/dist/core/services/formatter.service.js.map +1 -1
  76. package/dist/core/services/generator.service.d.ts +115 -26
  77. package/dist/core/services/generator.service.d.ts.map +1 -1
  78. package/dist/core/services/generator.service.js +191 -56
  79. package/dist/core/services/generator.service.js.map +1 -1
  80. package/dist/core/services/geometry.service.d.ts +369 -39
  81. package/dist/core/services/geometry.service.d.ts.map +1 -1
  82. package/dist/core/services/geometry.service.js +424 -66
  83. package/dist/core/services/geometry.service.js.map +1 -1
  84. package/dist/core/services/http.service.d.ts +244 -21
  85. package/dist/core/services/http.service.d.ts.map +1 -1
  86. package/dist/core/services/http.service.js +419 -98
  87. package/dist/core/services/http.service.js.map +1 -1
  88. package/dist/core/services/logger.service.d.ts +95 -29
  89. package/dist/core/services/logger.service.d.ts.map +1 -1
  90. package/dist/core/services/logger.service.js +167 -41
  91. package/dist/core/services/logger.service.js.map +1 -1
  92. package/dist/core/services/reactive.service.d.ts +146 -19
  93. package/dist/core/services/reactive.service.d.ts.map +1 -1
  94. package/dist/core/services/reactive.service.js +278 -137
  95. package/dist/core/services/reactive.service.js.map +1 -1
  96. package/dist/core/services/timing.service.d.ts +142 -20
  97. package/dist/core/services/timing.service.d.ts.map +1 -1
  98. package/dist/core/services/timing.service.js +324 -185
  99. package/dist/core/services/timing.service.js.map +1 -1
  100. package/dist/core/services/utils.service.d.ts +228 -43
  101. package/dist/core/services/utils.service.d.ts.map +1 -1
  102. package/dist/core/services/utils.service.js +305 -125
  103. package/dist/core/services/utils.service.js.map +1 -1
  104. package/dist/infrastructure/dom/dom.service.d.ts +307 -44
  105. package/dist/infrastructure/dom/dom.service.d.ts.map +1 -1
  106. package/dist/infrastructure/dom/dom.service.js +408 -129
  107. package/dist/infrastructure/dom/dom.service.js.map +1 -1
  108. package/dist/infrastructure/index.d.ts +0 -3
  109. package/dist/infrastructure/index.d.ts.map +1 -1
  110. package/dist/infrastructure/index.js +0 -3
  111. package/dist/infrastructure/index.js.map +1 -1
  112. package/dist/infrastructure/observer/observer.service.d.ts +124 -31
  113. package/dist/infrastructure/observer/observer.service.d.ts.map +1 -1
  114. package/dist/infrastructure/observer/observer.service.js +227 -131
  115. package/dist/infrastructure/observer/observer.service.js.map +1 -1
  116. package/dist/infrastructure/sensors/sensors.service.d.ts +154 -22
  117. package/dist/infrastructure/sensors/sensors.service.d.ts.map +1 -1
  118. package/dist/infrastructure/sensors/sensors.service.js +264 -112
  119. package/dist/infrastructure/sensors/sensors.service.js.map +1 -1
  120. package/dist/infrastructure/storage/storage.service.d.ts +123 -45
  121. package/dist/infrastructure/storage/storage.service.d.ts.map +1 -1
  122. package/dist/infrastructure/storage/storage.service.js +236 -66
  123. package/dist/infrastructure/storage/storage.service.js.map +1 -1
  124. package/dist/infrastructure/theme/theme.service.d.ts +93 -29
  125. package/dist/infrastructure/theme/theme.service.d.ts.map +1 -1
  126. package/dist/infrastructure/theme/theme.service.js +198 -96
  127. package/dist/infrastructure/theme/theme.service.js.map +1 -1
  128. package/dist/infrastructure/viewport/viewport.service.d.ts +233 -35
  129. package/dist/infrastructure/viewport/viewport.service.d.ts.map +1 -1
  130. package/dist/infrastructure/viewport/viewport.service.js +358 -139
  131. package/dist/infrastructure/viewport/viewport.service.js.map +1 -1
  132. package/dist/infrastructure/worker/worker.service.d.ts +84 -38
  133. package/dist/infrastructure/worker/worker.service.d.ts.map +1 -1
  134. package/dist/infrastructure/worker/worker.service.js +234 -133
  135. package/dist/infrastructure/worker/worker.service.js.map +1 -1
  136. package/dist/prisma/index.d.ts +2 -0
  137. package/dist/prisma/index.d.ts.map +1 -0
  138. package/dist/prisma/index.js +2 -0
  139. package/dist/prisma/index.js.map +1 -0
  140. package/dist/prisma/schema.json +11 -33
  141. package/dist/prisma/use-prisma.d.ts +68 -0
  142. package/dist/prisma/use-prisma.d.ts.map +1 -0
  143. package/dist/prisma/use-prisma.js +82 -0
  144. package/dist/prisma/use-prisma.js.map +1 -0
  145. package/dist/types/index.d.ts +20 -12
  146. package/dist/types/index.d.ts.map +1 -1
  147. package/package.json +124 -125
  148. 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,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUnF;;GAEG;AACH,qBAAa,YAAa,YAAW,aAAa;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IAEtC,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAwD;IACzE,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,uBAAuB,CAA6B;IAE5D,OAAO,eAAiB;IAExB,OAAc,WAAW,IAAI,YAAY,CAKxC;IAED,OAAO,CAAC,UAAU,CAEhB;IAEK,YAAY,aAAa,YAAY,KAAQ,IAAI,CAatD;IAEK,eAAe,SAAU,SAAS,KAAG,IAAI,CAM9C;IAEK,eAAe,QAAO,SAAS,CAAc;IAE7C,cAAc,QAAO,OAAO,GAAG,MAAM,CAG1C;IAEK,qBAAqB,QAAO,OAAO,CAGxC;IAEK,cAAc,QAAO,IAAI,CAG9B;IAEK,aAAa,QAAO,IAAI,CAK7B;IAEK,eAAe,QAAO,IAAI,CAM/B;IAEF,OAAO,CAAC,WAAW,CAajB;IAEF,OAAO,CAAC,0BAA0B,CAiBhC;CACF;AAGD,eAAO,MAAM,aAAa,EAAE,YAAyC,CAAC;AAEtE,eAAO,MACN,YAAY,aA9FoB,YAAY,KAAQ,IAAI,EA+FxD,eAAe,SAhFiB,SAAS,KAAG,IAAI,EAiFhD,eAAe,QAzEc,SAAS,EA0EtC,cAAc,QAxEc,OAAO,GAAG,MAAM,EAyE5C,qBAAqB,QApEc,OAAO,EAqE1C,cAAc,QAhEc,IAAI,EAiEhC,aAAa,QA5Dc,IAAI,EA6D/B,eAAe,QAtDc,IAuDC,CAAC"}
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
- * Theme facade (Singleton) over the DOM and Storage, with a media-query listener.
27
+ * Resolves the current theme to a concrete `"light"` or `"dark"` value.
28
+ *
29
+ * @returns The resolved color scheme.
5
30
  */
6
- export class ThemeService {
7
- static instance;
8
- mode = "system";
9
- storageKey = "theme";
10
- attribute = "data-theme";
11
- target = null;
12
- onChange;
13
- mediaQuery = null;
14
- cleanMediaQueryListener = null;
15
- constructor() { }
16
- static getInstance() {
17
- if (!ThemeService.instance) {
18
- ThemeService.instance = new ThemeService();
19
- }
20
- return ThemeService.instance;
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
- IS_BROWSER = () => {
23
- return typeof window !== "undefined" && typeof document !== "undefined";
24
- };
25
- useInitTheme = (options = {}) => {
26
- if (!this.IS_BROWSER())
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
- // Singleton instance and safe export.
102
- export const THEME_SERVICE = ThemeService.getInstance();
103
- export const { useInitTheme, useSetThemeMode, useGetThemeMode, useGetResolved, usePrefersColorScheme, useToggleTheme, useResetTheme, useDestroyTheme, } = THEME_SERVICE;
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":"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"}
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
- * Viewport, scroll and window utilities. All methods are SSR-safe.
4
- */
5
- export default class ViewportService {
6
- private static instance;
7
- private constructor();
8
- static getInstance(): ViewportService;
9
- private isBrowser;
10
- useGetViewportSize: () => ViewportSize;
11
- useMatchesMedia: (query: string) => boolean;
12
- usePrefersReducedMotion: () => boolean;
13
- usePrefersDarkMode: () => boolean;
14
- useGetScrollY: () => number;
15
- useGetScrollX: () => number;
16
- useGetScrollPosition: () => ScrollPosition;
17
- useGetScrollProgress: () => number;
18
- useIsAtTop: (threshold?: number) => boolean;
19
- useIsAtBottom: (threshold?: number) => boolean;
20
- useScrollTo: (x?: number, y?: number, behavior?: ScrollBehavior) => void;
21
- useScrollToTop: (smooth?: boolean) => void;
22
- useScrollToBottom: (smooth?: boolean) => void;
23
- useScrollToElement: (target: HTMLElement | string, options?: ScrollOptions) => boolean;
24
- usePrintPage: () => void;
25
- useFocusElement: (target: HTMLElement | string) => boolean;
26
- useBlurActiveElement: () => void;
27
- useGetActiveElement: () => Element | null;
28
- useRequestFullscreen: (target?: HTMLElement) => Promise<void>;
29
- useExitFullscreen: () => Promise<void>;
30
- useIsFullscreen: () => boolean;
31
- useIsDocumentVisible: () => boolean;
32
- useOnVisibilityChange: (callback: (isVisible: boolean) => void) => (() => void);
33
- useGetTitle: () => string;
34
- useSetTitle: (title: string) => void;
35
- useSetTempTitle: (tempTitle: string, durationMs?: number) => void;
36
- }
37
- export declare const useGetViewportSize: () => ViewportSize, useMatchesMedia: (query: string) => boolean, usePrefersReducedMotion: () => boolean, usePrefersDarkMode: () => boolean, useGetScrollY: () => number, useGetScrollX: () => number, useGetScrollPosition: () => ScrollPosition, useGetScrollProgress: () => number, useIsAtTop: (threshold?: number) => boolean, useIsAtBottom: (threshold?: number) => boolean, useScrollTo: (x?: number, y?: number, behavior?: ScrollBehavior) => void, useScrollToTop: (smooth?: boolean) => void, useScrollToBottom: (smooth?: boolean) => void, useScrollToElement: (target: HTMLElement | string, options?: ScrollOptions) => boolean, usePrintPage: () => void, useFocusElement: (target: HTMLElement | string) => boolean, useBlurActiveElement: () => void, useGetActiveElement: () => Element | null, useRequestFullscreen: (target?: HTMLElement) => Promise<void>, useExitFullscreen: () => Promise<void>, useIsFullscreen: () => boolean, useIsDocumentVisible: () => boolean, useOnVisibilityChange: (callback: (isVisible: boolean) => void) => (() => void), useGetTitle: () => string, useSetTitle: (title: string) => void, useSetTempTitle: (tempTitle: string, durationMs?: number) => void;
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;AAExF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe;IACnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC,OAAO,eAAiB;IAExB,OAAc,WAAW,IAAI,eAAe,CAK3C;IAED,OAAO,CAAC,SAAS,CACiD;IAE3D,kBAAkB,QAAO,YAAY,CAG1C;IAEK,eAAe,UAAW,MAAM,KAAG,OAAO,CAG/C;IAEK,uBAAuB,QAAO,OAAO,CACc;IAEnD,kBAAkB,QAAO,OAAO,CAAyD;IAEzF,aAAa,QAAO,MAAM,CAA4C;IAEtE,aAAa,QAAO,MAAM,CAA4C;IAEtE,oBAAoB,QAAO,cAAc,CAG7C;IAEI,oBAAoB,QAAO,MAAM,CAKtC;IAEK,UAAU,0BAAoB,OAAO,CAAsC;IAE3E,aAAa,0BAAqB,OAAO,CAI9C;IAEK,WAAW,sCAA4B,cAAc,KAAc,IAAI,CAI5E;IAEK,cAAc,wBAAoB,IAAI,CAI3C;IAEK,iBAAiB,wBAAoB,IAAI,CAK9C;IAEK,kBAAkB,WAChB,WAAW,GAAG,MAAM,YACnB,aAAa,KACpB,OAAO,CAkBR;IAEK,YAAY,QAAO,IAAI,CAE5B;IAEK,eAAe,WAAY,WAAW,GAAG,MAAM,KAAG,OAAO,CAS9D;IAEK,oBAAoB,QAAO,IAAI,CAGpC;IAEK,mBAAmB,QAAO,OAAO,GAAG,IAAI,CACG;IAE3C,oBAAoB,YAAmB,WAAW,KAAG,OAAO,CAAC,IAAI,CAAC,CAOvE;IAEK,iBAAiB,QAAa,OAAO,CAAC,IAAI,CAAC,CAGhD;IAEK,eAAe,QAAO,OAAO,CAAqD;IAElF,oBAAoB,QAAO,OAAO,CAGvC;IAEK,qBAAqB,aAAc,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAOnF;IAEK,WAAW,QAAO,MAAM,CAA6C;IAErE,WAAW,UAAW,MAAM,KAAG,IAAI,CAExC;IAEK,eAAe,cAAe,MAAM,0BAAsB,IAAI,CAWnE;CACF;AAGD,eAAO,MACN,kBAAkB,QA5Jc,YAAY,EA6J5C,eAAe,UAxJkB,MAAM,KAAG,OAAO,EAyJjD,uBAAuB,QApJc,OAAO,EAqJ5C,kBAAkB,QAlJc,OAAO,EAmJvC,aAAa,QAjJc,MAAM,EAkJjC,aAAa,QAhJc,MAAM,EAiJjC,oBAAoB,QA/Ic,cAAc,EAgJhD,oBAAoB,QA3Ic,MAAM,EA4IxC,UAAU,0BArI2B,OAAO,EAsI5C,aAAa,0BApI4B,OAAO,EAqIhD,WAAW,sCA/HmC,cAAc,KAAc,IAAI,EAgI9E,cAAc,wBA1H2B,IAAI,EA2H7C,iBAAiB,wBArH2B,IAAI,EAsHhD,kBAAkB,WA9GT,WAAW,GAAG,MAAM,YACnB,aAAa,KACpB,OAAO,EA6GV,YAAY,QAzFc,IAAI,EA0F9B,eAAe,WAtFmB,WAAW,GAAG,MAAM,KAAG,OAAO,EAuFhE,oBAAoB,QA5Ec,IAAI,EA6EtC,mBAAmB,QAxEc,OAAO,GAAG,IAAI,EAyE/C,oBAAoB,YAtE0B,WAAW,KAAG,OAAO,CAAC,IAAI,CAAC,EAuEzE,iBAAiB,QA9DoB,OAAO,CAAC,IAAI,CAAC,EA+DlD,eAAe,QA1Dc,OAAO,EA2DpC,oBAAoB,QAzDc,OAAO,EA0DzC,qBAAqB,aArDqB,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,EAsDrF,WAAW,QA7Cc,MAAM,EA8C/B,WAAW,UA5CkB,MAAM,KAAG,IAAI,EA6C1C,eAAe,cAzCsB,MAAM,0BAAsB,IA0ChB,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"}