stitchkit 0.100.2 → 0.101.0

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 (242) hide show
  1. package/CHANGELOG.md +153 -0
  2. package/README.md +2 -1
  3. package/dist/entrypoints/agent-runtime/browser.js +119 -119
  4. package/dist/entrypoints/agent-runtime/coding-tools.js +15 -20
  5. package/dist/entrypoints/agent-runtime/harness.js +55 -63
  6. package/dist/entrypoints/agent-runtime/openrouter.js +6 -6
  7. package/dist/entrypoints/agent-runtime/sandbox.js +20 -25
  8. package/dist/entrypoints/agent-runtime/sqlite/bun.js +11 -13
  9. package/dist/entrypoints/agent-runtime/sqlite/node.js +11 -13
  10. package/dist/entrypoints/agent-runtime/testing.js +32 -34
  11. package/dist/entrypoints/agent-runtime.js +395 -402
  12. package/dist/entrypoints/application/diagnostic-journal.js +26 -27
  13. package/dist/entrypoints/application/directory-inbox.js +16 -17
  14. package/dist/entrypoints/application/grammy.js +13 -13
  15. package/dist/entrypoints/application/opentelemetry.js +13 -13
  16. package/dist/entrypoints/application/schemas.js +24 -24
  17. package/dist/entrypoints/application.js +209 -210
  18. package/dist/entrypoints/bin/upgrade-cli.js +2 -2
  19. package/dist/entrypoints/cli.js +81 -84
  20. package/dist/entrypoints/contract.js +54 -57
  21. package/dist/entrypoints/declaration.js +22 -22
  22. package/dist/entrypoints/files.js +18 -21
  23. package/dist/entrypoints/geo.js +7 -8
  24. package/dist/entrypoints/google.js +2 -2
  25. package/dist/entrypoints/index.js +150 -154
  26. package/dist/entrypoints/live.js +45 -47
  27. package/dist/entrypoints/node.js +68 -74
  28. package/dist/entrypoints/oauth.js +6 -6
  29. package/dist/entrypoints/observability.d.ts +1 -0
  30. package/dist/entrypoints/observability.d.ts.map +1 -1
  31. package/dist/entrypoints/observability.js +116 -87
  32. package/dist/entrypoints/primitives.js +35 -35
  33. package/dist/entrypoints/react/keyboard.d.ts +4 -0
  34. package/dist/entrypoints/react/keyboard.d.ts.map +1 -0
  35. package/dist/entrypoints/react/keyboard.js +397 -0
  36. package/dist/entrypoints/react.js +10 -10
  37. package/dist/entrypoints/release.js +7 -7
  38. package/dist/entrypoints/remote.js +15 -17
  39. package/dist/entrypoints/server.js +198 -200
  40. package/dist/entrypoints/telegram/html.d.ts +5 -0
  41. package/dist/entrypoints/telegram/html.d.ts.map +1 -0
  42. package/dist/entrypoints/telegram/html.js +26 -0
  43. package/dist/entrypoints/telegram/screens.d.ts +14 -0
  44. package/dist/entrypoints/telegram/screens.d.ts.map +1 -0
  45. package/dist/entrypoints/telegram/screens.js +2028 -0
  46. package/dist/entrypoints/telegram.d.ts +11 -3
  47. package/dist/entrypoints/telegram.d.ts.map +1 -1
  48. package/dist/entrypoints/telegram.js +779 -159
  49. package/dist/entrypoints/testing.js +75 -79
  50. package/dist/entrypoints/tools/connections.js +30 -32
  51. package/dist/entrypoints/tools/contract.js +18 -20
  52. package/dist/entrypoints/tools/invoker.js +12 -17
  53. package/dist/entrypoints/tools.js +224 -229
  54. package/dist/entrypoints/tracking/server.js +6 -6
  55. package/dist/entrypoints/tracking.js +40 -42
  56. package/dist/entrypoints/voice.js +3 -3
  57. package/dist/{index-eaysmdtq.js → index-0ndk4555.js} +56 -56
  58. package/dist/{index-2bxbyab0.js → index-1bx1xv1k.js} +1 -1
  59. package/dist/{index-p5r7qpdd.js → index-1eeqpadm.js} +4 -4
  60. package/dist/{index-hadmp193.js → index-3ct7hhq6.js} +210 -210
  61. package/dist/{index-e01r054k.js → index-45tdvqa3.js} +26 -26
  62. package/dist/{index-dce5wxcq.js → index-4s0fep5q.js} +8 -8
  63. package/dist/index-50ejfz75.js +9 -0
  64. package/dist/{index-m9zn6cpq.js → index-5107q189.js} +12 -12
  65. package/dist/{index-sbdmyz75.js → index-5cc6r990.js} +3 -3
  66. package/dist/{index-c6bxbsnc.js → index-7kxw1awn.js} +2 -2
  67. package/dist/{index-0r0fbk7z.js → index-7z9ym7t8.js} +28 -28
  68. package/dist/{index-p7hgdyhb.js → index-814xpr6d.js} +2 -2
  69. package/dist/{index-gtj3zc53.js → index-8kzct1d6.js} +99 -99
  70. package/dist/{index-1zbbzgfh.js → index-9pw0a51a.js} +4 -4
  71. package/dist/{index-79z7m7dt.js → index-a9pd417t.js} +35 -35
  72. package/dist/{index-ham5sz8m.js → index-aaj97r4y.js} +45 -45
  73. package/dist/{index-s812ycat.js → index-aan6hqb9.js} +3 -3
  74. package/dist/{index-10x2hbx0.js → index-adhgd4pe.js} +44 -44
  75. package/dist/{index-2gxzjvyr.js → index-afjvjyck.js} +23 -23
  76. package/dist/{index-qmy6zq75.js → index-ahvsksw5.js} +16 -16
  77. package/dist/{index-hr4tzbwq.js → index-ap3gqe56.js} +3 -3
  78. package/dist/{index-znfs20ss.js → index-b2bz0kdm.js} +16 -16
  79. package/dist/{index-r066jx76.js → index-c6aagrbd.js} +148 -120
  80. package/dist/{index-k30h66yd.js → index-ck71tbcf.js} +9 -9
  81. package/dist/{index-eqqvgdb3.js → index-ct75c3at.js} +2 -2
  82. package/dist/{index-gw8bmyaj.js → index-djjhhgjk.js} +41 -41
  83. package/dist/{index-8qt2m66q.js → index-dvwj1f43.js} +43 -43
  84. package/dist/index-e05cjgtf.js +144 -0
  85. package/dist/{index-yw4fzmdz.js → index-e6c2spsd.js} +79 -30
  86. package/dist/{index-fhwqwxe0.js → index-ej331hah.js} +1 -1
  87. package/dist/{index-9t3dffv2.js → index-ewbaywk5.js} +5 -5
  88. package/dist/{index-7p1f0vp2.js → index-fyphpknh.js} +25 -25
  89. package/dist/{index-83bdg97s.js → index-g149e9pk.js} +1 -1
  90. package/dist/{index-ngfhvfpd.js → index-g6a3na27.js} +4 -4
  91. package/dist/{index-qwhynv6x.js → index-h124epcf.js} +20 -20
  92. package/dist/{index-h6eeys1v.js → index-h97tqqp1.js} +9 -9
  93. package/dist/{index-zcgf3gqf.js → index-hby4qhax.js} +10 -10
  94. package/dist/{index-5jrd0yng.js → index-j8aw2c0e.js} +4 -4
  95. package/dist/{index-d8m8zpd8.js → index-jzczzcsb.js} +14 -14
  96. package/dist/index-kqnd6a85.js +26 -0
  97. package/dist/{index-35mh5bhj.js → index-kw1ws0cs.js} +12 -12
  98. package/dist/{index-4gcnakhx.js → index-m38ej7e5.js} +2 -2
  99. package/dist/{index-ndddxtyx.js → index-m79yr938.js} +19 -19
  100. package/dist/{index-5p2m7we1.js → index-m9fndta6.js} +11 -11
  101. package/dist/index-mnkk1ffz.js +150 -0
  102. package/dist/index-n15jny5b.js +4 -0
  103. package/dist/{index-2vtcmrj9.js → index-n53mswt3.js} +20 -20
  104. package/dist/{index-bt14acb5.js → index-n5yqxd3d.js} +21 -21
  105. package/dist/{index-bm5rx7n6.js → index-n9tyz8z3.js} +12 -12
  106. package/dist/index-nmaqxdx7.js +463 -0
  107. package/dist/{index-mqv3b5rh.js → index-nx6eazt0.js} +30 -30
  108. package/dist/{index-3z73fh2c.js → index-q0th8q0z.js} +9 -9
  109. package/dist/{index-v260df89.js → index-qjeggp8w.js} +20 -20
  110. package/dist/{index-zfrhfn82.js → index-r1z0rd9c.js} +20 -20
  111. package/dist/{index-wqgjfstn.js → index-r5c4fedv.js} +3 -3
  112. package/dist/{index-cyktc4bp.js → index-r5hsgkz5.js} +118 -118
  113. package/dist/{index-0b1ess5e.js → index-r7a7r7ha.js} +1 -1
  114. package/dist/{index-1j8pm5t0.js → index-rfkh44ss.js} +15 -15
  115. package/dist/index-rz3z13e9.js +47 -0
  116. package/dist/{index-k6gpggb9.js → index-s80awwsw.js} +35 -35
  117. package/dist/{index-vqr7f7v8.js → index-ssmd41kh.js} +124 -124
  118. package/dist/index-sznqf8fx.js +20 -0
  119. package/dist/{index-ensd0r74.js → index-v14qqmys.js} +41 -41
  120. package/dist/{index-paz6sgdp.js → index-v4a2fjtk.js} +36 -36
  121. package/dist/{index-d9pk3td4.js → index-w0eqdhyd.js} +14 -14
  122. package/dist/{index-5qn1kx34.js → index-w575evhq.js} +29 -29
  123. package/dist/{index-3gye9wzb.js → index-w5s3xftz.js} +26 -26
  124. package/dist/{index-tm88avnj.js → index-wykebpn9.js} +3 -3
  125. package/dist/{index-sh3s86na.js → index-xkhk5d6g.js} +17 -17
  126. package/dist/{index-6k1937bx.js → index-xqhede6x.js} +4 -4
  127. package/dist/{index-f4fx2tza.js → index-zs4ms3th.js} +181 -181
  128. package/dist/{index-k5hsfc3j.js → index-zsvzhjtk.js} +1 -1
  129. package/dist/internal/secret-shapes.d.ts +21 -0
  130. package/dist/internal/secret-shapes.d.ts.map +1 -0
  131. package/dist/observability/bounded-logger.d.ts +2 -0
  132. package/dist/observability/bounded-logger.d.ts.map +1 -1
  133. package/dist/observability/sanitize.d.ts +6 -0
  134. package/dist/observability/sanitize.d.ts.map +1 -1
  135. package/dist/observability/secret-values.d.ts +25 -0
  136. package/dist/observability/secret-values.d.ts.map +1 -0
  137. package/dist/react/keyboard/hooks.d.ts +71 -0
  138. package/dist/react/keyboard/hooks.d.ts.map +1 -0
  139. package/dist/react/keyboard/layers.d.ts +98 -0
  140. package/dist/react/keyboard/layers.d.ts.map +1 -0
  141. package/dist/react/keyboard/zone.d.ts +139 -0
  142. package/dist/react/keyboard/zone.d.ts.map +1 -0
  143. package/dist/telegram/bot-api.d.ts +7 -4
  144. package/dist/telegram/bot-api.d.ts.map +1 -1
  145. package/dist/telegram/crypto.d.ts +16 -0
  146. package/dist/telegram/crypto.d.ts.map +1 -0
  147. package/dist/telegram/html/check.d.ts +26 -0
  148. package/dist/telegram/html/check.d.ts.map +1 -0
  149. package/dist/telegram/html/nodes.d.ts +70 -0
  150. package/dist/telegram/html/nodes.d.ts.map +1 -0
  151. package/dist/telegram/html/parse.d.ts +35 -0
  152. package/dist/telegram/html/parse.d.ts.map +1 -0
  153. package/dist/telegram/html/render.d.ts +39 -0
  154. package/dist/telegram/html/render.d.ts.map +1 -0
  155. package/dist/telegram/init-data.d.ts +3 -44
  156. package/dist/telegram/init-data.d.ts.map +1 -1
  157. package/dist/telegram/operator-channel.d.ts +19 -3
  158. package/dist/telegram/operator-channel.d.ts.map +1 -1
  159. package/dist/telegram/operator-dedupe.d.ts +44 -0
  160. package/dist/telegram/operator-dedupe.d.ts.map +1 -0
  161. package/dist/telegram/screens/callback-codec.d.ts +34 -0
  162. package/dist/telegram/screens/callback-codec.d.ts.map +1 -0
  163. package/dist/telegram/screens/dispatch.d.ts +22 -0
  164. package/dist/telegram/screens/dispatch.d.ts.map +1 -0
  165. package/dist/telegram/screens/display.d.ts +70 -0
  166. package/dist/telegram/screens/display.d.ts.map +1 -0
  167. package/dist/telegram/screens/execute.d.ts +57 -0
  168. package/dist/telegram/screens/execute.d.ts.map +1 -0
  169. package/dist/telegram/screens/html.d.ts +36 -0
  170. package/dist/telegram/screens/html.d.ts.map +1 -0
  171. package/dist/telegram/screens/outcome.d.ts +74 -0
  172. package/dist/telegram/screens/outcome.d.ts.map +1 -0
  173. package/dist/telegram/screens/path.d.ts +29 -0
  174. package/dist/telegram/screens/path.d.ts.map +1 -0
  175. package/dist/telegram/screens/reconcile.d.ts +67 -0
  176. package/dist/telegram/screens/reconcile.d.ts.map +1 -0
  177. package/dist/telegram/screens/registry.d.ts +23 -0
  178. package/dist/telegram/screens/registry.d.ts.map +1 -0
  179. package/dist/telegram/screens/render.d.ts +70 -0
  180. package/dist/telegram/screens/render.d.ts.map +1 -0
  181. package/dist/telegram/screens/runtime.d.ts +133 -0
  182. package/dist/telegram/screens/runtime.d.ts.map +1 -0
  183. package/dist/telegram/screens/screen-types.d.ts +130 -0
  184. package/dist/telegram/screens/screen-types.d.ts.map +1 -0
  185. package/dist/telegram/screens/screen.d.ts +138 -0
  186. package/dist/telegram/screens/screen.d.ts.map +1 -0
  187. package/dist/telegram/screens/state.d.ts +115 -0
  188. package/dist/telegram/screens/state.d.ts.map +1 -0
  189. package/dist/telegram/screens/telegram-screens.d.ts +18 -0
  190. package/dist/telegram/screens/telegram-screens.d.ts.map +1 -0
  191. package/dist/telegram/screens/test-chat-telegram.d.ts +47 -0
  192. package/dist/telegram/screens/test-chat-telegram.d.ts.map +1 -0
  193. package/dist/telegram/screens/test-chat.d.ts +66 -0
  194. package/dist/telegram/screens/test-chat.d.ts.map +1 -0
  195. package/dist/telegram/screens/view.d.ts +89 -0
  196. package/dist/telegram/screens/view.d.ts.map +1 -0
  197. package/dist/telegram/send-failure.d.ts +25 -0
  198. package/dist/telegram/send-failure.d.ts.map +1 -1
  199. package/dist/telegram/update-intake.d.ts +82 -0
  200. package/dist/telegram/update-intake.d.ts.map +1 -0
  201. package/dist/telegram/update-store-check.d.ts +22 -0
  202. package/dist/telegram/update-store-check.d.ts.map +1 -0
  203. package/dist/telegram/update-store-postgres.d.ts +33 -0
  204. package/dist/telegram/update-store-postgres.d.ts.map +1 -0
  205. package/dist/telegram/update-store-sqlite.d.ts +26 -0
  206. package/dist/telegram/update-store-sqlite.d.ts.map +1 -0
  207. package/dist/telegram/update-store.d.ts +67 -0
  208. package/dist/telegram/update-store.d.ts.map +1 -0
  209. package/dist/telegram/user.d.ts +51 -0
  210. package/dist/telegram/user.d.ts.map +1 -0
  211. package/dist/telegram/webhook.d.ts +105 -0
  212. package/dist/telegram/webhook.d.ts.map +1 -0
  213. package/dist/tools/cli/args-fields.d.ts +8 -0
  214. package/dist/tools/cli/args-fields.d.ts.map +1 -1
  215. package/dist/tools/cli/args-route.d.ts.map +1 -1
  216. package/dist/tools/cli/args.d.ts.map +1 -1
  217. package/dist/tools/cli/help.d.ts.map +1 -1
  218. package/llms/cli.txt +8 -2
  219. package/llms/observability.txt +15 -2
  220. package/llms/react-keyboard.txt +193 -0
  221. package/llms/server.4.txt +16 -0
  222. package/llms/stitchkit.txt +10 -4
  223. package/llms/telegram-html.txt +35 -0
  224. package/llms/telegram-screens.txt +365 -0
  225. package/llms/telegram.txt +245 -11
  226. package/llms/{upgrading-0.74.0-0.100.0.txt → upgrading-0.74.0-0.101.0.txt} +39 -3
  227. package/llms/upgrading.txt +1 -1
  228. package/llms-full.txt +889 -19
  229. package/llms.txt +12 -7
  230. package/package.json +17 -2
  231. package/dist/index-2k4yrqkc.js +0 -9
  232. package/dist/index-crykmqkr.js +0 -26
  233. package/dist/index-y64k3s0h.js +0 -150
  234. package/dist/index-y91ry9h2.js +0 -4
  235. /package/dist/{index-hffjpmq9.js → index-9jfdm5tg.js} +0 -0
  236. /package/dist/{index-zjjyynm3.js → index-d4pa2bgs.js} +0 -0
  237. /package/dist/{index-rxfy4cq7.js → index-dwfv9a85.js} +0 -0
  238. /package/dist/{index-5jm36zv1.js → index-gfk7nrht.js} +0 -0
  239. /package/dist/{index-b9aefrqd.js → index-n1dqr7gf.js} +0 -0
  240. /package/dist/{index-q3pyb9n0.js → index-sykb5ag7.js} +0 -0
  241. /package/dist/{index-48ffdxgk.js → index-xhzq2qvj.js} +0 -0
  242. /package/dist/{index-kzfs85xp.js → index-zsarb5xp.js} +0 -0
@@ -0,0 +1,397 @@
1
+ // src/react/keyboard/hooks.ts
2
+ import { useEffect, useRef, useState, useSyncExternalStore } from "react";
3
+
4
+ // src/react/keyboard/layers.ts
5
+ var RANK = {
6
+ overlay: 4,
7
+ local: 3,
8
+ route: 2,
9
+ zone: 1,
10
+ global: 0
11
+ };
12
+ var KEY_FIELD_SELECTOR = [
13
+ "input:not([type=button],[type=submit],[type=reset],[type=checkbox],[type=image])",
14
+ "textarea",
15
+ "select",
16
+ "[contenteditable]:not([contenteditable=false])",
17
+ "[role=textbox]",
18
+ "[role=combobox]",
19
+ "[role=slider]",
20
+ "[role=spinbutton]",
21
+ "[data-local-keys]"
22
+ ].join(",");
23
+ function hasClosest(target) {
24
+ return typeof target === "object" && target !== null && "closest" in target && typeof target.closest === "function";
25
+ }
26
+ function closestFromTarget(target, selectors) {
27
+ return hasClosest(target) ? target.closest(selectors) : null;
28
+ }
29
+ function isKeyFieldTarget(target) {
30
+ const field = closestFromTarget(target, KEY_FIELD_SELECTOR);
31
+ return field !== null && field !== undefined;
32
+ }
33
+ function liveScope(entry) {
34
+ const read = entry.state.scope;
35
+ if (read === undefined)
36
+ return "unscoped";
37
+ const element = read();
38
+ if (element === null || !element.isConnected)
39
+ return null;
40
+ const inert = element.closest("[inert]");
41
+ if (inert !== null && inert !== undefined)
42
+ return null;
43
+ if (element.checkVisibility !== undefined && !element.checkVisibility())
44
+ return null;
45
+ return element;
46
+ }
47
+ function askingOrder(entries) {
48
+ const live = [];
49
+ for (const entry of entries) {
50
+ if (entry.state.active === false)
51
+ continue;
52
+ const scope = liveScope(entry);
53
+ if (scope !== null)
54
+ live.push({ entry, scope, depth: 0 });
55
+ }
56
+ for (const layer of live) {
57
+ const own = layer.scope;
58
+ if (own === "unscoped")
59
+ continue;
60
+ layer.depth = live.filter((other) => other !== layer && other.entry.state.kind === layer.entry.state.kind && other.scope !== "unscoped" && other.scope !== own && other.scope.contains(own)).length;
61
+ }
62
+ return live.sort((left, right) => RANK[right.entry.state.kind] - RANK[left.entry.state.kind] || right.depth - left.depth || right.entry.order - left.entry.order);
63
+ }
64
+ function createKeyLayerStack(target) {
65
+ const entries = new Set;
66
+ let activations = 0;
67
+ const listener = (event) => {
68
+ dispatch(event);
69
+ };
70
+ function dispatch(event) {
71
+ if (event.defaultPrevented || event.isComposing)
72
+ return false;
73
+ const isEscape = event.key === "Escape";
74
+ if (isEscape && event.repeat)
75
+ return false;
76
+ const inField = !isEscape && isKeyFieldTarget(event.target);
77
+ let behindOverlay = false;
78
+ for (const { entry } of askingOrder(entries)) {
79
+ const { kind } = entry.state;
80
+ if (behindOverlay && kind !== "overlay")
81
+ break;
82
+ if (kind === "overlay")
83
+ behindOverlay = true;
84
+ if (inField && entry.state.fields !== "include")
85
+ continue;
86
+ if (entry.state.onKey(event)) {
87
+ event.preventDefault();
88
+ return true;
89
+ }
90
+ }
91
+ return false;
92
+ }
93
+ function add(state) {
94
+ const entry = { state, order: ++activations };
95
+ if (entries.size === 0)
96
+ target.addEventListener("keydown", listener);
97
+ entries.add(entry);
98
+ return {
99
+ update(next) {
100
+ const reactivated = entry.state.active === false && next.active !== false;
101
+ entry.state = next;
102
+ if (reactivated)
103
+ entry.order = ++activations;
104
+ },
105
+ remove() {
106
+ if (!entries.delete(entry))
107
+ return;
108
+ if (entries.size === 0)
109
+ target.removeEventListener("keydown", listener);
110
+ }
111
+ };
112
+ }
113
+ return { add, dispatch };
114
+ }
115
+
116
+ // src/react/keyboard/zone.ts
117
+ var ZONE_ATTRIBUTE = "data-keyboard-zone";
118
+ function nextZoneIndex({
119
+ length,
120
+ index,
121
+ move,
122
+ loop
123
+ }) {
124
+ if (length <= 0)
125
+ return move === "previous" || move === "first" ? "before-start" : "after-end";
126
+ if (move === "first")
127
+ return 0;
128
+ if (move === "last")
129
+ return length - 1;
130
+ if (index < 0 || index >= length)
131
+ return move === "next" ? 0 : length - 1;
132
+ const target = move === "next" ? index + 1 : index - 1;
133
+ if (target >= 0 && target < length)
134
+ return target;
135
+ if (loop)
136
+ return target < 0 ? length - 1 : 0;
137
+ return target < 0 ? "before-start" : "after-end";
138
+ }
139
+ function zoneIntent(event, orientation) {
140
+ if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
141
+ return null;
142
+ const vertical = orientation === "vertical";
143
+ switch (event.key) {
144
+ case (vertical ? "ArrowDown" : "ArrowRight"):
145
+ return { type: "move", move: "next" };
146
+ case (vertical ? "ArrowUp" : "ArrowLeft"):
147
+ return { type: "move", move: "previous" };
148
+ case (vertical ? "ArrowRight" : "ArrowDown"):
149
+ return { type: "enter" };
150
+ case (vertical ? "ArrowLeft" : "ArrowUp"):
151
+ return { type: "exit" };
152
+ case "Home":
153
+ return { type: "move", move: "first" };
154
+ case "End":
155
+ return { type: "move", move: "last" };
156
+ case "Enter":
157
+ return { type: "confirm" };
158
+ default:
159
+ return null;
160
+ }
161
+ }
162
+ function createNavZone(initial) {
163
+ let options = initial;
164
+ let pointed = null;
165
+ let awaiting = null;
166
+ const elements = new Map;
167
+ const listeners = new Set;
168
+ const point = (id) => {
169
+ if (pointed === id)
170
+ return;
171
+ pointed = id;
172
+ for (const listener of listeners)
173
+ listener();
174
+ };
175
+ function current() {
176
+ const { items, value } = options;
177
+ if (pointed !== null && items.includes(pointed))
178
+ return pointed;
179
+ if (value !== null && items.includes(value))
180
+ return value;
181
+ return items[0] ?? null;
182
+ }
183
+ function focusElement(element) {
184
+ element.focus({ preventScroll: true });
185
+ element.scrollIntoView?.({ block: "nearest", inline: "nearest" });
186
+ }
187
+ function focus(id) {
188
+ const target = id ?? current();
189
+ if (target === null)
190
+ return false;
191
+ point(target);
192
+ const element = elements.get(target);
193
+ if (element === undefined) {
194
+ awaiting = target;
195
+ options.onReveal?.(target);
196
+ return true;
197
+ }
198
+ awaiting = null;
199
+ focusElement(element);
200
+ return true;
201
+ }
202
+ const taken = (answer) => answer !== false;
203
+ function apply(intent) {
204
+ const { items, mode = "select", loop = false } = options;
205
+ const id = current();
206
+ switch (intent.type) {
207
+ case "move": {
208
+ const index = id === null ? -1 : items.indexOf(id);
209
+ const landed = nextZoneIndex({ length: items.length, index, move: intent.move, loop });
210
+ if (typeof landed !== "number") {
211
+ if (options.onBoundary === undefined)
212
+ return false;
213
+ return taken(options.onBoundary(landed === "before-start" ? "start" : "end"));
214
+ }
215
+ const next = items[landed];
216
+ if (next === undefined)
217
+ return false;
218
+ focus(next);
219
+ if (mode === "select" && next !== options.value)
220
+ options.onChange(next, "arrow");
221
+ return true;
222
+ }
223
+ case "enter":
224
+ return id !== null && options.onEnter !== undefined && taken(options.onEnter(id));
225
+ case "exit":
226
+ return options.onExit !== undefined && taken(options.onExit());
227
+ case "confirm":
228
+ if (id === null)
229
+ return false;
230
+ if (mode === "highlight") {
231
+ options.onChange(id, "confirm");
232
+ return true;
233
+ }
234
+ return options.onEnter !== undefined && taken(options.onEnter(id));
235
+ }
236
+ }
237
+ return {
238
+ update(next) {
239
+ if (next.value !== options.value)
240
+ pointed = null;
241
+ options = next;
242
+ },
243
+ get options() {
244
+ return options;
245
+ },
246
+ current,
247
+ keyDown(event, zone) {
248
+ if (event.defaultPrevented || event.isComposing || isKeyFieldTarget(event.target)) {
249
+ return false;
250
+ }
251
+ if (closestFromTarget(event.target, `[${ZONE_ATTRIBUTE}]`) !== zone)
252
+ return false;
253
+ const intent = zoneIntent(event, options.orientation ?? "vertical");
254
+ if (intent === null || !apply(intent))
255
+ return false;
256
+ event.preventDefault();
257
+ return true;
258
+ },
259
+ keyFromOutside(event) {
260
+ if (closestFromTarget(event.target, `[${ZONE_ATTRIBUTE}]`) !== null)
261
+ return false;
262
+ const intent = zoneIntent(event, options.orientation ?? "vertical");
263
+ if (intent?.type !== "move" || intent.move !== "next" && intent.move !== "previous") {
264
+ return false;
265
+ }
266
+ return focus();
267
+ },
268
+ focused(id) {
269
+ if (!options.items.includes(id))
270
+ return;
271
+ awaiting = null;
272
+ point(id);
273
+ },
274
+ focus,
275
+ setItemElement(id, element) {
276
+ if (element === null) {
277
+ elements.delete(id);
278
+ return;
279
+ }
280
+ elements.set(id, element);
281
+ if (id === awaiting) {
282
+ awaiting = null;
283
+ focusElement(element);
284
+ }
285
+ },
286
+ subscribe(listener) {
287
+ listeners.add(listener);
288
+ return () => {
289
+ listeners.delete(listener);
290
+ };
291
+ }
292
+ };
293
+ }
294
+
295
+ // src/react/keyboard/hooks.ts
296
+ var stacks = new WeakMap;
297
+ function stackOf(view) {
298
+ const existing = stacks.get(view);
299
+ if (existing !== undefined)
300
+ return existing;
301
+ const created = createKeyLayerStack(view);
302
+ stacks.set(view, created);
303
+ return created;
304
+ }
305
+ function layerState(options) {
306
+ const { scope } = options;
307
+ return {
308
+ kind: options.kind,
309
+ active: options.active,
310
+ fields: options.fields,
311
+ scope: scope === undefined ? undefined : () => scope.current,
312
+ onKey: (event) => options.onKey(event)
313
+ };
314
+ }
315
+ function useKeyLayer(options) {
316
+ const handle = useRef(null);
317
+ const initial = useRef(options);
318
+ useEffect(() => {
319
+ const added = stackOf(window).add(layerState(initial.current));
320
+ handle.current = added;
321
+ return () => {
322
+ added.remove();
323
+ handle.current = null;
324
+ };
325
+ }, []);
326
+ useEffect(() => {
327
+ handle.current?.update(layerState(options));
328
+ });
329
+ }
330
+ function useEscapeLayer(options) {
331
+ useKeyLayer({
332
+ kind: options.kind,
333
+ active: options.active,
334
+ scope: options.scope,
335
+ onKey: (event) => event.key === "Escape" && options.onEscape() !== false
336
+ });
337
+ }
338
+ function useNavZone(options) {
339
+ const [zone] = useState(() => createNavZone(options));
340
+ zone.update(options);
341
+ const current = useSyncExternalStore(zone.subscribe, zone.current, zone.current);
342
+ const element = useRef(null);
343
+ const [zoneRef] = useState(() => (node) => {
344
+ element.current = node;
345
+ });
346
+ const itemRefs = useRef(new Map);
347
+ useKeyLayer({
348
+ kind: "zone",
349
+ active: options.active,
350
+ scope: element,
351
+ onKey: (event) => zone.keyFromOutside(event)
352
+ });
353
+ const role = options.role ?? "listbox";
354
+ const itemRef = (id) => {
355
+ const cached = itemRefs.current.get(id);
356
+ if (cached !== undefined)
357
+ return cached;
358
+ const created = (node) => {
359
+ zone.setItemElement(id, node);
360
+ };
361
+ itemRefs.current.set(id, created);
362
+ return created;
363
+ };
364
+ return {
365
+ zoneProps: {
366
+ ref: zoneRef,
367
+ role: role === "none" ? undefined : role,
368
+ "aria-orientation": options.orientation ?? "vertical",
369
+ "aria-label": options.label,
370
+ [ZONE_ATTRIBUTE]: "",
371
+ onKeyDown: (event) => {
372
+ zone.keyDown(event.nativeEvent, element.current);
373
+ }
374
+ },
375
+ itemProps: (id) => {
376
+ const chosen = id === options.value;
377
+ return {
378
+ ref: itemRef(id),
379
+ tabIndex: id === current ? 0 : -1,
380
+ role: role === "listbox" ? "option" : role === "tablist" ? "tab" : undefined,
381
+ "aria-selected": role === "none" ? undefined : chosen,
382
+ "aria-current": role === "none" && chosen ? "true" : undefined,
383
+ onFocus: () => zone.focused(id)
384
+ };
385
+ },
386
+ element,
387
+ current,
388
+ focus: (id) => zone.focus(id)
389
+ };
390
+ }
391
+ export {
392
+ isKeyFieldTarget,
393
+ nextZoneIndex,
394
+ useEscapeLayer,
395
+ useKeyLayer,
396
+ useNavZone
397
+ };
@@ -1,11 +1,11 @@
1
+ import"../index-hby4qhax.js";
1
2
  import {
2
- ApiError,
3
+ ApiError2,
3
4
  isAbortLikeError
4
- } from "../index-v260df89.js";
5
- import"../index-zcgf3gqf.js";
5
+ } from "../index-qjeggp8w.js";
6
6
  import {
7
7
  isRecord
8
- } from "../index-hffjpmq9.js";
8
+ } from "../index-9jfdm5tg.js";
9
9
 
10
10
  // src/react/cache-bridge.ts
11
11
  function createCacheBridge(config) {
@@ -391,7 +391,7 @@ function apiErrorRetry(config = {}) {
391
391
  return false;
392
392
  if (isAbortLikeError(error))
393
393
  return false;
394
- if (!ApiError.is(error))
394
+ if (!ApiError2.is(error))
395
395
  return config.network ?? true;
396
396
  if (never.has(error.code))
397
397
  return false;
@@ -437,10 +437,10 @@ function createQueryClientFactory(config = {}) {
437
437
  };
438
438
  }
439
439
  export {
440
- createRealtimeCacheBridge,
441
- createQueryClientFactory,
442
- createEntityCacheHandlers,
443
- createCursorQuery,
440
+ apiErrorRetry,
444
441
  createCacheBridge,
445
- apiErrorRetry
442
+ createCursorQuery,
443
+ createEntityCacheHandlers,
444
+ createQueryClientFactory,
445
+ createRealtimeCacheBridge
446
446
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
- RELEASE_HEADER
3
- } from "../index-y91ry9h2.js";
2
+ RELEASE_HEADER2
3
+ } from "../index-n15jny5b.js";
4
4
  // src/release/marker.ts
5
5
  var BUILD_ID = /^[!-~]{1,200}$/;
6
6
  function createReleaseMarker(config) {
@@ -187,10 +187,10 @@ function createReleaseWatcher(config) {
187
187
  };
188
188
  }
189
189
  export {
190
- observeReleaseFromSocket,
191
- createReleaseWatcher,
192
- createReleaseMarker,
193
- browserReleaseHost,
190
+ RELEASE_HEADER2 as RELEASE_HEADER,
194
191
  bindReleaseToSocketServer,
195
- RELEASE_HEADER
192
+ browserReleaseHost,
193
+ createReleaseMarker,
194
+ createReleaseWatcher,
195
+ observeReleaseFromSocket
196
196
  };
@@ -1,23 +1,21 @@
1
+ import"../index-hby4qhax.js";
1
2
  import {
2
- createClient
3
- } from "../index-ham5sz8m.js";
4
- import"../index-48ffdxgk.js";
5
- import"../index-wqgjfstn.js";
3
+ ApiError2
4
+ } from "../index-qjeggp8w.js";
5
+ import"../index-m38ej7e5.js";
6
+ import"../index-r5c4fedv.js";
6
7
  import {
7
- ApiError
8
- } from "../index-v260df89.js";
8
+ createClient2
9
+ } from "../index-aaj97r4y.js";
9
10
  import {
10
- contractMethodFields
11
- } from "../index-2bxbyab0.js";
12
- import"../index-4gcnakhx.js";
13
- import"../index-zcgf3gqf.js";
11
+ AppError2
12
+ } from "../index-n53mswt3.js";
14
13
  import {
15
- AppError
16
- } from "../index-2vtcmrj9.js";
17
- import"../index-kzfs85xp.js";
14
+ contractMethodFields
15
+ } from "../index-1bx1xv1k.js";
18
16
  import {
19
17
  isRecord
20
- } from "../index-hffjpmq9.js";
18
+ } from "../index-9jfdm5tg.js";
21
19
 
22
20
  // src/tools/remote.ts
23
21
  function toArgs(ctx) {
@@ -28,7 +26,7 @@ function toArgs(ctx) {
28
26
  };
29
27
  }
30
28
  function implementRemote(contract, http, options) {
31
- const client = createClient(contract, http);
29
+ const client = createClient2(contract, http);
32
30
  const groupScope = contract.meta.scope ?? "public";
33
31
  const methods = {};
34
32
  for (const [key, endpoint] of Object.entries(contract.endpoints)) {
@@ -46,8 +44,8 @@ function implementRemote(contract, http, options) {
46
44
  const finalArgs = options?.transformArgs ? await options.transformArgs(key, args) : args;
47
45
  return await call(finalArgs);
48
46
  } catch (err) {
49
- if (ApiError.is(err)) {
50
- throw new AppError(err.code, err.message, err.status, isRecord(err.details) ? err.details : undefined, err.hint, err.traceId);
47
+ if (ApiError2.is(err)) {
48
+ throw new AppError2(err.code, err.message, err.status, isRecord(err.details) ? err.details : undefined, err.hint, err.traceId);
51
49
  }
52
50
  throw err;
53
51
  }