@nommos/core 0.0.44 → 0.0.46
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 +83 -0
- package/package.json +1 -1
- package/src/lib/consent-manager.d.ts +1 -0
- package/src/lib/consent-manager.js +4 -2
- package/src/lib/consent-manager.js.map +1 -1
- package/src/lib/constants.d.ts +8 -7
- package/src/lib/constants.js +6 -5
- package/src/lib/constants.js.map +1 -1
- package/src/lib/event-tracker.d.ts +1 -0
- package/src/lib/event-tracker.js +9 -2
- package/src/lib/event-tracker.js.map +1 -1
- package/src/lib/popup-inbox.d.ts +35 -1
- package/src/lib/popup-inbox.js +94 -26
- package/src/lib/popup-inbox.js.map +1 -1
- package/src/lib/popup-viewer.d.ts +107 -54
- package/src/lib/popup-viewer.js +479 -287
- package/src/lib/popup-viewer.js.map +1 -1
- package/src/lib/relative-time.d.ts +40 -0
- package/src/lib/relative-time.js +59 -0
- package/src/lib/relative-time.js.map +1 -0
- package/src/lib/types.d.ts +12 -0
- package/src/lib/webSocket-client.d.ts +1 -0
- package/src/lib/webSocket-client.js +9 -6
- package/src/lib/webSocket-client.js.map +1 -1
package/src/lib/popup-inbox.js
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { POPUP_AUTO_OPEN_KEY, POPUP_INTERRUPTIVE_PRIORITIES, POPUP_PUSH_OPEN_COOLDOWN_MS, resolveEndpoints, POPUP_INBOX_CACHE_KEY,
|
|
1
|
+
import { POPUP_AUTO_OPEN_KEY, POPUP_INTERRUPTIVE_PRIORITIES, POPUP_PUSH_OPEN_COOLDOWN_MS, resolveEndpoints, POPUP_INBOX_CACHE_KEY, POPUP_MAX_ITEMS, POPUP_TOPIC_PREFIX, } from './constants';
|
|
2
2
|
import { ANALYTICS_ACTION_STATE } from './enums';
|
|
3
3
|
import { PopupViewer } from './popup-viewer';
|
|
4
4
|
const EVENT_STATE = {
|
|
5
5
|
// Not engagement at all — a push landed while the viewer was closed.
|
|
6
6
|
arrival_nudge: ANALYTICS_ACTION_STATE.INIT,
|
|
7
|
+
// Nor is this. The tray lists popups; it does not open one, and it has no per-popup span to
|
|
8
|
+
// close. Marking it SELECT would open three spans at once that nothing could ever end.
|
|
9
|
+
tray_open: ANALYTICS_ACTION_STATE.INIT,
|
|
7
10
|
// Span opens, and everything that happens while it is open.
|
|
8
11
|
auto_open: ANALYTICS_ACTION_STATE.SELECT,
|
|
9
12
|
manual_open: ANALYTICS_ACTION_STATE.SELECT,
|
|
10
13
|
viewed: ANALYTICS_ACTION_STATE.SELECT,
|
|
11
|
-
carousel_next: ANALYTICS_ACTION_STATE.SELECT,
|
|
12
|
-
carousel_prev: ANALYTICS_ACTION_STATE.SELECT,
|
|
13
14
|
link_click: ANALYTICS_ACTION_STATE.SELECT,
|
|
14
15
|
// The conversion. SUBMIT leaves the span open, which is correct — a CTA opens in a new tab.
|
|
15
16
|
cta_click: ANALYTICS_ACTION_STATE.SUBMIT,
|
|
17
|
+
// Deliberate, and shaped like a conversion rather than a span: it neither opens nor closes one.
|
|
18
|
+
mark_all_seen: ANALYTICS_ACTION_STATE.SUBMIT,
|
|
16
19
|
// Span closes. `dismissed` is terminal, `abandoned` means they left with it still open.
|
|
17
20
|
closed: ANALYTICS_ACTION_STATE.UNSELECT,
|
|
18
21
|
dismissed: ANALYTICS_ACTION_STATE.UNSELECT,
|
|
@@ -50,10 +53,11 @@ export class PopupInbox {
|
|
|
50
53
|
onOpened: (item, trigger) => this.handleOpened(item, trigger),
|
|
51
54
|
onClosed: (item) => this.emit('closed', this.meta(item)),
|
|
52
55
|
onAbandoned: (item) => this.emit('abandoned', this.meta(item)),
|
|
53
|
-
onDismissed: (item) => void this.dismiss(item),
|
|
56
|
+
onDismissed: (item, source) => void this.dismiss(item, source),
|
|
54
57
|
onCtaClick: (item, buttonIndex, url) => this.handleCtaClick(item, buttonIndex, url),
|
|
55
58
|
onLinkClick: (item, url) => this.emit('link_click', { ...this.meta(item), url }),
|
|
56
|
-
|
|
59
|
+
onTrayOpened: (items, unreadCount) => this.handleTrayOpened(items, unreadCount),
|
|
60
|
+
onMarkAllSeen: () => void this.markAllSeen(),
|
|
57
61
|
onRenderFailed: (item, reason) => this.emit('render_failed', { ...this.meta(item), reason }),
|
|
58
62
|
});
|
|
59
63
|
}
|
|
@@ -91,7 +95,6 @@ export class PopupInbox {
|
|
|
91
95
|
try {
|
|
92
96
|
sessionStorage.removeItem(POPUP_INBOX_CACHE_KEY);
|
|
93
97
|
sessionStorage.removeItem(POPUP_AUTO_OPEN_KEY);
|
|
94
|
-
sessionStorage.removeItem(POPUP_LAUNCHER_HIDDEN_KEY);
|
|
95
98
|
}
|
|
96
99
|
catch {
|
|
97
100
|
/* storage unavailable — nothing cached to clear */
|
|
@@ -222,41 +225,106 @@ export class PopupInbox {
|
|
|
222
225
|
return;
|
|
223
226
|
this.emit('viewed', this.meta(item));
|
|
224
227
|
// Optimistic: the badge should drop the moment it is opened, not a round trip later.
|
|
225
|
-
const previous = item.status;
|
|
226
|
-
item.status = 'VIEWED';
|
|
227
228
|
this.persistCache();
|
|
228
229
|
this.viewer.setItems(this.items);
|
|
229
|
-
|
|
230
|
-
// A 404 means the popup is gone for this visitor, so restoring "unread" would strand a phantom
|
|
231
|
-
// nothing can ever clear. Anything else is transient, so put the status back and let the next
|
|
232
|
-
// open retry it.
|
|
233
|
-
void this.post(`${item.id}/view`).then((status) => {
|
|
234
|
-
if (status === 404) {
|
|
235
|
-
this.dropItem(item.id);
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
if (status >= 200 && status < 300)
|
|
239
|
-
return;
|
|
240
|
-
if (item.status !== 'VIEWED')
|
|
241
|
-
return;
|
|
242
|
-
item.status = previous;
|
|
230
|
+
void this.markViewedOptimistic(item).then(() => {
|
|
243
231
|
this.persistCache();
|
|
244
232
|
this.viewer.setItems(this.items);
|
|
245
233
|
});
|
|
246
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Flips one popup to VIEWED locally, tells the server, and puts it back if the server disagrees.
|
|
237
|
+
*
|
|
238
|
+
* <p>Shared by {@link handleOpened} and {@link markAllSeen} so the failure handling exists once.
|
|
239
|
+
* The two ways it can fail need opposite answers: a 404 means the popup is gone for this visitor,
|
|
240
|
+
* so restoring "unread" would strand a phantom nothing can ever clear; anything else is transient,
|
|
241
|
+
* so the status goes back and the next open retries it.
|
|
242
|
+
*
|
|
243
|
+
* <p>Emits nothing. Each caller owns its own events — {@link markAllSeen} in particular must not
|
|
244
|
+
* emit a `viewed` per item, which would open a SELECT span per popup that nothing ever closes.
|
|
245
|
+
*
|
|
246
|
+
* <p>The status flips <em>before</em> the first await, so a caller that repaints synchronously
|
|
247
|
+
* after calling this already sees the new state.
|
|
248
|
+
*/
|
|
249
|
+
async markViewedOptimistic(item) {
|
|
250
|
+
if (item.status === 'VIEWED')
|
|
251
|
+
return;
|
|
252
|
+
const previous = item.status;
|
|
253
|
+
item.status = 'VIEWED';
|
|
254
|
+
const status = await this.post(`${item.id}/view`);
|
|
255
|
+
if (status === 404) {
|
|
256
|
+
this.dropItem(item.id);
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
if (status >= 200 && status < 300)
|
|
260
|
+
return;
|
|
261
|
+
// Revert against the live item: the list may have been replaced by a refresh while in flight.
|
|
262
|
+
const live = this.items.find((candidate) => candidate.id === item.id);
|
|
263
|
+
if (!live || live.status !== 'VIEWED')
|
|
264
|
+
return;
|
|
265
|
+
live.status = previous;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* The tray was opened. Reported, but deliberately inert.
|
|
269
|
+
*
|
|
270
|
+
* <p>No `/view` call and no `viewed` event: seeing a title in a list is not reading the message.
|
|
271
|
+
* If this marked items viewed, every campaign would report a 100% open rate the moment its
|
|
272
|
+
* popup was delivered, and the metric would be worthless.
|
|
273
|
+
*/
|
|
274
|
+
handleTrayOpened(items, unreadCount) {
|
|
275
|
+
this.emit('tray_open', {
|
|
276
|
+
notification_type: 'WEB_POPUP',
|
|
277
|
+
item_count: items.length,
|
|
278
|
+
unread_count: unreadCount,
|
|
279
|
+
impressed_ids: items.map((item) => item.id),
|
|
280
|
+
trigger: 'launcher',
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Marks every unread popup seen, in response to an explicit click.
|
|
285
|
+
*
|
|
286
|
+
* <p>Fanned out over the existing per-item endpoint rather than a bulk one: `POPUP_MAX_ITEMS`
|
|
287
|
+
* caps the inbox at three, so this is at most three requests.
|
|
288
|
+
*/
|
|
289
|
+
async markAllSeen() {
|
|
290
|
+
const unread = this.items.filter((item) => item.status !== 'VIEWED');
|
|
291
|
+
if (unread.length === 0)
|
|
292
|
+
return;
|
|
293
|
+
this.emit('mark_all_seen', {
|
|
294
|
+
notification_type: 'WEB_POPUP',
|
|
295
|
+
marked_count: unread.length,
|
|
296
|
+
popup_ids: unread.map((item) => item.id),
|
|
297
|
+
});
|
|
298
|
+
const settled = Promise.all(unread.map((item) => this.markViewedOptimistic(item)));
|
|
299
|
+
// Painted before the POSTs settle — dropping the badge instantly is the whole point of the
|
|
300
|
+
// action. `markViewedOptimistic` flips each status before its first await, so this sees them.
|
|
301
|
+
this.persistCache();
|
|
302
|
+
this.viewer.setItems(this.items);
|
|
303
|
+
await settled;
|
|
304
|
+
// Again afterwards, so a server refusal that reverted a status is reflected rather than lost.
|
|
305
|
+
this.persistCache();
|
|
306
|
+
this.viewer.setItems(this.items);
|
|
307
|
+
}
|
|
247
308
|
handleCtaClick(item, buttonIndex, url) {
|
|
248
309
|
this.emit('cta_click', { ...this.meta(item), button_index: buttonIndex, url });
|
|
249
310
|
void this.post(`${item.id}/cta-click`, { buttonIndex });
|
|
250
311
|
}
|
|
251
|
-
|
|
252
|
-
|
|
312
|
+
/**
|
|
313
|
+
* @param source which surface it was dismissed from. One act, one event — the surface is a data
|
|
314
|
+
* field, so tray and modal dismissals stay in the same bucket and can still be told apart.
|
|
315
|
+
*/
|
|
316
|
+
async dismiss(item, source) {
|
|
317
|
+
this.emit('dismissed', { ...this.meta(item), dismiss_source: source });
|
|
253
318
|
await this.post(`${item.id}/dismiss`);
|
|
254
319
|
this.items = this.items.filter((candidate) => candidate.id !== item.id);
|
|
255
320
|
this.contentCache.delete(item.id);
|
|
256
321
|
this.persistCache();
|
|
322
|
+
// Deliberately no teardown here, even when this empties the inbox. `setItems` already owns that
|
|
323
|
+
// decision and makes a better one — it tears down only when there is no anchor, and keeps an
|
|
324
|
+
// anchored launcher mounted, because vacating a slot the tenant reserved in their own header
|
|
325
|
+
// collapses their layout around the gap. Tearing down here overrode that, and with a tray open
|
|
326
|
+
// it would also destroy the panel the visitor is standing in mid-click.
|
|
257
327
|
this.viewer.setItems(this.items);
|
|
258
|
-
if (this.items.length === 0)
|
|
259
|
-
this.viewer.teardown();
|
|
260
328
|
}
|
|
261
329
|
/**
|
|
262
330
|
* @returns whether the server accepted the transition.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popup-inbox.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/popup-inbox.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"popup-inbox.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/popup-inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,10 +11,20 @@ export interface PopupViewerCallbacks {
|
|
|
11
11
|
* engagement span from running forever when the tab simply goes away.
|
|
12
12
|
*/
|
|
13
13
|
onAbandoned: (item: WebPopupItem) => void;
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* @param source which surface the visitor dismissed from. Same act either way — the distinction
|
|
16
|
+
* is a data field on one event, not two events.
|
|
17
|
+
*/
|
|
18
|
+
onDismissed: (item: WebPopupItem, source: 'tray' | 'modal') => void;
|
|
15
19
|
onCtaClick: (item: WebPopupItem, buttonIndex: number, url: string) => void;
|
|
16
20
|
onLinkClick: (item: WebPopupItem, url: string) => void;
|
|
17
|
-
|
|
21
|
+
/**
|
|
22
|
+
* The tray was opened. Not an engagement signal for any single popup — seeing a row in a list is
|
|
23
|
+
* not opening it — so this must never be treated as a view.
|
|
24
|
+
*/
|
|
25
|
+
onTrayOpened: (items: WebPopupItem[], unreadCount: number) => void;
|
|
26
|
+
/** The visitor asked for everything to be marked seen. Deliberate and explicit, never implicit. */
|
|
27
|
+
onMarkAllSeen: () => void;
|
|
18
28
|
onRenderFailed: (item: WebPopupItem, reason: string) => void;
|
|
19
29
|
}
|
|
20
30
|
export declare class PopupViewer {
|
|
@@ -24,28 +34,37 @@ export declare class PopupViewer {
|
|
|
24
34
|
private state;
|
|
25
35
|
private launcherHost;
|
|
26
36
|
private launcherRoot;
|
|
27
|
-
/** The element the launcher is
|
|
37
|
+
/** The element the launcher is mounted into. `null` means no anchor, so no launcher at all. */
|
|
28
38
|
private anchor;
|
|
29
39
|
private domObserver;
|
|
30
40
|
private remountQueued;
|
|
31
41
|
/** Resolved once per viewer: the visitor's language does not change mid-page. */
|
|
42
|
+
private readonly lang;
|
|
32
43
|
private readonly copy;
|
|
33
44
|
private items;
|
|
34
|
-
/**
|
|
45
|
+
/** Which popup the modal is showing. Set by {@link open}; the tray is what moves between them. */
|
|
35
46
|
private index;
|
|
36
|
-
/**
|
|
37
|
-
* Where the visitor has navigated to, which runs ahead of {@link index} while a load is in
|
|
38
|
-
* flight. Without it, two quick taps on `›` both step from the same rendered index and the
|
|
39
|
-
* second is swallowed.
|
|
40
|
-
*/
|
|
41
|
-
private pendingIndex;
|
|
42
|
-
/** Guards against a slow content load landing after a later move and rewinding the carousel. */
|
|
43
|
-
private swapToken;
|
|
44
47
|
private lastFocused;
|
|
45
|
-
private touchStartX;
|
|
46
48
|
private audio;
|
|
49
|
+
/**
|
|
50
|
+
* Tray visibility, deliberately separate from {@link ViewerState}.
|
|
51
|
+
*
|
|
52
|
+
* <p>That enum models the modal's animated open/close and its awaited content load. The tray has
|
|
53
|
+
* neither, and folding it in would force every `state !== 'visible'` guard in this file to be
|
|
54
|
+
* re-reasoned for a surface those guards were never about.
|
|
55
|
+
*/
|
|
56
|
+
private trayOpen;
|
|
47
57
|
private readonly onKeyDown;
|
|
48
58
|
private readonly onViewportChange;
|
|
59
|
+
/**
|
|
60
|
+
* Registered on `document` only while the tray is open, in the capture phase.
|
|
61
|
+
*
|
|
62
|
+
* <p>`event.target` is useless here: a click inside a shadow root retargets to the host by the
|
|
63
|
+
* time it reaches `document`. `composedPath()` is the only reliable cross-boundary test.
|
|
64
|
+
*/
|
|
65
|
+
private readonly onDocumentPointerDown;
|
|
66
|
+
/** The tray is positioned from the bell's box, so it has to follow the bell. */
|
|
67
|
+
private readonly onTrayReflow;
|
|
49
68
|
private readonly onPageHide;
|
|
50
69
|
constructor(callbacks: PopupViewerCallbacks);
|
|
51
70
|
setItems(items: WebPopupItem[]): void;
|
|
@@ -66,10 +85,21 @@ export declare class PopupViewer {
|
|
|
66
85
|
*/
|
|
67
86
|
private ensureLauncherHost;
|
|
68
87
|
/**
|
|
69
|
-
* @returns the integrator's chosen mount point, or null
|
|
88
|
+
* @returns the integrator's chosen mount point, or null when they have not marked one.
|
|
70
89
|
*/
|
|
71
90
|
private resolveAnchor;
|
|
72
|
-
/**
|
|
91
|
+
/**
|
|
92
|
+
* Places the launcher host inside the integrator's anchor, or detaches it when there is none.
|
|
93
|
+
*
|
|
94
|
+
* <p>There is no floating fallback. Parking a bell in the corner of someone else's page is a
|
|
95
|
+
* decision only they can make: it lands on their layout, competes with their own widgets, and
|
|
96
|
+
* appears without them having asked for it. So the launcher exists exactly where a tenant marked
|
|
97
|
+
* a slot for it, and nowhere else.
|
|
98
|
+
*
|
|
99
|
+
* <p>Popups still arrive and still auto-open without an anchor — only the persistent bell and its
|
|
100
|
+
* tray are withheld. The cost is that a popup the visitor closes has no way back until the next
|
|
101
|
+
* page load, unless the host app calls {@code openViewer} itself.
|
|
102
|
+
*/
|
|
73
103
|
private mountLauncher;
|
|
74
104
|
/**
|
|
75
105
|
* Follows the anchor for the life of the page. A one-shot query at init would almost always miss
|
|
@@ -81,33 +111,73 @@ export declare class PopupViewer {
|
|
|
81
111
|
*/
|
|
82
112
|
private observeDom;
|
|
83
113
|
/**
|
|
84
|
-
*
|
|
85
|
-
* defaults, and that is deliberate.
|
|
114
|
+
* Draws the bell, but only where the tenant asked for one.
|
|
86
115
|
*
|
|
87
|
-
* <p
|
|
88
|
-
*
|
|
89
|
-
* it disappears. The cost is real: a read-but-undismissed popup then has no way back for the rest
|
|
90
|
-
* of the session, short of the host app calling {@link PopupInbox.openViewer}.
|
|
116
|
+
* <p>With no anchor there is no launcher at all — see {@link mountLauncher} for why there is no
|
|
117
|
+
* corner fallback.
|
|
91
118
|
*
|
|
92
|
-
* <p
|
|
93
|
-
* so vacating it leaves a hole their layout collapses around — a flex
|
|
94
|
-
* applies to a zero-width item — and
|
|
95
|
-
* than as
|
|
96
|
-
*
|
|
119
|
+
* <p>Where there is an anchor the bell is permanent, including once everything has been read. The
|
|
120
|
+
* tenant reserved that slot, so vacating it leaves a hole their layout collapses around — a flex
|
|
121
|
+
* or grid {@code gap} still applies to a zero-width item — and chrome that disappears reads as
|
|
122
|
+
* broken rather than as tidy. Persisting is also what keeps a way back to a popup closed by
|
|
123
|
+
* accident.
|
|
97
124
|
*/
|
|
98
125
|
private renderLauncher;
|
|
99
126
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
127
|
+
* The list of what is waiting, and the only way to move between popups.
|
|
128
|
+
*
|
|
129
|
+
* <p>It lives in the launcher's shadow root rather than the modal's because it has to track the
|
|
130
|
+
* bell, and {@link observeDom} re-parents that host into and out of the tenant's header on SPA
|
|
131
|
+
* route changes. In the modal's root it would need a permanent coordinate sync to follow.
|
|
132
|
+
*
|
|
133
|
+
* <p>Opening it is emphatically <em>not</em> opening a popup: no row here calls
|
|
134
|
+
* {@code POST /view}, and nothing marks a popup `VIEWED`. Seeing a title in a list is not reading
|
|
135
|
+
* the message, and conflating the two would make every campaign report a 100% open rate.
|
|
136
|
+
*/
|
|
137
|
+
private toggleTray;
|
|
138
|
+
private openTray;
|
|
139
|
+
private closeTray;
|
|
140
|
+
/** Kept off {@link renderLauncher} so toggling the tray does not rebuild the bell. */
|
|
141
|
+
private syncLauncherExpanded;
|
|
142
|
+
private attachTrayListeners;
|
|
143
|
+
private detachTrayListeners;
|
|
144
|
+
private renderTray;
|
|
145
|
+
/**
|
|
146
|
+
* One row.
|
|
147
|
+
*
|
|
148
|
+
* <p>Everything interpolated here is tenant-authored — `previewText` is derived from their own
|
|
149
|
+
* popup body and routinely contains quotes and apostrophes, and `thumbnailUrl` is a free-text
|
|
150
|
+
* column — so the title, preview and time go through {@link escapeHtml} and the thumbnail through
|
|
151
|
+
* {@link sanitizeUrl}.
|
|
152
|
+
*
|
|
153
|
+
* <p>Each of the three optional parts is omitted rather than rendered blank when its data is
|
|
154
|
+
* missing. That covers both a new SDK talking to a backend without the fields and the tail of
|
|
155
|
+
* popups delivered before they existed.
|
|
103
156
|
*/
|
|
104
|
-
private
|
|
105
|
-
|
|
157
|
+
private rowMarkup;
|
|
158
|
+
/**
|
|
159
|
+
* Places the panel against the bell.
|
|
160
|
+
*
|
|
161
|
+
* <p>`position: fixed` with coordinates written here, rather than `absolute` inside the wrap:
|
|
162
|
+
* fixed descendants are not clipped by an ancestor's `overflow: hidden`, which is what a tenant's
|
|
163
|
+
* sticky header almost always has. It does not escape a `transform`ed ancestor — the same
|
|
164
|
+
* documented limit the modal already carries — so the anchor element must not sit inside one.
|
|
165
|
+
*
|
|
166
|
+
* <h3>Why a default decides and geometry only refines</h3>
|
|
167
|
+
* jsdom has no layout: every `getBoundingClientRect()` is zeroes. Geometry-first logic would read
|
|
168
|
+
* that as "there is room below" and be silently right in tests while being wrong for a bell in a
|
|
169
|
+
* footer or a bottom bar. Defaulting first means the untestable path is the *refinement*, never
|
|
170
|
+
* the rule.
|
|
171
|
+
*/
|
|
172
|
+
private positionTray;
|
|
106
173
|
/**
|
|
107
174
|
* A popup arrived while the visitor was already on the page. Without this the only signal is a
|
|
108
|
-
* small badge appearing
|
|
109
|
-
* chime. Callers suppress it for first load, cache restore and the auto-open path — see
|
|
175
|
+
* small badge appearing among header icons nobody is looking at, so shake the launcher and play a
|
|
176
|
+
* short chime. Callers suppress it for first load, cache restore and the auto-open path — see
|
|
110
177
|
* `PopupInbox.refresh`.
|
|
178
|
+
*
|
|
179
|
+
* <p>Silent with no anchor: there is no bell to shake. The chime still plays, since it is the one
|
|
180
|
+
* signal that does not need a button to land on.
|
|
111
181
|
*/
|
|
112
182
|
notifyArrival(): void;
|
|
113
183
|
/**
|
|
@@ -132,7 +202,6 @@ export declare class PopupViewer {
|
|
|
132
202
|
private applyVariantCss;
|
|
133
203
|
private shell;
|
|
134
204
|
private ctaMarkup;
|
|
135
|
-
private dotsMarkup;
|
|
136
205
|
private isMobileViewport;
|
|
137
206
|
/**
|
|
138
207
|
* One delegated listener covers the chrome and the authored body alike, which is what lets an
|
|
@@ -152,29 +221,13 @@ export declare class PopupViewer {
|
|
|
152
221
|
*/
|
|
153
222
|
private closeAfterFollowing;
|
|
154
223
|
/**
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
* <p>This used to re-render the whole modal through {@link renderCurrent}, which tore the shell
|
|
158
|
-
* down to a loading placeholder before awaiting the content. Content is cached after its first
|
|
159
|
-
* fetch, so the await almost always resolved on the next microtask — but "almost always" still
|
|
160
|
-
* paints one frame of collapsed spinner, which is what read as a flicker. Loading first and
|
|
161
|
-
* swapping second means the visitor never sees an intermediate state.
|
|
162
|
-
*/
|
|
163
|
-
private move;
|
|
164
|
-
/**
|
|
165
|
-
* Cross-slides the authored body, leaving the chrome untouched.
|
|
166
|
-
*
|
|
167
|
-
* <p>Only `.np-stage`'s children change, so the underbar, the chips and the dialog itself never
|
|
168
|
-
* re-render — the frame stays put while the content moves through it.
|
|
224
|
+
* The tray branch runs before the modal's `visible` guard, because the two surfaces are never open
|
|
225
|
+
* at once and Escape has to mean "close what is in front of me" for both.
|
|
169
226
|
*/
|
|
170
|
-
private swapBody;
|
|
171
|
-
/** Repoints the dots without rebuilding them, so the underbar never repaints mid-swipe. */
|
|
172
|
-
private syncDots;
|
|
173
|
-
private prefersReducedMotion;
|
|
174
227
|
private handleKeyDown;
|
|
228
|
+
/** Roving focus between rows — the muscle memory the removed carousel arrows used to serve. */
|
|
229
|
+
private moveTrayFocus;
|
|
175
230
|
/** Keeps keyboard focus inside the dialog while it is open. */
|
|
176
231
|
private trapFocus;
|
|
177
232
|
private focusDialog;
|
|
178
|
-
private handleTouchStart;
|
|
179
|
-
private handleTouchEnd;
|
|
180
233
|
}
|