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,145 +1,364 @@
1
+ // ============================================================
2
+ // Internal helpers
3
+ // ============================================================
1
4
  /**
2
- * Viewport, scroll and window utilities. All methods are SSR-safe.
5
+ * Checks whether the code is running in a browser environment.
6
+ *
7
+ * @returns `true` if both `window` and `document` are defined.
3
8
  */
4
- export default class ViewportService {
5
- static instance;
6
- constructor() { }
7
- static getInstance() {
8
- if (!ViewportService.instance) {
9
- ViewportService.instance = new ViewportService();
10
- }
11
- return ViewportService.instance;
12
- }
13
- isBrowser = () => typeof window !== "undefined" && typeof document !== "undefined";
14
- useGetViewportSize = () => {
15
- if (!this.isBrowser())
16
- return { width: 0, height: 0 };
17
- return { width: window.innerWidth, height: window.innerHeight };
18
- };
19
- useMatchesMedia = (query) => {
20
- if (!this.isBrowser() || !window.matchMedia)
21
- return false;
22
- return window.matchMedia(query).matches;
23
- };
24
- usePrefersReducedMotion = () => this.useMatchesMedia("(prefers-reduced-motion: reduce)");
25
- usePrefersDarkMode = () => this.useMatchesMedia("(prefers-color-scheme: dark)");
26
- useGetScrollY = () => (this.isBrowser() ? window.scrollY : 0);
27
- useGetScrollX = () => (this.isBrowser() ? window.scrollX : 0);
28
- useGetScrollPosition = () => ({
29
- x: this.useGetScrollX(),
30
- y: this.useGetScrollY(),
9
+ function isBrowser() {
10
+ return typeof window !== "undefined" && typeof document !== "undefined";
11
+ }
12
+ // ============================================================
13
+ // Module-level state (temporary title)
14
+ // ============================================================
15
+ let tempTitleTimer;
16
+ let tempTitleOriginal;
17
+ // ============================================================
18
+ // Public API
19
+ // ============================================================
20
+ /**
21
+ * Returns the current viewport dimensions.
22
+ *
23
+ * @returns A {@link ViewportSize} object with `width` and `height` (or `{0, 0}` in SSR).
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const { width, height } = useGetViewportSize();
28
+ * if (width < 768) { /* mobile *​/ }
29
+ * ```
30
+ */
31
+ export const useGetViewportSize = () => {
32
+ if (!isBrowser())
33
+ return { width: 0, height: 0 };
34
+ return { width: window.innerWidth, height: window.innerHeight };
35
+ };
36
+ /**
37
+ * Tests a CSS media query against the current viewport.
38
+ *
39
+ * @param query - A CSS media query string (e.g. `"(min-width: 768px)"`).
40
+ * @returns `true` if the query matches.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * if (useMatchesMedia("(prefers-reduced-motion: reduce)")) {
45
+ * // disable animations
46
+ * }
47
+ * ```
48
+ */
49
+ export const useMatchesMedia = (query) => {
50
+ if (!isBrowser() || !window.matchMedia)
51
+ return false;
52
+ return window.matchMedia(query).matches;
53
+ };
54
+ /**
55
+ * Checks whether the user prefers reduced motion.
56
+ *
57
+ * @returns `true` if `prefers-reduced-motion: reduce` is active.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * const smooth = !usePrefersReducedMotion();
62
+ * ```
63
+ */
64
+ export const usePrefersReducedMotion = () => useMatchesMedia("(prefers-reduced-motion: reduce)");
65
+ /**
66
+ * Checks whether the user's OS prefers dark mode.
67
+ *
68
+ * @returns `true` if `prefers-color-scheme: dark` is active.
69
+ */
70
+ export const usePrefersDarkMode = () => useMatchesMedia("(prefers-color-scheme: dark)");
71
+ /**
72
+ * Returns the current vertical scroll position.
73
+ *
74
+ * @returns `window.scrollY` or `0` in SSR.
75
+ */
76
+ export const useGetScrollY = () => (isBrowser() ? window.scrollY : 0);
77
+ /**
78
+ * Returns the current horizontal scroll position.
79
+ *
80
+ * @returns `window.scrollX` or `0` in SSR.
81
+ */
82
+ export const useGetScrollX = () => (isBrowser() ? window.scrollX : 0);
83
+ /**
84
+ * Returns the current scroll position as `{ x, y }`.
85
+ *
86
+ * @returns A {@link ScrollPosition} object.
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * const { x, y } = useGetScrollPosition();
91
+ * ```
92
+ */
93
+ export const useGetScrollPosition = () => ({
94
+ x: useGetScrollX(),
95
+ y: useGetScrollY(),
96
+ });
97
+ /**
98
+ * Returns the vertical scroll progress as a value between `0` (top) and `1` (bottom).
99
+ *
100
+ * @returns A number in `[0, 1]`.
101
+ *
102
+ * @example
103
+ * ```ts
104
+ * const progress = useGetScrollProgress();
105
+ * progressBar.style.width = `${progress * 100}%`;
106
+ * ```
107
+ */
108
+ export const useGetScrollProgress = () => {
109
+ if (!isBrowser())
110
+ return 0;
111
+ const scrollHeight = document.documentElement.scrollHeight - window.innerHeight;
112
+ if (scrollHeight <= 0)
113
+ return 0;
114
+ return Math.min(1, Math.max(0, window.scrollY / scrollHeight));
115
+ };
116
+ /**
117
+ * Checks whether the page is scrolled to (or near) the top.
118
+ *
119
+ * @param threshold - Pixel tolerance (default: `0`).
120
+ * @returns `true` if `scrollY <= threshold`.
121
+ */
122
+ export const useIsAtTop = (threshold = 0) => useGetScrollY() <= threshold;
123
+ /**
124
+ * Checks whether the page is scrolled to (or near) the bottom.
125
+ *
126
+ * @param threshold - Pixel tolerance from the bottom (default: `50`).
127
+ * @returns `true` if within `threshold` pixels of the bottom.
128
+ */
129
+ export const useIsAtBottom = (threshold = 50) => {
130
+ if (!isBrowser())
131
+ return false;
132
+ const scrollHeight = document.documentElement.scrollHeight;
133
+ return window.scrollY + window.innerHeight >= scrollHeight - threshold;
134
+ };
135
+ /**
136
+ * Scrolls the window to a specific position, respecting `prefers-reduced-motion`.
137
+ *
138
+ * @param x - Horizontal scroll target (default: `0`).
139
+ * @param y - Vertical scroll target (default: `0`).
140
+ * @param behavior - Scroll behavior (default: `"smooth"`).
141
+ *
142
+ * @example
143
+ * ```ts
144
+ * useScrollTo(0, 500); // scroll to 500px from top
145
+ * ```
146
+ */
147
+ export const useScrollTo = (x = 0, y = 0, behavior = "smooth") => {
148
+ if (!isBrowser())
149
+ return;
150
+ const finalBehavior = usePrefersReducedMotion() ? "auto" : behavior;
151
+ window.scrollTo({ top: y, left: x, behavior: finalBehavior });
152
+ };
153
+ /**
154
+ * Scrolls to the top of the page.
155
+ *
156
+ * @param smooth - Whether to use smooth scrolling (default: `true`).
157
+ */
158
+ export const useScrollToTop = (smooth = true) => {
159
+ if (!isBrowser())
160
+ return;
161
+ const behavior = smooth && !usePrefersReducedMotion() ? "smooth" : "auto";
162
+ window.scrollTo({ top: 0, behavior });
163
+ };
164
+ /**
165
+ * Scrolls to the bottom of the page.
166
+ *
167
+ * @param smooth - Whether to use smooth scrolling (default: `true`).
168
+ */
169
+ export const useScrollToBottom = (smooth = true) => {
170
+ if (!isBrowser())
171
+ return;
172
+ const behavior = smooth && !usePrefersReducedMotion() ? "smooth" : "auto";
173
+ const scrollHeight = document.documentElement.scrollHeight;
174
+ window.scrollTo({ top: scrollHeight, behavior });
175
+ };
176
+ /**
177
+ * Scrolls an element into view.
178
+ *
179
+ * @param target - An HTMLElement or a CSS selector string.
180
+ * @param options - Scroll options (`behavior`, `block`, `inline`).
181
+ * @returns `true` if the element was found and scrolled to.
182
+ *
183
+ * @example
184
+ * ```ts
185
+ * useScrollToElement("#section-2", { behavior: "smooth", block: "start" });
186
+ * ```
187
+ */
188
+ export const useScrollToElement = (target, options = {}) => {
189
+ if (!isBrowser())
190
+ return false;
191
+ const element = typeof target === "string" ? document.querySelector(target) : target;
192
+ if (!element)
193
+ return false;
194
+ const behavior = usePrefersReducedMotion()
195
+ ? "auto"
196
+ : (options.behavior ?? "smooth");
197
+ element.scrollIntoView({
198
+ behavior,
199
+ block: options.block ?? "start",
200
+ inline: options.inline ?? "nearest",
31
201
  });
32
- useGetScrollProgress = () => {
33
- if (!this.isBrowser())
34
- return 0;
35
- const scrollHeight = document.documentElement.scrollHeight - window.innerHeight;
36
- if (scrollHeight <= 0)
37
- return 0;
38
- return Math.min(1, Math.max(0, window.scrollY / scrollHeight));
39
- };
40
- useIsAtTop = (threshold = 0) => this.useGetScrollY() <= threshold;
41
- useIsAtBottom = (threshold = 50) => {
42
- if (!this.isBrowser())
43
- return false;
44
- const scrollHeight = document.documentElement.scrollHeight;
45
- return window.scrollY + window.innerHeight >= scrollHeight - threshold;
46
- };
47
- useScrollTo = (x = 0, y = 0, behavior = "smooth") => {
48
- if (!this.isBrowser())
49
- return;
50
- const finalBehavior = this.usePrefersReducedMotion() ? "auto" : behavior;
51
- window.scrollTo({ top: y, left: x, behavior: finalBehavior });
52
- };
53
- useScrollToTop = (smooth = true) => {
54
- if (!this.isBrowser())
55
- return;
56
- const behavior = smooth && !this.usePrefersReducedMotion() ? "smooth" : "auto";
57
- window.scrollTo({ top: 0, behavior });
58
- };
59
- useScrollToBottom = (smooth = true) => {
60
- if (!this.isBrowser())
61
- return;
62
- const behavior = smooth && !this.usePrefersReducedMotion() ? "smooth" : "auto";
63
- const scrollHeight = document.documentElement.scrollHeight;
64
- window.scrollTo({ top: scrollHeight, behavior });
65
- };
66
- useScrollToElement = (target, options = {}) => {
67
- if (!this.isBrowser())
68
- return false;
69
- const element = typeof target === "string" ? document.querySelector(target) : target;
70
- if (!element)
71
- return false;
72
- const behavior = this.usePrefersReducedMotion()
73
- ? "auto"
74
- : (options.behavior ?? "smooth");
75
- element.scrollIntoView({
76
- behavior,
77
- block: options.block ?? "start",
78
- inline: options.inline ?? "nearest",
79
- });
80
- return true;
81
- };
82
- usePrintPage = () => {
83
- if (this.isBrowser())
84
- window.print();
85
- };
86
- useFocusElement = (target) => {
87
- if (!this.isBrowser())
88
- return false;
89
- const element = typeof target === "string" ? document.querySelector(target) : target;
90
- if (!element)
91
- return false;
92
- element.focus();
202
+ return true;
203
+ };
204
+ /**
205
+ * Triggers the browser print dialog.
206
+ *
207
+ * @example
208
+ * ```ts
209
+ * usePrintPage();
210
+ * ```
211
+ */
212
+ export const usePrintPage = () => {
213
+ if (isBrowser())
214
+ window.print();
215
+ };
216
+ /**
217
+ * Focuses an element.
218
+ *
219
+ * @param target - An HTMLElement or a CSS selector string.
220
+ * @returns `true` if the element was found and focused.
221
+ *
222
+ * @example
223
+ * ```ts
224
+ * useFocusElement("#search-input");
225
+ * ```
226
+ */
227
+ export const useFocusElement = (target) => {
228
+ if (!isBrowser())
229
+ return false;
230
+ const element = typeof target === "string" ? document.querySelector(target) : target;
231
+ if (!element)
232
+ return false;
233
+ element.focus();
234
+ return true;
235
+ };
236
+ /**
237
+ * Removes focus from the currently active element.
238
+ */
239
+ export const useBlurActiveElement = () => {
240
+ if (!isBrowser())
241
+ return;
242
+ document.activeElement?.blur();
243
+ };
244
+ /**
245
+ * Returns the currently focused element.
246
+ *
247
+ * @returns The active element, or `null` in SSR.
248
+ */
249
+ export const useGetActiveElement = () => isBrowser() ? document.activeElement : null;
250
+ /**
251
+ * Requests fullscreen on the given element (or the document root).
252
+ *
253
+ * @param target - The element to make fullscreen (defaults to `document.documentElement`).
254
+ * @throws {Error} If fullscreen is not supported.
255
+ *
256
+ * @example
257
+ * ```ts
258
+ * await useRequestFullscreen(videoElement);
259
+ * ```
260
+ */
261
+ export const useRequestFullscreen = async (target) => {
262
+ if (!isBrowser() || !document.fullscreenEnabled) {
263
+ throw new Error("Fullscreen not supported");
264
+ }
265
+ const element = target ?? document.documentElement;
266
+ await element.requestFullscreen();
267
+ };
268
+ /**
269
+ * Exits fullscreen mode.
270
+ */
271
+ export const useExitFullscreen = async () => {
272
+ if (!isBrowser() || !document.fullscreenElement)
273
+ return;
274
+ await document.exitFullscreen();
275
+ };
276
+ /**
277
+ * Checks whether the document is currently in fullscreen mode.
278
+ *
279
+ * @returns `true` if fullscreen is active.
280
+ */
281
+ export const useIsFullscreen = () => isBrowser() && !!document.fullscreenElement;
282
+ /**
283
+ * Checks whether the document tab is currently visible.
284
+ *
285
+ * @returns `true` if `document.visibilityState === "visible"`.
286
+ */
287
+ export const useIsDocumentVisible = () => {
288
+ if (!isBrowser())
93
289
  return true;
94
- };
95
- useBlurActiveElement = () => {
96
- if (!this.isBrowser())
97
- return;
98
- document.activeElement?.blur();
99
- };
100
- useGetActiveElement = () => this.isBrowser() ? document.activeElement : null;
101
- useRequestFullscreen = async (target) => {
102
- if (!this.isBrowser() || !document.fullscreenEnabled) {
103
- throw new Error("Fullscreen not supported");
290
+ return document.visibilityState === "visible";
291
+ };
292
+ /**
293
+ * Registers a callback for document visibility changes.
294
+ *
295
+ * @param callback - Called with `true` when visible, `false` when hidden.
296
+ * @returns A cleanup function that removes the listener.
297
+ *
298
+ * @example
299
+ * ```ts
300
+ * const off = useOnVisibilityChange((visible) => {
301
+ * if (visible) resumePolling();
302
+ * else pausePolling();
303
+ * });
304
+ * ```
305
+ */
306
+ export const useOnVisibilityChange = (callback) => {
307
+ if (!isBrowser())
308
+ return () => { };
309
+ const handler = () => callback(useIsDocumentVisible());
310
+ document.addEventListener("visibilitychange", handler);
311
+ return () => document.removeEventListener("visibilitychange", handler);
312
+ };
313
+ /**
314
+ * Returns the current document title.
315
+ *
316
+ * @returns The title string, or `""` in SSR.
317
+ */
318
+ export const useGetTitle = () => (isBrowser() ? document.title : "");
319
+ /**
320
+ * Sets the document title.
321
+ *
322
+ * @param title - The new title.
323
+ *
324
+ * @example
325
+ * ```ts
326
+ * useSetTitle("My Page");
327
+ * ```
328
+ */
329
+ export const useSetTitle = (title) => {
330
+ if (isBrowser())
331
+ document.title = title;
332
+ };
333
+ /**
334
+ * Temporarily changes the document title, restoring the original after `durationMs`.
335
+ *
336
+ * @param tempTitle - The temporary title to display.
337
+ * @param durationMs - How long to show it (default: `3000`).
338
+ *
339
+ * @example
340
+ * ```ts
341
+ * useSetTempTitle("(2) New messages!", 5000);
342
+ * // title reverts after 5 seconds
343
+ * ```
344
+ */
345
+ export const useSetTempTitle = (tempTitle, durationMs = 3000) => {
346
+ if (!isBrowser())
347
+ return;
348
+ if (tempTitleTimer !== undefined) {
349
+ clearTimeout(tempTitleTimer);
350
+ tempTitleTimer = undefined;
351
+ }
352
+ if (tempTitleOriginal === undefined) {
353
+ tempTitleOriginal = document.title;
354
+ }
355
+ document.title = tempTitle;
356
+ tempTitleTimer = setTimeout(() => {
357
+ if (document.title === tempTitle && tempTitleOriginal !== undefined) {
358
+ document.title = tempTitleOriginal;
104
359
  }
105
- const element = target ?? document.documentElement;
106
- await element.requestFullscreen();
107
- };
108
- useExitFullscreen = async () => {
109
- if (!this.isBrowser() || !document.fullscreenElement)
110
- return;
111
- await document.exitFullscreen();
112
- };
113
- useIsFullscreen = () => this.isBrowser() && !!document.fullscreenElement;
114
- useIsDocumentVisible = () => {
115
- if (!this.isBrowser())
116
- return true;
117
- return document.visibilityState === "visible";
118
- };
119
- useOnVisibilityChange = (callback) => {
120
- if (!this.isBrowser())
121
- return () => { };
122
- const handler = () => callback(this.useIsDocumentVisible());
123
- document.addEventListener("visibilitychange", handler);
124
- return () => document.removeEventListener("visibilitychange", handler);
125
- };
126
- useGetTitle = () => (this.isBrowser() ? document.title : "");
127
- useSetTitle = (title) => {
128
- if (this.isBrowser())
129
- document.title = title;
130
- };
131
- useSetTempTitle = (tempTitle, durationMs = 3000) => {
132
- if (!this.isBrowser())
133
- return;
134
- const original = document.title;
135
- document.title = tempTitle;
136
- setTimeout(() => {
137
- if (document.title === tempTitle) {
138
- document.title = original;
139
- }
140
- }, durationMs);
141
- };
142
- }
143
- // Singleton instance and destructured exports.
144
- export const { useGetViewportSize, useMatchesMedia, usePrefersReducedMotion, usePrefersDarkMode, useGetScrollY, useGetScrollX, useGetScrollPosition, useGetScrollProgress, useIsAtTop, useIsAtBottom, useScrollTo, useScrollToTop, useScrollToBottom, useScrollToElement, usePrintPage, useFocusElement, useBlurActiveElement, useGetActiveElement, useRequestFullscreen, useExitFullscreen, useIsFullscreen, useIsDocumentVisible, useOnVisibilityChange, useGetTitle, useSetTitle, useSetTempTitle, } = ViewportService.getInstance();
360
+ tempTitleOriginal = undefined;
361
+ tempTitleTimer = undefined;
362
+ }, durationMs);
363
+ };
145
364
  //# sourceMappingURL=viewport.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"viewport.service.js","sourceRoot":"","sources":["../../../src/infrastructure/viewport/viewport.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viewport.service.js","sourceRoot":"","sources":["../../../src/infrastructure/viewport/viewport.service.ts"],"names":[],"mappings":"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"}