@absolutejs/absolute 0.20.0-beta.6 → 0.20.0-beta.61
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 +205 -0
- package/dist/angular/browser.js +392 -405
- package/dist/angular/browser.js.map +3 -3
- package/dist/angular/components/core/streamingSlotRegistrar.js +7 -7
- package/dist/angular/components/core/streamingSlotRegistry.js +4 -4
- package/dist/angular/index.js +379 -321
- package/dist/angular/index.js.map +8 -7
- package/dist/angular/server.js +133 -61
- package/dist/angular/server.js.map +8 -7
- package/dist/build.js +2336 -1347
- package/dist/build.js.map +22 -17
- package/dist/cli/config/client.js +12 -12
- package/dist/cli/config/server.js +1140 -1091
- package/dist/cli/index.js +10107 -2126
- package/dist/client/chunks/angularPatch-arh4sr68.js +157 -0
- package/dist/client/chunks/angularPatch-arh4sr68.js.map +10 -0
- package/dist/client/chunks/index-5py90ctf.js +87 -0
- package/dist/client/chunks/index-5py90ctf.js.map +10 -0
- package/dist/client/chunks/index-m35nbkdp.js +374 -0
- package/dist/client/chunks/index-m35nbkdp.js.map +12 -0
- package/dist/client/chunks/index-qxjc7kc5.js +12 -0
- package/dist/client/chunks/index-qxjc7kc5.js.map +9 -0
- package/dist/client/chunks/islands-xj2n8nwf.js +281 -0
- package/dist/client/chunks/islands-xj2n8nwf.js.map +14 -0
- package/dist/client/chunks/react-pdg4325x.js +65 -0
- package/dist/client/chunks/react-pdg4325x.js.map +10 -0
- package/dist/client/chunks/svelte-s0c964kb.js +19 -0
- package/dist/client/chunks/svelte-s0c964kb.js.map +10 -0
- package/dist/client/chunks/vue-rdskrnyg.js +24 -0
- package/dist/client/chunks/vue-rdskrnyg.js.map +10 -0
- package/dist/client/index.js +73 -841
- package/dist/client/index.js.map +7 -20
- package/dist/core/streamingSlotRegistrar.js +15 -13
- package/dist/core/streamingSlotRegistrar.js.map +2 -2
- package/dist/core/streamingSlotRegistry.js +11 -9
- package/dist/core/streamingSlotRegistry.js.map +2 -2
- package/dist/dev/client/hmrClient.ts +35 -3
- package/dist/dev/client/hmrTiming.ts +6 -0
- package/dist/dev/client/syncDevtools.ts +237 -0
- package/dist/dev/serverBootstrap.js +28 -0
- package/dist/image-client/imageClient.js +7 -7
- package/dist/index.js +3756 -2361
- package/dist/index.js.map +38 -30
- package/dist/islands/browser.js +11 -25
- package/dist/islands/browser.js.map +2 -2
- package/dist/islands/index.js +55 -52
- package/dist/islands/index.js.map +5 -4
- package/dist/mobile/browser.js +429 -20
- package/dist/mobile/browser.js.map +8 -5
- package/dist/mobile/index.js +11287 -3348
- package/dist/mobile/index.js.map +47 -18
- package/dist/mobile/remoteMacAgentEntry.js +1374 -14
- package/dist/mobile/shellAuth.js +36 -0
- package/dist/mobile/shellBootstrap.js +1800 -0
- package/dist/mobile/shellExpoAuth.js +163 -0
- package/dist/mobile/shellExpoDevices.js +77 -0
- package/dist/mobile/shellExpoSync.js +104 -0
- package/dist/mobile/shellSync.js +184 -0
- package/dist/mobile/shellUpdate.js +532 -0
- package/dist/mobile/uiPrimitives.js +264 -0
- package/dist/react/browser.js +17 -59
- package/dist/react/browser.js.map +2 -2
- package/dist/react/components/browser/index.js +107 -107
- package/dist/react/components/index.js +118 -116
- package/dist/react/components/index.js.map +2 -2
- package/dist/react/hooks/index.js +11 -25
- package/dist/react/hooks/index.js.map +2 -2
- package/dist/react/index.js +110 -67
- package/dist/react/index.js.map +8 -7
- package/dist/react/jsxDevRuntimeCompat.js +11 -9
- package/dist/react/jsxDevRuntimeCompat.js.map +2 -2
- package/dist/react/jsxRuntimeCompat.js +11 -9
- package/dist/react/jsxRuntimeCompat.js.map +2 -2
- package/dist/react/router/browser.js +9 -7
- package/dist/react/router/browser.js.map +2 -2
- package/dist/react/router/index.js +9 -7
- package/dist/react/router/index.js.map +2 -2
- package/dist/react/server.js +67 -11
- package/dist/react/server.js.map +7 -6
- package/dist/src/build/pwa.d.ts +16 -0
- package/dist/src/cli/config/server.d.ts +1 -1
- package/dist/src/cli/instanceStatus.d.ts +1 -0
- package/dist/src/cli/scripts/dev.d.ts +2 -0
- package/dist/src/client/browserTranslation.d.ts +19 -0
- package/dist/src/client/index.d.ts +1 -0
- package/dist/src/core/browserTranslation.d.ts +6 -0
- package/dist/src/core/devBuild.d.ts +1 -0
- package/dist/src/core/prepare.d.ts +376 -0
- package/dist/src/dev/clientManager.d.ts +1 -0
- package/dist/src/dev/devCert.d.ts +6 -4
- package/dist/src/dev/serverEntryCopies.d.ts +3 -0
- package/dist/src/ember/browser.d.ts +0 -16
- package/dist/src/mobile/adaptiveShell.d.ts +27 -0
- package/dist/src/mobile/androidEmulatorController.d.ts +8 -1
- package/dist/src/mobile/androidRelease.d.ts +9 -2
- package/dist/src/mobile/androidTestReport.d.ts +14 -0
- package/dist/src/mobile/androidUpgradeConformance.d.ts +47 -0
- package/dist/src/mobile/androidWebView.d.ts +1 -0
- package/dist/src/mobile/browser.d.ts +2 -0
- package/dist/src/mobile/capacitorBundle.d.ts +19 -0
- package/dist/src/mobile/ciWorkflow.d.ts +26 -0
- package/dist/src/mobile/config.d.ts +10 -1
- package/dist/src/mobile/devDeviceAdapter.d.ts +3 -0
- package/dist/src/mobile/deviceCapabilities.d.ts +49 -0
- package/dist/src/mobile/expoBridge.d.ts +91 -0
- package/dist/src/mobile/expoDevController.d.ts +56 -0
- package/dist/src/mobile/expoProject.d.ts +16 -0
- package/dist/src/mobile/index.d.ts +23 -0
- package/dist/src/mobile/iosDeviceAcceptance.d.ts +32 -0
- package/dist/src/mobile/iosPhysicalDeviceTransport.d.ts +16 -0
- package/dist/src/mobile/iosRelease.d.ts +63 -3
- package/dist/src/mobile/iosSimulatorController.d.ts +20 -2
- package/dist/src/mobile/iosTestReport.d.ts +24 -0
- package/dist/src/mobile/mobileBundleInspection.d.ts +63 -0
- package/dist/src/mobile/mobileInspect.d.ts +142 -0
- package/dist/src/mobile/mobilePreview.d.ts +174 -0
- package/dist/src/mobile/mobilePreviewClient.d.ts +1 -0
- package/dist/src/mobile/nativeAuth.d.ts +6 -0
- package/dist/src/mobile/nativeBackgroundSync.d.ts +4 -0
- package/dist/src/mobile/nativeDeviceCapabilities.d.ts +6 -0
- package/dist/src/mobile/nativeRoute.d.ts +13 -0
- package/dist/src/mobile/nativeTestReport.d.ts +91 -0
- package/dist/src/mobile/nativeUpdates.d.ts +4 -0
- package/dist/src/mobile/navigationLifecycle.d.ts +36 -0
- package/dist/src/mobile/navigationState.d.ts +53 -0
- package/dist/src/mobile/pageProtocol.d.ts +2 -0
- package/dist/src/mobile/releaseDoctor.d.ts +23 -1
- package/dist/src/mobile/remoteMacProtocol.d.ts +134 -1
- package/dist/src/mobile/remoteMacWire.d.ts +1 -1
- package/dist/src/mobile/shellAuth.d.ts +8 -1
- package/dist/src/mobile/shellBootstrap.d.ts +15 -2
- package/dist/src/mobile/shellExpoAuth.d.ts +12 -0
- package/dist/src/mobile/shellExpoDevices.d.ts +3 -0
- package/dist/src/mobile/shellExpoSync.d.ts +18 -0
- package/dist/src/mobile/shellHttp.d.ts +2 -0
- package/dist/src/mobile/shellPush.d.ts +11 -0
- package/dist/src/mobile/shellSync.d.ts +46 -1
- package/dist/src/mobile/shellUpdate.d.ts +2 -0
- package/dist/src/mobile/syncRemediation.d.ts +10 -0
- package/dist/src/mobile/syncSchema.d.ts +9 -0
- package/dist/src/mobile/transport.d.ts +15 -0
- package/dist/src/mobile/uiPrimitives.d.ts +37 -0
- package/dist/src/mobile/updateClient.d.ts +44 -0
- package/dist/src/mobile/updateProtocol.d.ts +51 -0
- package/dist/src/mobile/updatePublisher.d.ts +66 -0
- package/dist/src/mobile/updateRollout.d.ts +16 -0
- package/dist/src/mobile/updateRuntime.d.ts +27 -0
- package/dist/src/mobile/updateSigning.d.ts +20 -0
- package/dist/src/plugins/hmr.d.ts +3 -0
- package/dist/src/plugins/imageOptimizer.d.ts +1 -1
- package/dist/src/react/hooks/useMediaQuery.d.ts +1 -1
- package/dist/src/utils/imageProcessing.d.ts +3 -0
- package/dist/src/utils/loadConfig.d.ts +1 -0
- package/dist/src/utils/logger.d.ts +1 -0
- package/dist/src/utils/startupBanner.d.ts +1 -0
- package/dist/src/utils/userAgentFunctions.d.ts +1 -1
- package/dist/src/vue/browser.d.ts +1 -0
- package/dist/src/vue/browserTranslation.d.ts +5 -0
- package/dist/src/vue/index.d.ts +1 -0
- package/dist/svelte/browser.js +12 -26
- package/dist/svelte/browser.js.map +2 -2
- package/dist/svelte/index.js +104 -61
- package/dist/svelte/index.js.map +8 -7
- package/dist/svelte/server.js +84 -28
- package/dist/svelte/server.js.map +7 -6
- package/dist/types/build.d.ts +64 -3
- package/dist/types/cli.d.ts +1 -0
- package/dist/types/messages.d.ts +1 -1
- package/dist/vue/browser.js +116 -56
- package/dist/vue/browser.js.map +5 -3
- package/dist/vue/components/Image.js +9 -7
- package/dist/vue/components/Image.js.map +2 -2
- package/dist/vue/components/index.js +11 -9
- package/dist/vue/components/index.js.map +2 -2
- package/dist/vue/index.js +211 -94
- package/dist/vue/index.js.map +10 -7
- package/dist/vue/server.js +69 -13
- package/dist/vue/server.js.map +7 -6
- package/package.json +40 -14
package/dist/mobile/browser.js
CHANGED
|
@@ -19,12 +19,14 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
19
19
|
}
|
|
20
20
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
21
21
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
if (mod && typeof mod === "object" || typeof mod === "function") {
|
|
23
|
+
for (let key of __getOwnPropNames(mod))
|
|
24
|
+
if (!__hasOwnProp.call(to, key))
|
|
25
|
+
__defProp(to, key, {
|
|
26
|
+
get: __accessProp.bind(mod, key),
|
|
27
|
+
enumerable: true
|
|
28
|
+
});
|
|
29
|
+
}
|
|
28
30
|
if (canCache)
|
|
29
31
|
cache.set(mod, to);
|
|
30
32
|
return to;
|
|
@@ -87,6 +89,7 @@ var getCurrentAbsoluteMobileProducerContext = () => {
|
|
|
87
89
|
// src/mobile/pageProtocol.ts
|
|
88
90
|
var ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE = "application/vnd.absolute.page+json";
|
|
89
91
|
var ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION = 1;
|
|
92
|
+
var ABSOLUTE_NATIVE_ROUTE_DATA_MEDIA_TYPE = "application/vnd.absolute.native-route+json";
|
|
90
93
|
var BAD_REQUEST_STATUS = 400;
|
|
91
94
|
var OK_STATUS = 200;
|
|
92
95
|
var SERVER_ERROR_STATUS = 500;
|
|
@@ -105,6 +108,11 @@ var acceptsAbsoluteMobilePage = (request) => {
|
|
|
105
108
|
return false;
|
|
106
109
|
return (request.headers.get("accept") ?? "").split(",").some((value) => parseMediaType(value) === ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE);
|
|
107
110
|
};
|
|
111
|
+
var acceptsAbsoluteNativeRouteData = (request) => {
|
|
112
|
+
if (!request)
|
|
113
|
+
return false;
|
|
114
|
+
return (request.headers.get("accept") ?? "").split(",").some((value) => parseMediaType(value) === ABSOLUTE_NATIVE_ROUTE_DATA_MEDIA_TYPE);
|
|
115
|
+
};
|
|
108
116
|
var readRequiredHeader = (request, name) => {
|
|
109
117
|
const value = request.headers.get(name)?.trim();
|
|
110
118
|
return value ? value : undefined;
|
|
@@ -235,6 +243,32 @@ var finalizeArchivedMobilePage = (context, input) => {
|
|
|
235
243
|
return createAbsoluteMobilePageErrorResponse(page.pageId);
|
|
236
244
|
}
|
|
237
245
|
};
|
|
246
|
+
var finalizeAbsoluteNativeRouteDevelopmentPage = (input) => {
|
|
247
|
+
if (false) {}
|
|
248
|
+
if (input.request?.method !== "GET") {
|
|
249
|
+
return createAbsoluteMobileInvalidRequestResponse("Native-route data requests must use GET.");
|
|
250
|
+
}
|
|
251
|
+
if (input.request.headers.get(MOBILE_PAGE_REQUEST_HEADERS.protocol) !== String(ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION)) {
|
|
252
|
+
return createAbsoluteMobileInvalidRequestResponse(`Native-route data requires protocol ${ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION}.`);
|
|
253
|
+
}
|
|
254
|
+
const [representation] = input.compatibility.representations;
|
|
255
|
+
if (!representation) {
|
|
256
|
+
return createAbsoluteMobilePageErrorResponse(input.compatibility.pageId);
|
|
257
|
+
}
|
|
258
|
+
try {
|
|
259
|
+
return envelopeResponse({
|
|
260
|
+
contract: representation.contract,
|
|
261
|
+
framework: input.compatibility.framework,
|
|
262
|
+
kind: "page",
|
|
263
|
+
pageId: input.compatibility.pageId,
|
|
264
|
+
props: normalizeJsonValue(representation.mapProps(input.props)),
|
|
265
|
+
status: input.status ?? OK_STATUS
|
|
266
|
+
}, input.status ?? OK_STATUS);
|
|
267
|
+
} catch (error) {
|
|
268
|
+
console.error(`[Mobile] Failed to produce development native route ${input.compatibility.pageId}:`, error);
|
|
269
|
+
return createAbsoluteMobilePageErrorResponse(input.compatibility.pageId);
|
|
270
|
+
}
|
|
271
|
+
};
|
|
238
272
|
var createAbsoluteMobileInvalidRequestResponse = (message) => envelopeResponse({ kind: "invalid-request", message }, BAD_REQUEST_STATUS);
|
|
239
273
|
var createAbsoluteMobilePageErrorResponse = (pageId) => envelopeResponse({
|
|
240
274
|
code: "representation-failed",
|
|
@@ -244,6 +278,9 @@ var createAbsoluteMobilePageErrorResponse = (pageId) => envelopeResponse({
|
|
|
244
278
|
}, SERVER_ERROR_STATUS);
|
|
245
279
|
var createAbsoluteMobileUpgradeResponse = (result) => envelopeResponse(result, UPGRADE_REQUIRED_STATUS);
|
|
246
280
|
var finalizeAbsoluteMobilePage = (input) => {
|
|
281
|
+
if (acceptsAbsoluteNativeRouteData(input.request)) {
|
|
282
|
+
return finalizeAbsoluteNativeRouteDevelopmentPage(input);
|
|
283
|
+
}
|
|
247
284
|
const parsed = parseAbsoluteMobilePageRequest(input.request);
|
|
248
285
|
if (parsed.kind === "not-mobile")
|
|
249
286
|
return;
|
|
@@ -307,7 +344,6 @@ var finalizeAbsoluteMobilePage = (input) => {
|
|
|
307
344
|
|
|
308
345
|
// src/mobile/client.ts
|
|
309
346
|
class AbsoluteMobilePageProtocolError extends Error {
|
|
310
|
-
code;
|
|
311
347
|
constructor(code, message) {
|
|
312
348
|
super(message);
|
|
313
349
|
this.name = "AbsoluteMobilePageProtocolError";
|
|
@@ -421,21 +457,394 @@ var parseAbsoluteMobilePageEnvelope = (value) => {
|
|
|
421
457
|
}
|
|
422
458
|
throw new AbsoluteMobilePageProtocolError("invalid-envelope", `Unknown mobile page response kind ${String(kind)}.`);
|
|
423
459
|
};
|
|
460
|
+
// node_modules/@absolutejs/sync/dist/client/runtimeTransport.js
|
|
461
|
+
var RUNTIME_TRANSPORT = Symbol.for("@absolutejs/sync/client-runtime-transport");
|
|
462
|
+
var host = globalThis;
|
|
463
|
+
var isRegistry = (value) => typeof value === "object" && value !== null && Array.isArray(Reflect.get(value, "installations")) && Array.isArray(Reflect.get(value, "clients"));
|
|
464
|
+
var registry = (() => {
|
|
465
|
+
const existing = host[RUNTIME_TRANSPORT];
|
|
466
|
+
if (isRegistry(existing))
|
|
467
|
+
return existing;
|
|
468
|
+
if (typeof existing === "object" && existing !== null && Array.isArray(Reflect.get(existing, "installations"))) {
|
|
469
|
+
Reflect.set(existing, "clients", []);
|
|
470
|
+
return existing;
|
|
471
|
+
}
|
|
472
|
+
const created = { clients: [], installations: [] };
|
|
473
|
+
Object.defineProperty(host, RUNTIME_TRANSPORT, {
|
|
474
|
+
configurable: false,
|
|
475
|
+
enumerable: false,
|
|
476
|
+
value: created,
|
|
477
|
+
writable: false
|
|
478
|
+
});
|
|
479
|
+
return created;
|
|
480
|
+
})();
|
|
481
|
+
var maximum = (values) => {
|
|
482
|
+
const present = values.filter((value) => value !== undefined);
|
|
483
|
+
return present.length === 0 ? undefined : Math.max(...present);
|
|
484
|
+
};
|
|
485
|
+
var minimum = (values) => {
|
|
486
|
+
const present = values.filter((value) => value !== undefined);
|
|
487
|
+
return present.length === 0 ? undefined : Math.min(...present);
|
|
488
|
+
};
|
|
489
|
+
var inspectSyncRuntime = async () => {
|
|
490
|
+
const clients = [...registry.clients];
|
|
491
|
+
const statuses = clients.map((client) => client.status());
|
|
492
|
+
const deadLetters = (await Promise.all(clients.map((client) => client.listDeadLetters()))).flat().map((record) => ({
|
|
493
|
+
attempts: record.attempts,
|
|
494
|
+
...record.rejection?.code ? { code: record.rejection.code } : {},
|
|
495
|
+
createdAt: record.createdAt,
|
|
496
|
+
...record.deadLetteredAt === undefined ? {} : { deadLetteredAt: record.deadLetteredAt },
|
|
497
|
+
...record.rejection?.kind ? { kind: record.rejection.kind } : {},
|
|
498
|
+
...record.rejection?.message ? { message: record.rejection.message } : {},
|
|
499
|
+
name: record.name,
|
|
500
|
+
operationId: record.operationId
|
|
501
|
+
})).sort((left, right) => (left.deadLetteredAt ?? left.createdAt) - (right.deadLetteredAt ?? right.createdAt) || left.operationId.localeCompare(right.operationId));
|
|
502
|
+
const lastError = statuses.findLast((status) => status.lastError)?.lastError;
|
|
503
|
+
return {
|
|
504
|
+
automaticResolutions: statuses.reduce((total, status) => total + status.automaticResolutions, 0),
|
|
505
|
+
clients: clients.length,
|
|
506
|
+
conflicts: deadLetters.filter((record) => record.kind === "conflict").length,
|
|
507
|
+
deadLetters,
|
|
508
|
+
...lastError ? { lastError } : {},
|
|
509
|
+
...maximum(statuses.map((status) => status.lastSuccessfulPullAt)) === undefined ? {} : {
|
|
510
|
+
lastSuccessfulPullAt: maximum(statuses.map((status) => status.lastSuccessfulPullAt))
|
|
511
|
+
},
|
|
512
|
+
...maximum(statuses.map((status) => status.lastSuccessfulPushAt)) === undefined ? {} : {
|
|
513
|
+
lastSuccessfulPushAt: maximum(statuses.map((status) => status.lastSuccessfulPushAt))
|
|
514
|
+
},
|
|
515
|
+
...minimum(statuses.map((status) => status.oldestDeadLetterAt)) === undefined ? {} : {
|
|
516
|
+
oldestDeadLetterAt: minimum(statuses.map((status) => status.oldestDeadLetterAt))
|
|
517
|
+
},
|
|
518
|
+
...minimum(statuses.map((status) => status.oldestPendingAt)) === undefined ? {} : {
|
|
519
|
+
oldestPendingAt: minimum(statuses.map((status) => status.oldestPendingAt))
|
|
520
|
+
},
|
|
521
|
+
pending: statuses.reduce((total, status) => total + status.pending, 0)
|
|
522
|
+
};
|
|
523
|
+
};
|
|
524
|
+
var clientWithDeadLetter = async (operationId) => {
|
|
525
|
+
for (const client of registry.clients)
|
|
526
|
+
if ((await client.listDeadLetters()).some((record) => record.operationId === operationId))
|
|
527
|
+
return client;
|
|
528
|
+
throw new Error(`Unknown Sync dead letter "${operationId}"`);
|
|
529
|
+
};
|
|
530
|
+
var retrySyncRuntimeDeadLetter = async (operationId) => (await clientWithDeadLetter(operationId)).retryDeadLetter(operationId);
|
|
531
|
+
var discardSyncRuntimeDeadLetter = async (operationId) => (await clientWithDeadLetter(operationId)).discardDeadLetter(operationId);
|
|
532
|
+
var rebaseSyncRuntimeDeadLetter = async (operationId, args) => (await clientWithDeadLetter(operationId)).rebaseDeadLetter(operationId, args);
|
|
533
|
+
|
|
534
|
+
// src/mobile/syncRemediation.ts
|
|
535
|
+
var REMEDIATION_REGISTRY = Symbol.for("@absolutejs/mobile-sync-remediation");
|
|
536
|
+
var LAST_INSTALLATION_OFFSET = -1;
|
|
537
|
+
var isRegistry2 = (value) => typeof value === "object" && value !== null && Array.isArray(Reflect.get(value, "installations"));
|
|
538
|
+
var resolveRegistry = () => {
|
|
539
|
+
const existing = Reflect.get(globalThis, REMEDIATION_REGISTRY);
|
|
540
|
+
if (isRegistry2(existing))
|
|
541
|
+
return existing;
|
|
542
|
+
const created = { installations: [] };
|
|
543
|
+
Object.defineProperty(globalThis, REMEDIATION_REGISTRY, {
|
|
544
|
+
configurable: false,
|
|
545
|
+
enumerable: false,
|
|
546
|
+
value: created,
|
|
547
|
+
writable: false
|
|
548
|
+
});
|
|
549
|
+
return created;
|
|
550
|
+
};
|
|
551
|
+
var registry2 = resolveRegistry();
|
|
552
|
+
var getAbsoluteMobileSyncRemediation = () => registry2.installations.at(LAST_INSTALLATION_OFFSET)?.bridge;
|
|
553
|
+
var installAbsoluteMobileSyncRemediation = (bridge = {
|
|
554
|
+
discard: discardSyncRuntimeDeadLetter,
|
|
555
|
+
inspect: inspectSyncRuntime,
|
|
556
|
+
rebase: rebaseSyncRuntimeDeadLetter,
|
|
557
|
+
retry: retrySyncRuntimeDeadLetter
|
|
558
|
+
}) => {
|
|
559
|
+
const installation = { bridge };
|
|
560
|
+
registry2.installations.push(installation);
|
|
561
|
+
return () => {
|
|
562
|
+
const index = registry2.installations.indexOf(installation);
|
|
563
|
+
if (index >= 0)
|
|
564
|
+
registry2.installations.splice(index, 1);
|
|
565
|
+
};
|
|
566
|
+
};
|
|
567
|
+
// src/mobile/uiPrimitives.ts
|
|
568
|
+
var STYLE_ID = "absolute-mobile-ui-primitives";
|
|
569
|
+
var NAVIGATION_EVENT = "absolute:navigation-change";
|
|
570
|
+
var SHEET_EVENT = "absolute:sheet-change";
|
|
571
|
+
var BACK_EVENT = "absolute:back-request";
|
|
572
|
+
var ACTIVE_SHEET_SELECTOR = "dialog[data-absolute-sheet][open]";
|
|
573
|
+
var TAB_LINK_SELECTOR = "[data-absolute-tab-bar] a[href]";
|
|
574
|
+
var UI_STYLE = `
|
|
575
|
+
[data-absolute-app-shell] {
|
|
576
|
+
display: grid;
|
|
577
|
+
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
578
|
+
box-sizing: border-box;
|
|
579
|
+
min-height: var(--absolute-available-height, 100dvh);
|
|
580
|
+
padding-inline: var(--absolute-safe-area-inset-left, 0px) var(--absolute-safe-area-inset-right, 0px);
|
|
581
|
+
}
|
|
582
|
+
[data-absolute-app-header] {
|
|
583
|
+
padding-top: var(--absolute-safe-area-inset-top, 0px);
|
|
584
|
+
}
|
|
585
|
+
[data-absolute-app-main], [data-absolute-navigation-stack] {
|
|
586
|
+
min-width: 0;
|
|
587
|
+
min-height: 0;
|
|
588
|
+
}
|
|
589
|
+
[data-absolute-app-main] {
|
|
590
|
+
overflow: auto;
|
|
591
|
+
overscroll-behavior-y: contain;
|
|
592
|
+
}
|
|
593
|
+
[data-absolute-navigation-stack] {
|
|
594
|
+
view-transition-name: absolute-mobile-stack;
|
|
595
|
+
}
|
|
596
|
+
[data-absolute-tab-bar] {
|
|
597
|
+
display: flex;
|
|
598
|
+
align-items: stretch;
|
|
599
|
+
justify-content: space-around;
|
|
600
|
+
box-sizing: border-box;
|
|
601
|
+
padding-bottom: var(--absolute-safe-area-inset-bottom, 0px);
|
|
602
|
+
background: Canvas;
|
|
603
|
+
color: CanvasText;
|
|
604
|
+
}
|
|
605
|
+
[data-absolute-tab-bar] > a {
|
|
606
|
+
display: grid;
|
|
607
|
+
flex: 1 1 0;
|
|
608
|
+
min-width: 0;
|
|
609
|
+
min-height: 2.75rem;
|
|
610
|
+
place-items: center;
|
|
611
|
+
padding: 0.375rem 0.5rem;
|
|
612
|
+
color: inherit;
|
|
613
|
+
text-align: center;
|
|
614
|
+
text-decoration: none;
|
|
615
|
+
touch-action: manipulation;
|
|
616
|
+
}
|
|
617
|
+
[data-absolute-tab-bar] > a[aria-current="page"] {
|
|
618
|
+
font-weight: 700;
|
|
619
|
+
}
|
|
620
|
+
dialog[data-absolute-sheet] {
|
|
621
|
+
box-sizing: border-box;
|
|
622
|
+
width: min(100%, var(--absolute-sheet-max-width, 42rem));
|
|
623
|
+
max-height: min(90dvh, var(--absolute-available-height, 90dvh));
|
|
624
|
+
margin: auto auto 0;
|
|
625
|
+
padding: 1rem max(1rem, var(--absolute-safe-area-inset-right, 0px)) max(1rem, var(--absolute-safe-area-inset-bottom, 0px)) max(1rem, var(--absolute-safe-area-inset-left, 0px));
|
|
626
|
+
overflow: auto;
|
|
627
|
+
border: 1px solid color-mix(in srgb, CanvasText 18%, transparent);
|
|
628
|
+
border-radius: 1rem 1rem 0 0;
|
|
629
|
+
background: Canvas;
|
|
630
|
+
color: CanvasText;
|
|
631
|
+
box-shadow: 0 -0.5rem 2rem color-mix(in srgb, CanvasText 18%, transparent);
|
|
632
|
+
}
|
|
633
|
+
dialog[data-absolute-sheet]::backdrop {
|
|
634
|
+
background: color-mix(in srgb, CanvasText 38%, transparent);
|
|
635
|
+
}
|
|
636
|
+
@keyframes absolute-mobile-forward-old { to { opacity: 0; transform: translateX(-12%); } }
|
|
637
|
+
@keyframes absolute-mobile-forward-new { from { opacity: 0; transform: translateX(12%); } }
|
|
638
|
+
@keyframes absolute-mobile-back-old { to { opacity: 0; transform: translateX(12%); } }
|
|
639
|
+
@keyframes absolute-mobile-back-new { from { opacity: 0; transform: translateX(-12%); } }
|
|
640
|
+
html[data-absolute-navigation-direction="forward"]::view-transition-old(absolute-mobile-stack) { animation: 180ms ease both absolute-mobile-forward-old; }
|
|
641
|
+
html[data-absolute-navigation-direction="forward"]::view-transition-new(absolute-mobile-stack) { animation: 180ms ease both absolute-mobile-forward-new; }
|
|
642
|
+
html[data-absolute-navigation-direction="back"]::view-transition-old(absolute-mobile-stack) { animation: 180ms ease both absolute-mobile-back-old; }
|
|
643
|
+
html[data-absolute-navigation-direction="back"]::view-transition-new(absolute-mobile-stack) { animation: 180ms ease both absolute-mobile-back-new; }
|
|
644
|
+
html[data-absolute-reduced-motion="reduce"]::view-transition-old(absolute-mobile-stack),
|
|
645
|
+
html[data-absolute-reduced-motion="reduce"]::view-transition-new(absolute-mobile-stack) { animation: none; }
|
|
646
|
+
`;
|
|
647
|
+
var currentPath = () => `${location.pathname}${location.search}${location.hash}`;
|
|
648
|
+
var ensureStyle = () => {
|
|
649
|
+
let style = document.getElementById(STYLE_ID);
|
|
650
|
+
if (!(style instanceof HTMLStyleElement)) {
|
|
651
|
+
style = document.createElement("style");
|
|
652
|
+
style.id = STYLE_ID;
|
|
653
|
+
style.textContent = UI_STYLE;
|
|
654
|
+
document.head.append(style);
|
|
655
|
+
}
|
|
656
|
+
};
|
|
657
|
+
var sheetById = (id) => {
|
|
658
|
+
const target = document.getElementById(id);
|
|
659
|
+
return target instanceof HTMLDialogElement && target.dataset.absoluteSheet !== undefined ? target : undefined;
|
|
660
|
+
};
|
|
661
|
+
var dispatchSheet = (sheet, open) => dispatchEvent(new CustomEvent(SHEET_EVENT, {
|
|
662
|
+
detail: { id: sheet.id, open }
|
|
663
|
+
}));
|
|
664
|
+
var focusSheet = (sheet) => {
|
|
665
|
+
const target = sheet.querySelector('[autofocus], button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
|
|
666
|
+
(target ?? sheet).focus();
|
|
667
|
+
};
|
|
668
|
+
var sheetOpeners = new WeakMap;
|
|
669
|
+
var closeAbsoluteMobileSheet = (target) => {
|
|
670
|
+
const sheet = typeof target === "string" ? sheetById(target) : target;
|
|
671
|
+
if (!sheet || !sheet.open)
|
|
672
|
+
return false;
|
|
673
|
+
if (typeof sheet.close === "function")
|
|
674
|
+
sheet.close();
|
|
675
|
+
else
|
|
676
|
+
sheet.removeAttribute("open");
|
|
677
|
+
sheet.removeAttribute("aria-modal");
|
|
678
|
+
sheetOpeners.get(sheet)?.focus();
|
|
679
|
+
sheetOpeners.delete(sheet);
|
|
680
|
+
dispatchSheet(sheet, false);
|
|
681
|
+
return true;
|
|
682
|
+
};
|
|
683
|
+
var openAbsoluteMobileSheet = (target, opener) => {
|
|
684
|
+
const sheet = typeof target === "string" ? sheetById(target) : target;
|
|
685
|
+
if (!sheet || sheet.dataset.absoluteSheet === undefined)
|
|
686
|
+
return false;
|
|
687
|
+
const active = document.querySelector(ACTIVE_SHEET_SELECTOR);
|
|
688
|
+
if (active && active !== sheet)
|
|
689
|
+
closeAbsoluteMobileSheet(active);
|
|
690
|
+
if (opener)
|
|
691
|
+
sheetOpeners.set(sheet, opener);
|
|
692
|
+
if (!sheet.open) {
|
|
693
|
+
if (typeof sheet.showModal === "function")
|
|
694
|
+
sheet.showModal();
|
|
695
|
+
else
|
|
696
|
+
sheet.setAttribute("open", "");
|
|
697
|
+
}
|
|
698
|
+
sheet.setAttribute("aria-modal", "true");
|
|
699
|
+
focusSheet(sheet);
|
|
700
|
+
dispatchSheet(sheet, true);
|
|
701
|
+
return true;
|
|
702
|
+
};
|
|
703
|
+
var readAbsoluteMobileLinkIntent = (anchor) => {
|
|
704
|
+
const mode = anchor.dataset.absoluteLink;
|
|
705
|
+
if (mode === "back")
|
|
706
|
+
return { kind: "back" };
|
|
707
|
+
if (mode === "external")
|
|
708
|
+
return { kind: "external" };
|
|
709
|
+
return { kind: "navigate", replace: mode === "replace" };
|
|
710
|
+
};
|
|
711
|
+
var requestAbsoluteMobileBack = () => {
|
|
712
|
+
const event = new CustomEvent(BACK_EVENT, { cancelable: true });
|
|
713
|
+
return !dispatchEvent(event);
|
|
714
|
+
};
|
|
715
|
+
var normalizePathname = (value) => {
|
|
716
|
+
try {
|
|
717
|
+
return new URL(value, location.href).pathname.replace(/\/$/u, "") || "/";
|
|
718
|
+
} catch {
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
};
|
|
722
|
+
var syncTabLinks = (path) => {
|
|
723
|
+
const activePath = normalizePathname(path);
|
|
724
|
+
if (!activePath)
|
|
725
|
+
return;
|
|
726
|
+
document.querySelectorAll(TAB_LINK_SELECTOR).forEach((anchor) => {
|
|
727
|
+
const candidate = normalizePathname(anchor.href);
|
|
728
|
+
const prefix = anchor.dataset.absoluteTabMatch === "prefix";
|
|
729
|
+
const active = candidate !== undefined && (prefix ? activePath === candidate || candidate !== "/" && activePath.startsWith(`${candidate}/`) : activePath === candidate);
|
|
730
|
+
if (active)
|
|
731
|
+
anchor.setAttribute("aria-current", "page");
|
|
732
|
+
else
|
|
733
|
+
anchor.removeAttribute("aria-current");
|
|
734
|
+
});
|
|
735
|
+
};
|
|
736
|
+
var installAbsoluteMobileUiPrimitives = () => {
|
|
737
|
+
let disposed = false;
|
|
738
|
+
let scheduled = false;
|
|
739
|
+
let path = currentPath();
|
|
740
|
+
const refreshDocument = (nextPath = path) => {
|
|
741
|
+
if (disposed || !document.head || !document.body)
|
|
742
|
+
return;
|
|
743
|
+
path = nextPath;
|
|
744
|
+
ensureStyle();
|
|
745
|
+
syncTabLinks(path);
|
|
746
|
+
};
|
|
747
|
+
const scheduleRefresh = () => {
|
|
748
|
+
if (scheduled || disposed)
|
|
749
|
+
return;
|
|
750
|
+
scheduled = true;
|
|
751
|
+
queueMicrotask(() => {
|
|
752
|
+
scheduled = false;
|
|
753
|
+
refreshDocument();
|
|
754
|
+
});
|
|
755
|
+
};
|
|
756
|
+
const handleClick = (event) => {
|
|
757
|
+
if (!(event.target instanceof Element))
|
|
758
|
+
return;
|
|
759
|
+
const opener = event.target.closest("[data-absolute-sheet-open]");
|
|
760
|
+
if (opener?.dataset.absoluteSheetOpen) {
|
|
761
|
+
if (openAbsoluteMobileSheet(opener.dataset.absoluteSheetOpen, opener))
|
|
762
|
+
event.preventDefault();
|
|
763
|
+
return;
|
|
764
|
+
}
|
|
765
|
+
const closer = event.target.closest("[data-absolute-sheet-close]");
|
|
766
|
+
const sheet = closer?.closest("dialog[data-absolute-sheet]");
|
|
767
|
+
if (sheet && closeAbsoluteMobileSheet(sheet)) {
|
|
768
|
+
event.preventDefault();
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
if (event.target instanceof HTMLDialogElement && event.target.dataset.absoluteSheet !== undefined) {
|
|
772
|
+
const rect = event.target.getBoundingClientRect();
|
|
773
|
+
const outside = event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom;
|
|
774
|
+
if (outside && closeAbsoluteMobileSheet(event.target))
|
|
775
|
+
event.preventDefault();
|
|
776
|
+
}
|
|
777
|
+
};
|
|
778
|
+
const handleCancel = (event) => {
|
|
779
|
+
if (!(event.target instanceof HTMLDialogElement))
|
|
780
|
+
return;
|
|
781
|
+
if (event.target.dataset.absoluteSheet === undefined)
|
|
782
|
+
return;
|
|
783
|
+
event.preventDefault();
|
|
784
|
+
closeAbsoluteMobileSheet(event.target);
|
|
785
|
+
};
|
|
786
|
+
const handleBack = (event) => {
|
|
787
|
+
const active = document.querySelector(ACTIVE_SHEET_SELECTOR);
|
|
788
|
+
if (!active)
|
|
789
|
+
return;
|
|
790
|
+
event.preventDefault();
|
|
791
|
+
closeAbsoluteMobileSheet(active);
|
|
792
|
+
};
|
|
793
|
+
const observer = new MutationObserver(scheduleRefresh);
|
|
794
|
+
observer.observe(document.documentElement, {
|
|
795
|
+
childList: true,
|
|
796
|
+
subtree: true
|
|
797
|
+
});
|
|
798
|
+
addEventListener("click", handleClick);
|
|
799
|
+
addEventListener("cancel", handleCancel, true);
|
|
800
|
+
addEventListener(BACK_EVENT, handleBack);
|
|
801
|
+
refreshDocument();
|
|
802
|
+
return {
|
|
803
|
+
refreshDocument,
|
|
804
|
+
requestBack: requestAbsoluteMobileBack,
|
|
805
|
+
dispose: () => {
|
|
806
|
+
if (disposed)
|
|
807
|
+
return;
|
|
808
|
+
disposed = true;
|
|
809
|
+
observer.disconnect();
|
|
810
|
+
removeEventListener("click", handleClick);
|
|
811
|
+
removeEventListener("cancel", handleCancel, true);
|
|
812
|
+
removeEventListener(BACK_EVENT, handleBack);
|
|
813
|
+
},
|
|
814
|
+
navigate: (detail) => {
|
|
815
|
+
path = detail.to;
|
|
816
|
+
document.documentElement.dataset.absoluteNavigationDirection = detail.direction;
|
|
817
|
+
refreshDocument(path);
|
|
818
|
+
dispatchEvent(new CustomEvent(NAVIGATION_EVENT, {
|
|
819
|
+
detail
|
|
820
|
+
}));
|
|
821
|
+
}
|
|
822
|
+
};
|
|
823
|
+
};
|
|
424
824
|
export {
|
|
425
|
-
|
|
426
|
-
parseAbsoluteMobilePageEnvelope,
|
|
427
|
-
finalizeAbsoluteMobilePage,
|
|
428
|
-
disposeAbsoluteMobilePage,
|
|
429
|
-
createAbsoluteMobileUpgradeResponse,
|
|
430
|
-
createAbsoluteMobilePageErrorResponse,
|
|
431
|
-
createAbsoluteMobileInvalidRequestResponse,
|
|
432
|
-
activateAbsoluteMobilePage,
|
|
433
|
-
acceptsAbsoluteMobilePage,
|
|
434
|
-
MOBILE_PAGE_REQUEST_HEADERS,
|
|
435
|
-
AbsoluteMobilePageProtocolError,
|
|
825
|
+
ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE,
|
|
436
826
|
ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,
|
|
437
|
-
|
|
827
|
+
ABSOLUTE_NATIVE_ROUTE_DATA_MEDIA_TYPE,
|
|
828
|
+
AbsoluteMobilePageProtocolError,
|
|
829
|
+
MOBILE_PAGE_REQUEST_HEADERS,
|
|
830
|
+
acceptsAbsoluteMobilePage,
|
|
831
|
+
acceptsAbsoluteNativeRouteData,
|
|
832
|
+
activateAbsoluteMobilePage,
|
|
833
|
+
closeAbsoluteMobileSheet,
|
|
834
|
+
createAbsoluteMobileInvalidRequestResponse,
|
|
835
|
+
createAbsoluteMobilePageErrorResponse,
|
|
836
|
+
createAbsoluteMobileUpgradeResponse,
|
|
837
|
+
disposeAbsoluteMobilePage,
|
|
838
|
+
finalizeAbsoluteMobilePage,
|
|
839
|
+
getAbsoluteMobileSyncRemediation,
|
|
840
|
+
installAbsoluteMobileSyncRemediation,
|
|
841
|
+
installAbsoluteMobileUiPrimitives,
|
|
842
|
+
openAbsoluteMobileSheet,
|
|
843
|
+
parseAbsoluteMobilePageEnvelope,
|
|
844
|
+
parseAbsoluteMobilePageRequest,
|
|
845
|
+
readAbsoluteMobileLinkIntent,
|
|
846
|
+
requestAbsoluteMobileBack
|
|
438
847
|
};
|
|
439
848
|
|
|
440
|
-
//# debugId=
|
|
849
|
+
//# debugId=443B7836F42C181D64756E2164756E21
|
|
441
850
|
//# sourceMappingURL=browser.js.map
|