@rynt/sdk 0.9.53

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 (332) hide show
  1. package/README.md +122 -0
  2. package/REGISTRIES.md +189 -0
  3. package/env.d.ts +11 -0
  4. package/host-shims.d.ts +30 -0
  5. package/package.json +88 -0
  6. package/src/extension-marketplace/api-types.ts +141 -0
  7. package/src/extension-marketplace/client.ts +296 -0
  8. package/src/extension-marketplace/index.ts +22 -0
  9. package/src/extension-marketplace/schemas.ts +178 -0
  10. package/src/extensions/ExtensionRoutePage.vue +17 -0
  11. package/src/extensions/context.ts +37 -0
  12. package/src/extensions/disabled-folder.ts +21 -0
  13. package/src/extensions/extension-expose-map.ts +5 -0
  14. package/src/extensions/extension-expose.ts +48 -0
  15. package/src/extensions/graph.ts +67 -0
  16. package/src/extensions/index.ts +251 -0
  17. package/src/extensions/invite-handler/types.ts +20 -0
  18. package/src/extensions/launcher-entities/create-launcher-entity.ts +25 -0
  19. package/src/extensions/launcher-entities/keys.ts +46 -0
  20. package/src/extensions/launcher-entities/launcher-entity-components.ts +177 -0
  21. package/src/extensions/launcher-entities/props-map.ts +69 -0
  22. package/src/extensions/launcher-entities/registry.ts +32 -0
  23. package/src/extensions/launcher-models/apis/accounts-contracts.ts +102 -0
  24. package/src/extensions/launcher-models/apis/launcher-model-apis.ts +553 -0
  25. package/src/extensions/launcher-models/keys.ts +23 -0
  26. package/src/extensions/launcher-models/public.ts +9 -0
  27. package/src/extensions/launcher-models/registry-core.ts +34 -0
  28. package/src/extensions/manifest-types.ts +22 -0
  29. package/src/extensions/manifest.ts +46 -0
  30. package/src/extensions/marketplace-open-key.ts +26 -0
  31. package/src/extensions/plugin-types.ts +44 -0
  32. package/src/extensions/plugin.ts +62 -0
  33. package/src/extensions/registries/bootstrap.ts +11 -0
  34. package/src/extensions/registries/builtins/account-provider.ts +6 -0
  35. package/src/extensions/registries/builtins/app-topbar-left-widgets.ts +6 -0
  36. package/src/extensions/registries/builtins/app-topbar-right-widgets.ts +6 -0
  37. package/src/extensions/registries/builtins/app-topbar-status-widgets.ts +6 -0
  38. package/src/extensions/registries/builtins/build-card-actions.ts +6 -0
  39. package/src/extensions/registries/builtins/build-card-after-meta.ts +6 -0
  40. package/src/extensions/registries/builtins/build-card-before-media.ts +6 -0
  41. package/src/extensions/registries/builtins/build-card-before-meta.ts +6 -0
  42. package/src/extensions/registries/builtins/build-card-footer-actions.ts +6 -0
  43. package/src/extensions/registries/builtins/build-detail-after-content.ts +6 -0
  44. package/src/extensions/registries/builtins/build-detail-before-content.ts +6 -0
  45. package/src/extensions/registries/builtins/build-detail-before-hero.ts +6 -0
  46. package/src/extensions/registries/builtins/build-detail-header-actions.ts +6 -0
  47. package/src/extensions/registries/builtins/build-detail-mod-row-actions.ts +6 -0
  48. package/src/extensions/registries/builtins/build-detail-resourcepack-row-actions.ts +6 -0
  49. package/src/extensions/registries/builtins/build-detail-right-column-bottom.ts +6 -0
  50. package/src/extensions/registries/builtins/build-detail-right-column-top.ts +6 -0
  51. package/src/extensions/registries/builtins/dialog-footer-actions.ts +6 -0
  52. package/src/extensions/registries/builtins/feed-after-content.ts +6 -0
  53. package/src/extensions/registries/builtins/feed-before-content.ts +6 -0
  54. package/src/extensions/registries/builtins/file-editor.ts +19 -0
  55. package/src/extensions/registries/builtins/friends-after-list.ts +6 -0
  56. package/src/extensions/registries/builtins/friends-before-list.ts +6 -0
  57. package/src/extensions/registries/builtins/index.ts +141 -0
  58. package/src/extensions/registries/builtins/invite-handler.ts +7 -0
  59. package/src/extensions/registries/builtins/library-after-content.ts +6 -0
  60. package/src/extensions/registries/builtins/library-before-content.ts +6 -0
  61. package/src/extensions/registries/builtins/loader.ts +8 -0
  62. package/src/extensions/registries/builtins/map-card-actions.ts +6 -0
  63. package/src/extensions/registries/builtins/map-card-after-meta.ts +6 -0
  64. package/src/extensions/registries/builtins/map-card-before-meta.ts +6 -0
  65. package/src/extensions/registries/builtins/map-card-footer-actions.ts +6 -0
  66. package/src/extensions/registries/builtins/map-detail-after-content.ts +6 -0
  67. package/src/extensions/registries/builtins/map-detail-before-content.ts +6 -0
  68. package/src/extensions/registries/builtins/map-detail-header-actions.ts +6 -0
  69. package/src/extensions/registries/builtins/markdown-editor-tiptap-extensions.ts +7 -0
  70. package/src/extensions/registries/builtins/markdown-editor-toolbar-actions.ts +6 -0
  71. package/src/extensions/registries/builtins/markdown-renderer-after-content.ts +6 -0
  72. package/src/extensions/registries/builtins/markdown-renderer-before-content.ts +6 -0
  73. package/src/extensions/registries/builtins/mod-details-footer-actions.ts +6 -0
  74. package/src/extensions/registries/builtins/mod-manage-actions.ts +6 -0
  75. package/src/extensions/registries/builtins/mod-provider.ts +5 -0
  76. package/src/extensions/registries/builtins/nav.ts +7 -0
  77. package/src/extensions/registries/builtins/page.ts +13 -0
  78. package/src/extensions/registries/builtins/projects-after-content.ts +6 -0
  79. package/src/extensions/registries/builtins/projects-before-content.ts +6 -0
  80. package/src/extensions/registries/builtins/resourcepack-manage-actions.ts +7 -0
  81. package/src/extensions/registries/builtins/server-card-actions.ts +6 -0
  82. package/src/extensions/registries/builtins/server-card-after-meta.ts +6 -0
  83. package/src/extensions/registries/builtins/server-card-before-meta.ts +6 -0
  84. package/src/extensions/registries/builtins/server-card-footer-actions.ts +6 -0
  85. package/src/extensions/registries/builtins/server-detail-after-content.ts +6 -0
  86. package/src/extensions/registries/builtins/server-detail-before-content.ts +6 -0
  87. package/src/extensions/registries/builtins/server-detail-header-actions.ts +6 -0
  88. package/src/extensions/registries/builtins/settings-after-sections.ts +6 -0
  89. package/src/extensions/registries/builtins/settings-before-sections.ts +6 -0
  90. package/src/extensions/registries/builtins/settings-section-widgets.ts +6 -0
  91. package/src/extensions/registries/builtins/shaderpack-manage-actions.ts +7 -0
  92. package/src/extensions/registries/builtins/shell.ts +5 -0
  93. package/src/extensions/registries/builtins/sidebar-after-content.ts +6 -0
  94. package/src/extensions/registries/builtins/sidebar-before-content.ts +6 -0
  95. package/src/extensions/registries/builtins/sidebar-footer-widgets.ts +6 -0
  96. package/src/extensions/registries/builtins/sidebar-header-widgets.ts +6 -0
  97. package/src/extensions/registries/builtins/sidebar.ts +11 -0
  98. package/src/extensions/registries/builtins/theme.ts +5 -0
  99. package/src/extensions/registries/builtins/user-card-after-meta.ts +6 -0
  100. package/src/extensions/registries/builtins/user-card-before-meta.ts +6 -0
  101. package/src/extensions/registries/builtins/user-menu-actions.ts +6 -0
  102. package/src/extensions/registries/builtins/user-menu-after-actions.ts +6 -0
  103. package/src/extensions/registries/builtins/user-menu-before-actions.ts +6 -0
  104. package/src/extensions/registries/builtins/user-strip.ts +5 -0
  105. package/src/extensions/registries/clear-extension-ui-registries.ts +15 -0
  106. package/src/extensions/registries/define-extension-registry.ts +58 -0
  107. package/src/extensions/registries/extension-host-api.ts +41 -0
  108. package/src/extensions/registries/extension-registry-api.ts +103 -0
  109. package/src/extensions/registries/extension-registry-payload-map.ts +9 -0
  110. package/src/extensions/registries/extension-scope.ts +41 -0
  111. package/src/extensions/registries/get-registry.ts +23 -0
  112. package/src/extensions/registries/index.ts +58 -0
  113. package/src/extensions/registries/manifest-rynt.ts +193 -0
  114. package/src/extensions/registries/registry-slot.ts +40 -0
  115. package/src/extensions/registries/registry-value-map.ts +89 -0
  116. package/src/extensions/registries/store.ts +206 -0
  117. package/src/extensions/resolve-extensions.ts +245 -0
  118. package/src/extensions/router-bridge.ts +103 -0
  119. package/src/extensions/session.ts +6 -0
  120. package/src/extensions/slug.ts +23 -0
  121. package/src/extensions/version.ts +147 -0
  122. package/src/host/extensions-composables.ts +33 -0
  123. package/src/host/extensions-init.ts +194 -0
  124. package/src/host/index.ts +11 -0
  125. package/src/host/launcher-models/index.ts +4 -0
  126. package/src/index.ts +229 -0
  127. package/src/minecraft-loader/base-loader.ts +102 -0
  128. package/src/minecraft-loader/index.ts +11 -0
  129. package/src/minecraft-loader/loader-registry.ts +72 -0
  130. package/src/shared/api/assets.ts +112 -0
  131. package/src/shared/api/auth.ts +283 -0
  132. package/src/shared/api/builds.ts +647 -0
  133. package/src/shared/api/config.ts +19 -0
  134. package/src/shared/api/download-stats.ts +103 -0
  135. package/src/shared/api/downloads.ts +36 -0
  136. package/src/shared/api/entity-authorship.ts +60 -0
  137. package/src/shared/api/events.ts +393 -0
  138. package/src/shared/api/friends.ts +140 -0
  139. package/src/shared/api/graphql.ts +87 -0
  140. package/src/shared/api/index.ts +23 -0
  141. package/src/shared/api/invites.ts +262 -0
  142. package/src/shared/api/library.ts +44 -0
  143. package/src/shared/api/maps.ts +385 -0
  144. package/src/shared/api/notify-websocket.ts +140 -0
  145. package/src/shared/api/posts.ts +357 -0
  146. package/src/shared/api/projectServers.ts +379 -0
  147. package/src/shared/api/serverMembers.ts +173 -0
  148. package/src/shared/api/users.ts +294 -0
  149. package/src/shared/composables/buildEditor/useBuildEditor.ts +66 -0
  150. package/src/shared/composables/buildManifest/buildManifest.ts +447 -0
  151. package/src/shared/composables/filesEditor/filesEditor.ts +346 -0
  152. package/src/shared/composables/index.ts +10 -0
  153. package/src/shared/composables/modsEditor/modsEditor.ts +1678 -0
  154. package/src/shared/composables/registrySlot/registry-slot-utils.ts +25 -0
  155. package/src/shared/composables/registrySlot/useRegistrySlotMissing.ts +35 -0
  156. package/src/shared/composables/resourcePacksEditor/resourcePacksEditor.ts +448 -0
  157. package/src/shared/composables/shaderPacksEditor/shaderPacksEditor.ts +395 -0
  158. package/src/shared/composables/useSkinRender.ts +70 -0
  159. package/src/shared/composables/useZlDeepLink.ts +178 -0
  160. package/src/shared/definitions/defineGraphCache.ts +216 -0
  161. package/src/shared/definitions/defineStore.ts +32 -0
  162. package/src/shared/definitions/index.ts +2 -0
  163. package/src/shared/minecraft-types/build-manifest.ts +611 -0
  164. package/src/shared/minecraft-types/index.ts +3 -0
  165. package/src/shared/minecraft-types/launcher-versions.ts +32 -0
  166. package/src/shared/minecraft-types/minecraft-launcher-types.ts +276 -0
  167. package/src/shared/mocks/index.ts +1 -0
  168. package/src/shared/mocks/navigation.ts +17 -0
  169. package/src/shared/mods/http.ts +45 -0
  170. package/src/shared/mods/index.ts +5 -0
  171. package/src/shared/mods/marketplace-editor-search.ts +266 -0
  172. package/src/shared/mods/marketplace-search-utils.ts +42 -0
  173. package/src/shared/mods/mod-marketplace-registry.ts +66 -0
  174. package/src/shared/mods/mod-marketplace-types.ts +28 -0
  175. package/src/shared/mods/providers/curseforge.ts +464 -0
  176. package/src/shared/mods/providers/index.ts +8 -0
  177. package/src/shared/mods/providers/modrinth.ts +402 -0
  178. package/src/shared/mods/resolve-mods-provider-loader-ids.ts +77 -0
  179. package/src/shared/mods/types.ts +76 -0
  180. package/src/shared/styles/index.css +713 -0
  181. package/src/shared/themes/index.ts +23 -0
  182. package/src/shared/themes/theme-tokens-black.json +126 -0
  183. package/src/shared/themes/theme-tokens-classic.json +126 -0
  184. package/src/shared/themes/theme-tokens-pink.json +126 -0
  185. package/src/shared/themes/theme-tokens.json +126 -0
  186. package/src/shared/themes/types.ts +85 -0
  187. package/src/shared/types/API_DOCUMENTATION.md +422 -0
  188. package/src/shared/types/account.ts +40 -0
  189. package/src/shared/types/build.ts +8 -0
  190. package/src/shared/types/entities.ts +181 -0
  191. package/src/shared/types/index.ts +6 -0
  192. package/src/shared/types/invite-payloads.ts +60 -0
  193. package/src/shared/types/navigation.ts +16 -0
  194. package/src/shared/types/running-build.ts +51 -0
  195. package/src/shared/types/serverMember.ts +17 -0
  196. package/src/shared/types/user.ts +55 -0
  197. package/src/shared/ui/base/Avatar.vue +262 -0
  198. package/src/shared/ui/base/Badge.vue +47 -0
  199. package/src/shared/ui/base/Button.vue +78 -0
  200. package/src/shared/ui/base/Divider.vue +42 -0
  201. package/src/shared/ui/base/Icon.vue +597 -0
  202. package/src/shared/ui/base/StatusIndicator.vue +44 -0
  203. package/src/shared/ui/base/index.ts +7 -0
  204. package/src/shared/ui/cards/InviteCard.vue +47 -0
  205. package/src/shared/ui/cards/index.ts +2 -0
  206. package/src/shared/ui/dialog/Dialog.vue +71 -0
  207. package/src/shared/ui/dialog/DialogContent.vue +31 -0
  208. package/src/shared/ui/dialog/DialogFooter.vue +14 -0
  209. package/src/shared/ui/dialog/DialogHeader.vue +41 -0
  210. package/src/shared/ui/dialog/index.ts +5 -0
  211. package/src/shared/ui/editors/AttachmentImagesEditor.vue +133 -0
  212. package/src/shared/ui/editors/ContentAttachmentsDisplay.vue +76 -0
  213. package/src/shared/ui/editors/MarkdownEditor.vue +956 -0
  214. package/src/shared/ui/editors/MarkdownRenderer.vue +299 -0
  215. package/src/shared/ui/editors/RichContentImageViewer.vue +85 -0
  216. package/src/shared/ui/editors/SocialPostMediaZone.vue +320 -0
  217. package/src/shared/ui/editors/index.ts +6 -0
  218. package/src/shared/ui/editors/markdown-editor-gallery.ts +234 -0
  219. package/src/shared/ui/editors/markdown-editor-image.ts +178 -0
  220. package/src/shared/ui/form/Checkbox.vue +38 -0
  221. package/src/shared/ui/form/FormField.vue +30 -0
  222. package/src/shared/ui/form/FormGrid.vue +38 -0
  223. package/src/shared/ui/form/ImageEditor.vue +598 -0
  224. package/src/shared/ui/form/Input.vue +72 -0
  225. package/src/shared/ui/form/Range.vue +65 -0
  226. package/src/shared/ui/form/Select.vue +76 -0
  227. package/src/shared/ui/form/Switch.vue +38 -0
  228. package/src/shared/ui/form/Textarea.vue +144 -0
  229. package/src/shared/ui/form/index.ts +9 -0
  230. package/src/shared/ui/index.ts +9 -0
  231. package/src/shared/ui/layout/BusyOverlay.vue +31 -0
  232. package/src/shared/ui/layout/Callout.vue +44 -0
  233. package/src/shared/ui/layout/Card.vue +38 -0
  234. package/src/shared/ui/layout/Container.vue +36 -0
  235. package/src/shared/ui/layout/EmptyState.vue +99 -0
  236. package/src/shared/ui/layout/EntityMediaRow.vue +54 -0
  237. package/src/shared/ui/layout/FilterResultsLayout.vue +22 -0
  238. package/src/shared/ui/layout/FloatingPanel.vue +37 -0
  239. package/src/shared/ui/layout/FullscreenDimmer.vue +11 -0
  240. package/src/shared/ui/layout/Grid.vue +40 -0
  241. package/src/shared/ui/layout/Inline.vue +59 -0
  242. package/src/shared/ui/layout/LoadingState.vue +39 -0
  243. package/src/shared/ui/layout/MediaBox.vue +47 -0
  244. package/src/shared/ui/layout/OverlayPanel.vue +28 -0
  245. package/src/shared/ui/layout/OverlayWaitPanel.vue +22 -0
  246. package/src/shared/ui/layout/PageSection.vue +43 -0
  247. package/src/shared/ui/layout/PageToolbar.vue +29 -0
  248. package/src/shared/ui/layout/Panel.vue +39 -0
  249. package/src/shared/ui/layout/ProgressBar.vue +49 -0
  250. package/src/shared/ui/layout/Section.vue +30 -0
  251. package/src/shared/ui/layout/SegmentedControl.vue +43 -0
  252. package/src/shared/ui/layout/SelectableCard.vue +46 -0
  253. package/src/shared/ui/layout/SelectableRow.vue +41 -0
  254. package/src/shared/ui/layout/Skeleton.vue +25 -0
  255. package/src/shared/ui/layout/SkeletonAvatar.vue +30 -0
  256. package/src/shared/ui/layout/SkeletonEntityCard.vue +20 -0
  257. package/src/shared/ui/layout/SkeletonFeedPost.vue +22 -0
  258. package/src/shared/ui/layout/SkeletonGrid.vue +18 -0
  259. package/src/shared/ui/layout/SkeletonListRow.vue +31 -0
  260. package/src/shared/ui/layout/SkeletonText.vue +25 -0
  261. package/src/shared/ui/layout/Stack.vue +42 -0
  262. package/src/shared/ui/layout/StateBlock.vue +44 -0
  263. package/src/shared/ui/layout/TwoPaneLayout.vue +35 -0
  264. package/src/shared/ui/layout/VirtualList.vue +160 -0
  265. package/src/shared/ui/layout/index.ts +35 -0
  266. package/src/shared/ui/layout/skeletonSurfaceStyles.ts +24 -0
  267. package/src/shared/ui/navigation/NavItem.vue +139 -0
  268. package/src/shared/ui/navigation/Tab.vue +61 -0
  269. package/src/shared/ui/navigation/Tabs.vue +37 -0
  270. package/src/shared/ui/navigation/index.ts +4 -0
  271. package/src/shared/ui/primitives/Action.vue +19 -0
  272. package/src/shared/ui/primitives/Block.vue +28 -0
  273. package/src/shared/ui/primitives/CanvasView.vue +19 -0
  274. package/src/shared/ui/primitives/Control.vue +24 -0
  275. package/src/shared/ui/primitives/ControlSelect.vue +19 -0
  276. package/src/shared/ui/primitives/ControlTextarea.vue +17 -0
  277. package/src/shared/ui/primitives/FieldLabel.vue +19 -0
  278. package/src/shared/ui/primitives/Form.vue +19 -0
  279. package/src/shared/ui/primitives/Heading.vue +29 -0
  280. package/src/shared/ui/primitives/Image.vue +17 -0
  281. package/src/shared/ui/primitives/LineBreak.vue +3 -0
  282. package/src/shared/ui/primitives/Link.vue +19 -0
  283. package/src/shared/ui/primitives/List.vue +28 -0
  284. package/src/shared/ui/primitives/ListItem.vue +19 -0
  285. package/src/shared/ui/primitives/OptionItem.vue +19 -0
  286. package/src/shared/ui/primitives/Text.vue +28 -0
  287. package/src/shared/ui/primitives/VideoView.vue +19 -0
  288. package/src/shared/ui/primitives/index.ts +19 -0
  289. package/src/shared/ui/primitives/resolveElement.ts +25 -0
  290. package/src/shared/ui/special/AngularAccent.vue +106 -0
  291. package/src/shared/ui/special/ExtensionRegistrySlotButton.vue +143 -0
  292. package/src/shared/ui/special/InfoRow.vue +39 -0
  293. package/src/shared/ui/special/LogViewer.vue +53 -0
  294. package/src/shared/ui/special/PageHeader.vue +23 -0
  295. package/src/shared/ui/special/RegistrySlotMissingCallout.vue +48 -0
  296. package/src/shared/ui/special/WelcomeCard.vue +32 -0
  297. package/src/shared/ui/special/index.ts +9 -0
  298. package/src/shared/utils/app-paths.ts +50 -0
  299. package/src/shared/utils/attachments.ts +16 -0
  300. package/src/shared/utils/autostart.ts +213 -0
  301. package/src/shared/utils/build-files.ts +439 -0
  302. package/src/shared/utils/build-manifest-init.ts +176 -0
  303. package/src/shared/utils/cloudinary.ts +67 -0
  304. package/src/shared/utils/cn.ts +7 -0
  305. package/src/shared/utils/download-stats-week.ts +165 -0
  306. package/src/shared/utils/entity-api-to-cache.ts +84 -0
  307. package/src/shared/utils/entity-build-from-api.ts +1 -0
  308. package/src/shared/utils/entity-display.ts +27 -0
  309. package/src/shared/utils/entity-map-from-api.ts +1 -0
  310. package/src/shared/utils/file-hash.ts +65 -0
  311. package/src/shared/utils/formatSize.ts +5 -0
  312. package/src/shared/utils/formatTime.ts +157 -0
  313. package/src/shared/utils/getAccountSkinRender.ts +32 -0
  314. package/src/shared/utils/index.ts +34 -0
  315. package/src/shared/utils/local-mods.ts +678 -0
  316. package/src/shared/utils/local-settings.ts +217 -0
  317. package/src/shared/utils/member-join-stats.ts +35 -0
  318. package/src/shared/utils/platform.ts +86 -0
  319. package/src/shared/utils/play-host-slug.ts +92 -0
  320. package/src/shared/utils/rich-content.ts +294 -0
  321. package/src/shared/utils/safeRequest.ts +23 -0
  322. package/src/shared/utils/semver.ts +81 -0
  323. package/src/shared/utils/serverPermissions.ts +155 -0
  324. package/src/shared/utils/skin-render-cache.ts +372 -0
  325. package/src/shared/utils/stripMarkdown.ts +45 -0
  326. package/src/shared/utils/transliterate.ts +74 -0
  327. package/src/shared/utils/updateAccountSkinRender.ts +64 -0
  328. package/src/shared/utils/updater.ts +218 -0
  329. package/src/shared/utils/uploadImage.ts +195 -0
  330. package/src/shared/utils/user-status.ts +9 -0
  331. package/src/tiptap/index.ts +7 -0
  332. package/tsconfig.json +13 -0
@@ -0,0 +1,34 @@
1
+ import type { LauncherModelApis } from './apis/launcher-model-apis';
2
+ import type { RyntLauncherModelKey } from './keys';
3
+
4
+ const registry = new Map<RyntLauncherModelKey, unknown>();
5
+
6
+ /**
7
+ * Экземпляр модели с хоста (обычно `useXxxModel()` до загрузки расширений).
8
+ */
9
+ export function registerModel<K extends RyntLauncherModelKey>(
10
+ key: K,
11
+ instance: LauncherModelApis[K],
12
+ ): void {
13
+ registry.set(key, instance);
14
+ }
15
+
16
+ /**
17
+ * Доступ к зарегистрированной модели. Реализация одна на хосте и в shim для расширений.
18
+ */
19
+ export function useModel<K extends RyntLauncherModelKey>(
20
+ key: K,
21
+ ): LauncherModelApis[K] {
22
+ const v = registry.get(key);
23
+ if (v === undefined) {
24
+ throw new Error(
25
+ `[rynt/models] Модель «${key}» не зарегистрирована. Вызовите registerModel('${key}', useXxxModel()) в лаунчере до загрузки расширений.`,
26
+ );
27
+ }
28
+ return v as LauncherModelApis[K];
29
+ }
30
+
31
+ /** Только для тестов или горячего перезапуска регистра — не использовать из расширений. */
32
+ export function clearLauncherModelRegistry(): void {
33
+ registry.clear();
34
+ }
@@ -0,0 +1,22 @@
1
+ import type { ParsedRyntManifestContributes } from './registries/manifest-rynt';
2
+
3
+ export type ExtensionDependencyGraph = Record<string, Record<string, string>>;
4
+
5
+ export interface RyntExtensionManifestParsed {
6
+ id: string;
7
+ name: string;
8
+ version: string;
9
+ /** Короткое plain-text описание для карточки и поиска. */
10
+ description?: string;
11
+ /** URL иконки в собранном bundle (`icon.png` и т.п.) или абсолютный URL / data URI. */
12
+ icon?: string;
13
+ author?: string;
14
+ main: string;
15
+ engines?: { rynt?: string };
16
+ extensionApi?: string;
17
+ extensionDependencies?: Record<string, string>;
18
+ contributes?: Record<string, unknown> & {
19
+ /** Нормализуется при загрузке расширения (`applyValidatedRyntContributesToManifest`). */
20
+ rynt?: ParsedRyntManifestContributes;
21
+ };
22
+ }
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+
3
+ import type { RyntExtensionManifestParsed } from './manifest-types';
4
+ import { normalizeExtensionApiInManifest } from './version';
5
+
6
+ const manifestSchema = z.object({
7
+ id: z.string().min(1),
8
+ name: z.string(),
9
+ version: z.string(),
10
+ description: z.string().optional(),
11
+ icon: z.string().optional(),
12
+ author: z.string().optional(),
13
+ main: z.string().min(1),
14
+ engines: z
15
+ .object({
16
+ rynt: z.string().optional(),
17
+ })
18
+ .optional(),
19
+ extensionApi: z.string().optional(),
20
+ extensionDependencies: z.record(z.string()).optional(),
21
+ contributes: z.record(z.unknown()).optional(),
22
+ });
23
+
24
+ export interface ParseRyntManifestOptions {
25
+ strictExtensionApi?: boolean;
26
+ }
27
+
28
+ export function parseRyntManifestJson(
29
+ raw: unknown,
30
+ options?: ParseRyntManifestOptions,
31
+ ): { ok: true; data: RyntExtensionManifestParsed } | { ok: false; error: string } {
32
+ const parsed = manifestSchema.safeParse(raw);
33
+ if (!parsed.success) {
34
+ const msg = parsed.error.issues.map((i) => i.message).join('; ');
35
+ return { ok: false, error: msg };
36
+ }
37
+ const data = { ...parsed.data };
38
+ const apiErr = normalizeExtensionApiInManifest(data, {
39
+ strict: options?.strictExtensionApi,
40
+ extensionId: data.id,
41
+ });
42
+ if (apiErr) {
43
+ return { ok: false, error: apiErr };
44
+ }
45
+ return { ok: true, data };
46
+ }
@@ -0,0 +1,26 @@
1
+ import type { InjectionKey } from 'vue';
2
+
3
+ import type { MarketplaceSlotLookupResult } from '../extension-marketplace/api-types';
4
+
5
+ export interface ExtensionMarketplaceSlotOpenOptions {
6
+ registryId: string;
7
+ key: string;
8
+ }
9
+
10
+ export type ExtensionMarketplaceOpenFn = (
11
+ options?: { mode: 'catalog' } | ({ mode: 'slot' } & ExtensionMarketplaceSlotOpenOptions),
12
+ ) => void;
13
+
14
+ /** Задаёт лаунчер через `provide` — для {@link ExtensionRegistrySlotButton}. */
15
+ export const RYNT_EXTENSION_MARKETPLACE_OPEN: InjectionKey<ExtensionMarketplaceOpenFn> =
16
+ Symbol('ryntExtensionMarketplaceOpen');
17
+
18
+ /** Prefetch слота каталога (`null` — маркетплейс не настроен). */
19
+ export const RYNT_EXTENSION_MARKETPLACE_SLOT_RESOLVE: InjectionKey<
20
+ (query: ExtensionMarketplaceSlotOpenOptions) => Promise<MarketplaceSlotLookupResult | null>
21
+ > = Symbol('ryntExtensionMarketplaceSlotResolve');
22
+
23
+ /** Установка по `downloadUrl` и перезагрузка расширений на диске. */
24
+ export const RYNT_EXTENSION_MARKETPLACE_INSTALL: InjectionKey<
25
+ (downloadUrl: string) => Promise<void>
26
+ > = Symbol('ryntExtensionMarketplaceInstall');
@@ -0,0 +1,44 @@
1
+ export interface RyntExtensionNativeNotificationInput {
2
+ title: string;
3
+ body?: string;
4
+ tag?: string;
5
+ icon?: string;
6
+ badge?: string;
7
+ onClick?: () => void;
8
+ }
9
+
10
+ export interface RyntExtensionHostApis {
11
+ requestNativeNotification?: (
12
+ input: RyntExtensionNativeNotificationInput,
13
+ ) => void | Promise<void>;
14
+ navigateTo?: (path: string) => void | Promise<void>;
15
+ }
16
+
17
+ export interface RyntExtensionContext {
18
+ readonly extensionId: string;
19
+ hostApis?: RyntExtensionHostApis;
20
+ registerRegistryEntry<T>(entry: {
21
+ registryId: string;
22
+ key: string;
23
+ value: T;
24
+ order?: number;
25
+ }): void;
26
+ /**
27
+ * Публикует объект API расширения для других расширений (`getExtensionExpose` / `useExtensionExpose`).
28
+ * Альтернатива: вернуть из `setup` объект `{ expose: … }` (после завершения setup имеет приоритет).
29
+ */
30
+ defineExpose<T extends object>(value: T): void;
31
+ }
32
+
33
+ /** Результат `setup`: можно вернуть `{ expose }` вместо вызова `ctx.defineExpose`. */
34
+ export type RyntExtensionSetupResult = void | { expose?: unknown };
35
+
36
+ export type RyntExtensionSetupFn = (
37
+ ctx: RyntExtensionContext,
38
+ ) =>
39
+ | RyntExtensionSetupResult
40
+ | Promise<RyntExtensionSetupResult>;
41
+
42
+ export interface RyntExtensionDefinition {
43
+ setup: RyntExtensionSetupFn;
44
+ }
@@ -0,0 +1,62 @@
1
+ export type {
2
+ RyntExtensionContext,
3
+ RyntExtensionDefinition,
4
+ RyntExtensionHostApis,
5
+ RyntExtensionNativeNotificationInput,
6
+ RyntExtensionSetupFn,
7
+ RyntExtensionSetupResult,
8
+ } from './plugin-types';
9
+
10
+ export type {
11
+ CoreNavItem,
12
+ CorePageItem,
13
+ CoreSidebarItem,
14
+ } from './registries/builtins';
15
+
16
+ import type { RyntExtensionDefinition, RyntExtensionSetupFn } from './plugin-types';
17
+
18
+ export { defineStore } from '../shared/definitions/defineStore';
19
+
20
+ export { extensionRouteSlug, resolvedNavigationPath } from './slug';
21
+
22
+ export {
23
+ useExtensionNavRegistry,
24
+ useExtensionPageRegistry,
25
+ useExtensionShellRegistry,
26
+ useExtensionSidebarRegistry,
27
+ useExtensionUserStripRegistry,
28
+ useLoaderRegistry,
29
+ useModProviderRegistry,
30
+ } from './registries/builtins';
31
+
32
+ export {
33
+ defineExtensionRegistry,
34
+ getExtensionRegistry,
35
+ } from './registries/define-extension-registry';
36
+ export type {
37
+ ExtensionRegistryApi,
38
+ UseExtensionRegistry,
39
+ } from './registries/define-extension-registry';
40
+
41
+ /** Нужны шиму `@rynt/extension-build` для авто-detection extensionId. Не используются напрямую. */
42
+ export {
43
+ HOST_EXTENSION_ID,
44
+ popExtensionScope,
45
+ pushExtensionScope,
46
+ } from './registries/extension-scope';
47
+
48
+ export { markModMarketplaceProvider } from '../shared/mods/mod-marketplace-registry';
49
+
50
+ export function defineRyntExtension(
51
+ setup: RyntExtensionSetupFn,
52
+ ): RyntExtensionDefinition {
53
+ return { setup };
54
+ }
55
+
56
+ export {
57
+ extensionExposeRevision,
58
+ getExtensionExpose,
59
+ useExtensionExpose,
60
+ } from './extension-expose';
61
+ export type { ExtensionExposeMap } from '@rynt/sdk/extension-expose-map';
62
+ export type { ExtensionRegistryPayloadMap } from '@rynt/sdk/extension-registry-payload-map';
@@ -0,0 +1,11 @@
1
+ import './builtins';
2
+
3
+ let ensured = false;
4
+
5
+ /** Идемпотентно подгружает объявления встроенных реестров (`registries/builtins/*`). */
6
+ export function ensureCoreExtensionRegistries(): void {
7
+ if (ensured) {
8
+ return;
9
+ }
10
+ ensured = true;
11
+ }
@@ -0,0 +1,6 @@
1
+ import type { IAuthProvider } from '../../launcher-models/apis/accounts-contracts';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Провайдеры входа в Minecraft (ключ = `provider.id`). */
5
+ export const useAccountProviderRegistry =
6
+ defineExtensionRegistry<IAuthProvider>('core.accountProvider');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки в левую часть TopBar. */
5
+ export const useAppTopbarLeftWidgetsRegistry =
6
+ defineExtensionRegistry<Component>('core.appTopbarLeftWidgets');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки в правую часть TopBar. */
5
+ export const useAppTopbarRightWidgetsRegistry =
6
+ defineExtensionRegistry<Component>('core.appTopbarRightWidgets');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки в статусную зону TopBar. */
5
+ export const useAppTopbarStatusWidgetsRegistry =
6
+ defineExtensionRegistry<Component>('core.appTopbarStatusWidgets');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Дополнительные элементы/кнопки в карточке сборки. */
5
+ export const useBuildCardActionsRegistry =
6
+ defineExtensionRegistry<Component>('core.buildCardActions');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки после метаданных карточки сборки. */
5
+ export const useBuildCardAfterMetaRegistry =
6
+ defineExtensionRegistry<Component>('core.buildCardAfterMeta');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки перед медиа-блоком карточки сборки. */
5
+ export const useBuildCardBeforeMediaRegistry =
6
+ defineExtensionRegistry<Component>('core.buildCardBeforeMedia');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки перед метаданными карточки сборки. */
5
+ export const useBuildCardBeforeMetaRegistry =
6
+ defineExtensionRegistry<Component>('core.buildCardBeforeMeta');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки в footer карточки сборки. */
5
+ export const useBuildCardFooterActionsRegistry =
6
+ defineExtensionRegistry<Component>('core.buildCardFooterActions');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Визуальные блоки после основного контента деталки сборки. */
5
+ export const useBuildDetailAfterContentRegistry =
6
+ defineExtensionRegistry<Component>('core.buildDetailAfterContent');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Визуальные блоки перед основным контентом деталки сборки. */
5
+ export const useBuildDetailBeforeContentRegistry =
6
+ defineExtensionRegistry<Component>('core.buildDetailBeforeContent');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки перед hero-блоком деталки сборки. */
5
+ export const useBuildDetailBeforeHeroRegistry =
6
+ defineExtensionRegistry<Component>('core.buildDetailBeforeHero');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Дополнительные кнопки/виджеты в hero-шапке деталки сборки. */
5
+ export const useBuildDetailHeaderActionsRegistry =
6
+ defineExtensionRegistry<Component>('core.buildDetailHeaderActions');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Доп. действия в строке мода на деталке сборки. */
5
+ export const useBuildDetailModRowActionsRegistry =
6
+ defineExtensionRegistry<Component>('core.buildDetailModRowActions');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Доп. действия в строке ресурспака на деталке сборки. */
5
+ export const useBuildDetailResourcepackRowActionsRegistry =
6
+ defineExtensionRegistry<Component>('core.buildDetailResourcepackRowActions');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки в низ правой колонки деталки сборки. */
5
+ export const useBuildDetailRightColumnBottomRegistry =
6
+ defineExtensionRegistry<Component>('core.buildDetailRightColumnBottom');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки в верх правой колонки деталки сборки. */
5
+ export const useBuildDetailRightColumnTopRegistry =
6
+ defineExtensionRegistry<Component>('core.buildDetailRightColumnTop');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Универсальные доп. действия в DialogFooter. */
5
+ export const useDialogFooterActionsRegistry =
6
+ defineExtensionRegistry<Component>('core.dialogFooterActions');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Визуальные блоки после контента ленты. */
5
+ export const useFeedAfterContentRegistry =
6
+ defineExtensionRegistry<Component>('core.feedAfterContent');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Визуальные блоки перед контентом ленты. */
5
+ export const useFeedBeforeContentRegistry =
6
+ defineExtensionRegistry<Component>('core.feedBeforeContent');
@@ -0,0 +1,19 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ export interface FileEditorProvider {
5
+ id: string;
6
+ label: string;
7
+ /** Расширения файлов без точки: ['json', 'md', 'txt', ...] */
8
+ extensions: string[];
9
+ order?: number;
10
+ /**
11
+ * Vue-компонент редактора.
12
+ * Props: value (Uint8Array), fileName, relativePath, fullPath
13
+ * Events: save (Uint8Array)
14
+ */
15
+ component: Component;
16
+ }
17
+
18
+ export const useFileEditorRegistry =
19
+ defineExtensionRegistry<FileEditorProvider>('core.fileEditor');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки после списка друзей. */
5
+ export const useFriendsAfterListRegistry =
6
+ defineExtensionRegistry<Component>('core.friendsAfterList');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки перед списком друзей. */
5
+ export const useFriendsBeforeListRegistry =
6
+ defineExtensionRegistry<Component>('core.friendsBeforeList');
@@ -0,0 +1,141 @@
1
+ import './page';
2
+ import './nav';
3
+ import './sidebar';
4
+ import './shell';
5
+ import './user-strip';
6
+ import './loader';
7
+ import './account-provider';
8
+ import './invite-handler';
9
+ import './mod-provider';
10
+ import './mod-manage-actions';
11
+ import './resourcepack-manage-actions';
12
+ import './shaderpack-manage-actions';
13
+ import './file-editor';
14
+ import './theme';
15
+ import './app-topbar-left-widgets';
16
+ import './app-topbar-right-widgets';
17
+ import './app-topbar-status-widgets';
18
+ import './sidebar-before-content';
19
+ import './sidebar-after-content';
20
+ import './sidebar-header-widgets';
21
+ import './sidebar-footer-widgets';
22
+ import './user-menu-actions';
23
+ import './user-menu-before-actions';
24
+ import './user-menu-after-actions';
25
+ import './feed-before-content';
26
+ import './feed-after-content';
27
+ import './library-before-content';
28
+ import './library-after-content';
29
+ import './friends-before-list';
30
+ import './friends-after-list';
31
+ import './projects-before-content';
32
+ import './projects-after-content';
33
+ import './settings-before-sections';
34
+ import './settings-after-sections';
35
+ import './settings-section-widgets';
36
+ import './markdown-editor-toolbar-actions';
37
+ import './markdown-editor-tiptap-extensions';
38
+ import './markdown-renderer-before-content';
39
+ import './markdown-renderer-after-content';
40
+ import './build-detail-before-content';
41
+ import './build-detail-after-content';
42
+ import './build-detail-before-hero';
43
+ import './build-detail-header-actions';
44
+ import './build-detail-right-column-top';
45
+ import './build-detail-right-column-bottom';
46
+ import './build-detail-mod-row-actions';
47
+ import './build-detail-resourcepack-row-actions';
48
+ import './mod-details-footer-actions';
49
+ import './dialog-footer-actions';
50
+ import './map-detail-before-content';
51
+ import './map-detail-after-content';
52
+ import './map-detail-header-actions';
53
+ import './server-detail-before-content';
54
+ import './server-detail-after-content';
55
+ import './server-detail-header-actions';
56
+ import './build-card-actions';
57
+ import './build-card-before-media';
58
+ import './build-card-before-meta';
59
+ import './build-card-after-meta';
60
+ import './build-card-footer-actions';
61
+ import './map-card-actions';
62
+ import './map-card-before-meta';
63
+ import './map-card-after-meta';
64
+ import './map-card-footer-actions';
65
+ import './server-card-actions';
66
+ import './server-card-before-meta';
67
+ import './server-card-after-meta';
68
+ import './server-card-footer-actions';
69
+ import './user-card-before-meta';
70
+ import './user-card-after-meta';
71
+
72
+ export * from './page';
73
+ export * from './nav';
74
+ export * from './sidebar';
75
+ export * from './shell';
76
+ export * from './user-strip';
77
+ export * from './loader';
78
+ export * from './account-provider';
79
+ export * from './invite-handler';
80
+ export * from './mod-provider';
81
+ export * from './mod-manage-actions';
82
+ export * from './resourcepack-manage-actions';
83
+ export * from './shaderpack-manage-actions';
84
+ export * from './file-editor';
85
+ export * from './theme';
86
+ export * from './app-topbar-left-widgets';
87
+ export * from './app-topbar-right-widgets';
88
+ export * from './app-topbar-status-widgets';
89
+ export * from './sidebar-before-content';
90
+ export * from './sidebar-after-content';
91
+ export * from './sidebar-header-widgets';
92
+ export * from './sidebar-footer-widgets';
93
+ export * from './user-menu-actions';
94
+ export * from './user-menu-before-actions';
95
+ export * from './user-menu-after-actions';
96
+ export * from './feed-before-content';
97
+ export * from './feed-after-content';
98
+ export * from './library-before-content';
99
+ export * from './library-after-content';
100
+ export * from './friends-before-list';
101
+ export * from './friends-after-list';
102
+ export * from './projects-before-content';
103
+ export * from './projects-after-content';
104
+ export * from './settings-before-sections';
105
+ export * from './settings-after-sections';
106
+ export * from './settings-section-widgets';
107
+ export * from './markdown-editor-toolbar-actions';
108
+ export * from './markdown-editor-tiptap-extensions';
109
+ export * from './markdown-renderer-before-content';
110
+ export * from './markdown-renderer-after-content';
111
+ export * from './build-detail-before-content';
112
+ export * from './build-detail-after-content';
113
+ export * from './build-detail-before-hero';
114
+ export * from './build-detail-header-actions';
115
+ export * from './build-detail-right-column-top';
116
+ export * from './build-detail-right-column-bottom';
117
+ export * from './build-detail-mod-row-actions';
118
+ export * from './build-detail-resourcepack-row-actions';
119
+ export * from './mod-details-footer-actions';
120
+ export * from './dialog-footer-actions';
121
+ export * from './map-detail-before-content';
122
+ export * from './map-detail-after-content';
123
+ export * from './map-detail-header-actions';
124
+ export * from './server-detail-before-content';
125
+ export * from './server-detail-after-content';
126
+ export * from './server-detail-header-actions';
127
+ export * from './build-card-actions';
128
+ export * from './build-card-before-media';
129
+ export * from './build-card-before-meta';
130
+ export * from './build-card-after-meta';
131
+ export * from './build-card-footer-actions';
132
+ export * from './map-card-actions';
133
+ export * from './map-card-before-meta';
134
+ export * from './map-card-after-meta';
135
+ export * from './map-card-footer-actions';
136
+ export * from './server-card-actions';
137
+ export * from './server-card-before-meta';
138
+ export * from './server-card-after-meta';
139
+ export * from './server-card-footer-actions';
140
+ export * from './user-card-before-meta';
141
+ export * from './user-card-after-meta';
@@ -0,0 +1,7 @@
1
+ import { defineExtensionRegistry } from '../define-extension-registry';
2
+ import type { InviteHandlerRegistration } from '../../invite-handler/types';
3
+
4
+ /** Обработчики инвайтов по `invite.type` (ключ = type). */
5
+ export const useInviteHandlerRegistry = defineExtensionRegistry<InviteHandlerRegistration>(
6
+ 'core.inviteHandler',
7
+ );
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Визуальные блоки после контента библиотеки. */
5
+ export const useLibraryAfterContentRegistry =
6
+ defineExtensionRegistry<Component>('core.libraryAfterContent');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Визуальные блоки перед контентом библиотеки. */
5
+ export const useLibraryBeforeContentRegistry =
6
+ defineExtensionRegistry<Component>('core.libraryBeforeContent');
@@ -0,0 +1,8 @@
1
+ import type { BaseLoader } from '../../../minecraft-loader/base-loader';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Id реестра лоадеров Minecraft (ключ слота = `loader.id`, например `fabric`, `quilt`). */
5
+ export const CORE_LOADER_REGISTRY_ID = 'core.loader' as const;
6
+
7
+ export const useLoaderRegistry =
8
+ defineExtensionRegistry<BaseLoader>(CORE_LOADER_REGISTRY_ID);
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Дополнительные элементы/кнопки в карточке карты. */
5
+ export const useMapCardActionsRegistry =
6
+ defineExtensionRegistry<Component>('core.mapCardActions');
@@ -0,0 +1,6 @@
1
+ import type { Component } from 'vue';
2
+ import { defineExtensionRegistry } from '../define-extension-registry';
3
+
4
+ /** Вставки после метаданных карточки карты. */
5
+ export const useMapCardAfterMetaRegistry =
6
+ defineExtensionRegistry<Component>('core.mapCardAfterMeta');