@mentra/sdk 2.1.31-beta.5 → 3.0.0-alpha.1

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 (169) hide show
  1. package/README.md +54 -9
  2. package/dist/MiniAppServer.d.ts +58 -0
  3. package/dist/MiniAppServer.d.ts.map +1 -0
  4. package/dist/app/server/index.d.ts +208 -70
  5. package/dist/app/server/index.d.ts.map +1 -1
  6. package/dist/app/session/events.d.ts +20 -3
  7. package/dist/app/session/events.d.ts.map +1 -1
  8. package/dist/app/session/index.d.ts +56 -3
  9. package/dist/app/session/index.d.ts.map +1 -1
  10. package/dist/app/session/modules/audio-output-stream.d.ts +108 -0
  11. package/dist/app/session/modules/audio-output-stream.d.ts.map +1 -0
  12. package/dist/app/session/modules/audio.d.ts +36 -1
  13. package/dist/app/session/modules/audio.d.ts.map +1 -1
  14. package/dist/app/session/modules/camera-managed-extension.d.ts +37 -33
  15. package/dist/app/session/modules/camera-managed-extension.d.ts.map +1 -1
  16. package/dist/app/session/modules/camera.d.ts +113 -93
  17. package/dist/app/session/modules/camera.d.ts.map +1 -1
  18. package/dist/app/session/modules/index.d.ts +4 -3
  19. package/dist/app/session/modules/index.d.ts.map +1 -1
  20. package/dist/app/session/modules/led.d.ts.map +1 -1
  21. package/dist/app/session/modules/location.d.ts.map +1 -1
  22. package/dist/app/session/settings.d.ts +5 -1
  23. package/dist/app/session/settings.d.ts.map +1 -1
  24. package/dist/app/webview/index.d.ts +67 -9
  25. package/dist/app/webview/index.d.ts.map +1 -1
  26. package/dist/constants/log-messages/updates.d.ts +32 -9
  27. package/dist/constants/log-messages/updates.d.ts.map +1 -1
  28. package/dist/constants/log-messages/warning.d.ts +12 -0
  29. package/dist/constants/log-messages/warning.d.ts.map +1 -1
  30. package/dist/display-utils.d.ts +3 -1
  31. package/dist/display-utils.d.ts.map +1 -1
  32. package/dist/display-utils.js +443 -26
  33. package/dist/display-utils.js.map +10 -6
  34. package/dist/index.d.ts +22 -14
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +8957 -4428
  37. package/dist/index.js.map +63 -31
  38. package/dist/internal/_SessionManager.d.ts +76 -0
  39. package/dist/internal/_SessionManager.d.ts.map +1 -0
  40. package/dist/logging/clean-transport.d.ts +50 -0
  41. package/dist/logging/clean-transport.d.ts.map +1 -0
  42. package/dist/logging/errors.d.ts +90 -0
  43. package/dist/logging/errors.d.ts.map +1 -0
  44. package/dist/logging/logger.d.ts +72 -1
  45. package/dist/logging/logger.d.ts.map +1 -1
  46. package/dist/logging/telemetry-transport.d.ts +51 -0
  47. package/dist/logging/telemetry-transport.d.ts.map +1 -0
  48. package/dist/session/DataStreamRouter.d.ts +219 -0
  49. package/dist/session/DataStreamRouter.d.ts.map +1 -0
  50. package/dist/session/MentraSession.d.ts +102 -0
  51. package/dist/session/MentraSession.d.ts.map +1 -0
  52. package/dist/session/index.d.ts +2 -0
  53. package/dist/session/index.d.ts.map +1 -0
  54. package/dist/session/internal/_ConnectionManager.d.ts +43 -0
  55. package/dist/session/internal/_ConnectionManager.d.ts.map +1 -0
  56. package/dist/session/internal/_MessageRouter.d.ts +11 -0
  57. package/dist/session/internal/_MessageRouter.d.ts.map +1 -0
  58. package/dist/session/internal/_SubscriptionManager.d.ts +32 -0
  59. package/dist/session/internal/_SubscriptionManager.d.ts.map +1 -0
  60. package/dist/session/internal/_V2AudioStreamShim.d.ts +12 -0
  61. package/dist/session/internal/_V2AudioStreamShim.d.ts.map +1 -0
  62. package/dist/session/internal/_V2CameraShim.d.ts +52 -0
  63. package/dist/session/internal/_V2CameraShim.d.ts.map +1 -0
  64. package/dist/session/internal/_V2EventManagerShim.d.ts +52 -0
  65. package/dist/session/internal/_V2EventManagerShim.d.ts.map +1 -0
  66. package/dist/session/internal/_V2SessionShim.d.ts +169 -0
  67. package/dist/session/internal/_V2SessionShim.d.ts.map +1 -0
  68. package/dist/session/internal/_V2SettingsShim.d.ts +17 -0
  69. package/dist/session/internal/_V2SettingsShim.d.ts.map +1 -0
  70. package/dist/session/managers/CameraManager.d.ts +198 -0
  71. package/dist/session/managers/CameraManager.d.ts.map +1 -0
  72. package/dist/session/managers/DashboardManager.d.ts +131 -0
  73. package/dist/session/managers/DashboardManager.d.ts.map +1 -0
  74. package/dist/session/managers/DeviceManager.d.ts +348 -0
  75. package/dist/session/managers/DeviceManager.d.ts.map +1 -0
  76. package/dist/session/managers/DisplayManager.d.ts +171 -0
  77. package/dist/session/managers/DisplayManager.d.ts.map +1 -0
  78. package/dist/session/managers/LedManager.d.ts +116 -0
  79. package/dist/session/managers/LedManager.d.ts.map +1 -0
  80. package/dist/session/managers/LocationManager.d.ts +224 -0
  81. package/dist/session/managers/LocationManager.d.ts.map +1 -0
  82. package/dist/session/managers/MicManager.d.ts +252 -0
  83. package/dist/session/managers/MicManager.d.ts.map +1 -0
  84. package/dist/session/managers/PermissionsManager.d.ts +139 -0
  85. package/dist/session/managers/PermissionsManager.d.ts.map +1 -0
  86. package/dist/session/managers/PhoneManager.d.ts +351 -0
  87. package/dist/session/managers/PhoneManager.d.ts.map +1 -0
  88. package/dist/session/managers/SpeakerManager.d.ts +285 -0
  89. package/dist/session/managers/SpeakerManager.d.ts.map +1 -0
  90. package/dist/session/managers/StorageManager.d.ts +289 -0
  91. package/dist/session/managers/StorageManager.d.ts.map +1 -0
  92. package/dist/session/managers/TimeUtils.d.ts +175 -0
  93. package/dist/session/managers/TimeUtils.d.ts.map +1 -0
  94. package/dist/session/managers/TranscriptionManager.d.ts +195 -0
  95. package/dist/session/managers/TranscriptionManager.d.ts.map +1 -0
  96. package/dist/session/managers/TranslationManager.d.ts +189 -0
  97. package/dist/session/managers/TranslationManager.d.ts.map +1 -0
  98. package/dist/session.d.ts +41 -0
  99. package/dist/session.d.ts.map +1 -0
  100. package/dist/session.js +4110 -0
  101. package/dist/session.js.map +44 -0
  102. package/dist/transport/Transport.d.ts +119 -0
  103. package/dist/transport/Transport.d.ts.map +1 -0
  104. package/dist/transport/WebSocketTransport.d.ts +73 -0
  105. package/dist/transport/WebSocketTransport.d.ts.map +1 -0
  106. package/dist/types/index.d.ts +31 -5
  107. package/dist/types/index.d.ts.map +1 -1
  108. package/dist/types/message-types.d.ts +25 -9
  109. package/dist/types/message-types.d.ts.map +1 -1
  110. package/dist/types/messages/app-to-cloud.d.ts +113 -16
  111. package/dist/types/messages/app-to-cloud.d.ts.map +1 -1
  112. package/dist/types/messages/cloud-to-app.d.ts +50 -4
  113. package/dist/types/messages/cloud-to-app.d.ts.map +1 -1
  114. package/dist/types/messages/cloud-to-glasses.d.ts +43 -14
  115. package/dist/types/messages/cloud-to-glasses.d.ts.map +1 -1
  116. package/dist/types/messages/glasses-to-cloud.d.ts +5 -5
  117. package/dist/types/messages/glasses-to-cloud.d.ts.map +1 -1
  118. package/dist/types/models.d.ts +17 -0
  119. package/dist/types/models.d.ts.map +1 -1
  120. package/dist/types/rtmp-stream.d.ts +4 -4
  121. package/dist/types/rtmp-stream.d.ts.map +1 -1
  122. package/dist/types/streams.d.ts +6 -1
  123. package/dist/types/streams.d.ts.map +1 -1
  124. package/dist/types/webhooks.d.ts +11 -0
  125. package/dist/types/webhooks.d.ts.map +1 -1
  126. package/dist/utils/error-utils.d.ts +139 -0
  127. package/dist/utils/error-utils.d.ts.map +1 -0
  128. package/dist/utils/permissions-utils.d.ts +30 -7
  129. package/dist/utils/permissions-utils.d.ts.map +1 -1
  130. package/node_modules/@mentra/types/dist/applet.d.ts +5 -1
  131. package/node_modules/@mentra/types/dist/applet.d.ts.map +1 -1
  132. package/node_modules/@mentra/types/dist/capabilities/even-realities-g2.d.ts +12 -0
  133. package/node_modules/@mentra/types/dist/capabilities/even-realities-g2.d.ts.map +1 -0
  134. package/node_modules/@mentra/types/dist/capabilities/even-realities-g2.js +61 -0
  135. package/node_modules/@mentra/types/dist/capabilities/mentra-display.d.ts +12 -0
  136. package/node_modules/@mentra/types/dist/capabilities/mentra-display.d.ts.map +1 -0
  137. package/node_modules/@mentra/types/dist/capabilities/mentra-display.js +54 -0
  138. package/node_modules/@mentra/types/dist/capabilities/none.d.ts +13 -0
  139. package/node_modules/@mentra/types/dist/capabilities/none.d.ts.map +1 -0
  140. package/node_modules/@mentra/types/dist/capabilities/none.js +67 -0
  141. package/node_modules/@mentra/types/dist/enums.d.ts +8 -2
  142. package/node_modules/@mentra/types/dist/enums.d.ts.map +1 -1
  143. package/node_modules/@mentra/types/dist/enums.js +9 -2
  144. package/node_modules/@mentra/types/dist/hardware.d.ts +3 -1
  145. package/node_modules/@mentra/types/dist/hardware.d.ts.map +1 -1
  146. package/node_modules/@mentra/types/dist/hardware.js +12 -2
  147. package/node_modules/@mentra/types/dist/index.d.ts +1 -1
  148. package/node_modules/@mentra/types/dist/index.d.ts.map +1 -1
  149. package/node_modules/@mentra/types/dist/index.js +2 -1
  150. package/node_modules/@mentra/types/package.json +2 -2
  151. package/package.json +24 -12
  152. package/dist/examples/managed-rtmp-streaming-example.d.ts +0 -2
  153. package/dist/examples/managed-rtmp-streaming-example.d.ts.map +0 -1
  154. package/dist/examples/managed-rtmp-streaming-with-restream-example.d.ts +0 -11
  155. package/dist/examples/managed-rtmp-streaming-with-restream-example.d.ts.map +0 -1
  156. package/dist/examples/rtmp-streaming-example.d.ts +0 -2
  157. package/dist/examples/rtmp-streaming-example.d.ts.map +0 -1
  158. package/node_modules/@mentra/types/src/applet.ts +0 -51
  159. package/node_modules/@mentra/types/src/capabilities/even-realities-g1.ts +0 -63
  160. package/node_modules/@mentra/types/src/capabilities/mentra-live.ts +0 -103
  161. package/node_modules/@mentra/types/src/capabilities/simulated-glasses.ts +0 -76
  162. package/node_modules/@mentra/types/src/capabilities/vuzix-z100.ts +0 -60
  163. package/node_modules/@mentra/types/src/cli.ts +0 -169
  164. package/node_modules/@mentra/types/src/device.ts +0 -43
  165. package/node_modules/@mentra/types/src/enums.ts +0 -36
  166. package/node_modules/@mentra/types/src/hardware.ts +0 -172
  167. package/node_modules/@mentra/types/src/index.ts +0 -64
  168. package/node_modules/@mentra/types/tsconfig.json +0 -22
  169. package/node_modules/@mentra/types/tsconfig.tsbuildinfo +0 -1
@@ -1,3 +1,15 @@
1
+ /**
2
+ * warning.ts
3
+ *
4
+ * Permission warning messages for the MentraOS SDK.
5
+ *
6
+ * Previously used boxen-bordered ASCII art banners with side-by-side layouts.
7
+ * Now returns plain single-line strings that the clean transport formats with
8
+ * color/prefix.
9
+ *
10
+ * The clean logger renders these as:
11
+ * MentraOS ⚠ camera permission required for requestPhoto — enable at https://console.mentra.glass/apps/org.example.myapp/edit
12
+ */
1
13
  export declare const noMicrophoneWarn: (funcName?: string, packageName?: string) => string;
2
14
  export declare const locationWarn: (funcName?: string, packageName?: string) => string;
3
15
  export declare const baackgroundLocationWarn: (funcName?: string, packageName?: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"warning.d.ts","sourceRoot":"","sources":["../../../src/constants/log-messages/warning.ts"],"names":[],"mappings":"AA0EA,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,cAAc,MAAM,KACnB,MAEF,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,WAAW,MAAM,EACjB,cAAc,MAAM,KACnB,MAEF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,WAAW,MAAM,EACjB,cAAc,MAAM,KACnB,MAEF,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,WAAW,MAAM,EACjB,cAAc,MAAM,KACnB,MAEF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,WAAW,MAAM,EACjB,cAAc,MAAM,KACnB,MAEF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,WAAW,MAAM,EACjB,cAAc,MAAM,KACnB,MAEF,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,WAAW,MAAM,EAAE,cAAc,MAAM,KAAG,MAEpE,CAAC"}
1
+ {"version":3,"file":"warning.d.ts","sourceRoot":"","sources":["../../../src/constants/log-messages/warning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,eAAO,MAAM,gBAAgB,GAAI,WAAW,MAAM,EAAE,cAAc,MAAM,KAAG,MACb,CAAC;AAE/D,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,EAAE,cAAc,MAAM,KAAG,MACX,CAAC;AAE7D,eAAO,MAAM,uBAAuB,GAAI,WAAW,MAAM,EAAE,cAAc,MAAM,KAAG,MACX,CAAC;AAExE,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,EAAE,cAAc,MAAM,KAAG,MACX,CAAC;AAE7D,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,EAAE,cAAc,MAAM,KAAG,MACT,CAAC;AAEtE,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,EAAE,cAAc,MAAM,KAAG,MACT,CAAC;AAEtE,eAAO,MAAM,UAAU,GAAI,WAAW,MAAM,EAAE,cAAc,MAAM,KAAG,MACX,CAAC"}
@@ -4,6 +4,8 @@
4
4
  * Glasses-agnostic, pixel-accurate text measurement and wrapping library
5
5
  * for smart glasses displays.
6
6
  *
7
+ * This module re-exports from the shared @mentra/display-utils package.
8
+ *
7
9
  * @example
8
10
  * ```typescript
9
11
  * import {
@@ -26,5 +28,5 @@
26
28
  * const viewport = scrollView.getViewport()
27
29
  * ```
28
30
  */
29
- export { type DisplayProfile, type FontMetrics, type UniformScriptWidths, type FallbackConfig, type DisplayConstraints, type ScriptType, G1_PROFILE, G1_PROFILE_LEGACY, G1_HYPHEN_WIDTH_PX, G1_SPACE_WIDTH_PX, TextMeasurer, type CharMeasurement, type TextMeasurement, detectScript, isCJKCharacter, isKoreanCharacter, isUniformWidthScript, isUnsupportedScript, needsHyphenForBreak, SCRIPT_RANGES, TextWrapper, type WrapOptions, type WrapResult, type LineMetrics, type BreakMode, DEFAULT_WRAP_OPTIONS, DisplayHelpers, type TruncateResult, type Page, type Chunk, ScrollView, type ScrollPosition, type ScrollViewport, createDisplayToolkit, createG1Toolkit, createG1LegacyToolkit, } from "./display-utils/index";
31
+ export * from "@mentra/display-utils";
30
32
  //# sourceMappingURL=display-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"display-utils.d.ts","sourceRoot":"","sources":["../src/display-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAGjB,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EAGb,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,oBAAoB,EAGpB,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,IAAI,EACT,KAAK,KAAK,EAGV,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EAGnB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,GACtB,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"display-utils.d.ts","sourceRoot":"","sources":["../src/display-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,cAAc,uBAAuB,CAAA"}
@@ -3,33 +3,43 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ function __accessProp(key) {
7
+ return this[key];
8
+ }
7
9
  var __toCommonJS = (from) => {
8
- var entry = __moduleCache.get(from), desc;
10
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
9
11
  if (entry)
10
12
  return entry;
11
13
  entry = __defProp({}, "__esModule", { value: true });
12
- if (from && typeof from === "object" || typeof from === "function")
13
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
14
- get: () => from[key],
15
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
- }));
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (var key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(entry, key))
17
+ __defProp(entry, key, {
18
+ get: __accessProp.bind(from, key),
19
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
20
+ });
21
+ }
17
22
  __moduleCache.set(from, entry);
18
23
  return entry;
19
24
  };
25
+ var __moduleCache;
26
+ var __returnValue = (v) => v;
27
+ function __exportSetter(name, newValue) {
28
+ this[name] = __returnValue.bind(null, newValue);
29
+ }
20
30
  var __export = (target, all) => {
21
31
  for (var name in all)
22
32
  __defProp(target, name, {
23
33
  get: all[name],
24
34
  enumerable: true,
25
35
  configurable: true,
26
- set: (newValue) => all[name] = () => newValue
36
+ set: __exportSetter.bind(all, name)
27
37
  });
28
38
  };
29
39
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
30
40
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
31
41
 
32
- // src/display-utils/profiles/g1.ts
42
+ // ../display-utils/src/profiles/g1.ts
33
43
  var G1_GLYPH_WIDTHS = {
34
44
  " ": 2,
35
45
  "!": 1,
@@ -187,7 +197,273 @@ var G1_PROFILE_LEGACY = {
187
197
  };
188
198
  var G1_HYPHEN_WIDTH_PX = 10;
189
199
  var G1_SPACE_WIDTH_PX = 6;
190
- // src/display-utils/measurer/script-detection.ts
200
+ // ../display-utils/src/profiles/z100.ts
201
+ var Z100_GLYPH_WIDTHS = {
202
+ " ": 5,
203
+ "!": 6,
204
+ '"': 9,
205
+ "#": 14,
206
+ $: 12,
207
+ "%": 17,
208
+ "&": 15,
209
+ "'": 5,
210
+ "(": 6,
211
+ ")": 6,
212
+ "*": 12,
213
+ "+": 12,
214
+ ",": 6,
215
+ "-": 7,
216
+ ".": 6,
217
+ "/": 8,
218
+ "0": 12,
219
+ "1": 12,
220
+ "2": 12,
221
+ "3": 12,
222
+ "4": 12,
223
+ "5": 12,
224
+ "6": 12,
225
+ "7": 12,
226
+ "8": 12,
227
+ "9": 12,
228
+ ":": 6,
229
+ ";": 6,
230
+ "<": 12,
231
+ "=": 12,
232
+ ">": 12,
233
+ "?": 9,
234
+ "@": 19,
235
+ A: 13,
236
+ B: 14,
237
+ C: 13,
238
+ D: 15,
239
+ E: 12,
240
+ F: 11,
241
+ G: 15,
242
+ H: 16,
243
+ I: 7,
244
+ J: 6,
245
+ K: 13,
246
+ L: 11,
247
+ M: 19,
248
+ N: 16,
249
+ O: 16,
250
+ P: 13,
251
+ Q: 16,
252
+ R: 13,
253
+ S: 12,
254
+ T: 12,
255
+ U: 15,
256
+ V: 13,
257
+ W: 20,
258
+ X: 12,
259
+ Y: 12,
260
+ Z: 12,
261
+ "[": 7,
262
+ "\\": 8,
263
+ "]": 7,
264
+ "^": 12,
265
+ _: 9,
266
+ "`": 6,
267
+ a: 12,
268
+ b: 13,
269
+ c: 10,
270
+ d: 13,
271
+ e: 12,
272
+ f: 7,
273
+ g: 13,
274
+ h: 13,
275
+ i: 5,
276
+ j: 5,
277
+ k: 11,
278
+ l: 5,
279
+ m: 20,
280
+ n: 13,
281
+ o: 13,
282
+ p: 13,
283
+ q: 13,
284
+ r: 9,
285
+ s: 10,
286
+ t: 8,
287
+ u: 13,
288
+ v: 11,
289
+ w: 17,
290
+ x: 11,
291
+ y: 11,
292
+ z: 10,
293
+ "{": 8,
294
+ "|": 12,
295
+ "}": 8,
296
+ "~": 12
297
+ };
298
+ var Z100_PROFILE = {
299
+ id: "vuzix-z100",
300
+ name: "Vuzix Z100",
301
+ displayWidthPx: 390,
302
+ maxLines: 7,
303
+ maxPayloadBytes: 512,
304
+ bleChunkSize: 180,
305
+ fontMetrics: {
306
+ glyphWidths: new Map(Object.entries(Z100_GLYPH_WIDTHS)),
307
+ defaultGlyphWidth: 12,
308
+ renderFormula: (glyphWidth) => glyphWidth,
309
+ uniformScripts: {
310
+ cjk: 21,
311
+ hiragana: 21,
312
+ katakana: 21,
313
+ korean: 21,
314
+ cyrillic: 14
315
+ },
316
+ fallback: {
317
+ latinMaxWidth: 20,
318
+ unknownBehavior: "useLatinMax"
319
+ }
320
+ },
321
+ constraints: {
322
+ minCharsBeforeHyphen: 3,
323
+ noStartChars: [".", ",", "!", "?", ":", ";", ")", "]", "}", "。", ",", "!", "?", ":", ";", ")", "】", "」"],
324
+ noEndChars: ["(", "[", "{", "(", "【", "「"]
325
+ }
326
+ };
327
+ var Z100_HYPHEN_WIDTH_PX = 7;
328
+ var Z100_SPACE_WIDTH_PX = 5;
329
+ // ../display-utils/src/profiles/g2.ts
330
+ var G2_PROFILE = {
331
+ ...G1_PROFILE,
332
+ id: "even-realities-g2",
333
+ name: "Even Realities G2"
334
+ };
335
+ var G2_HYPHEN_WIDTH_PX = 10;
336
+ var G2_SPACE_WIDTH_PX = 6;
337
+ // ../display-utils/src/profiles/nex.ts
338
+ var NEX_GLYPH_WIDTHS = {
339
+ " ": 2,
340
+ "!": 1,
341
+ '"': 2,
342
+ "#": 6,
343
+ $: 5,
344
+ "%": 6,
345
+ "&": 7,
346
+ "'": 1,
347
+ "(": 2,
348
+ ")": 2,
349
+ "*": 3,
350
+ "+": 4,
351
+ ",": 1,
352
+ "-": 4,
353
+ ".": 1,
354
+ "/": 3,
355
+ "0": 5,
356
+ "1": 3,
357
+ "2": 5,
358
+ "3": 5,
359
+ "4": 5,
360
+ "5": 5,
361
+ "6": 5,
362
+ "7": 5,
363
+ "8": 5,
364
+ "9": 5,
365
+ ":": 1,
366
+ ";": 1,
367
+ "<": 4,
368
+ "=": 4,
369
+ ">": 4,
370
+ "?": 5,
371
+ "@": 7,
372
+ A: 6,
373
+ B: 5,
374
+ C: 5,
375
+ D: 5,
376
+ E: 4,
377
+ F: 4,
378
+ G: 5,
379
+ H: 5,
380
+ I: 2,
381
+ J: 3,
382
+ K: 5,
383
+ L: 4,
384
+ M: 7,
385
+ N: 5,
386
+ O: 5,
387
+ P: 5,
388
+ Q: 5,
389
+ R: 5,
390
+ S: 5,
391
+ T: 5,
392
+ U: 5,
393
+ V: 6,
394
+ W: 7,
395
+ X: 6,
396
+ Y: 6,
397
+ Z: 5,
398
+ "[": 2,
399
+ "\\": 3,
400
+ "]": 2,
401
+ "^": 4,
402
+ _: 3,
403
+ "`": 2,
404
+ a: 5,
405
+ b: 4,
406
+ c: 4,
407
+ d: 4,
408
+ e: 4,
409
+ f: 4,
410
+ g: 4,
411
+ h: 4,
412
+ i: 1,
413
+ j: 2,
414
+ k: 4,
415
+ l: 1,
416
+ m: 7,
417
+ n: 4,
418
+ o: 4,
419
+ p: 4,
420
+ q: 4,
421
+ r: 3,
422
+ s: 4,
423
+ t: 3,
424
+ u: 5,
425
+ v: 5,
426
+ w: 7,
427
+ x: 5,
428
+ y: 5,
429
+ z: 4,
430
+ "{": 3,
431
+ "|": 1,
432
+ "}": 3,
433
+ "~": 7
434
+ };
435
+ var NEX_PROFILE = {
436
+ id: "mentra-nex",
437
+ name: "Mentra Nex",
438
+ displayWidthPx: 576,
439
+ maxLines: 5,
440
+ maxPayloadBytes: 390,
441
+ bleChunkSize: 176,
442
+ fontMetrics: {
443
+ glyphWidths: new Map(Object.entries(NEX_GLYPH_WIDTHS)),
444
+ defaultGlyphWidth: 7,
445
+ renderFormula: (glyphWidth) => (glyphWidth + 1) * 2,
446
+ uniformScripts: {
447
+ cjk: 18,
448
+ hiragana: 18,
449
+ katakana: 18,
450
+ korean: 24,
451
+ cyrillic: 18
452
+ },
453
+ fallback: {
454
+ latinMaxWidth: 16,
455
+ unknownBehavior: "useLatinMax"
456
+ }
457
+ },
458
+ constraints: {
459
+ minCharsBeforeHyphen: 3,
460
+ noStartChars: [".", ",", "!", "?", ":", ";", ")", "]", "}", "。", ",", "!", "?", ":", ";", ")", "】", "」"],
461
+ noEndChars: ["(", "[", "{", "(", "【", "「"]
462
+ }
463
+ };
464
+ var NEX_HYPHEN_WIDTH_PX = 10;
465
+ var NEX_SPACE_WIDTH_PX = 6;
466
+ // ../display-utils/src/measurer/script-detection.ts
191
467
  var SCRIPT_RANGES = {
192
468
  cjk: [
193
469
  [19968, 40959],
@@ -310,7 +586,7 @@ function needsHyphenForBreak(charBefore, charAfter) {
310
586
  return true;
311
587
  }
312
588
 
313
- // src/display-utils/measurer/TextMeasurer.ts
589
+ // ../display-utils/src/measurer/TextMeasurer.ts
314
590
  class TextMeasurer {
315
591
  profile;
316
592
  charCache = new Map;
@@ -465,16 +741,16 @@ class TextMeasurer {
465
741
  this.buildCharCache();
466
742
  }
467
743
  }
468
- // src/display-utils/wrapper/types.ts
744
+ // ../display-utils/src/wrapper/types.ts
469
745
  var DEFAULT_WRAP_OPTIONS = {
470
- breakMode: "character",
746
+ breakMode: "character-no-hyphen",
471
747
  hyphenChar: "-",
472
748
  minCharsBeforeHyphen: 3,
473
749
  trimLines: true,
474
750
  preserveNewlines: true
475
751
  };
476
752
 
477
- // src/display-utils/wrapper/TextWrapper.ts
753
+ // ../display-utils/src/wrapper/TextWrapper.ts
478
754
  class TextWrapper {
479
755
  measurer;
480
756
  defaultOptions;
@@ -571,6 +847,8 @@ class TextWrapper {
571
847
  switch (breakMode) {
572
848
  case "character":
573
849
  return this.wrapCharacterMode(trimmed, maxWidthPx, opts);
850
+ case "character-no-hyphen":
851
+ return this.wrapCharacterNoHyphenMode(trimmed, maxWidthPx, opts);
574
852
  case "word":
575
853
  return this.wrapWordMode(trimmed, maxWidthPx, opts);
576
854
  case "strict-word":
@@ -580,6 +858,12 @@ class TextWrapper {
580
858
  }
581
859
  }
582
860
  wrapCharacterMode(text, maxWidthPx, opts) {
861
+ return this.wrapCharacterModeInternal(text, maxWidthPx, opts, true);
862
+ }
863
+ wrapCharacterNoHyphenMode(text, maxWidthPx, opts) {
864
+ return this.wrapCharacterModeInternal(text, maxWidthPx, opts, false);
865
+ }
866
+ wrapCharacterModeInternal(text, maxWidthPx, opts, useHyphen) {
583
867
  const lines = [];
584
868
  const hyphenWidth = this.measurer.measureChar(opts.hyphenChar);
585
869
  let currentLine = "";
@@ -593,7 +877,7 @@ class TextWrapper {
593
877
  currentWidth += charWidth;
594
878
  } else {
595
879
  const prevChar = currentLine.length > 0 ? currentLine[currentLine.length - 1] : "";
596
- const needsHyphen = currentLine.length >= opts.minCharsBeforeHyphen && needsHyphenForBreak(prevChar, char);
880
+ const needsHyphen = useHyphen && currentLine.length >= opts.minCharsBeforeHyphen && needsHyphenForBreak(prevChar, char);
597
881
  if (needsHyphen) {
598
882
  const result = this.backoffForHyphen(currentLine, currentWidth, maxWidthPx, hyphenWidth, opts);
599
883
  if (result.skipHyphen) {
@@ -603,6 +887,13 @@ class TextWrapper {
603
887
  }
604
888
  currentLine = result.remainder + char;
605
889
  currentWidth = this.measurer.measureText(currentLine);
890
+ } else if (useHyphen === false && !isCJKCharacter(char) && char !== " ") {
891
+ const trimmedLine = opts.trimLines ? currentLine.trimEnd() : currentLine;
892
+ if (trimmedLine) {
893
+ lines.push(trimmedLine);
894
+ }
895
+ currentLine = char;
896
+ currentWidth = charWidth;
606
897
  } else {
607
898
  const trimmedLine = opts.trimLines ? currentLine.trimEnd() : currentLine;
608
899
  if (trimmedLine) {
@@ -804,7 +1095,7 @@ class TextWrapper {
804
1095
  };
805
1096
  }
806
1097
  }
807
- // src/display-utils/helpers/DisplayHelpers.ts
1098
+ // ../display-utils/src/helpers/DisplayHelpers.ts
808
1099
  class DisplayHelpers {
809
1100
  measurer;
810
1101
  wrapper;
@@ -1009,7 +1300,7 @@ class DisplayHelpers {
1009
1300
  return this.profile;
1010
1301
  }
1011
1302
  }
1012
- // src/display-utils/helpers/ScrollView.ts
1303
+ // ../display-utils/src/helpers/ScrollView.ts
1013
1304
  class ScrollView {
1014
1305
  measurer;
1015
1306
  wrapper;
@@ -1146,30 +1437,142 @@ class ScrollView {
1146
1437
  return this.profile;
1147
1438
  }
1148
1439
  }
1149
- // src/display-utils/index.ts
1440
+ // ../display-utils/src/composer/ColumnComposer.ts
1441
+ class ColumnComposer {
1442
+ profile;
1443
+ measurer;
1444
+ wrapper;
1445
+ spaceWidthPx;
1446
+ constructor(profile, breakMode = "character-no-hyphen") {
1447
+ this.profile = profile;
1448
+ this.measurer = new TextMeasurer(profile);
1449
+ this.wrapper = new TextWrapper(this.measurer, {
1450
+ breakMode
1451
+ });
1452
+ this.spaceWidthPx = this.measurer.measureText(" ");
1453
+ }
1454
+ composeDoubleTextWall(leftText, rightText, options = {}) {
1455
+ const config = this.getColumnConfig(options.columnConfig);
1456
+ const leftWrapOptions = {
1457
+ maxWidthPx: config.leftColumnWidthPx,
1458
+ maxLines: config.maxLines
1459
+ };
1460
+ const rightWrapOptions = {
1461
+ maxWidthPx: config.rightColumnWidthPx,
1462
+ maxLines: config.maxLines
1463
+ };
1464
+ const leftResult = this.wrapper.wrap(leftText || "", leftWrapOptions);
1465
+ const rightResult = this.wrapper.wrap(rightText || "", rightWrapOptions);
1466
+ const leftLines = this.padLines(leftResult.lines, config.maxLines);
1467
+ const rightLines = this.padLines(rightResult.lines, config.maxLines);
1468
+ const composedText = this.mergeColumns(leftLines, rightLines, config);
1469
+ return {
1470
+ composedText,
1471
+ leftLines,
1472
+ rightLines,
1473
+ config
1474
+ };
1475
+ }
1476
+ getDefaultColumnConfig() {
1477
+ return this.getColumnConfig();
1478
+ }
1479
+ setBreakMode(breakMode) {
1480
+ this.wrapper = new TextWrapper(this.measurer, {
1481
+ breakMode
1482
+ });
1483
+ }
1484
+ getColumnConfig(overrides) {
1485
+ const displayWidth = this.profile.displayWidthPx;
1486
+ const defaults = {
1487
+ leftColumnWidthPx: Math.floor(displayWidth * 0.5),
1488
+ rightColumnStartPx: Math.floor(displayWidth * 0.55),
1489
+ rightColumnWidthPx: displayWidth - Math.floor(displayWidth * 0.55),
1490
+ maxLines: this.profile.maxLines,
1491
+ leftMarginSpaces: 0
1492
+ };
1493
+ return {
1494
+ ...defaults,
1495
+ ...overrides
1496
+ };
1497
+ }
1498
+ padLines(lines, count) {
1499
+ const result = [...lines];
1500
+ while (result.length < count) {
1501
+ result.push("");
1502
+ }
1503
+ return result.slice(0, count);
1504
+ }
1505
+ mergeColumns(leftLines, rightLines, config) {
1506
+ const lines = [];
1507
+ for (let i = 0;i < config.maxLines; i++) {
1508
+ const leftText = this.cleanEnspaces(leftLines[i] || "");
1509
+ const rightText = this.cleanEnspaces(rightLines[i] || "");
1510
+ const leftWidthPx = this.measurer.measureText(leftText);
1511
+ const spacesNeeded = this.calculateSpacesForAlignment(leftWidthPx, config.rightColumnStartPx);
1512
+ let line = "";
1513
+ if (config.leftMarginSpaces && config.leftMarginSpaces > 0) {
1514
+ line += " ".repeat(config.leftMarginSpaces);
1515
+ }
1516
+ line += leftText;
1517
+ line += " ".repeat(spacesNeeded);
1518
+ line += rightText;
1519
+ lines.push(line);
1520
+ }
1521
+ return lines.join(`
1522
+ `);
1523
+ }
1524
+ calculateSpacesForAlignment(currentWidthPx, targetPositionPx) {
1525
+ const pixelsNeeded = targetPositionPx - currentWidthPx;
1526
+ if (pixelsNeeded <= 0) {
1527
+ return 1;
1528
+ }
1529
+ const spaces = Math.max(1, Math.floor(pixelsNeeded / this.spaceWidthPx));
1530
+ return Math.min(spaces, 100);
1531
+ }
1532
+ cleanEnspaces(text) {
1533
+ return text.replace(/\u2002/g, "");
1534
+ }
1535
+ }
1536
+ function createColumnComposer(profile, breakMode = "word") {
1537
+ return new ColumnComposer(profile, breakMode);
1538
+ }
1539
+ // ../display-utils/src/index.ts
1150
1540
  function createDisplayToolkit(profile = G1_PROFILE, wrapOptions) {
1151
1541
  const measurer = new TextMeasurer(profile);
1152
1542
  const wrapper = new TextWrapper(measurer, wrapOptions);
1153
1543
  const helpers = new DisplayHelpers(measurer, wrapper);
1544
+ const composer = new ColumnComposer(profile, wrapOptions?.breakMode || "word");
1154
1545
  return {
1155
1546
  measurer,
1156
1547
  wrapper,
1157
1548
  helpers,
1549
+ composer,
1158
1550
  profile
1159
1551
  };
1160
1552
  }
1161
1553
  function createG1Toolkit() {
1162
1554
  return createDisplayToolkit(G1_PROFILE, {
1163
- breakMode: "character",
1164
- hyphenChar: "-",
1165
- minCharsBeforeHyphen: 3
1555
+ breakMode: "character-no-hyphen"
1166
1556
  });
1167
1557
  }
1168
1558
  function createG1LegacyToolkit() {
1169
1559
  return createDisplayToolkit(G1_PROFILE_LEGACY, {
1170
- breakMode: "character",
1171
- hyphenChar: "-",
1172
- minCharsBeforeHyphen: 3
1560
+ breakMode: "character-no-hyphen"
1561
+ });
1562
+ }
1563
+ function createG2Toolkit() {
1564
+ return createDisplayToolkit(G2_PROFILE, {
1565
+ breakMode: "character-no-hyphen"
1566
+ });
1567
+ }
1568
+ function createZ100Toolkit() {
1569
+ return createDisplayToolkit(Z100_PROFILE, {
1570
+ breakMode: "character-no-hyphen"
1571
+ });
1572
+ }
1573
+ function createNexToolkit() {
1574
+ return createDisplayToolkit(NEX_PROFILE, {
1575
+ breakMode: "character-no-hyphen"
1173
1576
  });
1174
1577
  }
1175
1578
  export {
@@ -1179,19 +1582,33 @@ export {
1179
1582
  isKoreanCharacter,
1180
1583
  isCJKCharacter,
1181
1584
  detectScript,
1585
+ createZ100Toolkit,
1586
+ createNexToolkit,
1587
+ createG2Toolkit,
1182
1588
  createG1Toolkit,
1183
1589
  createG1LegacyToolkit,
1184
1590
  createDisplayToolkit,
1591
+ createColumnComposer,
1592
+ Z100_SPACE_WIDTH_PX,
1593
+ Z100_PROFILE,
1594
+ Z100_HYPHEN_WIDTH_PX,
1185
1595
  TextWrapper,
1186
1596
  TextMeasurer,
1187
1597
  ScrollView,
1188
1598
  SCRIPT_RANGES,
1599
+ NEX_SPACE_WIDTH_PX,
1600
+ NEX_PROFILE,
1601
+ NEX_HYPHEN_WIDTH_PX,
1602
+ G2_SPACE_WIDTH_PX,
1603
+ G2_PROFILE,
1604
+ G2_HYPHEN_WIDTH_PX,
1189
1605
  G1_SPACE_WIDTH_PX,
1190
1606
  G1_PROFILE_LEGACY,
1191
1607
  G1_PROFILE,
1192
1608
  G1_HYPHEN_WIDTH_PX,
1193
1609
  DisplayHelpers,
1194
- DEFAULT_WRAP_OPTIONS
1610
+ DEFAULT_WRAP_OPTIONS,
1611
+ ColumnComposer
1195
1612
  };
1196
1613
 
1197
- //# debugId=7A9C99D0B00FC7CF64756E2164756E21
1614
+ //# debugId=78924D4AB945D2A664756E2164756E21