@hawsen-the-first/interactiv 0.0.1 → 0.0.2
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 +59 -0
- package/dist/index.js +1 -0
- package/dist/src/appBuilder.d.ts +10 -6
- package/dist/src/appBuilder.d.ts.map +1 -1
- package/dist/src/appBuilder.js +14 -8
- package/dist/src/screensaverManager.d.ts +9 -2
- package/dist/src/screensaverManager.d.ts.map +1 -1
- package/dist/src/screensaverManager.js +98 -22
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -253,6 +253,65 @@ eventManager.drag(".draggable", {
|
|
|
253
253
|
});
|
|
254
254
|
```
|
|
255
255
|
|
|
256
|
+
### Screensaver Manager
|
|
257
|
+
|
|
258
|
+
The screensaver manager monitors user activity and triggers actions after a configurable timeout period. It supports two modes:
|
|
259
|
+
|
|
260
|
+
#### Standard Screensaver Mode
|
|
261
|
+
|
|
262
|
+
Navigate to a dedicated screensaver page after inactivity. User activity exits the screensaver and returns to the previous or starting page.
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
// Create a screensaver page with views
|
|
266
|
+
const screensaverPage = new Page("screensaver-page", orchestrator, false);
|
|
267
|
+
const screensaverView = new View("screensaver-view", orchestrator, false,
|
|
268
|
+
html`<div class="screensaver">...</div>`,
|
|
269
|
+
css`.screensaver { /* styles */ }`
|
|
270
|
+
);
|
|
271
|
+
screensaverPage.addView(screensaverView);
|
|
272
|
+
|
|
273
|
+
// Add screensaver with standard behavior
|
|
274
|
+
app.addScreensaver(screensaverPage, {
|
|
275
|
+
timeoutSeconds: 30,
|
|
276
|
+
defaultViewId: "screensaver-view",
|
|
277
|
+
exitBehavior: "return", // Return to where the user was before
|
|
278
|
+
transitionConfig: { type: "fade", duration: 500 },
|
|
279
|
+
});
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
#### Return-to-Home Mode
|
|
283
|
+
|
|
284
|
+
Instead of showing a screensaver, navigate back to a specified home page/view after inactivity. No screensaver page is needed — the app simply redirects to the home screen. The screensaver never enters an "active" state, so user activity just resets the inactivity timer.
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
// No screensaver page needed — pass null
|
|
288
|
+
app.addScreensaver(null, {
|
|
289
|
+
timeoutSeconds: 60,
|
|
290
|
+
screensaverViewBehavior: "returnHome",
|
|
291
|
+
startingPageId: "home-page", // The home page to navigate to
|
|
292
|
+
defaultViewId: "home-view", // Optional: the home view to show
|
|
293
|
+
transitionConfig: { type: "fade", duration: 500 },
|
|
294
|
+
});
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
#### Configuration Options
|
|
298
|
+
|
|
299
|
+
| Option | Type | Description |
|
|
300
|
+
|--------|------|-------------|
|
|
301
|
+
| `timeoutSeconds` | `number` | Seconds of inactivity before activation |
|
|
302
|
+
| `page` | `Page` | Screensaver page (required unless using `returnHome`) |
|
|
303
|
+
| `screensaverViewBehavior` | `"default" \| "specific" \| "return" \| "returnHome"` | How to handle the view on activation |
|
|
304
|
+
| `defaultViewId` | `string` | Default view to show (or home view for `returnHome`) |
|
|
305
|
+
| `exitBehavior` | `"reset" \| "return"` | Where to go when exiting the screensaver |
|
|
306
|
+
| `startingPageId` | `string` | Page to navigate to on exit/reset (or home page for `returnHome`) |
|
|
307
|
+
| `startingViewId` | `string` | View within the starting page on exit |
|
|
308
|
+
| `transitionConfig` | `TransitionConfig` | Transition animation configuration |
|
|
309
|
+
| `activateCallback` | `() => void` | Called when screensaver activates or returns home |
|
|
310
|
+
| `deactivateCallback` | `() => void` | Called when screensaver deactivates |
|
|
311
|
+
| `blockerCallback` | `() => boolean` | Return `true` to prevent activation |
|
|
312
|
+
| `rebootTimeout` | `number \| null` | Minutes before triggering a reboot callback |
|
|
313
|
+
| `rebootCallback` | `() => void` | Called when reboot timeout elapses |
|
|
314
|
+
|
|
256
315
|
### Settings Manager
|
|
257
316
|
|
|
258
317
|
Create hidden settings pages with corner touch activation. See [SETTINGS_MANAGER.md](./SETTINGS_MANAGER.md) for detailed documentation.
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import { Logger } from "./utils/logger";
|
|
|
10
10
|
import { useAnimations, AnimationManager } from "./src/animationBus";
|
|
11
11
|
import { configureLogger } from "./src/logger";
|
|
12
12
|
import { GarbageCollector, createGarbageCollector, } from "./src/garbageCollector";
|
|
13
|
+
5;
|
|
13
14
|
export { createOrchestrator, EventOrchestrator, EventBus, AppBuilder, Page, View, Component, NavigationManager, ScreensaverManager, SettingsManager, EventManager, AnimationManager,
|
|
14
15
|
// External State Management
|
|
15
16
|
stateManager, getGlobalState, setGlobalState, subscribeToGlobalState, useGlobalStateExternal, useAnimations, ExternalStateManager, ComponentStateManager,
|
package/dist/src/appBuilder.d.ts
CHANGED
|
@@ -128,11 +128,13 @@ declare class AppBuilder extends RenderableComponent {
|
|
|
128
128
|
isTransitioning(): boolean;
|
|
129
129
|
/**
|
|
130
130
|
* Add a screensaver page with the specified configuration
|
|
131
|
-
* The screensaver page can contain multiple views for rich interactive experiences
|
|
132
|
-
*
|
|
131
|
+
* The screensaver page can contain multiple views for rich interactive experiences.
|
|
132
|
+
* Pass `null` for screensaverPage when using `screensaverViewBehavior: "returnHome"` mode,
|
|
133
|
+
* which navigates back to a home page/view on timeout instead of showing a screensaver.
|
|
134
|
+
* @param screensaverPage The page to use as the screensaver (can contain multiple views), or null for returnHome mode
|
|
133
135
|
* @param config Configuration object for the screensaver (excluding 'page' property)
|
|
134
136
|
*/
|
|
135
|
-
addScreensaver(screensaverPage: Page, config: Omit<ScreensaverConfig, 'page'>): void;
|
|
137
|
+
addScreensaver(screensaverPage: Page | null, config: Omit<ScreensaverConfig, 'page'>): void;
|
|
136
138
|
attachToDom(): void;
|
|
137
139
|
}
|
|
138
140
|
declare class Page extends RenderableComponent {
|
|
@@ -143,11 +145,13 @@ declare class Page extends RenderableComponent {
|
|
|
143
145
|
addView(view: View): void;
|
|
144
146
|
removeView(viewId: string): void;
|
|
145
147
|
/**
|
|
146
|
-
* Add a screensaver page with the specified configuration
|
|
147
|
-
*
|
|
148
|
+
* Add a screensaver page with the specified configuration.
|
|
149
|
+
* Pass `null` for screensaverPage when using `screensaverViewBehavior: "returnHome"` mode,
|
|
150
|
+
* which navigates back to a home page/view on timeout instead of showing a screensaver.
|
|
151
|
+
* @param screensaverPage The page to use as the screensaver (can contain multiple views), or null for returnHome mode
|
|
148
152
|
* @param config Configuration object for the screensaver (excluding 'page' property)
|
|
149
153
|
*/
|
|
150
|
-
addScreensaver(screensaverPage: Page, config: Omit<ScreensaverConfig, 'page'>): void;
|
|
154
|
+
addScreensaver(screensaverPage: Page | null, config: Omit<ScreensaverConfig, 'page'>): void;
|
|
151
155
|
/**
|
|
152
156
|
* Add a hidden settings page to this page with the specified configuration
|
|
153
157
|
* The settings page is activated by touching corners in sequence: top-left, top-right, bottom-right
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appBuilder.d.ts","sourceRoot":"","sources":["../../src/appBuilder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"appBuilder.d.ts","sourceRoot":"","sources":["../../src/appBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/src/appBuilder.js
CHANGED
|
@@ -499,20 +499,24 @@ class AppBuilder extends RenderableComponent {
|
|
|
499
499
|
}
|
|
500
500
|
/**
|
|
501
501
|
* Add a screensaver page with the specified configuration
|
|
502
|
-
* The screensaver page can contain multiple views for rich interactive experiences
|
|
503
|
-
*
|
|
502
|
+
* The screensaver page can contain multiple views for rich interactive experiences.
|
|
503
|
+
* Pass `null` for screensaverPage when using `screensaverViewBehavior: "returnHome"` mode,
|
|
504
|
+
* which navigates back to a home page/view on timeout instead of showing a screensaver.
|
|
505
|
+
* @param screensaverPage The page to use as the screensaver (can contain multiple views), or null for returnHome mode
|
|
504
506
|
* @param config Configuration object for the screensaver (excluding 'page' property)
|
|
505
507
|
*/
|
|
506
508
|
addScreensaver(screensaverPage, config) {
|
|
507
|
-
// Add the screensaver page to the app
|
|
508
|
-
|
|
509
|
+
// Add the screensaver page to the app (only if provided)
|
|
510
|
+
if (screensaverPage) {
|
|
511
|
+
this.addPage(screensaverPage);
|
|
512
|
+
}
|
|
509
513
|
// Register the screensaver with the screensaver manager via event bus
|
|
510
514
|
const screensaverBus = this.orchestrator.getEventBus("screensaver-manager");
|
|
511
515
|
if (screensaverBus) {
|
|
512
516
|
screensaverBus.emit("register-screensaver", {
|
|
513
517
|
config: {
|
|
514
518
|
...config,
|
|
515
|
-
page: screensaverPage,
|
|
519
|
+
page: screensaverPage || undefined,
|
|
516
520
|
},
|
|
517
521
|
});
|
|
518
522
|
}
|
|
@@ -644,8 +648,10 @@ class Page extends RenderableComponent {
|
|
|
644
648
|
}
|
|
645
649
|
}
|
|
646
650
|
/**
|
|
647
|
-
* Add a screensaver page with the specified configuration
|
|
648
|
-
*
|
|
651
|
+
* Add a screensaver page with the specified configuration.
|
|
652
|
+
* Pass `null` for screensaverPage when using `screensaverViewBehavior: "returnHome"` mode,
|
|
653
|
+
* which navigates back to a home page/view on timeout instead of showing a screensaver.
|
|
654
|
+
* @param screensaverPage The page to use as the screensaver (can contain multiple views), or null for returnHome mode
|
|
649
655
|
* @param config Configuration object for the screensaver (excluding 'page' property)
|
|
650
656
|
*/
|
|
651
657
|
addScreensaver(screensaverPage, config) {
|
|
@@ -655,7 +661,7 @@ class Page extends RenderableComponent {
|
|
|
655
661
|
screensaverBus.emit("register-screensaver", {
|
|
656
662
|
config: {
|
|
657
663
|
...config,
|
|
658
|
-
page: screensaverPage,
|
|
664
|
+
page: screensaverPage || undefined,
|
|
659
665
|
},
|
|
660
666
|
});
|
|
661
667
|
}
|
|
@@ -3,9 +3,9 @@ import { Page } from "./appBuilder";
|
|
|
3
3
|
import { NavigationManager, type TransitionConfig } from "./navigationManager";
|
|
4
4
|
export interface ScreensaverConfig {
|
|
5
5
|
timeoutSeconds: number;
|
|
6
|
-
page
|
|
6
|
+
page?: Page;
|
|
7
7
|
defaultViewId?: string;
|
|
8
|
-
screensaverViewBehavior?: "default" | "specific" | "return";
|
|
8
|
+
screensaverViewBehavior?: "default" | "specific" | "return" | "returnHome";
|
|
9
9
|
specificViewId?: string;
|
|
10
10
|
transitionConfig?: TransitionConfig;
|
|
11
11
|
exitBehavior?: "reset" | "return";
|
|
@@ -38,6 +38,7 @@ export declare class ScreensaverManager {
|
|
|
38
38
|
private initializeGlobalState;
|
|
39
39
|
private setupEventListeners;
|
|
40
40
|
registerScreensaver(config: ScreensaverConfig): void;
|
|
41
|
+
private isReturnHomeMode;
|
|
41
42
|
private validateConfig;
|
|
42
43
|
private setupGlobalActivityListeners;
|
|
43
44
|
private shouldIgnoreActivity;
|
|
@@ -45,6 +46,12 @@ export declare class ScreensaverManager {
|
|
|
45
46
|
private pauseActivityTimer;
|
|
46
47
|
private clearActivityTimer;
|
|
47
48
|
private activateScreensaver;
|
|
49
|
+
/**
|
|
50
|
+
* Return-to-home activation: navigates to the configured home page/view
|
|
51
|
+
* without entering "screensaver active" state. The timer resets immediately
|
|
52
|
+
* for the next inactivity cycle.
|
|
53
|
+
*/
|
|
54
|
+
private activateReturnHome;
|
|
48
55
|
private determineScreensaverView;
|
|
49
56
|
private handleScreensaverExit;
|
|
50
57
|
private deactivateScreensaver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screensaverManager.d.ts","sourceRoot":"","sources":["../../src/screensaverManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM/E,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"screensaverManager.d.ts","sourceRoot":"","sources":["../../src/screensaverManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM/E,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,eAAe,CAIf;IAGR,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAG1C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAStC;gBAEU,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB;IASjF,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,mBAAmB;IAyCpB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAyC3D,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,4BAA4B;IAmDpC,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,kBAAkB;YAOZ,mBAAmB;IA6DjC;;;;OAIG;YACW,kBAAkB;IAkDhC,OAAO,CAAC,wBAAwB;YAclB,qBAAqB;YAmDrB,qBAAqB;IAI5B,QAAQ,IAAI,OAAO;IAInB,gBAAgB,IAAI,iBAAiB,GAAG,IAAI;IAI5C,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC,wBAAwB,IAAI,MAAM,GAAG,IAAI;IAKzC,aAAa,IAAI,IAAI;IAKrB,eAAe,IAAI,IAAI;IAIvB,UAAU,IAAI,IAAI;IAMzB,OAAO,CAAC,OAAO;IAcR,OAAO,IAAI,IAAI;IAUtB,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,uBAAuB;CAOhC"}
|
|
@@ -67,7 +67,8 @@ export class ScreensaverManager {
|
|
|
67
67
|
if (navBus) {
|
|
68
68
|
navBus.on("page-changed", (e) => {
|
|
69
69
|
const { newPageId } = e.detail;
|
|
70
|
-
|
|
70
|
+
const screensaverPageId = this.config?.page?.componentId;
|
|
71
|
+
if (!this.isScreensaverActive && (!screensaverPageId || newPageId !== screensaverPageId)) {
|
|
71
72
|
this.lastActivePageId = newPageId;
|
|
72
73
|
stateManager.set("screensaver.lastActivePageId", newPageId);
|
|
73
74
|
}
|
|
@@ -103,33 +104,52 @@ export class ScreensaverManager {
|
|
|
103
104
|
type: "snap",
|
|
104
105
|
},
|
|
105
106
|
};
|
|
106
|
-
// Register the screensaver page with navigation manager
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
navBus
|
|
107
|
+
// Register the screensaver page with navigation manager (only in screensaver mode)
|
|
108
|
+
if (!this.isReturnHomeMode() && this.config.page) {
|
|
109
|
+
const navBus = this.orchestrator.getEventBus("navigation-manager");
|
|
110
|
+
if (navBus) {
|
|
111
|
+
navBus.emit("register-page", { page: this.config.page });
|
|
112
|
+
}
|
|
110
113
|
}
|
|
111
114
|
this.setupGlobalActivityListeners();
|
|
112
115
|
this.resetActivityTimer();
|
|
113
|
-
|
|
116
|
+
if (this.isReturnHomeMode()) {
|
|
117
|
+
log.trace(`Screensaver registered in returnHome mode with ${config.timeoutSeconds}s timeout, target: ${this.config.startingPageId}/${this.config.defaultViewId || "default"}`);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
log.trace(`Screensaver registered with ${config.timeoutSeconds}s timeout and '${this.config.exitBehavior}' exit behavior`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
isReturnHomeMode() {
|
|
124
|
+
return this.config?.screensaverViewBehavior === "returnHome";
|
|
114
125
|
}
|
|
115
126
|
validateConfig(config) {
|
|
116
|
-
if (!config.page) {
|
|
117
|
-
throw new Error("Screensaver page is required");
|
|
118
|
-
}
|
|
119
127
|
if (config.timeoutSeconds <= 0) {
|
|
120
128
|
throw new Error("timeoutSeconds must be greater than 0");
|
|
121
129
|
}
|
|
122
|
-
if (config.
|
|
123
|
-
throw new Error('
|
|
130
|
+
if (config.screensaverViewBehavior && !["default", "specific", "return", "returnHome"].includes(config.screensaverViewBehavior)) {
|
|
131
|
+
throw new Error('screensaverViewBehavior must be "default", "specific", "return", or "returnHome"');
|
|
124
132
|
}
|
|
125
|
-
if (config.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
133
|
+
if (config.screensaverViewBehavior === "returnHome") {
|
|
134
|
+
// In returnHome mode, startingPageId is required as the home page target
|
|
135
|
+
if (!config.startingPageId) {
|
|
136
|
+
throw new Error('startingPageId is required when screensaverViewBehavior is "returnHome"');
|
|
137
|
+
}
|
|
130
138
|
}
|
|
131
|
-
|
|
132
|
-
|
|
139
|
+
else {
|
|
140
|
+
// In screensaver modes, page is required
|
|
141
|
+
if (!config.page) {
|
|
142
|
+
throw new Error('Screensaver page is required when screensaverViewBehavior is not "returnHome"');
|
|
143
|
+
}
|
|
144
|
+
if (config.exitBehavior === "reset" && !config.startingPageId) {
|
|
145
|
+
throw new Error('startingPageId is required when exitBehavior is "reset"');
|
|
146
|
+
}
|
|
147
|
+
if (config.exitBehavior && !["reset", "return"].includes(config.exitBehavior)) {
|
|
148
|
+
throw new Error('exitBehavior must be either "reset" or "return"');
|
|
149
|
+
}
|
|
150
|
+
if (config.screensaverViewBehavior === "specific" && !config.specificViewId) {
|
|
151
|
+
throw new Error('specificViewId is required when screensaverViewBehavior is "specific"');
|
|
152
|
+
}
|
|
133
153
|
}
|
|
134
154
|
}
|
|
135
155
|
setupGlobalActivityListeners() {
|
|
@@ -219,17 +239,26 @@ export class ScreensaverManager {
|
|
|
219
239
|
}
|
|
220
240
|
}
|
|
221
241
|
async activateScreensaver() {
|
|
222
|
-
if (!this.config
|
|
242
|
+
if (!this.config)
|
|
223
243
|
return;
|
|
224
244
|
if (this.config.blockerCallback && this.config.blockerCallback()) {
|
|
225
245
|
this.resetActivityTimer();
|
|
226
246
|
return;
|
|
227
247
|
}
|
|
248
|
+
// Handle returnHome mode — navigate to home page/view without entering screensaver state
|
|
249
|
+
if (this.isReturnHomeMode()) {
|
|
250
|
+
await this.activateReturnHome();
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
// Standard screensaver mode
|
|
254
|
+
if (this.isScreensaverActive)
|
|
255
|
+
return;
|
|
228
256
|
log.trace("Activating screensaver");
|
|
229
257
|
// Store the current page and view before switching to screensaver
|
|
230
258
|
const currentPageId = this.navigationManager.getCurrentPageId();
|
|
231
259
|
const currentViewId = this.navigationManager.getCurrentViewId();
|
|
232
|
-
|
|
260
|
+
const screensaverPageId = this.config.page.componentId;
|
|
261
|
+
if (currentPageId && currentPageId !== screensaverPageId) {
|
|
233
262
|
this.lastActivePageId = currentPageId;
|
|
234
263
|
this.lastActiveViewId = currentViewId;
|
|
235
264
|
stateManager.set("screensaver.lastActivePageId", currentPageId);
|
|
@@ -239,14 +268,14 @@ export class ScreensaverManager {
|
|
|
239
268
|
stateManager.set("screensaver.isActive", true);
|
|
240
269
|
try {
|
|
241
270
|
// Navigate to screensaver page
|
|
242
|
-
await this.navigationManager.navigateToPage(
|
|
271
|
+
await this.navigationManager.navigateToPage(screensaverPageId, this.config.transitionConfig);
|
|
243
272
|
// Determine which view to show based on screensaverViewBehavior
|
|
244
273
|
const targetViewId = this.determineScreensaverView();
|
|
245
274
|
if (targetViewId) {
|
|
246
275
|
await this.navigationManager.navigateToView(targetViewId, { type: "snap" });
|
|
247
276
|
}
|
|
248
277
|
this.eventBus.emit("screensaver-activated", {
|
|
249
|
-
pageId:
|
|
278
|
+
pageId: screensaverPageId,
|
|
250
279
|
viewId: targetViewId,
|
|
251
280
|
previousPageId: this.lastActivePageId,
|
|
252
281
|
previousViewId: this.lastActiveViewId,
|
|
@@ -263,6 +292,53 @@ export class ScreensaverManager {
|
|
|
263
292
|
this.startRebootCheckInterval();
|
|
264
293
|
this.checkAndPerformReboot();
|
|
265
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Return-to-home activation: navigates to the configured home page/view
|
|
297
|
+
* without entering "screensaver active" state. The timer resets immediately
|
|
298
|
+
* for the next inactivity cycle.
|
|
299
|
+
*/
|
|
300
|
+
async activateReturnHome() {
|
|
301
|
+
if (!this.config)
|
|
302
|
+
return;
|
|
303
|
+
const targetPageId = this.config.startingPageId;
|
|
304
|
+
const targetViewId = this.config.defaultViewId || null;
|
|
305
|
+
const currentPageId = this.navigationManager.getCurrentPageId();
|
|
306
|
+
const currentViewId = this.navigationManager.getCurrentViewId();
|
|
307
|
+
// Skip navigation if already on the target page/view
|
|
308
|
+
const alreadyOnTargetPage = currentPageId === targetPageId;
|
|
309
|
+
const alreadyOnTargetView = !targetViewId || currentViewId === targetViewId;
|
|
310
|
+
if (alreadyOnTargetPage && alreadyOnTargetView) {
|
|
311
|
+
log.trace("ReturnHome: Already on home page/view, resetting timer");
|
|
312
|
+
this.resetActivityTimer();
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
log.trace(`ReturnHome: Navigating to ${targetPageId}/${targetViewId || "default"}`);
|
|
316
|
+
try {
|
|
317
|
+
// Navigate to home page
|
|
318
|
+
if (!alreadyOnTargetPage) {
|
|
319
|
+
await this.navigationManager.navigateToPage(targetPageId, this.config.transitionConfig);
|
|
320
|
+
}
|
|
321
|
+
// Navigate to home view if specified
|
|
322
|
+
if (targetViewId && !alreadyOnTargetView) {
|
|
323
|
+
await this.navigationManager.navigateToView(targetViewId, { type: "snap" });
|
|
324
|
+
}
|
|
325
|
+
this.eventBus.emit("screensaver-returned-home", {
|
|
326
|
+
targetPageId,
|
|
327
|
+
targetViewId,
|
|
328
|
+
previousPageId: currentPageId,
|
|
329
|
+
previousViewId: currentViewId,
|
|
330
|
+
});
|
|
331
|
+
if (this.config.activateCallback)
|
|
332
|
+
this.config.activateCallback();
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
log.error("Failed to return to home:", error);
|
|
336
|
+
}
|
|
337
|
+
// Reset timer for next inactivity cycle
|
|
338
|
+
this.resetActivityTimer();
|
|
339
|
+
// Check reboot timeout if configured
|
|
340
|
+
this.checkAndPerformReboot();
|
|
341
|
+
}
|
|
266
342
|
determineScreensaverView() {
|
|
267
343
|
if (!this.config)
|
|
268
344
|
return null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hawsen-the-first/interactiv",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "A TypeScript framework for building interactive applications with event management, state management, navigation, and screensaver functionality",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|