@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.
Files changed (179) hide show
  1. package/README.md +205 -0
  2. package/dist/angular/browser.js +392 -405
  3. package/dist/angular/browser.js.map +3 -3
  4. package/dist/angular/components/core/streamingSlotRegistrar.js +7 -7
  5. package/dist/angular/components/core/streamingSlotRegistry.js +4 -4
  6. package/dist/angular/index.js +379 -321
  7. package/dist/angular/index.js.map +8 -7
  8. package/dist/angular/server.js +133 -61
  9. package/dist/angular/server.js.map +8 -7
  10. package/dist/build.js +2336 -1347
  11. package/dist/build.js.map +22 -17
  12. package/dist/cli/config/client.js +12 -12
  13. package/dist/cli/config/server.js +1140 -1091
  14. package/dist/cli/index.js +10107 -2126
  15. package/dist/client/chunks/angularPatch-arh4sr68.js +157 -0
  16. package/dist/client/chunks/angularPatch-arh4sr68.js.map +10 -0
  17. package/dist/client/chunks/index-5py90ctf.js +87 -0
  18. package/dist/client/chunks/index-5py90ctf.js.map +10 -0
  19. package/dist/client/chunks/index-m35nbkdp.js +374 -0
  20. package/dist/client/chunks/index-m35nbkdp.js.map +12 -0
  21. package/dist/client/chunks/index-qxjc7kc5.js +12 -0
  22. package/dist/client/chunks/index-qxjc7kc5.js.map +9 -0
  23. package/dist/client/chunks/islands-xj2n8nwf.js +281 -0
  24. package/dist/client/chunks/islands-xj2n8nwf.js.map +14 -0
  25. package/dist/client/chunks/react-pdg4325x.js +65 -0
  26. package/dist/client/chunks/react-pdg4325x.js.map +10 -0
  27. package/dist/client/chunks/svelte-s0c964kb.js +19 -0
  28. package/dist/client/chunks/svelte-s0c964kb.js.map +10 -0
  29. package/dist/client/chunks/vue-rdskrnyg.js +24 -0
  30. package/dist/client/chunks/vue-rdskrnyg.js.map +10 -0
  31. package/dist/client/index.js +73 -841
  32. package/dist/client/index.js.map +7 -20
  33. package/dist/core/streamingSlotRegistrar.js +15 -13
  34. package/dist/core/streamingSlotRegistrar.js.map +2 -2
  35. package/dist/core/streamingSlotRegistry.js +11 -9
  36. package/dist/core/streamingSlotRegistry.js.map +2 -2
  37. package/dist/dev/client/hmrClient.ts +35 -3
  38. package/dist/dev/client/hmrTiming.ts +6 -0
  39. package/dist/dev/client/syncDevtools.ts +237 -0
  40. package/dist/dev/serverBootstrap.js +28 -0
  41. package/dist/image-client/imageClient.js +7 -7
  42. package/dist/index.js +3756 -2361
  43. package/dist/index.js.map +38 -30
  44. package/dist/islands/browser.js +11 -25
  45. package/dist/islands/browser.js.map +2 -2
  46. package/dist/islands/index.js +55 -52
  47. package/dist/islands/index.js.map +5 -4
  48. package/dist/mobile/browser.js +429 -20
  49. package/dist/mobile/browser.js.map +8 -5
  50. package/dist/mobile/index.js +11287 -3348
  51. package/dist/mobile/index.js.map +47 -18
  52. package/dist/mobile/remoteMacAgentEntry.js +1374 -14
  53. package/dist/mobile/shellAuth.js +36 -0
  54. package/dist/mobile/shellBootstrap.js +1800 -0
  55. package/dist/mobile/shellExpoAuth.js +163 -0
  56. package/dist/mobile/shellExpoDevices.js +77 -0
  57. package/dist/mobile/shellExpoSync.js +104 -0
  58. package/dist/mobile/shellSync.js +184 -0
  59. package/dist/mobile/shellUpdate.js +532 -0
  60. package/dist/mobile/uiPrimitives.js +264 -0
  61. package/dist/react/browser.js +17 -59
  62. package/dist/react/browser.js.map +2 -2
  63. package/dist/react/components/browser/index.js +107 -107
  64. package/dist/react/components/index.js +118 -116
  65. package/dist/react/components/index.js.map +2 -2
  66. package/dist/react/hooks/index.js +11 -25
  67. package/dist/react/hooks/index.js.map +2 -2
  68. package/dist/react/index.js +110 -67
  69. package/dist/react/index.js.map +8 -7
  70. package/dist/react/jsxDevRuntimeCompat.js +11 -9
  71. package/dist/react/jsxDevRuntimeCompat.js.map +2 -2
  72. package/dist/react/jsxRuntimeCompat.js +11 -9
  73. package/dist/react/jsxRuntimeCompat.js.map +2 -2
  74. package/dist/react/router/browser.js +9 -7
  75. package/dist/react/router/browser.js.map +2 -2
  76. package/dist/react/router/index.js +9 -7
  77. package/dist/react/router/index.js.map +2 -2
  78. package/dist/react/server.js +67 -11
  79. package/dist/react/server.js.map +7 -6
  80. package/dist/src/build/pwa.d.ts +16 -0
  81. package/dist/src/cli/config/server.d.ts +1 -1
  82. package/dist/src/cli/instanceStatus.d.ts +1 -0
  83. package/dist/src/cli/scripts/dev.d.ts +2 -0
  84. package/dist/src/client/browserTranslation.d.ts +19 -0
  85. package/dist/src/client/index.d.ts +1 -0
  86. package/dist/src/core/browserTranslation.d.ts +6 -0
  87. package/dist/src/core/devBuild.d.ts +1 -0
  88. package/dist/src/core/prepare.d.ts +376 -0
  89. package/dist/src/dev/clientManager.d.ts +1 -0
  90. package/dist/src/dev/devCert.d.ts +6 -4
  91. package/dist/src/dev/serverEntryCopies.d.ts +3 -0
  92. package/dist/src/ember/browser.d.ts +0 -16
  93. package/dist/src/mobile/adaptiveShell.d.ts +27 -0
  94. package/dist/src/mobile/androidEmulatorController.d.ts +8 -1
  95. package/dist/src/mobile/androidRelease.d.ts +9 -2
  96. package/dist/src/mobile/androidTestReport.d.ts +14 -0
  97. package/dist/src/mobile/androidUpgradeConformance.d.ts +47 -0
  98. package/dist/src/mobile/androidWebView.d.ts +1 -0
  99. package/dist/src/mobile/browser.d.ts +2 -0
  100. package/dist/src/mobile/capacitorBundle.d.ts +19 -0
  101. package/dist/src/mobile/ciWorkflow.d.ts +26 -0
  102. package/dist/src/mobile/config.d.ts +10 -1
  103. package/dist/src/mobile/devDeviceAdapter.d.ts +3 -0
  104. package/dist/src/mobile/deviceCapabilities.d.ts +49 -0
  105. package/dist/src/mobile/expoBridge.d.ts +91 -0
  106. package/dist/src/mobile/expoDevController.d.ts +56 -0
  107. package/dist/src/mobile/expoProject.d.ts +16 -0
  108. package/dist/src/mobile/index.d.ts +23 -0
  109. package/dist/src/mobile/iosDeviceAcceptance.d.ts +32 -0
  110. package/dist/src/mobile/iosPhysicalDeviceTransport.d.ts +16 -0
  111. package/dist/src/mobile/iosRelease.d.ts +63 -3
  112. package/dist/src/mobile/iosSimulatorController.d.ts +20 -2
  113. package/dist/src/mobile/iosTestReport.d.ts +24 -0
  114. package/dist/src/mobile/mobileBundleInspection.d.ts +63 -0
  115. package/dist/src/mobile/mobileInspect.d.ts +142 -0
  116. package/dist/src/mobile/mobilePreview.d.ts +174 -0
  117. package/dist/src/mobile/mobilePreviewClient.d.ts +1 -0
  118. package/dist/src/mobile/nativeAuth.d.ts +6 -0
  119. package/dist/src/mobile/nativeBackgroundSync.d.ts +4 -0
  120. package/dist/src/mobile/nativeDeviceCapabilities.d.ts +6 -0
  121. package/dist/src/mobile/nativeRoute.d.ts +13 -0
  122. package/dist/src/mobile/nativeTestReport.d.ts +91 -0
  123. package/dist/src/mobile/nativeUpdates.d.ts +4 -0
  124. package/dist/src/mobile/navigationLifecycle.d.ts +36 -0
  125. package/dist/src/mobile/navigationState.d.ts +53 -0
  126. package/dist/src/mobile/pageProtocol.d.ts +2 -0
  127. package/dist/src/mobile/releaseDoctor.d.ts +23 -1
  128. package/dist/src/mobile/remoteMacProtocol.d.ts +134 -1
  129. package/dist/src/mobile/remoteMacWire.d.ts +1 -1
  130. package/dist/src/mobile/shellAuth.d.ts +8 -1
  131. package/dist/src/mobile/shellBootstrap.d.ts +15 -2
  132. package/dist/src/mobile/shellExpoAuth.d.ts +12 -0
  133. package/dist/src/mobile/shellExpoDevices.d.ts +3 -0
  134. package/dist/src/mobile/shellExpoSync.d.ts +18 -0
  135. package/dist/src/mobile/shellHttp.d.ts +2 -0
  136. package/dist/src/mobile/shellPush.d.ts +11 -0
  137. package/dist/src/mobile/shellSync.d.ts +46 -1
  138. package/dist/src/mobile/shellUpdate.d.ts +2 -0
  139. package/dist/src/mobile/syncRemediation.d.ts +10 -0
  140. package/dist/src/mobile/syncSchema.d.ts +9 -0
  141. package/dist/src/mobile/transport.d.ts +15 -0
  142. package/dist/src/mobile/uiPrimitives.d.ts +37 -0
  143. package/dist/src/mobile/updateClient.d.ts +44 -0
  144. package/dist/src/mobile/updateProtocol.d.ts +51 -0
  145. package/dist/src/mobile/updatePublisher.d.ts +66 -0
  146. package/dist/src/mobile/updateRollout.d.ts +16 -0
  147. package/dist/src/mobile/updateRuntime.d.ts +27 -0
  148. package/dist/src/mobile/updateSigning.d.ts +20 -0
  149. package/dist/src/plugins/hmr.d.ts +3 -0
  150. package/dist/src/plugins/imageOptimizer.d.ts +1 -1
  151. package/dist/src/react/hooks/useMediaQuery.d.ts +1 -1
  152. package/dist/src/utils/imageProcessing.d.ts +3 -0
  153. package/dist/src/utils/loadConfig.d.ts +1 -0
  154. package/dist/src/utils/logger.d.ts +1 -0
  155. package/dist/src/utils/startupBanner.d.ts +1 -0
  156. package/dist/src/utils/userAgentFunctions.d.ts +1 -1
  157. package/dist/src/vue/browser.d.ts +1 -0
  158. package/dist/src/vue/browserTranslation.d.ts +5 -0
  159. package/dist/src/vue/index.d.ts +1 -0
  160. package/dist/svelte/browser.js +12 -26
  161. package/dist/svelte/browser.js.map +2 -2
  162. package/dist/svelte/index.js +104 -61
  163. package/dist/svelte/index.js.map +8 -7
  164. package/dist/svelte/server.js +84 -28
  165. package/dist/svelte/server.js.map +7 -6
  166. package/dist/types/build.d.ts +64 -3
  167. package/dist/types/cli.d.ts +1 -0
  168. package/dist/types/messages.d.ts +1 -1
  169. package/dist/vue/browser.js +116 -56
  170. package/dist/vue/browser.js.map +5 -3
  171. package/dist/vue/components/Image.js +9 -7
  172. package/dist/vue/components/Image.js.map +2 -2
  173. package/dist/vue/components/index.js +11 -9
  174. package/dist/vue/components/index.js.map +2 -2
  175. package/dist/vue/index.js +211 -94
  176. package/dist/vue/index.js.map +10 -7
  177. package/dist/vue/server.js +69 -13
  178. package/dist/vue/server.js.map +7 -6
  179. package/package.json +40 -14
@@ -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
- for (let key of __getOwnPropNames(mod))
23
- if (!__hasOwnProp.call(to, key))
24
- __defProp(to, key, {
25
- get: __accessProp.bind(mod, key),
26
- enumerable: true
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
- parseAbsoluteMobilePageRequest,
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
- ABSOLUTE_MOBILE_PAGE_MEDIA_TYPE
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=0E2FF4B3FE304DB264756E2164756E21
849
+ //# debugId=443B7836F42C181D64756E2164756E21
441
850
  //# sourceMappingURL=browser.js.map