@mudlet/mudlet-web 0.5.0 → 1.0.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 (301) hide show
  1. package/README.md +1 -1
  2. package/dist-lib/analytics.d.ts +27 -0
  3. package/dist-lib/assets/fonts/Vera.woff2 +0 -0
  4. package/dist-lib/assets/fonts/VeraBI.woff2 +0 -0
  5. package/dist-lib/assets/fonts/VeraBd.woff2 +0 -0
  6. package/dist-lib/assets/fonts/VeraIt.woff2 +0 -0
  7. package/dist-lib/assets/mapParser.worker-DrVZ3wg_.js +9 -0
  8. package/dist-lib/backupImport-wt8r7JXI.js +233 -0
  9. package/dist-lib/branding.d.ts +111 -13
  10. package/dist-lib/db/sqliteClient.d.ts +195 -7
  11. package/dist-lib/hooks/useAutoReconnect.d.ts +61 -0
  12. package/dist-lib/hooks/useDocumentFullscreen.d.ts +23 -0
  13. package/dist-lib/hooks/useKeyboardShortcuts.d.ts +37 -0
  14. package/dist-lib/hooks/useRecordLastPlayed.d.ts +10 -0
  15. package/dist-lib/import/applyMudletProfile.d.ts +35 -9
  16. package/dist-lib/import/backupImport.d.ts +118 -0
  17. package/dist-lib/import/collectProfileExport.d.ts +33 -2
  18. package/dist-lib/import/defaultPackages.d.ts +57 -14
  19. package/dist-lib/import/defaults/CF-loader/CF-loader.mpackage +0 -0
  20. package/dist-lib/import/defaults/MedBootstrap/MedBootstrap.mpackage +0 -0
  21. package/dist-lib/import/defaults/deleteOldProfiles/deleteOldProfiles.mpackage +0 -0
  22. package/dist-lib/import/defaults/echo/echo.mpackage +0 -0
  23. package/dist-lib/import/defaults/enable-accessibility/enable-accessibility.mpackage +0 -0
  24. package/dist-lib/import/defaults/generic_mapper/generic_mapper.mpackage +0 -0
  25. package/dist-lib/import/defaults/gui-drop/gui-drop.mpackage +0 -0
  26. package/dist-lib/import/defaults/icesus-loader/icesus-loader.mpackage +0 -0
  27. package/dist-lib/import/defaults/mg-loader/mg-loader.mpackage +0 -0
  28. package/dist-lib/import/defaults/mudlet-base-ui/mudlet-base-ui.mpackage +0 -0
  29. package/dist-lib/import/defaults/mudlet-mapper.xml +1215 -389
  30. package/dist-lib/import/mudletControlChars.d.ts +14 -0
  31. package/dist-lib/import/mudletHost.d.ts +73 -10
  32. package/dist-lib/import/mudletLink.d.ts +53 -2
  33. package/dist-lib/import/mudletProfileExport.d.ts +38 -5
  34. package/dist-lib/import/mudletProfileImport.d.ts +110 -12
  35. package/dist-lib/import/mudletVariables.d.ts +4 -3
  36. package/dist-lib/import/mudletWriteback.d.ts +15 -1
  37. package/dist-lib/import/mudletXmlImport.d.ts +46 -0
  38. package/dist-lib/import/packageFonts.d.ts +33 -0
  39. package/dist-lib/import/packageInstaller.d.ts +111 -7
  40. package/dist-lib/import/qtProfileData.d.ts +10 -0
  41. package/dist-lib/import/remotePackageInstall.d.ts +23 -7
  42. package/dist-lib/import/zipEntries.d.ts +45 -0
  43. package/dist-lib/index.d.ts +7 -3
  44. package/dist-lib/index.js +50508 -29836
  45. package/dist-lib/logging/SessionLogger.d.ts +75 -15
  46. package/dist-lib/map/MapSelectionOverlay.d.ts +2 -2
  47. package/dist-lib/map/MapStore.d.ts +387 -60
  48. package/dist-lib/map/MudletHighlightOverlay.d.ts +2 -2
  49. package/dist-lib/map/{MudixMapReader.d.ts → MudletMapReader.d.ts} +2 -2
  50. package/dist-lib/map/areaGraph.d.ts +120 -0
  51. package/dist-lib/map/environmentKit.d.ts +36 -0
  52. package/dist-lib/map/labelPixmap.d.ts +90 -0
  53. package/dist-lib/map/mapImageExport.d.ts +36 -2
  54. package/dist-lib/map/mapStyle.d.ts +11 -0
  55. package/dist-lib/map/mapVersion.d.ts +66 -0
  56. package/dist-lib/map/pathfinding.d.ts +2 -2
  57. package/dist-lib/mud/CharLoginController.d.ts +230 -0
  58. package/dist-lib/mud/ItemIdSequence.d.ts +1 -1
  59. package/dist-lib/mud/MudSession.d.ts +279 -22
  60. package/dist-lib/mud/PatternEngine.d.ts +153 -14
  61. package/dist-lib/mud/aliases/AliasEngine.d.ts +55 -9
  62. package/dist-lib/mud/autoLogin.d.ts +59 -0
  63. package/dist-lib/mud/commandSplit.d.ts +9 -0
  64. package/dist-lib/mud/connection/LineAssembler.d.ts +38 -11
  65. package/dist-lib/mud/connection/MudClient.d.ts +291 -53
  66. package/dist-lib/mud/connection/SubnegotiationRepair.d.ts +24 -0
  67. package/dist-lib/mud/connection/TelnetNegotiator.d.ts +208 -68
  68. package/dist-lib/mud/connection/telnetDebug.d.ts +8 -8
  69. package/dist-lib/mud/events.d.ts +102 -23
  70. package/dist-lib/mud/games/bundledGames.d.ts +12 -7
  71. package/dist-lib/mud/games/gameLinks.d.ts +40 -0
  72. package/dist-lib/mud/games/icons/3Kingdoms.png +0 -0
  73. package/dist-lib/mud/games/icons/3Scapes.png +0 -0
  74. package/dist-lib/mud/games/icons/achaea.png +0 -0
  75. package/dist-lib/mud/games/icons/aetolia.png +0 -0
  76. package/dist-lib/mud/games/icons/banner_astaria.png +0 -0
  77. package/dist-lib/mud/games/icons/banner_darkmists.png +0 -0
  78. package/dist-lib/mud/games/icons/banner_dreamland.png +0 -0
  79. package/dist-lib/mud/games/icons/banner_petria.jpg +0 -0
  80. package/dist-lib/mud/games/icons/banner_ropmud.png +0 -0
  81. package/dist-lib/mud/games/icons/blackmud.png +0 -0
  82. package/dist-lib/mud/games/icons/carrionfields.png +0 -0
  83. package/dist-lib/mud/games/icons/dragonfire_icon.png +0 -0
  84. package/dist-lib/mud/games/icons/fed2-logo.png +0 -0
  85. package/dist-lib/mud/games/icons/icesus_480x120.png +0 -0
  86. package/dist-lib/mud/games/icons/imperian.png +0 -0
  87. package/dist-lib/mud/games/icons/infinity_480x120.png +0 -0
  88. package/dist-lib/mud/games/icons/lusternia.png +0 -0
  89. package/dist-lib/mud/games/icons/morgengrauen_480x120.png +0 -0
  90. package/dist-lib/mud/games/icons/mudlet-tutorial.png +0 -0
  91. package/dist-lib/mud/games/icons/phoenixmud_480x120.png +0 -0
  92. package/dist-lib/mud/games/icons/starmourn.png +0 -0
  93. package/dist-lib/mud/games/icons/voidmud_icon.png +0 -0
  94. package/dist-lib/mud/games/icons/wotmudicon.png +0 -0
  95. package/dist-lib/mud/games/websiteLinks.d.ts +21 -0
  96. package/dist-lib/mud/keybindings/KeyEngine.d.ts +110 -4
  97. package/dist-lib/mud/keybindings/browserReservedKeys.d.ts +2 -2
  98. package/dist-lib/mud/keybindings/keyEventTarget.d.ts +61 -0
  99. package/dist-lib/mud/keybindings/qtKeys.d.ts +91 -12
  100. package/dist-lib/mud/protocol/atcp.d.ts +19 -0
  101. package/dist-lib/mud/protocol/byteString.d.ts +24 -0
  102. package/dist-lib/mud/protocol/charLoginFlow.d.ts +243 -16
  103. package/dist-lib/mud/protocol/charset.d.ts +111 -46
  104. package/dist-lib/mud/protocol/codePages.d.ts +10 -0
  105. package/dist-lib/mud/protocol/constants.d.ts +17 -10
  106. package/dist-lib/mud/protocol/echo.d.ts +23 -27
  107. package/dist-lib/mud/protocol/gmcp.d.ts +36 -6
  108. package/dist-lib/mud/protocol/index.d.ts +3 -2
  109. package/dist-lib/mud/protocol/luaLiteral.d.ts +12 -0
  110. package/dist-lib/mud/protocol/mccp.d.ts +83 -1
  111. package/dist-lib/mud/protocol/mnes.d.ts +41 -58
  112. package/dist-lib/mud/protocol/msdp.d.ts +11 -4
  113. package/dist-lib/mud/protocol/msp.d.ts +3 -2
  114. package/dist-lib/mud/protocol/mssp.d.ts +9 -4
  115. package/dist-lib/mud/protocol/multiByte.d.ts +51 -0
  116. package/dist-lib/mud/protocol/multiByteEncode.d.ts +42 -0
  117. package/dist-lib/mud/protocol/mxp.d.ts +193 -14
  118. package/dist-lib/mud/protocol/oauthClientFlow.d.ts +128 -0
  119. package/dist-lib/mud/protocol/qtCodePages.generated.d.ts +1 -0
  120. package/dist-lib/mud/protocol/tlsCodes.d.ts +40 -3
  121. package/dist-lib/mud/replay/ReplayPlayer.d.ts +16 -1
  122. package/dist-lib/mud/replay/replayFormat.d.ts +29 -2
  123. package/dist-lib/mud/text/Console.d.ts +255 -49
  124. package/dist-lib/mud/text/FormatState.d.ts +137 -14
  125. package/dist-lib/mud/text/ansiEscapes.d.ts +32 -16
  126. package/dist-lib/mud/text/colorParsers.d.ts +14 -2
  127. package/dist-lib/mud/text/colorSpaceId.d.ts +2 -0
  128. package/dist-lib/mud/text/colors.d.ts +17 -10
  129. package/dist-lib/mud/text/controlCharacterMode.d.ts +1 -1
  130. package/dist-lib/mud/text/hyperlinkVisibility.d.ts +1 -1
  131. package/dist-lib/mud/text/lineBreak.d.ts +5 -0
  132. package/dist-lib/mud/text/serverWrap.d.ts +2 -2
  133. package/dist-lib/mud/text/textAnalyzer.d.ts +79 -0
  134. package/dist-lib/mud/text/unicodeRuns.d.ts +11 -0
  135. package/dist-lib/mud/text/unicodeTables.generated.d.ts +3 -0
  136. package/dist-lib/mud/text/wcwidth.d.ts +27 -22
  137. package/dist-lib/mud/timers/TimerEngine.d.ts +163 -11
  138. package/dist-lib/mud/timers/workerClock.d.ts +67 -0
  139. package/dist-lib/mud/triggers/TriggerEngine.d.ts +449 -47
  140. package/dist-lib/mud/triggers/legacyColorPatterns.d.ts +58 -0
  141. package/dist-lib/mud/triggers/pcre/Pcre2.d.ts +83 -1
  142. package/dist-lib/oauth-callback.html +94 -0
  143. package/dist-lib/pcre2Wasm.d.ts +54 -0
  144. package/dist-lib/pcre2Wasm.js +241 -0
  145. package/dist-lib/scripting/EngineHost.d.ts +45 -21
  146. package/dist-lib/scripting/IScriptingRuntime.d.ts +103 -27
  147. package/dist-lib/scripting/MxpFrameManager.d.ts +10 -1
  148. package/dist-lib/scripting/ScriptingAPI.d.ts +1030 -213
  149. package/dist-lib/scripting/ScriptingEngine.d.ts +727 -106
  150. package/dist-lib/scripting/StopwatchManager.d.ts +97 -36
  151. package/dist-lib/scripting/http/HttpService.d.ts +9 -1
  152. package/dist-lib/scripting/http/userUrl.d.ts +41 -0
  153. package/dist-lib/scripting/lua/LuaRuntime.d.ts +352 -77
  154. package/dist-lib/scripting/lua/argContracts.d.ts +71 -0
  155. package/dist-lib/scripting/lua/bindings/automation.d.ts +1 -1
  156. package/dist-lib/scripting/lua/bindings/commands.d.ts +13 -0
  157. package/dist-lib/scripting/lua/bindings/context.d.ts +20 -2
  158. package/dist-lib/scripting/lua/bindings/diagnostics.d.ts +1 -1
  159. package/dist-lib/scripting/lua/bindings/map.d.ts +1 -1
  160. package/dist-lib/scripting/lua/bindings/media.d.ts +2 -2
  161. package/dist-lib/scripting/lua/bindings/output.d.ts +1 -1
  162. package/dist-lib/scripting/lua/bindings/session.d.ts +2 -2
  163. package/dist-lib/scripting/lua/bindings/textEdit.d.ts +1 -1
  164. package/dist-lib/scripting/lua/bindings/userWindows.d.ts +1 -1
  165. package/dist-lib/scripting/lua/byteArmor.d.ts +36 -0
  166. package/dist-lib/scripting/lua/imageSize.d.ts +7 -0
  167. package/dist-lib/scripting/lua/rex.d.ts +4 -2
  168. package/dist-lib/scripting/lua/sqlRowEncoder.d.ts +6 -1
  169. package/dist-lib/scripting/lua/utf8CaseMap.d.ts +1 -0
  170. package/dist-lib/scripting/lua/utf8Patterns.d.ts +21 -1
  171. package/dist-lib/scripting/lua/wellFormedStrings.d.ts +40 -0
  172. package/dist-lib/scripting/lua/yajl.d.ts +43 -5
  173. package/dist-lib/scripting/profilesPresence.d.ts +20 -2
  174. package/dist-lib/scripting/vfs/ProfileVFS.d.ts +164 -10
  175. package/dist-lib/scripting/vfs/fsErrors.d.ts +28 -0
  176. package/dist-lib/scripting/vfs/idbCommit.d.ts +20 -0
  177. package/dist-lib/storage/appStore.d.ts +24 -9
  178. package/dist-lib/storage/hooks.d.ts +5 -1
  179. package/dist-lib/storage/index.d.ts +2 -2
  180. package/dist-lib/storage/mapStorage.d.ts +2 -0
  181. package/dist-lib/storage/persistentStorage.d.ts +3 -1
  182. package/dist-lib/storage/profileStorage.d.ts +15 -0
  183. package/dist-lib/storage/profileVfsData.d.ts +3 -3
  184. package/dist-lib/storage/schema.d.ts +512 -40
  185. package/dist-lib/storage/storageMigration.d.ts +82 -0
  186. package/dist-lib/storage-g5V1b-c1.js +2039 -0
  187. package/dist-lib/styles.css +1 -1
  188. package/dist-lib/ui/AboutModal.d.ts +1 -1
  189. package/dist-lib/ui/BrandLoginFields.d.ts +1 -1
  190. package/dist-lib/ui/BrowserSignInModal.d.ts +23 -0
  191. package/dist-lib/ui/CmdLineMenuRegistry.d.ts +14 -5
  192. package/dist-lib/ui/CommandBar.d.ts +8 -8
  193. package/dist-lib/ui/ConnectionFormModal.d.ts +20 -1
  194. package/dist-lib/ui/ConnectionScreen.d.ts +9 -1
  195. package/dist-lib/ui/GameLinkPrompt.d.ts +28 -0
  196. package/dist-lib/ui/HelpModal.d.ts +5 -1
  197. package/dist-lib/ui/MapSymbolUsageModal.d.ts +32 -0
  198. package/dist-lib/ui/MouseEventRegistry.d.ts +31 -4
  199. package/dist-lib/ui/NotepadModal.d.ts +22 -0
  200. package/dist-lib/ui/ResizableModal.d.ts +16 -1
  201. package/dist-lib/ui/SettingsModal.d.ts +10 -1
  202. package/dist-lib/ui/TlsAlertBanner.d.ts +3 -1
  203. package/dist-lib/ui/Toolbar.d.ts +22 -1
  204. package/dist-lib/ui/VaultManageButton.d.ts +10 -5
  205. package/dist-lib/ui/VaultModal.d.ts +3 -0
  206. package/dist-lib/ui/buttons/ButtonsBar.d.ts +3 -1
  207. package/dist-lib/ui/buttons/inactiveButtons.d.ts +25 -0
  208. package/dist-lib/ui/cmdline/CommandLineManager.d.ts +19 -0
  209. package/dist-lib/ui/cmdline/plainText.d.ts +16 -0
  210. package/dist-lib/ui/cmdline/subCommandLine.d.ts +78 -0
  211. package/dist-lib/ui/cmdline/useCmdLineSelection.d.ts +26 -0
  212. package/dist-lib/ui/cmdline/useSubCommandLineKeys.d.ts +33 -0
  213. package/dist-lib/ui/codemirror/lineParagraphMarks.d.ts +19 -0
  214. package/dist-lib/ui/codemirror/luaHover.d.ts +7 -0
  215. package/dist-lib/ui/codemirror/options.d.ts +33 -0
  216. package/dist-lib/ui/codemirror/theme.d.ts +29 -5
  217. package/dist-lib/ui/commands/addonCommands.d.ts +134 -0
  218. package/dist-lib/ui/commands/appShortcuts.d.ts +86 -0
  219. package/dist-lib/ui/commands/hostCommands.d.ts +88 -0
  220. package/dist-lib/ui/commands/keyMatch.d.ts +20 -0
  221. package/dist-lib/ui/commands/keySequence.d.ts +57 -0
  222. package/dist-lib/ui/components/ContextMenu.d.ts +21 -1
  223. package/dist-lib/ui/components/FontPicker.d.ts +5 -1
  224. package/dist-lib/ui/components/useModalFocus.d.ts +13 -1
  225. package/dist-lib/ui/helpTopics.d.ts +15 -0
  226. package/dist-lib/ui/labels/LabelManager.d.ts +172 -9
  227. package/dist-lib/ui/labels/LabelOverlay.d.ts +19 -0
  228. package/dist-lib/ui/labels/backgroundImageSize.d.ts +19 -0
  229. package/dist-lib/ui/labels/labelModel.d.ts +64 -0
  230. package/dist-lib/ui/labels/qColor.d.ts +13 -0
  231. package/dist-lib/ui/labels/qtCss.d.ts +12 -4
  232. package/dist-lib/ui/landmarks.d.ts +9 -0
  233. package/dist-lib/ui/launcher/ActionMenu.d.ts +19 -0
  234. package/dist-lib/ui/launcher/GameDetails.d.ts +21 -0
  235. package/dist-lib/ui/launcher/GameSection.d.ts +18 -0
  236. package/dist-lib/ui/launcher/LauncherSearch.d.ts +23 -0
  237. package/dist-lib/ui/launcher/ProfileArt.d.ts +20 -0
  238. package/dist-lib/ui/launcher/ProfileSection.d.ts +43 -0
  239. package/dist-lib/ui/launcher/launcherModel.d.ts +72 -0
  240. package/dist-lib/ui/layout/overlayLayerOrder.d.ts +2 -2
  241. package/dist-lib/ui/menu/MenuBar.d.ts +31 -0
  242. package/dist-lib/ui/menu/SplitButton.d.ts +39 -0
  243. package/dist-lib/ui/menu/anchoredPopup.d.ts +74 -0
  244. package/dist-lib/ui/menu/appMenus.d.ts +65 -0
  245. package/dist-lib/ui/menu/menuModel.d.ts +88 -0
  246. package/dist-lib/ui/menu/toolbarModel.d.ts +56 -0
  247. package/dist-lib/ui/notepad.d.ts +76 -0
  248. package/dist-lib/ui/openSignInPage.d.ts +14 -0
  249. package/dist-lib/ui/output/OutputContextMenu.d.ts +14 -1
  250. package/dist-lib/ui/output/OutputRenderer.d.ts +5 -0
  251. package/dist-lib/ui/output/OutputSearchBar.d.ts +5 -1
  252. package/dist-lib/ui/output/StickyOutputPanel.d.ts +17 -3
  253. package/dist-lib/ui/output/TextAnalyzerModal.d.ts +25 -0
  254. package/dist-lib/ui/output/caretMode.d.ts +3 -2
  255. package/dist-lib/ui/output/clearSplit.d.ts +11 -0
  256. package/dist-lib/ui/output/outputCopy.d.ts +41 -2
  257. package/dist-lib/ui/output/outputRows.d.ts +43 -0
  258. package/dist-lib/ui/output/selectionGesture.d.ts +35 -0
  259. package/dist-lib/ui/output/wordSelection.d.ts +33 -0
  260. package/dist-lib/ui/search/matcher.d.ts +14 -4
  261. package/dist-lib/ui/settings/SettingsShell.d.ts +91 -0
  262. package/dist-lib/ui/settings/ShortcutEditor.d.ts +13 -0
  263. package/dist-lib/ui/sound/SoundManager.d.ts +210 -44
  264. package/dist-lib/ui/sound/closedCaption.d.ts +4 -1
  265. package/dist-lib/ui/sound/mediaDirection.d.ts +35 -0
  266. package/dist-lib/ui/tabCompletion.d.ts +53 -0
  267. package/dist-lib/ui/textedit/TextEditManager.d.ts +11 -2
  268. package/dist-lib/ui/useOpenProfiles.d.ts +1 -1
  269. package/dist-lib/ui/video/VideoManager.d.ts +7 -0
  270. package/dist-lib/ui/windows/WindowManager.d.ts +452 -37
  271. package/dist-lib/ui/windows/panels/ScriptEditorPanel.d.ts +14 -0
  272. package/dist-lib/ui/windows/panels/ScriptSearch.d.ts +6 -1
  273. package/dist-lib/ui/windows/panels/TextPanel.d.ts +4 -1
  274. package/dist-lib/ui/windows/panels/VariablesView.d.ts +37 -7
  275. package/dist-lib/ui/windows/panels/WindowCmdLine.d.ts +4 -2
  276. package/dist-lib/ui/windows/panels/aliasLoop.d.ts +24 -0
  277. package/dist-lib/ui/windows/panels/editorClipboard.d.ts +45 -0
  278. package/dist-lib/ui/windows/panels/editorUndo.d.ts +79 -0
  279. package/dist-lib/ui/windows/panels/mapAreaChange.d.ts +10 -0
  280. package/dist-lib/utils/appShellCache.d.ts +25 -0
  281. package/dist-lib/utils/fontFamilyName.d.ts +13 -0
  282. package/dist-lib/utils/fontLoader.d.ts +31 -0
  283. package/dist-lib/utils/formatBytes.d.ts +4 -0
  284. package/dist-lib/utils/mustBeOneOf.d.ts +9 -0
  285. package/dist-lib/utils/profileLock.d.ts +1 -1
  286. package/dist-lib/utils/systemTheme.d.ts +24 -0
  287. package/dist-lib/utils/timeZone.d.ts +10 -0
  288. package/dist-lib/vault/CredentialVault.d.ts +51 -5
  289. package/dist-lib/vault/deviceUnlock.d.ts +47 -0
  290. package/dist-lib/vault/vaultAccess.d.ts +24 -2
  291. package/dist-lib/vault/vaultHelpTopic.d.ts +9 -0
  292. package/dist-lib/vault/vaultRecord.d.ts +33 -1
  293. package/dist-lib/vfs-sw.js +220 -11
  294. package/dist-lib/vite.d.ts +1 -1
  295. package/dist-lib/vite.js +66 -43
  296. package/package.json +23 -15
  297. package/dist-lib/assets/mapParser.worker-t-3rd1zR.js +0 -9
  298. package/dist-lib/mud/connection/PingTracker.d.ts +0 -41
  299. package/dist-lib/ui/BundledGameGrid.d.ts +0 -21
  300. package/dist-lib/ui/ConnectionGrid.d.ts +0 -21
  301. package/dist-lib/ui/bufferWords.d.ts +0 -38
@@ -2,7 +2,7 @@ interface Props {
2
2
  onClose: () => void;
3
3
  }
4
4
  /** Small "About" dialog reachable from the connection screen — wordmark,
5
- * tagline and description come from the active brand (stock mudix by
5
+ * tagline and description come from the active brand (stock Mudlet Web by
6
6
  * default) plus a link to the source repository when the brand sets one. */
7
7
  export declare function AboutModal({ onClose }: Props): import("react/jsx-runtime").JSX.Element;
8
8
  export {};
@@ -18,7 +18,7 @@ export interface BrandLoginFieldsProps extends Pick<LandingProps, 'openProfile'
18
18
  /**
19
19
  * Unstyled login form for custom branded landings: account (+ optional
20
20
  * password) input, Connect submit, optional Open-offline button. No CSS is
21
- * applied — every element carries a stable `mudix-login-*` class for the
21
+ * applied — every element carries a stable `mudlet-login-*` class for the
22
22
  * brand's own stylesheet to target. Wraps `useBrandLogin`; for full control
23
23
  * over markup, call that hook directly instead of using this component.
24
24
  */
@@ -0,0 +1,23 @@
1
+ import type { SignInOffer } from '../mud/CharLoginController';
2
+ interface Props {
3
+ connectionName: string;
4
+ offer: SignInOffer;
5
+ /** Close the dialog. For a server-driven offer the console link stays; for
6
+ * our own flow the sign-in keeps waiting until it completes or times out. */
7
+ onClose: () => void;
8
+ /** Client-driven flow only: drop it and let the game run its own sign-in. */
9
+ onUseGameSignIn?: () => void;
10
+ }
11
+ /**
12
+ * A GMCP `Char.Login` browser sign-in waiting for the player to open it.
13
+ *
14
+ * Mudlet launches the system browser itself, and so do we while the player's
15
+ * last gesture is fresh (`openSignInPage`). This dialog is the fallback for
16
+ * when it is not: a web page may only open a tab from a user gesture, so the
17
+ * address becomes this button — a plain link with
18
+ * `noopener`, which no popup blocker stops and which gives the provider's page
19
+ * no handle back on ours. The same link is in the console, for a player who
20
+ * closes this.
21
+ */
22
+ export declare function BrowserSignInModal({ connectionName, offer, onClose, onUseGameSignIn }: Props): import("react/jsx-runtime").JSX.Element;
23
+ export {};
@@ -11,17 +11,26 @@ export interface CmdLineMenuEntry {
11
11
  * getCommandLineMenuEvents. Right-clicking the command bar shows entries from
12
12
  * this registry; clicking one raises the registered event with the current
13
13
  * command-line text as the first argument.
14
+ *
15
+ * Every command line has a menu of its own, as on desktop (each TCommandLine
16
+ * holds its own map): an entry added to a createCommandLine() line is not on the
17
+ * main bar's menu, and removing it by the main bar's name finds nothing. The
18
+ * main command bar is `'main'`, the default throughout.
14
19
  */
15
20
  export declare class CmdLineMenuRegistry {
16
- private entries;
21
+ /** Command line name → that line's entries, by unique name. */
22
+ private menus;
17
23
  private subscribers;
18
24
  private dispatcher;
19
25
  subscribe(cb: () => void): () => void;
20
26
  private notify;
21
27
  setDispatcher(fn: ((eventName: string, args: unknown[]) => void) | null): void;
22
- add(uniqueName: string, eventName: string, displayName?: string): boolean;
23
- remove(uniqueName: string): boolean;
24
- list(): CmdLineMenuEntry[];
28
+ private menu;
29
+ add(uniqueName: string, eventName: string, displayName?: string, cmdLine?: string): boolean;
30
+ remove(uniqueName: string, cmdLine?: string): boolean;
31
+ list(cmdLine?: string): CmdLineMenuEntry[];
32
+ /** Forget a command line's menu, along with the command line. */
33
+ drop(cmdLine: string): void;
25
34
  /** Raise the entry's event, passing the current command-line text. */
26
- dispatch(uniqueName: string, cmdLineText: string): void;
35
+ dispatch(uniqueName: string, cmdLineText: string, cmdLine?: string): void;
27
36
  }
@@ -1,4 +1,3 @@
1
- import { type BufferWordIndex } from './bufferWords';
2
1
  import type { CmdLineMenuRegistry } from './CmdLineMenuRegistry';
3
2
  interface CommandBarProps {
4
3
  command: string;
@@ -7,17 +6,18 @@ interface CommandBarProps {
7
6
  commandInputRef: React.RefObject<HTMLInputElement | HTMLTextAreaElement | null>;
8
7
  onSubmit: () => void;
9
8
  cmdLineMenu: CmdLineMenuRegistry;
10
- /** Tab-completion suggestions added via Mudlet's addCmdLineSuggestion API.
11
- * Merged ahead of command history (dedup, case-insensitive). */
9
+ /** The main command line's addCmdLineSuggestion words: Tab completes to
10
+ * them as well as to the buffer's, and the history ghost offers them. */
12
11
  suggestions?: string[];
13
- /** Words Mudlet's addCmdLineBlacklist API has taken out of Tab completion.
14
- * Subtractive across every source below, not just `suggestions`. */
12
+ /** Words Mudlet's addCmdLineBlacklist API has taken out of Tab completion,
13
+ * whether they came from the buffer or from `suggestions`. */
15
14
  blacklist?: string[];
16
15
  /** Mudlet's per-command-line setSaveCommandHistory. False keeps the history
17
16
  * for this session but stops persisting it. */
18
17
  saveHistory?: boolean;
19
- /** Recency-ordered words seen in output, for argument-word Tab completion. */
20
- bufferWords?: BufferWordIndex | null;
18
+ /** The main console's last lines, oldest first, read at each Tab — what
19
+ * TCommandLine::handleTabCompletion completes from besides `suggestions`. */
20
+ completionLines?: () => readonly string[];
21
21
  }
22
- export declare function CommandBar({ command, onCommandChange, passwordMode, commandInputRef, onSubmit, cmdLineMenu, suggestions, blacklist, saveHistory, bufferWords }: CommandBarProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare function CommandBar({ command, onCommandChange, passwordMode, commandInputRef, onSubmit, cmdLineMenu, suggestions, blacklist, saveHistory, completionLines }: CommandBarProps): import("react/jsx-runtime").JSX.Element;
23
23
  export {};
@@ -1,10 +1,29 @@
1
1
  import { type MudConnection } from '../storage';
2
2
  import type { VaultSaver } from './useVaultSaver';
3
+ /** Split a host string that may carry a trailing port (`host:port` or
4
+ * `host port`) into its parts, so pasting a full address moves the port into
5
+ * the Port field. Returns `port: undefined` when no trailing numeric port is
6
+ * present, leaving the Port field untouched.
7
+ *
8
+ * An IPv6 literal is all colons and hex, so the old non-greedy `(.*?)[\s:]+(\d+)$`
9
+ * matched its own tail: typing `2001:db8::1` left host `2001:db8` and port 1,
10
+ * and saved it that way (issue #56). Only the bracketed form `[::1]:4000` has
11
+ * an unambiguous port, so that is the only IPv6 shape that gets split. */
12
+ export declare function splitHostPort(value: string): {
13
+ host: string;
14
+ port?: string;
15
+ };
3
16
  interface Props {
4
17
  /** The connection to edit, or null to add a new one. */
5
18
  connection: MudConnection | null;
19
+ /** Field values to start a new connection from, when `connection` is null —
20
+ * a bundled game's host/port/blurb, so picking a game fills the form in
21
+ * rather than dialing straight away. Ignored when editing. */
22
+ preset?: Omit<MudConnection, 'id'> | null;
6
23
  /** Whether this is the very first connection (drives the title copy). */
7
24
  firstConnection: boolean;
25
+ /** Overrides the generated dialog title (e.g. "Add Achaea"). */
26
+ title?: string;
8
27
  busy: boolean;
9
28
  onAdd: (data: Omit<MudConnection, 'id'>) => string;
10
29
  onUpdate: (id: string, data: Omit<MudConnection, 'id'>) => void;
@@ -14,5 +33,5 @@ interface Props {
14
33
  * on submit — a prompt rendered from here would unmount with it. */
15
34
  vaultSaver: VaultSaver;
16
35
  }
17
- export declare function ConnectionFormModal({ connection, firstConnection, busy, onAdd, onUpdate, onClose, vaultSaver }: Props): import("react/jsx-runtime").JSX.Element;
36
+ export declare function ConnectionFormModal({ connection, preset, firstConnection, title: titleOverride, busy, onAdd, onUpdate, onClose, vaultSaver }: Props): import("react/jsx-runtime").JSX.Element;
18
37
  export {};
@@ -1,3 +1,5 @@
1
+ import './launcher/launcher.css';
2
+ import type { BundledGame } from '../mud/games/bundledGames';
1
3
  import { type MudConnection } from '../storage';
2
4
  interface Props {
3
5
  connections: MudConnection[];
@@ -9,6 +11,12 @@ interface Props {
9
11
  onUpdate: (id: string, data: Omit<MudConnection, 'id'>) => void;
10
12
  onDelete: (id: string) => void;
11
13
  onOpenSettings: () => void;
14
+ /** A bundled game named by a `?play=<game>` deep link, offered once on
15
+ * mount. Null when the page wasn't opened from such a link. */
16
+ linkedGame?: BundledGame | null;
17
+ /** Called once `linkedGame` has been offered, so the caller can drop it
18
+ * from its state and clean the parameter out of the URL. */
19
+ onLinkedGameHandled?: () => void;
12
20
  }
13
- export declare function ConnectionScreen({ connections, connecting, connectingId, onConnect, onOpen, onAdd, onUpdate, onDelete, onOpenSettings }: Props): import("react/jsx-runtime").JSX.Element;
21
+ export declare function ConnectionScreen({ connections, connecting, connectingId, onConnect, onOpen, onAdd, onUpdate, onDelete, onOpenSettings, linkedGame, onLinkedGameHandled }: Props): import("react/jsx-runtime").JSX.Element;
14
22
  export {};
@@ -0,0 +1,28 @@
1
+ import type { BundledGame } from '../mud/games/bundledGames';
2
+ import type { MudConnection } from '../storage';
3
+ interface Props {
4
+ game: BundledGame;
5
+ /** Existing profiles for this game — never empty; with none the caller goes
6
+ * straight to the prefilled Add form and this never renders. */
7
+ profiles: MudConnection[];
8
+ busy: boolean;
9
+ /** Play an existing profile — opens it and dials. */
10
+ onPlay: (connection: MudConnection) => void;
11
+ /** Open an existing profile without dialing, as the launcher tiles do. */
12
+ onOpen: (connection: MudConnection) => void;
13
+ /** Set up another profile for the game (opens the prefilled Add form). */
14
+ onCreate: () => void;
15
+ onClose: () => void;
16
+ }
17
+ /**
18
+ * Where a `?play=<game>` link lands when the player already has profiles for
19
+ * that game. The link can't know whether they've played it before, so it asks
20
+ * rather than guessing: dialing an existing profile would bypass the one they
21
+ * just made, and making a new one every visit would litter the launcher with
22
+ * duplicates.
23
+ *
24
+ * A click on the game's own tile doesn't come through here — the profiles are
25
+ * already on screen right above it, so that click goes straight to the form.
26
+ */
27
+ export declare function GameLinkPrompt({ game, profiles, busy, onPlay, onOpen, onCreate, onClose }: Props): import("react/jsx-runtime").JSX.Element;
28
+ export {};
@@ -5,7 +5,11 @@ interface HelpModalProps {
5
5
  connectionId?: string;
6
6
  /** Topic to open on — defaults to the migration guide. */
7
7
  initialTopic?: string;
8
+ /** Extra class on the dialog. Used by a caller that opens the manual over
9
+ * its own dialog rather than instead of it, to lift this one above the
10
+ * `.modal` stacking level it would otherwise sit under. */
11
+ className?: string;
8
12
  onClose: () => void;
9
13
  }
10
- export declare function HelpModal({ connectionId, initialTopic, onClose }: HelpModalProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function HelpModal({ connectionId, initialTopic, className, onClose }: HelpModalProps): import("react/jsx-runtime").JSX.Element;
11
15
  export {};
@@ -0,0 +1,32 @@
1
+ interface Props {
2
+ /** Each distinct symbol with the rooms carrying it, commonest first —
3
+ * `MapStore.roomSymbolUsage()`. */
4
+ usage: {
5
+ symbol: string;
6
+ rooms: number[];
7
+ }[];
8
+ /** A ready-to-use CSS `font-family` value — the same stack the renderer is
9
+ * given (`applyMapperSettings`), so the sample column shows the symbol as
10
+ * the map draws it rather than as the UI font draws it. The caller
11
+ * composes it; a raw family name from the profile has to go through
12
+ * `cssFontFamilyLiteral` first. */
13
+ symbolFont: string;
14
+ onClose: () => void;
15
+ }
16
+ /**
17
+ * Mudlet's "Show symbol usage…" dialog (`dlgProfilePreferences::showMapGlyph\
18
+ * Usage` → `generateMapGlyphDisplay`, and the `glyph_usage.ui` table it fills).
19
+ *
20
+ * Desktop's table has six columns; this has four. The two that are missing are
21
+ * its pair of sample cells — the symbol drawn with only the chosen font, and
22
+ * drawn with any font the system has — together with the status icon that says
23
+ * which of the two worked. All three answer one question, "can this font draw
24
+ * this symbol", and it needs per-glyph coverage testing: `QFontMetrics::in\
25
+ * FontUcs4`, which has no browser counterpart. `mudlet-map-renderer` draws the
26
+ * string and lets the browser fall back, so the client cannot tell a symbol it
27
+ * drew from one the fallback drew — and neither can this dialog. The columns it
28
+ * does have are the ones the report is really for: which symbols a map uses,
29
+ * how heavily, and where.
30
+ */
31
+ export declare function MapSymbolUsageModal({ usage, symbolFont, onClose }: Props): import("react/jsx-runtime").JSX.Element;
32
+ export {};
@@ -10,8 +10,9 @@ export interface MouseEventEntry {
10
10
  }
11
11
  /**
12
12
  * Backs Mudlet's addMouseEvent / removeMouseEvent / getMouseEvents
13
- * (Host::mConsoleActions). Right-clicking the main output area shows entries
14
- * from this registry; clicking one raises the registered event. addMouseEvent
13
+ * (Host::mConsoleActions). Right-clicking any console — the main output area,
14
+ * a miniconsole or a user window — shows entries from this registry; clicking
15
+ * one raises the registered event. addMouseEvent
15
16
  * refuses a duplicate uniqueName (matching Mudlet's warn-and-return-nil).
16
17
  */
17
18
  export declare class MouseEventRegistry {
@@ -26,6 +27,32 @@ export declare class MouseEventRegistry {
26
27
  add(uniqueName: string, eventName: string, displayName?: string, tooltip?: string): boolean;
27
28
  remove(uniqueName: string): boolean;
28
29
  list(): MouseEventEntry[];
29
- /** Raise the entry's event. Mudlet passes the originating window name. */
30
- dispatch(uniqueName: string): void;
30
+ /**
31
+ * Raise the entry's event the way TTextEdit::slot_mouseAction does: with
32
+ * the entry's unique name, the console it was chosen from, and that
33
+ * console's selection — first character's column and line, then the last
34
+ * one's (all 0 when nothing is selected).
35
+ */
36
+ dispatch(uniqueName: string, window?: string, selection?: {
37
+ startX: number;
38
+ startY: number;
39
+ endX: number;
40
+ endY: number;
41
+ }): void;
31
42
  }
43
+ /**
44
+ * The registry's entries as right-click menu items for the console `window`.
45
+ * Desktop adds them to every console's menu — main, miniconsoles and user
46
+ * windows alike (TTextEdit::contextMenuEvent) — and each one, when chosen,
47
+ * reports the console and its selection (see {@link MouseEventRegistry.dispatch}).
48
+ */
49
+ export declare function mouseEventMenuItems(registry: MouseEventRegistry, window: string, selection: {
50
+ startX: number;
51
+ startY: number;
52
+ endX: number;
53
+ endY: number;
54
+ }): {
55
+ label: string;
56
+ tooltip?: string;
57
+ onClick: () => void;
58
+ }[];
@@ -0,0 +1,22 @@
1
+ import type { ProfileVFS } from '../scripting/vfs/ProfileVFS';
2
+ interface NotepadModalProps {
3
+ connectionId: string;
4
+ connectionName: string;
5
+ vfs: ProfileVFS | null;
6
+ /** Sends one command as if typed — aliases and the local echo included,
7
+ * as desktop's `Host::send` does for the notepad's send buttons. */
8
+ onSend: (command: string) => void;
9
+ onClose: () => void;
10
+ }
11
+ /**
12
+ * Mudlet's Notepad (`dlgNotepad`): named tabs of free text kept per profile in
13
+ * `notes.json`, with a find bar and controls that send the notes to the game
14
+ * line by line.
15
+ *
16
+ * Written a beat after typing stops, on every tab change, on close and when the
17
+ * page is hidden, so a closed browser tab does not take the last sentence with
18
+ * it. Escape does not close the window — dlgNotepad is a QMainWindow, and
19
+ * Escape there closes the find bar.
20
+ */
21
+ export declare function NotepadModal({ connectionId, connectionName, vfs, onSend, onClose }: NotepadModalProps): import("react/jsx-runtime").JSX.Element;
22
+ export {};
@@ -11,7 +11,22 @@ interface ResizableModalProps {
11
11
  headerExtra?: React.ReactNode;
12
12
  className?: string;
13
13
  bodyClassName?: string;
14
+ /**
15
+ * Escape closes the dialog. Default true — desktop Mudlet builds this class
16
+ * of window as a `QDialog` (`dlgPackageManager`, `dlgModuleManager`,
17
+ * `dlgPackageExporter`, `dlgProfilePreferences`), and a QDialog rejects on
18
+ * Escape for free.
19
+ *
20
+ * Pass false for the editor-hosting modals, whose desktop counterparts are
21
+ * `QMainWindow`s precisely so Escape stays available to what is inside them:
22
+ * `dlgTriggerEditor` (Mudlet `src/dlgTriggerEditor.h:104`) spends Escape on
23
+ * leaving key-grab mode (`src/dlgTriggerEditor.cpp:12527`), and `dlgNotepad`
24
+ * (`src/dlgNotepad.h:42`) on closing its find bar (`dlgNotepad.cpp:651`) —
25
+ * the same jobs Escape has in ScriptEditorPanel's key capture, LuaEditor and
26
+ * ScriptSearch. May vary over the dialog's life; see `ModalFocusOptions`.
27
+ */
28
+ closeOnEscape?: boolean;
14
29
  children: React.ReactNode;
15
30
  }
16
- export declare function ResizableModal({ title, onClose, savedBounds, onBoundsChange, minW, minH, defaultW, defaultH, headerExtra, className, bodyClassName, children, }: ResizableModalProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function ResizableModal({ title, onClose, savedBounds, onBoundsChange, minW, minH, defaultW, defaultH, headerExtra, className, bodyClassName, closeOnEscape, children, }: ResizableModalProps): import("react/jsx-runtime").JSX.Element;
17
32
  export {};
@@ -1,4 +1,5 @@
1
1
  import type { ProfileVFS } from '../scripting/vfs/ProfileVFS';
2
+ import type { WindowManager } from './windows/WindowManager';
2
3
  import type { TlsStatus } from '../mud/events';
3
4
  interface SettingsModalProps {
4
5
  onClose: () => void;
@@ -8,6 +9,14 @@ interface SettingsModalProps {
8
9
  /** TLS state of the live session, when there is one. Drives the certificate
9
10
  * box below the secure-connection reminder. */
10
11
  tlsStatus?: TlsStatus | null;
12
+ /** The live session's window manager, for the map-file actions Mudlet keeps
13
+ * on its Mapper preference page. Absent on the connection screen, where
14
+ * there is no map to act on and the card is not rendered. */
15
+ windows?: WindowManager | null;
16
+ /** Opens the Logs browser. Mudlet's Log options page owns the log format
17
+ * and folder; ours owns the switch, and the rest of what a player wants to
18
+ * do with logs lives in that browser — so Settings offers the door. */
19
+ onOpenLogs?: () => void;
11
20
  }
12
- export declare function SettingsModal({ onClose, connectionId, vfs, tlsStatus }: SettingsModalProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function SettingsModal({ onClose, connectionId, vfs, tlsStatus, windows, onOpenLogs }: SettingsModalProps): import("react/jsx-runtime").JSX.Element;
13
22
  export {};
@@ -12,7 +12,9 @@ interface Props {
12
12
  * Mudlet reacts to a certificate failure by opening Preferences on the
13
13
  * connection tab with the offending checkbox highlighted; the browser
14
14
  * equivalent is to say which setting would allow it and let the user undo the
15
- * port change in one click.
15
+ * port change in one click. What it must not do — and used to — is describe
16
+ * every failure as a certificate refusal and then advise a checkbox this proxy
17
+ * never renders; see `describeTlsFailure`.
16
18
  */
17
19
  export declare function TlsAlertBanner({ status, revertPort, onRevert, onDismiss }: Props): import("react/jsx-runtime").JSX.Element | null;
18
20
  export {};
@@ -1,5 +1,6 @@
1
1
  import { type BrandToolbarContext } from '../branding';
2
2
  import type { SessionStatus } from '../mud/events';
3
+ import type { AddonCommand } from './commands/addonCommands';
3
4
  interface ToolbarProps {
4
5
  connectionName: string;
5
6
  status: SessionStatus;
@@ -8,12 +9,25 @@ interface ToolbarProps {
8
9
  onReconnect: () => void;
9
10
  onNewConnection: () => void;
10
11
  onOpenMap: () => void;
12
+ /** A script set setConfig("mapperButton", "disabled"): the map entries grey out. */
13
+ mapDisabled?: boolean;
11
14
  onOpenScripts: () => void;
12
15
  onOpenFiles: () => void;
16
+ /** Mudlet's Notepad: the profile's notes.txt. */
17
+ onOpenNotepad: () => void;
13
18
  onOpenLogs: () => void;
14
19
  onOpenDocs: () => void;
15
20
  onOpenHelp: () => void;
16
21
  onOpenSettings: () => void;
22
+ /** The About dialog, reachable only from the menu bar — it lives at the
23
+ * session's top level rather than here, because a modal rendered inside
24
+ * the toolbar is inside the toolbar's stacking context (and, in
25
+ * fullscreen, inside its transform, which makes `position: fixed` resolve
26
+ * against the bar instead of the window). */
27
+ onOpenAbout: () => void;
28
+ /** Mudlet's Alt+L: put the keyboard back on the command line. Only ever
29
+ * reached from a shortcut — there is no button for it. */
30
+ onFocusInputLine: () => void;
17
31
  /** Mudlet-format replay recording toggle state + handler. */
18
32
  replayRecording: boolean;
19
33
  onToggleReplayRecording: () => void;
@@ -25,6 +39,13 @@ interface ToolbarProps {
25
39
  onContextMenu?: (e: React.MouseEvent<HTMLDivElement>) => void;
26
40
  /** Capabilities handed to brand toolbar buttons (send / raiseEvent). */
27
41
  brandContext?: BrandToolbarContext;
42
+ /** Commands a package placed with addCommand, for the surfaces that put
43
+ * them on a bar. Drawn after the stock buttons, in placement order. */
44
+ addonCommands?: AddonCommand[];
45
+ /** The same commands for the surfaces that put them on the menu bar. A
46
+ * command asking for both is in both lists. */
47
+ addonMenuCommands?: AddonCommand[];
48
+ onAddonCommandClick?: (id: number) => void;
28
49
  }
29
- export declare function Toolbar({ connectionName, status, ping, onDisconnect, onReconnect, onNewConnection, onOpenMap, onOpenScripts, onOpenFiles, onOpenLogs, onOpenDocs, onOpenHelp, onOpenSettings, replayRecording, onToggleReplayRecording, replaySpeed, onReplaySpeedChange, onReplayStop, onContextMenu, brandContext }: ToolbarProps): import("react/jsx-runtime").JSX.Element;
50
+ export declare function Toolbar({ connectionName, status, ping, onDisconnect, onReconnect, onNewConnection, onOpenMap, mapDisabled, onOpenScripts, onOpenFiles, onOpenNotepad, onOpenLogs, onOpenDocs, onOpenHelp, onOpenSettings, onOpenAbout, onFocusInputLine, replayRecording, onToggleReplayRecording, replaySpeed, onReplaySpeedChange, onReplayStop, onContextMenu, brandContext, addonCommands, addonMenuCommands, onAddonCommandClick }: ToolbarProps): import("react/jsx-runtime").JSX.Element;
30
51
  export {};
@@ -1,15 +1,20 @@
1
1
  import type { MudConnection } from '../storage';
2
2
  interface VaultManageButtonProps {
3
+ /** Every profile, so the manage list can name the ones with a saved login
4
+ * (the vault itself stores only ids — it has no idea what they are called). */
3
5
  connections: MudConnection[];
4
- disabled?: boolean;
6
+ /** `icon` is the connection screen's header glyph; `row` is the labelled
7
+ * button the settings dialog's "Saved logins" card puts on a settings row,
8
+ * where a bare glyph in a column of switches would read as decoration. */
9
+ variant?: 'icon' | 'row';
5
10
  }
6
11
  /**
7
- * "Saved logins" on the connection screen's tools row — the one place to lock
8
- * the vault, change how it opens, drop a stored password or delete the whole
9
- * thing.
12
+ * "Saved logins" in the connection screen's header icon row — the one place to
13
+ * lock the vault, change how it opens, drop a stored password, or delete the
14
+ * whole thing.
10
15
  *
11
16
  * Renders nothing when no vault is installed, which is how a branded build gets
12
17
  * neither the button nor anything behind it (see `vault/vaultAccess`).
13
18
  */
14
- export declare function VaultManageButton({ connections, disabled }: VaultManageButtonProps): import("react/jsx-runtime").JSX.Element | null;
19
+ export declare function VaultManageButton({ connections, variant }: VaultManageButtonProps): import("react/jsx-runtime").JSX.Element | null;
15
20
  export {};
@@ -1,2 +1,5 @@
1
1
  import { type VaultUIProps } from '../vault/vaultAccess';
2
+ /** "The one password in here", "The 3 passwords and 1 saved sign-in in here" —
3
+ * the subject of the delete-vault warning, naming what is about to be lost. */
4
+ export declare function describeVaultContents(passwords: number, signIns: number): string;
2
5
  export declare function VaultModal({ mode, reason, seed, connectionNames, onDone }: VaultUIProps): import("react/jsx-runtime").JSX.Element;
@@ -6,12 +6,14 @@ interface ButtonsLayerProps {
6
6
  connectionId: string;
7
7
  engineRef: RefObject<ScriptingEngine | null>;
8
8
  vfs: ProfileVFS | null;
9
+ /** The main command line, which gets focus back after every click. */
10
+ commandInputRef?: RefObject<HTMLElement | null>;
9
11
  }
10
12
  /**
11
13
  * Returns the four edge strips of toolbars (top/bottom/left/right). The caller
12
14
  * places each strip in the appropriate spot inside ContentLayout.
13
15
  */
14
- export declare function useButtonStrips({ connectionId, engineRef, vfs }: ButtonsLayerProps): {
16
+ export declare function useButtonStrips({ connectionId, engineRef, vfs, commandInputRef }: ButtonsLayerProps): {
15
17
  top: import("react/jsx-runtime").JSX.Element;
16
18
  bottom: import("react/jsx-runtime").JSX.Element;
17
19
  left: import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The buttons, per profile, that cannot be active whatever their switch says:
3
+ * their Lua will not compile. Desktop's TAction::compileScript leaves such a
4
+ * button with `mOK_code` false, so `Tree::activate` refuses it and the toolbar
5
+ * builders (TToolBar/TEasyButtonBar::addActionButtons, ActionUnit's
6
+ * constructToolbar) leave it off — a toolbar or menu that will not compile
7
+ * takes its buttons with it.
8
+ *
9
+ * The ScriptingEngine owns the compile check and publishes its answer here;
10
+ * the button bar reads it. Kept outside the store, since it is derived from the
11
+ * buttons rather than part of them, and outside the engine, whose instance the
12
+ * bar only holds by ref.
13
+ */
14
+ declare class InactiveButtonRegistry {
15
+ private readonly byConnection;
16
+ private readonly listeners;
17
+ subscribe: (fn: () => void) => (() => void);
18
+ /** The ids for this profile. The same Set until they change, so it can be
19
+ * a useSyncExternalStore snapshot. */
20
+ get: (connectionId: string) => ReadonlySet<string>;
21
+ set(connectionId: string, ids: ReadonlySet<string>): void;
22
+ clear(connectionId: string): void;
23
+ }
24
+ export declare const inactiveButtons: InactiveButtonRegistry;
25
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { OverlayLayerOrder } from '../layout/overlayLayerOrder';
2
+ import { SubCommandLine, type CmdLineHost } from './subCommandLine';
2
3
  export interface CmdLineCreateOptions {
3
4
  /** Parent window id ('main' for the main viewport). */
4
5
  parent?: string;
@@ -50,6 +51,12 @@ export declare class CommandLineManager {
50
51
  /** Per-cmdline imperative control registered by the React mount —
51
52
  * selectAll() drives <input>.select() (Mudlet selectCmdLineText). */
52
53
  private readonly controls;
54
+ /** Per-cmdline keyboard state (history, Tab) — held here rather than in
55
+ * the React input so it outlives a remount. */
56
+ private readonly models;
57
+ /** The profile settings and Tab pool every command line reads. Set by the
58
+ * ScriptingEngine. */
59
+ cmdLineHost: CmdLineHost;
53
60
  constructor(overlayZ?: OverlayLayerOrder);
54
61
  /** Mudlet createCommandLine(name, x, y, w, h) — false when a cmd line with
55
62
  * that name already exists. */
@@ -82,6 +89,18 @@ export declare class CommandLineManager {
82
89
  getValue(name: string): string;
83
90
  setAction(name: string, cb: ((text: string) => void) | null): boolean;
84
91
  getAction(name: string): ((text: string) => void) | null;
92
+ /** Where Enter goes on a command line with no action bound: the game, as
93
+ * typed input. Set by the ScriptingEngine (its `hostSend`). */
94
+ onDefaultSend?: (text: string) => void;
95
+ /**
96
+ * The user pressed Enter on `name` with `text` in it. Runs the bound
97
+ * action, or else sends the text the way Mudlet's
98
+ * TCommandLine::enterCommand falls back to `Host::send`. Returns whether
99
+ * anything took the text, i.e. whether the line should clear.
100
+ */
101
+ submit(name: string, text: string): boolean;
102
+ /** The keyboard state of command line `name`, made on first use. */
103
+ model(name: string): SubCommandLine;
85
104
  hasAction(name: string): boolean;
86
105
  /** Mudlet selectCmdLineText — highlight all text in the input. */
87
106
  selectAll(name: string): boolean;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * What a command line's text becomes once it leaves the box — desktop's
3
+ * TCommandLine reads it with QPlainTextEdit::toPlainText(), and
4
+ * QTextDocument::toPlainText turns a non-breaking space (U+00A0) into an
5
+ * ordinary space and the Unicode line and paragraph separators (U+2028,
6
+ * U+2029) into line feeds. So text pasted from a web page or a chat app sends
7
+ * `pg x`, not `pg<NBSP>x`, and a U+2028 splits the command in two, as a typed
8
+ * newline does. getCmdLine() reads the same plain text (#375).
9
+ *
10
+ * Every replacement is one UTF-16 unit for one, so caret offsets taken on the
11
+ * raw text still hold on the result.
12
+ */
13
+ export declare function cmdLinePlainText(text: string): string;
14
+ /** The commands one Enter sends: the plain text, one per line, as
15
+ * TCommandLine::enterCommand splits it before Host::send. */
16
+ export declare function cmdLineCommands(text: string): string[];
@@ -0,0 +1,78 @@
1
+ /**
2
+ * What a named command line needs from the profile around it. Desktop's
3
+ * TCommandLine reads all of this off its Host; here the ScriptingEngine
4
+ * supplies it (see ScriptingEngine's constructor), and a line rendered before
5
+ * there is an engine falls back to {@link DEFAULT_CMD_LINE_HOST}.
6
+ */
7
+ export interface CmdLineHost {
8
+ /** Mudlet's "Auto clear the input line after you sent text". */
9
+ autoClear(): boolean;
10
+ /** Mudlet's "Highlight history". */
11
+ highlightHistory(): boolean;
12
+ /** Host::isRemoteEchoingActive — the server took ECHO (a password prompt). */
13
+ remoteEcho(): boolean;
14
+ /** Mudlet's "Disable password masking". */
15
+ disablePasswordMasking(): boolean;
16
+ /** The Tab pool for the command line called `name` (see
17
+ * ScriptingAPI.cmdLineCompletionWords). */
18
+ completionWords(name: string): readonly string[];
19
+ }
20
+ export declare const DEFAULT_CMD_LINE_HOST: CmdLineHost;
21
+ /** The text of a command line and where its selection is ([start, end), a
22
+ * caret when they are equal). */
23
+ export interface CmdLineView {
24
+ text: string;
25
+ start: number;
26
+ end: number;
27
+ }
28
+ /**
29
+ * The keyboard behaviour of one named command line — a createCommandLine line
30
+ * or a miniconsole's / user window's own — ported from desktop's TCommandLine,
31
+ * which runs the same code for those as for the main one: input history on
32
+ * Up/Down (with "Highlight history" prefix search), Tab completion, Escape,
33
+ * and what Enter leaves behind. Web used to render these as bare inputs that
34
+ * had none of it (#342).
35
+ *
36
+ * Kept outside React and held by the manager that owns the line, so the
37
+ * history outlives the input being remounted (a dock, an undock, a hide). Each
38
+ * method takes the line as it is and returns what it should become, or null
39
+ * when the key changes nothing.
40
+ */
41
+ export declare class SubCommandLine {
42
+ readonly name: string;
43
+ /** mHistoryList: newest first, slot 0 the line being typed. */
44
+ private historyList;
45
+ /** mHistoryBuffer: which slot Up/Down stepped to; 0 is the typed line. */
46
+ private historyBuffer;
47
+ /** mAutoCompletionCount: the history slot the prefix search is on. */
48
+ private autoCompletionCount;
49
+ private readonly tab;
50
+ constructor(name: string);
51
+ /** The history, newest first (for tests and debugging). */
52
+ get history(): readonly string[];
53
+ /**
54
+ * Enter: the commands to dispatch (one per line, as TCommandLine splits
55
+ * the box at line feeds) and what the box holds afterwards — emptied when
56
+ * "auto clear" is on, else the same text, all selected so the next
57
+ * keystroke replaces it. The text joins the history unless it is empty or
58
+ * the server is masking input for a password.
59
+ */
60
+ enter(text: string, host: CmdLineHost): {
61
+ commands: string[];
62
+ after: CmdLineView;
63
+ };
64
+ /** TCommandLine::historyMove — a plain Up (`up` true) or Down. */
65
+ historyMove(up: boolean, view: CmdLineView, host: CmdLineHost): CmdLineView | null;
66
+ /** TCommandLine::handleAutoCompletion — the history prefix search. */
67
+ private autoComplete;
68
+ /** Tab (`dir` 1) or Shift+Tab (-1); null when there is nothing to complete. */
69
+ tabComplete(dir: 1 | -1, view: CmdLineView, host: CmdLineHost): {
70
+ view: CmdLineView;
71
+ proposal: string;
72
+ } | null;
73
+ /** Escape: leave Tab and history browsing, and select everything. */
74
+ escape(view: CmdLineView): CmdLineView;
75
+ /** The player edited the text (TCommandLine::processNormalKey and the
76
+ * Backspace / Delete / Space cases): back on the typed line. */
77
+ edited(): void;
78
+ }