@ours.network/messenger-server 1.0.30 → 1.0.31-nightly.10

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 (154) hide show
  1. package/README.md +132 -24
  2. package/dist/chunks/{chunk-3EUXH4PV.js → chunk-O34PQ4M6.js} +15 -1
  3. package/dist/chunks/{server-WOE26ICL.js → server-Q2BQSKMJ.js} +3035 -2206
  4. package/dist/cli.js +14 -3
  5. package/package.json +8 -35
  6. package/dist/web/assets/abnfDiagram-N423BO3Z-C-iag_Nj.js +0 -2
  7. package/dist/web/assets/abnfDiagram-N423BO3Z-C-iag_Nj.js.map +0 -1
  8. package/dist/web/assets/arc-Bcm2sZNj.js +0 -2
  9. package/dist/web/assets/arc-Bcm2sZNj.js.map +0 -1
  10. package/dist/web/assets/architectureDiagram-T3A2C74G-Cf8AnIVp.js +0 -37
  11. package/dist/web/assets/architectureDiagram-T3A2C74G-Cf8AnIVp.js.map +0 -1
  12. package/dist/web/assets/blockDiagram-VBNYF7ZC-Ch9RzKmh.js +0 -133
  13. package/dist/web/assets/blockDiagram-VBNYF7ZC-Ch9RzKmh.js.map +0 -1
  14. package/dist/web/assets/browser-mCqw9EMW.js +0 -9
  15. package/dist/web/assets/browser-mCqw9EMW.js.map +0 -1
  16. package/dist/web/assets/c4Diagram-5PPSVZJV-vFBfClLI.js +0 -11
  17. package/dist/web/assets/c4Diagram-5PPSVZJV-vFBfClLI.js.map +0 -1
  18. package/dist/web/assets/channel-B7e1tuOt.js +0 -2
  19. package/dist/web/assets/channel-B7e1tuOt.js.map +0 -1
  20. package/dist/web/assets/chunk-2GRJ4B5K-CovDVQb1.js +0 -2
  21. package/dist/web/assets/chunk-2GRJ4B5K-CovDVQb1.js.map +0 -1
  22. package/dist/web/assets/chunk-2Q5K7J3B-DMq4JEsX.js +0 -2
  23. package/dist/web/assets/chunk-2Q5K7J3B-DMq4JEsX.js.map +0 -1
  24. package/dist/web/assets/chunk-5RXB4S5H-CrraHros.js +0 -232
  25. package/dist/web/assets/chunk-5RXB4S5H-CrraHros.js.map +0 -1
  26. package/dist/web/assets/chunk-5VM5RSS4-Dtkchtl6.js +0 -16
  27. package/dist/web/assets/chunk-5VM5RSS4-Dtkchtl6.js.map +0 -1
  28. package/dist/web/assets/chunk-6Q2QTUOP-C7hewS6C.js +0 -89
  29. package/dist/web/assets/chunk-6Q2QTUOP-C7hewS6C.js.map +0 -1
  30. package/dist/web/assets/chunk-GF5L2VYU-lRYUPE4E.js +0 -207
  31. package/dist/web/assets/chunk-GF5L2VYU-lRYUPE4E.js.map +0 -1
  32. package/dist/web/assets/chunk-JWPE2WC7-DmDsLF1N.js +0 -2
  33. package/dist/web/assets/chunk-JWPE2WC7-DmDsLF1N.js.map +0 -1
  34. package/dist/web/assets/chunk-KBJHAD2P-C4tA-lat.js +0 -2
  35. package/dist/web/assets/chunk-KBJHAD2P-C4tA-lat.js.map +0 -1
  36. package/dist/web/assets/chunk-RYQCIY6F-CWf-qdbG.js +0 -2
  37. package/dist/web/assets/chunk-RYQCIY6F-CWf-qdbG.js.map +0 -1
  38. package/dist/web/assets/chunk-XXDRQBXY-C0-3Uouc.js +0 -2
  39. package/dist/web/assets/chunk-XXDRQBXY-C0-3Uouc.js.map +0 -1
  40. package/dist/web/assets/classDiagram-JCYQIIEL-D0TeT53t.js +0 -2
  41. package/dist/web/assets/classDiagram-JCYQIIEL-D0TeT53t.js.map +0 -1
  42. package/dist/web/assets/classDiagram-v2-OCEON4UE-D0TeT53t.js +0 -2
  43. package/dist/web/assets/classDiagram-v2-OCEON4UE-D0TeT53t.js.map +0 -1
  44. package/dist/web/assets/cose-bilkent-JH36ORCC-C8vPfGok.js +0 -2
  45. package/dist/web/assets/cose-bilkent-JH36ORCC-C8vPfGok.js.map +0 -1
  46. package/dist/web/assets/cynefin-VYW2F7L2-Qz363tl0.js +0 -179
  47. package/dist/web/assets/cynefin-VYW2F7L2-Qz363tl0.js.map +0 -1
  48. package/dist/web/assets/cynefinDiagram-MW4NZA55-CCZz9fIq.js +0 -63
  49. package/dist/web/assets/cynefinDiagram-MW4NZA55-CCZz9fIq.js.map +0 -1
  50. package/dist/web/assets/cytoscape.esm-BvX2Lq_V.js +0 -332
  51. package/dist/web/assets/cytoscape.esm-BvX2Lq_V.js.map +0 -1
  52. package/dist/web/assets/dagre-VZM6K2ZE-TEwK45KH.js +0 -5
  53. package/dist/web/assets/dagre-VZM6K2ZE-TEwK45KH.js.map +0 -1
  54. package/dist/web/assets/defaultLocale-DX6XiGOO.js +0 -2
  55. package/dist/web/assets/defaultLocale-DX6XiGOO.js.map +0 -1
  56. package/dist/web/assets/diagram-7IWD3JNH-CpCoKfEC.js +0 -31
  57. package/dist/web/assets/diagram-7IWD3JNH-CpCoKfEC.js.map +0 -1
  58. package/dist/web/assets/diagram-B4RE2ZJO-CJS8Rz4d.js +0 -4
  59. package/dist/web/assets/diagram-B4RE2ZJO-CJS8Rz4d.js.map +0 -1
  60. package/dist/web/assets/diagram-LBJQPF4R-Dp-7zIWd.js +0 -25
  61. package/dist/web/assets/diagram-LBJQPF4R-Dp-7zIWd.js.map +0 -1
  62. package/dist/web/assets/diagram-Q27KOJAE-BeOOSo_Y.js +0 -25
  63. package/dist/web/assets/diagram-Q27KOJAE-BeOOSo_Y.js.map +0 -1
  64. package/dist/web/assets/diagram-UB23O5K3-wtVvpUaS.js +0 -42
  65. package/dist/web/assets/diagram-UB23O5K3-wtVvpUaS.js.map +0 -1
  66. package/dist/web/assets/ebnfDiagram-BXEA7PRR-BUZU6kcO.js +0 -2
  67. package/dist/web/assets/ebnfDiagram-BXEA7PRR-BUZU6kcO.js.map +0 -1
  68. package/dist/web/assets/erDiagram-JOGREHBK-BeLhinfN.js +0 -86
  69. package/dist/web/assets/erDiagram-JOGREHBK-BeLhinfN.js.map +0 -1
  70. package/dist/web/assets/flowDiagram-UKHOOZJN-BWAl9KvX.js +0 -157
  71. package/dist/web/assets/flowDiagram-UKHOOZJN-BWAl9KvX.js.map +0 -1
  72. package/dist/web/assets/ganttDiagram-PKOTCBZU-BQM681Qz.js +0 -293
  73. package/dist/web/assets/ganttDiagram-PKOTCBZU-BQM681Qz.js.map +0 -1
  74. package/dist/web/assets/gitGraphDiagram-DS77QQ5N-B90O3LS2.js +0 -107
  75. package/dist/web/assets/gitGraphDiagram-DS77QQ5N-B90O3LS2.js.map +0 -1
  76. package/dist/web/assets/graph-gxHQN9-b.js +0 -2
  77. package/dist/web/assets/graph-gxHQN9-b.js.map +0 -1
  78. package/dist/web/assets/index-C65oKF4f.js +0 -332
  79. package/dist/web/assets/index-C65oKF4f.js.map +0 -1
  80. package/dist/web/assets/index-SAASLXJR.css +0 -1
  81. package/dist/web/assets/infoDiagram-6WML65LV-DL7wlrUp.js +0 -3
  82. package/dist/web/assets/infoDiagram-6WML65LV-DL7wlrUp.js.map +0 -1
  83. package/dist/web/assets/init-Gi6I4Gst.js +0 -2
  84. package/dist/web/assets/init-Gi6I4Gst.js.map +0 -1
  85. package/dist/web/assets/ishikawaDiagram-WSZJBQD7-CGJ65gLl.js +0 -71
  86. package/dist/web/assets/ishikawaDiagram-WSZJBQD7-CGJ65gLl.js.map +0 -1
  87. package/dist/web/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  88. package/dist/web/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  89. package/dist/web/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  90. package/dist/web/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  91. package/dist/web/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  92. package/dist/web/assets/journeyDiagram-NVQOT4AX-CWln_1Vi.js +0 -140
  93. package/dist/web/assets/journeyDiagram-NVQOT4AX-CWln_1Vi.js.map +0 -1
  94. package/dist/web/assets/jsQR-C-e-dPgH.js +0 -2
  95. package/dist/web/assets/jsQR-C-e-dPgH.js.map +0 -1
  96. package/dist/web/assets/kanban-definition-27J2QSJJ-Ch_LASS_.js +0 -90
  97. package/dist/web/assets/kanban-definition-27J2QSJJ-Ch_LASS_.js.map +0 -1
  98. package/dist/web/assets/katex-HP8lGamR.js +0 -258
  99. package/dist/web/assets/katex-HP8lGamR.js.map +0 -1
  100. package/dist/web/assets/layout-CpcJW2by.js +0 -2
  101. package/dist/web/assets/layout-CpcJW2by.js.map +0 -1
  102. package/dist/web/assets/linear-DLAFoEik.js +0 -2
  103. package/dist/web/assets/linear-DLAFoEik.js.map +0 -1
  104. package/dist/web/assets/map-CKPHyBGT.js +0 -2
  105. package/dist/web/assets/map-CKPHyBGT.js.map +0 -1
  106. package/dist/web/assets/mermaid.core-11YjnhKz.js +0 -315
  107. package/dist/web/assets/mermaid.core-11YjnhKz.js.map +0 -1
  108. package/dist/web/assets/mindmap-definition-FAOFIHXS-j-6HQbPv.js +0 -97
  109. package/dist/web/assets/mindmap-definition-FAOFIHXS-j-6HQbPv.js.map +0 -1
  110. package/dist/web/assets/ordinal-Cboi1Yqb.js +0 -2
  111. package/dist/web/assets/ordinal-Cboi1Yqb.js.map +0 -1
  112. package/dist/web/assets/pegDiagram-VL7TDLO6-1XHHRMUK.js +0 -2
  113. package/dist/web/assets/pegDiagram-VL7TDLO6-1XHHRMUK.js.map +0 -1
  114. package/dist/web/assets/pieDiagram-7S7Q4E2Y-Cu-3GzNo.js +0 -40
  115. package/dist/web/assets/pieDiagram-7S7Q4E2Y-Cu-3GzNo.js.map +0 -1
  116. package/dist/web/assets/quadrantDiagram-CIZ2JOQS-DkP9Oaqo.js +0 -8
  117. package/dist/web/assets/quadrantDiagram-CIZ2JOQS-DkP9Oaqo.js.map +0 -1
  118. package/dist/web/assets/railroadDiagram-AXF67PYL-BFaH77uW.js +0 -2
  119. package/dist/web/assets/railroadDiagram-AXF67PYL-BFaH77uW.js.map +0 -1
  120. package/dist/web/assets/requirementDiagram-LRYGKXZP-D4D1Up4W.js +0 -85
  121. package/dist/web/assets/requirementDiagram-LRYGKXZP-D4D1Up4W.js.map +0 -1
  122. package/dist/web/assets/sankeyDiagram-W5VNT64P-BrHCAjc9.js +0 -41
  123. package/dist/web/assets/sankeyDiagram-W5VNT64P-BrHCAjc9.js.map +0 -1
  124. package/dist/web/assets/sequenceDiagram-SI44F4Z6-CWxNfjdi.js +0 -163
  125. package/dist/web/assets/sequenceDiagram-SI44F4Z6-CWxNfjdi.js.map +0 -1
  126. package/dist/web/assets/sizeCapture-X5ZJPWSS-ePEYSWdD.js +0 -2
  127. package/dist/web/assets/sizeCapture-X5ZJPWSS-ePEYSWdD.js.map +0 -1
  128. package/dist/web/assets/stateDiagram-OKZ733FA-BLfZi2Ah.js +0 -2
  129. package/dist/web/assets/stateDiagram-OKZ733FA-BLfZi2Ah.js.map +0 -1
  130. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CtzDIhSY.js +0 -2
  131. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CtzDIhSY.js.map +0 -1
  132. package/dist/web/assets/swimlanes-SLNWSIFB-HnXWSaTr.js +0 -3
  133. package/dist/web/assets/swimlanes-SLNWSIFB-HnXWSaTr.js.map +0 -1
  134. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-DEnvqxAR.js +0 -9
  135. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-DEnvqxAR.js.map +0 -1
  136. package/dist/web/assets/timeline-definition-Z64GVDOM-D4kboPkf.js +0 -121
  137. package/dist/web/assets/timeline-definition-Z64GVDOM-D4kboPkf.js.map +0 -1
  138. package/dist/web/assets/vennDiagram-T6HMQDX7-CmUlC-yb.js +0 -35
  139. package/dist/web/assets/vennDiagram-T6HMQDX7-CmUlC-yb.js.map +0 -1
  140. package/dist/web/assets/wardleyDiagram-T6FBY63Y-DoLIyOSu.js +0 -79
  141. package/dist/web/assets/wardleyDiagram-T6FBY63Y-DoLIyOSu.js.map +0 -1
  142. package/dist/web/assets/xychartDiagram-ELKLHX3M-BII0rBQD.js +0 -8
  143. package/dist/web/assets/xychartDiagram-ELKLHX3M-BII0rBQD.js.map +0 -1
  144. package/dist/web/icons/apple-touch-icon.png +0 -0
  145. package/dist/web/icons/favicon-16.png +0 -0
  146. package/dist/web/icons/favicon-32.png +0 -0
  147. package/dist/web/icons/icon-192-maskable.png +0 -0
  148. package/dist/web/icons/icon-192.png +0 -0
  149. package/dist/web/icons/icon-512-maskable.png +0 -0
  150. package/dist/web/icons/icon-512.png +0 -0
  151. package/dist/web/index.html +0 -19
  152. package/dist/web/manifest.webmanifest +0 -17
  153. package/dist/web/sw.js +0 -181
  154. package/dist/web/version.json +0 -1
package/dist/cli.js CHANGED
@@ -1,11 +1,13 @@
1
1
  #!/usr/bin/env node
2
+ import { createRequire as __messengerCreateRequire } from "node:module"; const require = __messengerCreateRequire(import.meta.url);
2
3
  import {
3
4
  ConfigurationError,
4
5
  define_MESSENGER_BUILD_INFO_default,
5
6
  init_define_MESSENGER_BUILD_INFO,
7
+ normalizeBasePath,
6
8
  operatorError,
7
9
  reportFailure
8
- } from "./chunks/chunk-3EUXH4PV.js";
10
+ } from "./chunks/chunk-O34PQ4M6.js";
9
11
 
10
12
  // src/cli.ts
11
13
  init_define_MESSENGER_BUILD_INFO();
@@ -56,6 +58,7 @@ function loadConfig(env = process.env) {
56
58
  host: env.OURS_MESSENGER_HOST ?? "127.0.0.1",
57
59
  port: intOrUndefined(env.OURS_MESSENGER_PORT, "OURS_MESSENGER_PORT") ?? DEFAULT_HTTP_PORT,
58
60
  publicOrigin: validatePublicOrigin(env.OURS_MESSENGER_PUBLIC_ORIGIN),
61
+ ...env.OURS_MESSENGER_BASE_PATH ? { basePath: normalizeBasePath(env.OURS_MESSENGER_BASE_PATH) } : {},
59
62
  identity,
60
63
  force: boolOrUndefined(env.OURS_MESSENGER_FORCE, "OURS_MESSENGER_FORCE") ?? false,
61
64
  stateDir: resolveOwnStateDir(env),
@@ -95,7 +98,11 @@ HTTP:
95
98
  WebPush/application state only
96
99
 
97
100
  Shared daemon selection:
98
- Standard OURS_STATE_DIR / OURS_PORT / OURS_CONFIG / OURS_API_TOKEN variables
101
+ OURS_DAEMON_URL V1 daemon HTTP endpoint
102
+ OURS_DAEMON_ID expected daemon instance ID
103
+ OURS_DAEMON_CREDENTIAL_PATH protected current API-token file
104
+ Set all three together. Reconnect preserves the same logical owner.
105
+ With none set, temporary legacy selection uses standard OURS_STATE_DIR / OURS_PORT / OURS_CONFIG / OURS_API_TOKEN variables
99
106
  select the same daemon used by other SDK applications. Start it separately
100
107
  with the ours CLI before starting messenger.
101
108
 
@@ -109,6 +116,10 @@ Other:
109
116
  `;
110
117
  async function main() {
111
118
  const cmd = process.argv[2];
119
+ if (cmd === "capabilities" && process.argv.length === 3) {
120
+ console.log(JSON.stringify({ capabilities: ["messenger.gateway-prefix-v1"] }));
121
+ return;
122
+ }
112
123
  if (cmd === void 0 || cmd === "--help" || cmd === "-h") {
113
124
  await new Promise((resolve2) => process.stdout.write(USAGE, () => resolve2()));
114
125
  return;
@@ -120,7 +131,7 @@ async function main() {
120
131
  }
121
132
  if (process.argv.length !== 3) throw new ConfigurationError("serve does not accept command-line options");
122
133
  const cfg = loadConfig();
123
- const { start } = await import("./chunks/server-WOE26ICL.js");
134
+ const { start } = await import("./chunks/server-Q2BQSKMJ.js");
124
135
  const handle = await start(cfg, BUILD_INFO);
125
136
  let closing = false;
126
137
  const shutdown = (signal) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ours.network/messenger-server",
3
- "version": "1.0.30",
4
- "description": "Self-hosted messenger application for one identity on a shared ours daemon, with REST/SSE API, focused web client, and WebPush.",
3
+ "version": "1.0.31-nightly.10",
4
+ "description": "Self-hosted Messenger REST/SSE backend for one identity on a shared Ours daemon.",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",
7
7
  "author": "Adapt Toolkit",
@@ -28,58 +28,31 @@
28
28
  },
29
29
  "scripts": {
30
30
  "build": "npm run typecheck && node build.mjs",
31
- "dev": "vite --config vite.config.ts",
32
31
  "dev:server": "tsx src/cli.ts serve",
33
32
  "serve": "node dist/cli.js serve",
34
33
  "typecheck": "tsc -p tsconfig.json --noEmit",
35
- "test:swipe": "node --import tsx web/tests/swipe-reply-core.test.ts",
36
- "test:reply-navigation": "node tests/browser-reply-navigation.test.mjs",
37
- "test:timestamps": "TZ=Europe/Prague node --import tsx web/tests/timestamp.test.tsx",
38
- "test:mobile": "MOBILE_BROWSER_ENGINES=chromium node tests/browser-mobile-layout-webkit.test.mjs",
39
- "test:mobile-webkit": "MOBILE_BROWSER_ENGINES=webkit node tests/browser-mobile-layout-webkit.test.mjs && HTML_BROWSER_ENGINE=webkit node --import tsx tests/browser-html-preview.test.mjs && SLASH_BROWSER_ENGINE=webkit node tests/browser-slash-commands.test.mjs",
40
- "test:mobile-webkit-ci": "if [ \"${CI:-}\" = \"true\" ]; then npx playwright install --with-deps webkit && npm run test:mobile-webkit; else echo 'WebKit gate runs in CI (host dependencies unavailable locally)'; fi",
41
34
  "test:startup": "node --import tsx tests/startup-readiness.test.mjs",
42
35
  "test:runtime-catalog-candidate": "node --import tsx tests/runtime-command-catalog-reopen-e2e.test.mjs",
43
- "test:offline": "for f in tests/typed-commands-core.test.mjs tests/shared-daemon-contract.test.mjs tests/room-envelope-matrix.test.mjs tests/bundle-smoke.test.mjs tests/build-metadata.test.mjs tests/production-security.test.mjs tests/conversation-page.test.mjs tests/media-response.test.mjs tests/html-preview-transform.test.mjs tests/html-preview-response.test.mjs tests/push-store.test.mjs tests/push-store-hardening.test.mjs tests/push-browser-lifecycle.test.mjs tests/sw-push.test.mjs tests/push-delivery.test.mjs tests/push-queue-saturation.test.mjs tests/events.test.mjs tests/watch-cursor.test.mjs tests/watch-reconcile.test.mjs tests/introduction-send-guard.test.mjs tests/sse-e2e.test.mjs tests/presence.test.mjs tests/static-hosting.test.mjs tests/pwa-contract.test.mjs tests/update-check.test.mjs tests/web-contract.test.mjs web/tests/api.test.ts web/tests/events.test.ts web/tests/presence.test.ts web/tests/router-store.test.ts web/tests/components.test.tsx web/tests/command-schemas.test.tsx web/tests/command-pattern.test.ts web/tests/markdown.test.tsx web/tests/voice.test.ts web/tests/read-gate.test.ts web/tests/receipt-presentation.test.ts web/tests/voice-duration.test.ts web/tests/voice-waveform.test.ts tests/room-preview.test.mjs web/tests/receipt-apply.test.ts; do echo \"# $f\"; node --import tsx \"$f\" || exit 1; done",
36
+ "test:offline": "for f in tests/notification-producer.test.mjs tests/base-path.test.mjs tests/build-epoch.test.mjs tests/owner-session.test.mjs tests/v1-runtime.test.mjs tests/typed-commands-core.test.mjs tests/shared-daemon-contract.test.mjs tests/room-envelope-matrix.test.mjs tests/bundle-smoke.test.mjs tests/build-metadata.test.mjs tests/production-security.test.mjs tests/conversation-page.test.mjs tests/media-response.test.mjs tests/html-preview-transform.test.mjs tests/html-preview-response.test.mjs tests/push-store.test.mjs tests/push-store-hardening.test.mjs tests/push-delivery.test.mjs tests/push-queue-saturation.test.mjs tests/events.test.mjs tests/watch-cursor.test.mjs tests/watch-reconcile.test.mjs tests/introduction-send-guard.test.mjs tests/sse-e2e.test.mjs tests/presence.test.mjs tests/static-hosting.test.mjs tests/room-preview.test.mjs; do echo \"# $f\"; node --import tsx \"$f\" || exit 1; done",
44
37
  "test:loopback": "for f in tests/shared-daemon-e2e.test.mjs tests/typed-command-loopback-e2e.test.mjs tests/introduction-send.test.mjs tests/rest-e2e.test.mjs; do echo \"# $f\"; node --import tsx \"$f\" || exit 1; done",
45
- "test:browser": "HTML_BROWSER_ENGINE=chromium node --import tsx tests/browser-html-preview.test.mjs && node tests/browser-room-envelope-matrix.test.mjs && node tests/browser-pwa.test.mjs && node tests/browser-accessibility-controls.test.mjs && node tests/browser-pointer-touch.test.mjs && node tests/browser-accessibility-preferences.test.mjs && node tests/browser-typography-foundation.test.mjs && node tests/browser-unread-positioning.test.mjs && node tests/browser-motion-material.test.mjs && node tests/browser-composer-focus.test.mjs && node tests/browser-typed-commands.test.mjs && node tests/browser-slash-commands.test.mjs && node tests/browser-slash-design.test.mjs && node tests/browser-scroll-stability.test.mjs && node tests/browser-reply-navigation.test.mjs && node tests/browser-message-control-scroll.test.mjs && node tests/browser-mermaid-theme.test.mjs && node tests/browser-mermaid-lifecycle.test.mjs && node tests/browser-cold-open-sync.test.mjs && node --import tsx tests/browser-message-lists.test.mjs && node tests/browser-message-markdown.test.mjs && node tests/browser-voice-duration.test.mjs && node tests/browser-file-bubble-layout.test.mjs && node tests/browser-voice-waveform.test.mjs && node tests/browser-receipt-render.test.mjs && node tests/browser-receipt-converge-order.test.mjs && node tests/browser-media-panel-scroll.test.mjs",
46
- "test": "npm run build && npm run test:swipe && npm run test:timestamps && npm run test:mobile && npm run test:mobile-webkit-ci && npm run test:startup && npm run test:offline && npm run test:loopback && npm run test:browser"
38
+ "test": "npm run build && npm run test:startup && npm run test:offline && npm run test:loopback"
47
39
  },
48
40
  "dependencies": {
49
41
  "@eslint-community/regexpp": "4.12.2",
50
- "@fontsource-variable/jetbrains-mono": "^5.3.0",
51
- "@ours.network/sdk": "3.7.0",
52
- "@radix-ui/react-dialog": "^1.1.23",
53
- "framer-motion": "^12.43.0",
54
- "jsqr": "^1.4.0",
55
- "lucide-react": "^0.468.0",
56
- "mdast-util-from-markdown": "^2.0.3",
57
- "mdast-util-gfm": "^3.1.0",
58
- "mermaid": "^11.16.1",
59
- "micromark-extension-gfm": "^3.0.0",
42
+ "@ours.network/sdk": "3.8.1-nightly.15",
60
43
  "parse5": "^8.0.1",
61
- "qrcode": "^1.5.4",
62
- "react": "^18.3.1",
63
- "react-dom": "^18.3.1",
64
- "react-markdown": "^10.1.0",
65
- "remark-gfm": "^4.0.1",
66
44
  "web-push": "^3.6.7",
67
45
  "ws": "^8.21.0"
68
46
  },
69
47
  "devDependencies": {
70
- "@ours.network/cli": "2.7.0",
48
+ "@ours.network/cli": "2.8.1-nightly.12",
49
+ "@ours.network/daemon": "3.8.1-nightly.7",
71
50
  "@playwright/test": "^1.62.1",
72
- "@tailwindcss/vite": "^4.3.3",
73
51
  "@types/node": "^20.14.0",
74
- "@types/react": "^18.3.3",
75
- "@types/react-dom": "^18.3.0",
76
52
  "@types/web-push": "^3.6.4",
77
53
  "@types/ws": "^8.18.1",
78
- "@vitejs/plugin-react": "^4.7.0",
79
54
  "esbuild": "^0.25.0",
80
- "tailwindcss": "^4.3.3",
81
55
  "tsx": "^4.19.0",
82
- "typescript": "^5.5.4",
83
- "vite": "^6.4.3"
56
+ "typescript": "^5.5.4"
84
57
  }
85
58
  }
@@ -1,2 +0,0 @@
1
- import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-C7hewS6C.js";import{p as f}from"./chunk-JWPE2WC7-DmDsLF1N.js";import{_ as n,l as o}from"./mermaid.core-11YjnhKz.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-Qz363tl0.js";import"./index-C65oKF4f.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
2
- //# sourceMappingURL=abnfDiagram-N423BO3Z-C-iag_Nj.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"abnfDiagram-N423BO3Z-C-iag_Nj.js","sources":["../../../node_modules/mermaid/dist/chunks/mermaid.core/abnfDiagram-N423BO3Z.mjs"],"sourcesContent":["import {\n db,\n getStyles,\n renderer\n} from \"./chunk-6Q2QTUOP.mjs\";\nimport {\n populateCommonDb\n} from \"./chunk-JWPE2WC7.mjs\";\nimport \"./chunk-3NCLNEKW.mjs\";\nimport \"./chunk-I66GZJ75.mjs\";\nimport {\n log\n} from \"./chunk-X3CZISLH.mjs\";\nimport {\n __name\n} from \"./chunk-Y2CYZVJY.mjs\";\n\n// src/diagrams/railroad/parser/abnfParser.ts\nimport {\n MermaidParseError,\n createRailroadAbnfServices\n} from \"@mermaid-js/parser\";\nvar langiumParser = createRailroadAbnfServices().RailroadAbnf.parser.LangiumParser;\nvar transformAlternation = /* @__PURE__ */ __name((alt) => {\n const alternatives = alt.alternatives.map(transformConcatenation);\n if (alternatives.length === 1) {\n return alternatives[0];\n }\n return {\n type: \"choice\",\n alternatives\n };\n}, \"transformAlternation\");\nvar transformConcatenation = /* @__PURE__ */ __name((concat) => {\n const elements = concat.elements.map(transformElement);\n if (elements.length === 1) {\n return elements[0];\n }\n return {\n type: \"sequence\",\n elements\n };\n}, \"transformConcatenation\");\nvar parseRepeat = /* @__PURE__ */ __name((repeat) => {\n if (repeat.includes(\"*\")) {\n const [minStr, maxStr] = repeat.split(\"*\");\n const min = minStr ? parseInt(minStr, 10) : 0;\n const max = maxStr ? parseInt(maxStr, 10) : Infinity;\n return { min, max };\n }\n const exact = parseInt(repeat, 10);\n return { min: exact, max: exact };\n}, \"parseRepeat\");\nvar transformElement = /* @__PURE__ */ __name((element) => {\n const inner = transformPrimary(element.primary);\n if (!element.repeat) {\n return inner;\n }\n const { min, max } = parseRepeat(element.repeat);\n if (min === 0 && max === 1) {\n return { type: \"optional\", element: inner };\n }\n return {\n type: \"repetition\",\n element: inner,\n min,\n max\n };\n}, \"transformElement\");\nvar transformPrimary = /* @__PURE__ */ __name((primary) => {\n switch (primary.$type) {\n case \"AbnfStringLiteral\":\n return {\n type: \"terminal\",\n value: primary.value\n };\n case \"AbnfNumVal\":\n return {\n type: \"terminal\",\n value: primary.value\n };\n case \"AbnfRuleName\":\n return {\n type: \"nonterminal\",\n name: primary.name\n };\n case \"AbnfGroup\":\n return transformAlternation(primary.element);\n case \"AbnfOptionalGroup\":\n return {\n type: \"optional\",\n element: transformAlternation(primary.element)\n };\n default:\n throw new Error(`Unsupported ABNF primary node: ${primary.$type}`);\n }\n}, \"transformPrimary\");\nvar transformRule = /* @__PURE__ */ __name((rule) => {\n return {\n name: rule.name,\n definition: transformAlternation(rule.definition)\n };\n}, \"transformRule\");\nvar populateDb = /* @__PURE__ */ __name((ast) => {\n populateCommonDb(ast, db);\n if (ast.title) {\n db.setTitle(ast.title);\n }\n ast.rules.map((rule) => db.addRule(transformRule(rule)));\n}, \"populateDb\");\nvar parser = {\n parse: /* @__PURE__ */ __name((input) => {\n db.clear();\n log.debug(\"[ABNF Parser] Starting Langium parse\");\n const result = langiumParser.parse(input);\n if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {\n throw new MermaidParseError(result);\n }\n const ast = result.value;\n log.debug(\"[ABNF Parser] Parsed rules:\", ast.rules.length);\n populateDb(ast);\n log.debug(\"[ABNF Parser] Parse complete\");\n }, \"parse\"),\n parser: {\n yy: db\n }\n};\n\n// src/diagrams/railroad/abnfDiagram.ts\nvar diagram = {\n parser,\n db,\n renderer,\n styles: getStyles\n};\nexport {\n diagram\n};\n"],"names":["langiumParser","createRailroadAbnfServices","transformAlternation","__name","alt","alternatives","transformConcatenation","concat","elements","transformElement","parseRepeat","repeat","minStr","maxStr","min","max","exact","element","inner","transformPrimary","primary","transformRule","rule","populateDb","ast","populateCommonDb","db","parser","input","log","result","MermaidParseError","diagram","renderer","getStyles"],"mappings":"4PAsBA,IAAIA,EAAgBC,EAA0B,EAAG,aAAa,OAAO,cACjEC,EAAuCC,EAAQC,GAAQ,CACzD,MAAMC,EAAeD,EAAI,aAAa,IAAIE,CAAsB,EAChE,OAAID,EAAa,SAAW,EACnBA,EAAa,CAAC,EAEhB,CACL,KAAM,SACN,aAAAA,CACJ,CACA,EAAG,sBAAsB,EACrBC,EAAyCH,EAAQI,GAAW,CAC9D,MAAMC,EAAWD,EAAO,SAAS,IAAIE,CAAgB,EACrD,OAAID,EAAS,SAAW,EACfA,EAAS,CAAC,EAEZ,CACL,KAAM,WACN,SAAAA,CACJ,CACA,EAAG,wBAAwB,EACvBE,EAA8BP,EAAQQ,GAAW,CACnD,GAAIA,EAAO,SAAS,GAAG,EAAG,CACxB,KAAM,CAACC,EAAQC,CAAM,EAAIF,EAAO,MAAM,GAAG,EACnCG,EAAMF,EAAS,SAASA,EAAQ,EAAE,EAAI,EACtCG,EAAMF,EAAS,SAASA,EAAQ,EAAE,EAAI,IAC5C,MAAO,CAAE,IAAAC,EAAK,IAAAC,CAAG,CACnB,CACA,MAAMC,EAAQ,SAASL,EAAQ,EAAE,EACjC,MAAO,CAAE,IAAKK,EAAO,IAAKA,CAAK,CACjC,EAAG,aAAa,EACZP,EAAmCN,EAAQc,GAAY,CACzD,MAAMC,EAAQC,EAAiBF,EAAQ,OAAO,EAC9C,GAAI,CAACA,EAAQ,OACX,OAAOC,EAET,KAAM,CAAE,IAAAJ,EAAK,IAAAC,CAAG,EAAKL,EAAYO,EAAQ,MAAM,EAC/C,OAAIH,IAAQ,GAAKC,IAAQ,EAChB,CAAE,KAAM,WAAY,QAASG,CAAK,EAEpC,CACL,KAAM,aACN,QAASA,EACT,IAAAJ,EACA,IAAAC,CACJ,CACA,EAAG,kBAAkB,EACjBI,EAAmChB,EAAQiB,GAAY,CACzD,OAAQA,EAAQ,MAAK,CACnB,IAAK,oBACH,MAAO,CACL,KAAM,WACN,MAAOA,EAAQ,KACvB,EACI,IAAK,aACH,MAAO,CACL,KAAM,WACN,MAAOA,EAAQ,KACvB,EACI,IAAK,eACH,MAAO,CACL,KAAM,cACN,KAAMA,EAAQ,IACtB,EACI,IAAK,YACH,OAAOlB,EAAqBkB,EAAQ,OAAO,EAC7C,IAAK,oBACH,MAAO,CACL,KAAM,WACN,QAASlB,EAAqBkB,EAAQ,OAAO,CACrD,EACI,QACE,MAAM,IAAI,MAAM,kCAAkCA,EAAQ,KAAK,EAAE,CACvE,CACA,EAAG,kBAAkB,EACjBC,EAAgClB,EAAQmB,IACnC,CACL,KAAMA,EAAK,KACX,WAAYpB,EAAqBoB,EAAK,UAAU,CACpD,GACG,eAAe,EACdC,EAA6BpB,EAAQqB,GAAQ,CAC/CC,EAAiBD,EAAKE,CAAE,EACpBF,EAAI,OACNE,EAAG,SAASF,EAAI,KAAK,EAEvBA,EAAI,MAAM,IAAKF,GAASI,EAAG,QAAQL,EAAcC,CAAI,CAAC,CAAC,CACzD,EAAG,YAAY,EACXK,EAAS,CACX,MAAuBxB,EAAQyB,GAAU,CACvCF,EAAG,MAAK,EACRG,EAAI,MAAM,sCAAsC,EAChD,MAAMC,EAAS9B,EAAc,MAAM4B,CAAK,EACxC,GAAIE,EAAO,YAAY,OAAS,GAAKA,EAAO,aAAa,OAAS,EAChE,MAAM,IAAIC,EAAkBD,CAAM,EAEpC,MAAMN,EAAMM,EAAO,MACnBD,EAAI,MAAM,8BAA+BL,EAAI,MAAM,MAAM,EACzDD,EAAWC,CAAG,EACdK,EAAI,MAAM,8BAA8B,CAC1C,EAAG,OAAO,EACV,OAAQ,CACN,GAAIH,CACR,CACA,EAGIM,EAAU,CACZ,OAAAL,EACA,GAAAD,EACA,SAAAO,EACA,OAAQC,CACV","x_google_ignoreList":[0]}
@@ -1,2 +0,0 @@
1
- import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-11YjnhKz.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
2
- //# sourceMappingURL=arc-Bcm2sZNj.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"arc-Bcm2sZNj.js","sources":["../../../node_modules/d3-shape/src/arc.js"],"sourcesContent":["import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n"],"names":["arcInnerRadius","d","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","x0","y0","x1","y1","x2","y2","x3","y3","x10","y10","x32","y32","t","epsilon","cornerTangents","r1","rc","cw","x01","y01","lo","sqrt","ox","oy","x11","y11","x00","y00","dx","dy","d2","r","D","max","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","d3arc","innerRadius","outerRadius","cornerRadius","constant","padRadius","startAngle","endAngle","padAngle","context","path","withPath","arc","buffer","r0","a0","halfPi","a1","da","abs","tau","cos","sin","a01","a11","a00","a10","da0","da1","ap","rp","min","rc0","rc1","t0","t1","p0","asin","p1","oc","pi","ax","ay","bx","by","kc","acos","lc","atan2","a","_"],"mappings":"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","x_google_ignoreList":[0]}