erudit 4.0.0-dev.3 → 4.0.0-dev.5

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 (336) hide show
  1. package/.nuxtrc +1 -1
  2. package/app/app.vue +34 -34
  3. package/app/components/EruditLink.ts +7 -7
  4. package/app/components/FancyBold.vue +16 -16
  5. package/app/components/FancyCard.vue +52 -58
  6. package/app/components/FancyCardTag.vue +16 -16
  7. package/app/components/Loading.vue +7 -0
  8. package/app/components/Prose.vue +55 -51
  9. package/app/components/ScrollHolder.vue +13 -13
  10. package/app/components/SmartMedia.vue +107 -112
  11. package/app/components/ads/Ads.vue +17 -17
  12. package/app/components/ads/AdsBannerAside.vue +29 -29
  13. package/app/components/ads/AdsBannerBottom.vue +6 -6
  14. package/app/components/ads/AdsReplacer.vue +19 -21
  15. package/app/components/ads/provider/Custom.vue +9 -9
  16. package/app/components/ads/provider/Yandex.vue +56 -56
  17. package/app/components/aside/AsideListItem.vue +47 -52
  18. package/app/components/aside/AsideMajor.vue +6 -6
  19. package/app/components/aside/AsideMinor.vue +47 -55
  20. package/app/components/aside/AsidePlainMessage.vue +9 -9
  21. package/app/components/aside/AsideSwitch.vue +53 -54
  22. package/app/components/aside/major/PaneHolder.vue +61 -61
  23. package/app/components/aside/major/PaneSwitcher.vue +50 -55
  24. package/app/components/aside/major/PaneSwitcherButton.vue +24 -24
  25. package/app/components/aside/major/PaneTemplate.vue +3 -3
  26. package/app/components/aside/major/SiteInfo.vue +40 -42
  27. package/app/components/aside/major/contentNav/PaneBookNav.vue +107 -116
  28. package/app/components/aside/major/contentNav/PaneGlobalNav.vue +19 -19
  29. package/app/components/aside/major/contentNav/items/ContentNavBook.vue +8 -8
  30. package/app/components/aside/major/contentNav/items/ContentNavFolder.vue +55 -56
  31. package/app/components/aside/major/contentNav/items/ContentNavItem.vue +16 -16
  32. package/app/components/aside/major/contentNav/items/ContentNavPage.vue +2 -6
  33. package/app/components/aside/major/contentNav/items/ContentNavSeparator.vue +34 -35
  34. package/app/components/aside/major/contentNav/items/ContentNavTopic.vue +6 -6
  35. package/app/components/aside/major/contentNav/items/Flags.vue +31 -33
  36. package/app/components/aside/major/contentNav/items/ItemTemplate.vue +13 -13
  37. package/app/components/aside/major/languages/PaneLanguages.vue +40 -40
  38. package/app/components/aside/major/pages/PanePages.vue +45 -45
  39. package/app/components/aside/major/search/PaneSearch.vue +111 -100
  40. package/app/components/aside/major/search/SearchInput.vue +52 -53
  41. package/app/components/aside/major/search/SearchResult.vue +125 -74
  42. package/app/components/aside/major/search/SearchStatus.vue +28 -28
  43. package/app/components/aside/major/search/search.worker.ts +129 -129
  44. package/app/components/aside/major/settings/BuildTime.vue +15 -15
  45. package/app/components/aside/major/settings/EngineVersion.vue +8 -7
  46. package/app/components/aside/major/settings/PaneSettings.vue +8 -8
  47. package/app/components/aside/major/settings/ThemeSwitcher.vue +38 -36
  48. package/app/components/aside/major/settings/repository/Repository.vue +18 -18
  49. package/app/components/aside/major/settings/repository/SecondaryGitHub.vue +47 -47
  50. package/app/components/aside/minor/AsideMinorPane.vue +5 -5
  51. package/app/components/aside/minor/AsideMinorPlainHeader.vue +20 -20
  52. package/app/components/aside/minor/content/AsideMinorContentContributions.vue +47 -51
  53. package/app/components/aside/minor/content/AsideMinorContentPage.vue +37 -37
  54. package/app/components/aside/minor/content/AsideMinorContentTopic.vue +61 -66
  55. package/app/components/aside/minor/content/ButtonPaneContributions.vue +101 -114
  56. package/app/components/aside/minor/content/ButtonPaneImprove.vue +112 -120
  57. package/app/components/aside/minor/content/Contribution.vue +36 -36
  58. package/app/components/aside/minor/content/Toc.vue +163 -163
  59. package/app/components/aside/minor/content/TocItem.vue +91 -91
  60. package/app/components/aside/minor/content/TopicPartButton.vue +35 -35
  61. package/app/components/aside/minor/contributor/AsideMinorContributor.vue +36 -39
  62. package/app/components/aside/minor/contributor/ItemBook.vue +33 -39
  63. package/app/components/aside/minor/contributor/ItemContent.vue +17 -17
  64. package/app/components/aside/minor/news/AsideMinorNews.vue +132 -132
  65. package/app/components/aside/minor/news/NewsItem.vue +69 -69
  66. package/app/components/aside/minor/news/RenderNewsElement.vue +42 -42
  67. package/app/components/aside/minor/news/elements/Mix.vue +11 -11
  68. package/app/components/aside/minor/news/elements/P.vue +14 -14
  69. package/app/components/aside/minor/news/elements/Ref.vue +59 -58
  70. package/app/components/aside/minor/news/elements/Text.vue +18 -18
  71. package/app/components/indexPage/IndexPagePersons.vue +116 -117
  72. package/app/components/main/MainAction.vue +26 -20
  73. package/app/components/main/MainBreadcrumbs.vue +28 -28
  74. package/app/components/main/MainContentChild.vue +44 -47
  75. package/app/components/main/MainContentChildren.vue +13 -14
  76. package/app/components/main/MainDecoration.vue +15 -15
  77. package/app/components/main/MainDescription.vue +13 -13
  78. package/app/components/main/MainFlag.vue +129 -133
  79. package/app/components/main/MainFlags.vue +17 -17
  80. package/app/components/main/MainGlow.vue +12 -12
  81. package/app/components/main/MainQuickLink.vue +90 -91
  82. package/app/components/main/MainQuickLinks.vue +40 -40
  83. package/app/components/main/MainQuote.vue +149 -159
  84. package/app/components/main/MainQuoteLoader.vue +86 -86
  85. package/app/components/main/MainSection.vue +44 -44
  86. package/app/components/main/MainSectionPreamble.vue +5 -5
  87. package/app/components/main/MainSubTitle.vue +11 -12
  88. package/app/components/main/MainTitle.vue +32 -32
  89. package/app/components/main/MainTopicPartPage.vue +88 -88
  90. package/app/components/main/MainTopicPartSwitch.vue +67 -71
  91. package/app/components/main/connections/Deps.vue +30 -34
  92. package/app/components/main/connections/Externals.vue +80 -104
  93. package/app/components/main/connections/MainConnections.vue +90 -94
  94. package/app/components/main/connections/MainConnectionsButton.vue +81 -81
  95. package/app/components/main/connections/ScrollPane.vue +10 -10
  96. package/app/components/main/contentStats/Item.vue +28 -34
  97. package/app/components/main/contentStats/ItemElement.vue +19 -19
  98. package/app/components/main/contentStats/ItemMaterials.vue +11 -11
  99. package/app/components/main/contentStats/MainContentStats.vue +50 -53
  100. package/app/components/preview/Preview.vue +110 -121
  101. package/app/components/preview/PreviewError.vue +4 -4
  102. package/app/components/preview/PreviewLoading.vue +3 -3
  103. package/app/components/preview/PreviewScreen.vue +48 -48
  104. package/app/components/preview/PreviewScreenButton.vue +27 -27
  105. package/app/components/preview/screen/ContentPage.vue +27 -30
  106. package/app/components/preview/screen/DirectLink.vue +13 -13
  107. package/app/components/preview/screen/Unique.vue +31 -32
  108. package/app/components/site/SiteAside.vue +50 -51
  109. package/app/components/site/SiteAsideOverlay.vue +8 -8
  110. package/app/components/site/SiteMain.vue +11 -11
  111. package/app/components/transition/Fade.vue +16 -16
  112. package/app/components/transition/Slide.vue +27 -27
  113. package/app/components/tree/TreeContainer.vue +3 -3
  114. package/app/components/tree/TreeItem.vue +27 -31
  115. package/app/composables/ads.ts +11 -11
  116. package/app/composables/analytics.ts +102 -102
  117. package/app/composables/appElements.ts +21 -21
  118. package/app/composables/aside.ts +15 -15
  119. package/app/composables/asideMajorPane.ts +82 -82
  120. package/app/composables/asideMinor.ts +109 -109
  121. package/app/composables/contentNav.ts +7 -7
  122. package/app/composables/favicon.ts +103 -108
  123. package/app/composables/file.ts +4 -3
  124. package/app/composables/formatText.ts +100 -100
  125. package/app/composables/loading.ts +26 -2
  126. package/app/composables/mainContent.ts +22 -22
  127. package/app/composables/og.ts +184 -182
  128. package/app/composables/phrases.ts +98 -98
  129. package/app/composables/preview.ts +44 -44
  130. package/app/composables/route.ts +4 -2
  131. package/app/composables/theme.ts +47 -51
  132. package/app/composables/url.ts +19 -11
  133. package/app/formatters/ru.ts +14 -14
  134. package/app/pages/article/[...articleId].vue +12 -12
  135. package/app/pages/book/[...bookId].vue +56 -56
  136. package/app/pages/contributor/[contributorId].vue +144 -150
  137. package/app/pages/contributors.vue +95 -99
  138. package/app/pages/group/[...groupId].vue +58 -58
  139. package/app/pages/index.vue +113 -117
  140. package/app/pages/page/[...pageId].vue +60 -60
  141. package/app/pages/practice/[...practiceId].vue +12 -12
  142. package/app/pages/sponsors.vue +88 -91
  143. package/app/pages/summary/[...summaryId].vue +12 -12
  144. package/app/plugins/appSetup/client/htmlBranding.ts +6 -6
  145. package/app/plugins/appSetup/client/welcome.ts +37 -35
  146. package/app/plugins/appSetup/config.ts +6 -6
  147. package/app/plugins/appSetup/global.ts +3 -3
  148. package/app/plugins/appSetup/index.ts +27 -28
  149. package/app/plugins/prerender.server.ts +40 -40
  150. package/app/router.options.ts +5 -5
  151. package/app/scripts/theme.js +21 -24
  152. package/app/styles/main.css +128 -124
  153. package/bin/erudit.js +12 -0
  154. package/modules/erudit/env.ts +8 -0
  155. package/modules/erudit/globals/content.ts +4 -4
  156. package/modules/erudit/globals/contributor.ts +1 -1
  157. package/modules/erudit/globals/eruditConfig.ts +5 -10
  158. package/modules/erudit/globals/problem.ts +1 -1
  159. package/modules/erudit/globals/prose.ts +1 -1
  160. package/modules/erudit/globals/public.ts +18 -18
  161. package/modules/erudit/index.ts +50 -60
  162. package/modules/erudit/logger.ts +10 -10
  163. package/modules/erudit/setup/elements/appTemplate.ts +44 -45
  164. package/modules/erudit/setup/elements/globalTemplate.ts +82 -82
  165. package/modules/erudit/setup/elements/globalTypes.ts +259 -273
  166. package/modules/erudit/setup/elements/setup.ts +163 -167
  167. package/modules/erudit/setup/elements/shared.ts +10 -10
  168. package/modules/erudit/setup/elements/tagsTable.ts +28 -28
  169. package/modules/erudit/setup/fullRestart.ts +61 -71
  170. package/modules/erudit/setup/globals.ts +206 -196
  171. package/modules/erudit/setup/publicAssets.ts +43 -52
  172. package/modules/erudit/setup/runtimeConfig.ts +106 -58
  173. package/modules/erudit/watcher.ts +20 -27
  174. package/nuxt.config.ts +102 -84
  175. package/package.json +51 -55
  176. package/server/api/aside/major/frontNav/book/[...shortId].ts +10 -10
  177. package/server/api/aside/major/frontNav/global.ts +5 -5
  178. package/server/api/aside/major/pages.ts +6 -6
  179. package/server/api/contributor/list.ts +60 -61
  180. package/server/api/contributor/page/[contributorId].ts +68 -68
  181. package/server/api/indexPage.ts +81 -81
  182. package/server/api/language/functions.ts +11 -11
  183. package/server/api/language/phrase/[phraseKey].ts +35 -35
  184. package/server/api/main/content/[...contentTypePath].ts +149 -153
  185. package/server/api/news/batch/[batchIndex].ts +5 -5
  186. package/server/api/pageSponsors.ts +56 -58
  187. package/server/api/prerender/content.ts +79 -82
  188. package/server/api/prerender/default.ts +35 -35
  189. package/server/api/prerender/files.ts +10 -10
  190. package/server/api/prerender/frontNav.ts +13 -13
  191. package/server/api/prerender/language.ts +7 -7
  192. package/server/api/prerender/news.ts +8 -8
  193. package/server/api/prerender/quotes.ts +15 -15
  194. package/server/api/preview/contentPage/[...contentTypePath].ts +63 -63
  195. package/server/api/preview/contentUnique/[...contentTypePathUnique].ts +73 -81
  196. package/server/api/problemScript/[...problemScriptPath].ts +88 -92
  197. package/server/api/quote/data/[quoteId].ts +84 -87
  198. package/server/api/quote/ids.ts +3 -3
  199. package/server/erudit/build.ts +132 -137
  200. package/server/erudit/cameos/build.ts +161 -161
  201. package/server/erudit/config.ts +13 -13
  202. package/server/erudit/content/global/build.ts +300 -297
  203. package/server/erudit/content/global/singleton.ts +5 -5
  204. package/server/erudit/content/nav/build.ts +459 -463
  205. package/server/erudit/content/nav/front.ts +125 -127
  206. package/server/erudit/content/nav/repository/books.ts +37 -40
  207. package/server/erudit/content/nav/repository/get.ts +33 -33
  208. package/server/erudit/content/nav/repository/hasChildren.ts +5 -5
  209. package/server/erudit/content/nav/repository/hasNav.ts +3 -3
  210. package/server/erudit/content/nav/repository/hasParent.ts +5 -5
  211. package/server/erudit/content/nav/repository/id.ts +9 -9
  212. package/server/erudit/content/nav/repository/index.ts +9 -9
  213. package/server/erudit/content/nav/repository/order.ts +14 -14
  214. package/server/erudit/content/nav/repository/previousNext.ts +35 -35
  215. package/server/erudit/content/nav/repository/walk.ts +127 -127
  216. package/server/erudit/content/nav/setup.ts +13 -13
  217. package/server/erudit/content/nav/types.ts +24 -24
  218. package/server/erudit/content/repository/breadcrumbs.ts +24 -24
  219. package/server/erudit/content/repository/children.ts +47 -47
  220. package/server/erudit/content/repository/connections.ts +35 -35
  221. package/server/erudit/content/repository/contentLink.ts +16 -16
  222. package/server/erudit/content/repository/decoration.ts +23 -23
  223. package/server/erudit/content/repository/deps.ts +121 -84
  224. package/server/erudit/content/repository/description.ts +11 -11
  225. package/server/erudit/content/repository/elementSnippets.ts +105 -105
  226. package/server/erudit/content/repository/externals.ts +50 -50
  227. package/server/erudit/content/repository/flags.ts +33 -33
  228. package/server/erudit/content/repository/seo.ts +12 -12
  229. package/server/erudit/content/repository/stats.ts +97 -97
  230. package/server/erudit/content/repository/title.ts +27 -27
  231. package/server/erudit/content/repository/topicParts.ts +39 -39
  232. package/server/erudit/content/repository/unique.ts +76 -76
  233. package/server/erudit/content/resolve/book.ts +29 -32
  234. package/server/erudit/content/resolve/group.ts +34 -39
  235. package/server/erudit/content/resolve/index.ts +272 -290
  236. package/server/erudit/content/resolve/page.ts +80 -87
  237. package/server/erudit/content/resolve/topic.ts +220 -246
  238. package/server/erudit/content/resolve/utils/contentError.ts +10 -10
  239. package/server/erudit/content/resolve/utils/insertContentItem.ts +113 -122
  240. package/server/erudit/content/resolve/utils/insertContentResolved.ts +126 -132
  241. package/server/erudit/content/search.ts +146 -163
  242. package/server/erudit/contributors/build.ts +158 -166
  243. package/server/erudit/contributors/global.ts +3 -3
  244. package/server/erudit/contributors/repository/avatarUrl.ts +10 -10
  245. package/server/erudit/contributors/repository/contributions.ts +171 -178
  246. package/server/erudit/contributors/repository/count.ts +3 -3
  247. package/server/erudit/contributors/search.ts +34 -34
  248. package/server/erudit/db/repository/pushFile.ts +23 -26
  249. package/server/erudit/db/repository/pushProblemScript.ts +19 -19
  250. package/server/erudit/db/repository/pushProseLink.ts +40 -40
  251. package/server/erudit/db/schema/cameos.ts +7 -7
  252. package/server/erudit/db/schema/content.ts +18 -18
  253. package/server/erudit/db/schema/contentContributions.ts +15 -15
  254. package/server/erudit/db/schema/contentDeps.ts +21 -21
  255. package/server/erudit/db/schema/contentElementStats.ts +20 -20
  256. package/server/erudit/db/schema/contentProseLinks.ts +23 -23
  257. package/server/erudit/db/schema/contentSnippets.ts +15 -15
  258. package/server/erudit/db/schema/contentToc.ts +16 -16
  259. package/server/erudit/db/schema/contentUniques.ts +19 -25
  260. package/server/erudit/db/schema/contributors.ts +12 -12
  261. package/server/erudit/db/schema/files.ts +11 -11
  262. package/server/erudit/db/schema/groups.ts +6 -6
  263. package/server/erudit/db/schema/index.ts +17 -17
  264. package/server/erudit/db/schema/news.ts +7 -7
  265. package/server/erudit/db/schema/pages.ts +7 -7
  266. package/server/erudit/db/schema/problemScripts.ts +14 -14
  267. package/server/erudit/db/schema/sponsors.ts +9 -9
  268. package/server/erudit/db/schema/topics.ts +9 -9
  269. package/server/erudit/db/setup.ts +62 -62
  270. package/server/erudit/db/types.ts +10 -10
  271. package/server/erudit/global.ts +38 -33
  272. package/server/erudit/importer.ts +94 -97
  273. package/server/erudit/index.ts +96 -90
  274. package/server/erudit/language/list/en.ts +116 -116
  275. package/server/erudit/language/list/ru.ts +120 -120
  276. package/server/erudit/language/list.ts +6 -6
  277. package/server/erudit/language/setup.ts +36 -36
  278. package/server/erudit/language/types.ts +16 -16
  279. package/server/erudit/logger.ts +73 -77
  280. package/server/erudit/news/build.ts +112 -114
  281. package/server/erudit/news/repository/batch.ts +61 -61
  282. package/server/erudit/path.ts +19 -0
  283. package/server/erudit/prose/repository/finalize.ts +68 -68
  284. package/server/erudit/prose/repository/get.ts +54 -54
  285. package/server/erudit/prose/repository/resolve.ts +17 -17
  286. package/server/erudit/prose/storage/callout.ts +16 -14
  287. package/server/erudit/prose/storage/image.ts +22 -20
  288. package/server/erudit/prose/storage/link.ts +222 -226
  289. package/server/erudit/prose/storage/problemScript.ts +23 -21
  290. package/server/erudit/prose/storage/video.ts +16 -14
  291. package/server/erudit/prose/transform/bundleProblemScript.ts +6 -6
  292. package/server/erudit/prose/transform/extensions.ts +15 -15
  293. package/server/erudit/quote/repository/ids.ts +31 -31
  294. package/server/erudit/repository.ts +96 -96
  295. package/server/erudit/sponsors/build.ts +161 -165
  296. package/server/erudit/sponsors/repository/avatarUrl.ts +10 -10
  297. package/server/erudit/sponsors/repository/count.ts +4 -4
  298. package/server/erudit/staticFile.ts +28 -28
  299. package/server/plugins/augmentCss.ts +17 -17
  300. package/server/plugins/lang.ts +5 -7
  301. package/server/plugins/metaViewport.ts +15 -15
  302. package/server/plugins/theme.ts +13 -13
  303. package/server/routes/file/[...path].ts +18 -18
  304. package/server/routes/robots.txt.ts +9 -9
  305. package/server/routes/search.json.gz.ts +76 -73
  306. package/server/routes/sitemap.xml.ts +83 -81
  307. package/shared/search/encoders.ts +10 -10
  308. package/shared/types/asideMajorPages.ts +2 -2
  309. package/shared/types/breadcrumbs.ts +3 -3
  310. package/shared/types/contentChildren.ts +10 -10
  311. package/shared/types/contentConnections.ts +27 -27
  312. package/shared/types/contentStats.ts +6 -6
  313. package/shared/types/elementSnippet.ts +14 -14
  314. package/shared/types/frontContentNav.ts +17 -17
  315. package/shared/types/indexPage.ts +20 -20
  316. package/shared/types/language.ts +174 -174
  317. package/shared/types/mainContent.ts +40 -40
  318. package/shared/types/news.ts +13 -13
  319. package/shared/types/preview.ts +28 -28
  320. package/shared/types/runtimeConfig.ts +29 -47
  321. package/shared/types/search.ts +32 -32
  322. package/shared/utils/contentTypePath.ts +44 -44
  323. package/shared/utils/icons.ts +7 -7
  324. package/shared/utils/pages.ts +19 -20
  325. package/shared/utils/stringColor.ts +8 -8
  326. package/shared/utils/toStringEqual.ts +13 -13
  327. package/shared/utils/zip.ts +64 -64
  328. package/test/shared/utils/zip.test.ts +8 -8
  329. package/tsconfig.json +15 -15
  330. package/bin/erudit.mjs +0 -2
  331. package/modules/erudit/setup/aliases.ts +0 -17
  332. package/modules/erudit/setup/baseUrl.ts +0 -19
  333. package/modules/erudit/setup/nuxtConfig.ts +0 -62
  334. package/modules/erudit/setup/projectConfig.ts +0 -114
  335. package/shared/utils/slasher.ts +0 -64
  336. package/test/shared/utils/slasher.test.ts +0 -75
@@ -1,94 +1,90 @@
1
- <script lang="ts" setup>
2
- import Deps from './Deps.vue';
3
- import Externals from './Externals.vue';
4
-
5
- const { connections } = defineProps<{ connections?: ContentConnections }>();
6
-
7
- const phrase = await usePhrases('connections');
8
-
9
- const currentType = ref<keyof ContentConnections | undefined>(
10
- 'hardDependencies',
11
- );
12
-
13
- const ownExternalsCount = computed(() => {
14
- return connections?.externals?.find((ext) => ext.type === 'own')?.items
15
- .length;
16
- });
17
-
18
- const parentExternalsCount = computed(() => {
19
- return connections?.externals
20
- ?.filter((ext) => ext.type === 'parent')
21
- .reduce((sum, ext) => sum + ext.items.length, 0);
22
- });
23
- </script>
24
-
25
- <template>
26
- <section v-if="connections" class="px-main py-main-half">
27
- <MainSubTitle :title="phrase.connections + ':'" />
28
- <div
29
- class="gap-small micro:gap-normal micro:justify-start flex flex-wrap
30
- justify-center"
31
- >
32
- <template
33
- v-for="(items, type) of {
34
- hardDependencies: connections.hardDependencies,
35
- autoDependencies: connections.autoDependencies,
36
- dependents: connections.dependents,
37
- }"
38
- >
39
- <MainConnectionsButton
40
- v-if="items && items.length > 0"
41
- :type="type"
42
- :count="items.length"
43
- :active="currentType === type"
44
- @click="
45
- currentType === type
46
- ? (currentType = undefined)
47
- : (currentType = type)
48
- "
49
- />
50
- </template>
51
- <MainConnectionsButton
52
- v-if="connections.externals"
53
- type="externals"
54
- :active="currentType === 'externals'"
55
- @click="
56
- currentType === 'externals'
57
- ? (currentType = undefined)
58
- : (currentType = 'externals')
59
- "
60
- >
61
- <template #after>
62
- <div
63
- v-if="connections.externals"
64
- class="gap-small *:border-border *:pl-small flex
65
- items-center font-bold *:border-l"
66
- >
67
- <div
68
- v-if="ownExternalsCount"
69
- class="flex items-center gap-1 text-amber-600
70
- dark:text-amber-400"
71
- >
72
- <MyIcon name="arrow/left" class="-scale-x-100" />
73
- <span>{{ ownExternalsCount }}</span>
74
- </div>
75
- <div
76
- v-if="parentExternalsCount"
77
- class="flex items-center gap-1"
78
- >
79
- <MyIcon name="arrow/up-to-right" />
80
- <span>{{ parentExternalsCount }}</span>
81
- </div>
82
- </div>
83
- </template>
84
- </MainConnectionsButton>
85
- </div>
86
- <template v-if="currentType && connections[currentType]">
87
- <Deps
88
- v-if="currentType !== 'externals'"
89
- :deps="connections[currentType]!"
90
- />
91
- <Externals v-else :externals="connections[currentType]!" />
92
- </template>
93
- </section>
94
- </template>
1
+ <script lang="ts" setup>
2
+ import Deps from './Deps.vue';
3
+ import Externals from './Externals.vue';
4
+
5
+ const { connections } = defineProps<{ connections?: ContentConnections }>();
6
+
7
+ const phrase = await usePhrases('connections');
8
+
9
+ const currentType = ref<keyof ContentConnections | undefined>(
10
+ 'hardDependencies',
11
+ );
12
+
13
+ const ownExternalsCount = computed(() => {
14
+ return connections?.externals?.find((ext) => ext.type === 'own')?.items
15
+ .length;
16
+ });
17
+
18
+ const parentExternalsCount = computed(() => {
19
+ return connections?.externals
20
+ ?.filter((ext) => ext.type === 'parent')
21
+ .reduce((sum, ext) => sum + ext.items.length, 0);
22
+ });
23
+ </script>
24
+
25
+ <template>
26
+ <section v-if="connections" class="px-main py-main-half">
27
+ <MainSubTitle :title="phrase.connections + ':'" />
28
+ <div
29
+ class="gap-small micro:gap-normal micro:justify-start flex flex-wrap
30
+ justify-center"
31
+ >
32
+ <template
33
+ v-for="(items, type) of {
34
+ hardDependencies: connections.hardDependencies,
35
+ autoDependencies: connections.autoDependencies,
36
+ dependents: connections.dependents,
37
+ }"
38
+ >
39
+ <MainConnectionsButton
40
+ v-if="items && items.length > 0"
41
+ :type="type"
42
+ :count="items.length"
43
+ :active="currentType === type"
44
+ @click="
45
+ currentType === type
46
+ ? (currentType = undefined)
47
+ : (currentType = type)
48
+ "
49
+ />
50
+ </template>
51
+ <MainConnectionsButton
52
+ v-if="connections.externals"
53
+ type="externals"
54
+ :active="currentType === 'externals'"
55
+ @click="
56
+ currentType === 'externals'
57
+ ? (currentType = undefined)
58
+ : (currentType = 'externals')
59
+ "
60
+ >
61
+ <template #after>
62
+ <div
63
+ v-if="connections.externals"
64
+ class="gap-small *:border-border *:pl-small flex items-center
65
+ font-bold *:border-l"
66
+ >
67
+ <div
68
+ v-if="ownExternalsCount"
69
+ class="flex items-center gap-1 text-amber-600 dark:text-amber-400"
70
+ >
71
+ <MyIcon name="arrow/left" class="-scale-x-100" />
72
+ <span>{{ ownExternalsCount }}</span>
73
+ </div>
74
+ <div v-if="parentExternalsCount" class="flex items-center gap-1">
75
+ <MyIcon name="arrow/up-to-right" />
76
+ <span>{{ parentExternalsCount }}</span>
77
+ </div>
78
+ </div>
79
+ </template>
80
+ </MainConnectionsButton>
81
+ </div>
82
+ <template v-if="currentType && connections[currentType]">
83
+ <Deps
84
+ v-if="currentType !== 'externals'"
85
+ :deps="connections[currentType]!"
86
+ />
87
+ <Externals v-else :externals="connections[currentType]!" />
88
+ </template>
89
+ </section>
90
+ </template>
@@ -1,81 +1,81 @@
1
- <script lang="ts" setup>
2
- import type { MyIconName } from '#my-icons';
3
-
4
- const { type, active } = defineProps<{
5
- type: 'hardDependencies' | 'autoDependencies' | 'dependents' | 'externals';
6
- active?: boolean;
7
- count?: number;
8
- }>();
9
-
10
- const isHard = type === 'hardDependencies';
11
-
12
- const phrase = await usePhrases(
13
- 'need_to_know',
14
- 'depends_on',
15
- 'used_by',
16
- 'externals',
17
- );
18
-
19
- const title = (() => {
20
- switch (type) {
21
- case 'hardDependencies':
22
- return phrase.need_to_know;
23
- case 'autoDependencies':
24
- return phrase.depends_on;
25
- case 'dependents':
26
- return phrase.used_by;
27
- case 'externals':
28
- return phrase.externals;
29
- }
30
- })();
31
-
32
- const icon: MyIconName = (() => {
33
- switch (type) {
34
- case 'hardDependencies':
35
- return 'warning';
36
- case 'autoDependencies':
37
- return 'arrow/to-circle';
38
- case 'dependents':
39
- return 'arrow/from-circle';
40
- case 'externals':
41
- return 'arrow/outward-box';
42
- }
43
- })();
44
-
45
- const dynamicClasses = computed(() => {
46
- if (isHard) {
47
- if (active) {
48
- return 'border-(--activeColor) text-(--activeColor) bg-(--activeColor)/10 hocus:ring-(--activeColor)/25';
49
- } else {
50
- return 'border-border bg-bg-aside text-text-muted hocus:ring-(--activeColor)/25 hocus:text-(--activeColor) hocus:border-(--activeColor)';
51
- }
52
- }
53
-
54
- if (active) {
55
- return 'border-(--activeColor) text-(--activeColor) bg-(--activeColor)/10 hocus:ring-(--activeColor)/25';
56
- } else {
57
- return 'border-border bg-bg-aside text-text-muted hocus:ring-(--activeColor)/25 hocus:text-(--activeColor) hocus:border-(--activeColor)';
58
- }
59
- });
60
- </script>
61
-
62
- <template>
63
- <button
64
- :style="{
65
- '--activeColor': isHard
66
- ? 'light-dark(var(--color-red-700),var(--color-red-400))'
67
- : 'var(--color-brand)',
68
- }"
69
- :class="[
70
- `gap-small text-main-sm px-small flex cursor-pointer items-center
71
- rounded border py-1 ring-2 ring-transparent
72
- transition-[border,color,box-shadow,background]`,
73
- dynamicClasses,
74
- ]"
75
- >
76
- <MyIcon :name="icon" class="text-[1.2em]" />
77
- <span>{{ formatText(title) }}</span>
78
- <span v-if="count" class="font-bold">{{ count }}</span>
79
- <slot name="after"></slot>
80
- </button>
81
- </template>
1
+ <script lang="ts" setup>
2
+ import type { MyIconName } from '#my-icons';
3
+
4
+ const { type, active } = defineProps<{
5
+ type: 'hardDependencies' | 'autoDependencies' | 'dependents' | 'externals';
6
+ active?: boolean;
7
+ count?: number;
8
+ }>();
9
+
10
+ const isHard = type === 'hardDependencies';
11
+
12
+ const phrase = await usePhrases(
13
+ 'need_to_know',
14
+ 'depends_on',
15
+ 'used_by',
16
+ 'externals',
17
+ );
18
+
19
+ const title = (() => {
20
+ switch (type) {
21
+ case 'hardDependencies':
22
+ return phrase.need_to_know;
23
+ case 'autoDependencies':
24
+ return phrase.depends_on;
25
+ case 'dependents':
26
+ return phrase.used_by;
27
+ case 'externals':
28
+ return phrase.externals;
29
+ }
30
+ })();
31
+
32
+ const icon: MyIconName = (() => {
33
+ switch (type) {
34
+ case 'hardDependencies':
35
+ return 'warning';
36
+ case 'autoDependencies':
37
+ return 'arrow/to-circle';
38
+ case 'dependents':
39
+ return 'arrow/from-circle';
40
+ case 'externals':
41
+ return 'arrow/outward-box';
42
+ }
43
+ })();
44
+
45
+ const dynamicClasses = computed(() => {
46
+ if (isHard) {
47
+ if (active) {
48
+ return 'border-(--activeColor) text-(--activeColor) bg-(--activeColor)/10 hocus:ring-(--activeColor)/25';
49
+ } else {
50
+ return 'border-border bg-bg-aside text-text-muted hocus:ring-(--activeColor)/25 hocus:text-(--activeColor) hocus:border-(--activeColor)';
51
+ }
52
+ }
53
+
54
+ if (active) {
55
+ return 'border-(--activeColor) text-(--activeColor) bg-(--activeColor)/10 hocus:ring-(--activeColor)/25';
56
+ } else {
57
+ return 'border-border bg-bg-aside text-text-muted hocus:ring-(--activeColor)/25 hocus:text-(--activeColor) hocus:border-(--activeColor)';
58
+ }
59
+ });
60
+ </script>
61
+
62
+ <template>
63
+ <button
64
+ :style="{
65
+ '--activeColor': isHard
66
+ ? 'light-dark(var(--color-red-700),var(--color-red-400))'
67
+ : 'var(--color-brand)',
68
+ }"
69
+ :class="[
70
+ `gap-small text-main-sm px-small flex cursor-pointer items-center rounded
71
+ border py-1 ring-2 ring-transparent
72
+ transition-[border,color,box-shadow,background]`,
73
+ dynamicClasses,
74
+ ]"
75
+ >
76
+ <MyIcon :name="icon" class="text-[1.2em]" />
77
+ <span>{{ formatText(title) }}</span>
78
+ <span v-if="count" class="font-bold">{{ count }}</span>
79
+ <slot name="after"></slot>
80
+ </button>
81
+ </template>
@@ -1,10 +1,10 @@
1
- <script lang="ts" setup></script>
2
-
3
- <template>
4
- <div
5
- class="nice-scrollbars border-border mt-normal relative overflow-auto
6
- border-t border-b"
7
- >
8
- <slot></slot>
9
- </div>
10
- </template>
1
+ <script lang="ts" setup></script>
2
+
3
+ <template>
4
+ <div
5
+ class="nice-scrollbars border-border mt-normal relative overflow-auto
6
+ border-t border-b"
7
+ >
8
+ <slot></slot>
9
+ </div>
10
+ </template>
@@ -1,34 +1,28 @@
1
- <script lang="ts" setup>
2
- const { mode = 'detailed' } = defineProps<{
3
- mode?: 'compact' | 'detailed';
4
- icon: string;
5
- label: string;
6
- count: number;
7
- }>();
8
- </script>
9
-
10
- <template>
11
- <div
12
- v-if="mode === 'compact'"
13
- :title="label"
14
- class="gap-small flex cursor-help items-center"
15
- >
16
- <MaybeMyIcon
17
- :name="icon"
18
- class="text-text-dimmed -mr-0.5 text-[1.2em]"
19
- />
20
- <span class="text-text-muted font-bold">{{ count }}</span>
21
- </div>
22
- <div
23
- v-else
24
- class="gap-small px-small text-main-sm border-border bg-bg-aside flex
25
- items-center rounded-xl border py-1"
26
- >
27
- <MaybeMyIcon
28
- :name="icon"
29
- class="text-text-dimmed -mr-0.5 text-[1.2em]"
30
- />
31
- <span class="text-text-muted">{{ label }}</span>
32
- <span class="text-text-muted font-bold">{{ count }}</span>
33
- </div>
34
- </template>
1
+ <script lang="ts" setup>
2
+ const { mode = 'detailed' } = defineProps<{
3
+ mode?: 'compact' | 'detailed';
4
+ icon: string;
5
+ label: string;
6
+ count: number;
7
+ }>();
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ v-if="mode === 'compact'"
13
+ :title="label"
14
+ class="gap-small flex cursor-help items-center"
15
+ >
16
+ <MaybeMyIcon :name="icon" class="text-text-dimmed -mr-0.5 text-[1.2em]" />
17
+ <span class="text-text-muted font-bold">{{ count }}</span>
18
+ </div>
19
+ <div
20
+ v-else
21
+ class="gap-small px-small text-main-sm border-border bg-bg-aside flex
22
+ items-center rounded-xl border py-1"
23
+ >
24
+ <MaybeMyIcon :name="icon" class="text-text-dimmed -mr-0.5 text-[1.2em]" />
25
+ <span class="text-text-muted">{{ label }}</span>
26
+ <span class="text-text-muted font-bold">{{ count }}</span>
27
+ </div>
28
+ </template>
@@ -1,19 +1,19 @@
1
- <script lang="ts" setup>
2
- import Item from './Item.vue';
3
-
4
- const { schemaName } = defineProps<{
5
- schemaName: string;
6
- count: number;
7
- }>();
8
-
9
- const elementIcon = await getElementIcon(schemaName);
10
- const elementPhrase = await getElementPhrase(schemaName);
11
- </script>
12
-
13
- <template>
14
- <Item
15
- :icon="elementIcon"
16
- :label="elementPhrase.element_name"
17
- :count="count"
18
- />
19
- </template>
1
+ <script lang="ts" setup>
2
+ import Item from './Item.vue';
3
+
4
+ const { schemaName } = defineProps<{
5
+ schemaName: string;
6
+ count: number;
7
+ }>();
8
+
9
+ const elementIcon = await getElementIcon(schemaName);
10
+ const elementPhrase = await getElementPhrase(schemaName);
11
+ </script>
12
+
13
+ <template>
14
+ <Item
15
+ :icon="elementIcon"
16
+ :label="elementPhrase.element_name"
17
+ :count="count"
18
+ />
19
+ </template>
@@ -1,11 +1,11 @@
1
- <script lang="ts" setup>
2
- import Item from './Item.vue';
3
-
4
- defineProps<{ count: number }>();
5
-
6
- const phrase = await usePhrases('materials');
7
- </script>
8
-
9
- <template>
10
- <Item icon="files" :label="phrase.materials" :count="count" />
11
- </template>
1
+ <script lang="ts" setup>
2
+ import Item from './Item.vue';
3
+
4
+ defineProps<{ count: number }>();
5
+
6
+ const phrase = await usePhrases('materials');
7
+ </script>
8
+
9
+ <template>
10
+ <Item icon="files" :label="phrase.materials" :count="count" />
11
+ </template>
@@ -1,53 +1,50 @@
1
- <script lang="ts" setup>
2
- import ItemElement from './ItemElement.vue';
3
- import ItemMaterials from './ItemMaterials.vue';
4
-
5
- defineProps<{
6
- mode: 'single' | 'children';
7
- stats?: ContentStats;
8
- }>();
9
-
10
- const phrase = await usePhrases('stats');
11
- </script>
12
-
13
- <template>
14
- <template v-if="stats">
15
- <section v-if="mode === 'single'" class="px-main py-main-half">
16
- <MainSubTitle :title="phrase.stats + ':'" />
17
- <div
18
- class="micro:justify-start gap-small micro:gap-normal flex
19
- flex-wrap justify-center"
20
- >
21
- <ItemMaterials
22
- v-if="stats.materials"
23
- :count="stats.materials"
24
- mode="detailed"
25
- />
26
- <ItemElement
27
- v-if="stats.elements"
28
- v-for="(count, schemaName) of stats.elements"
29
- :schemaName
30
- :count
31
- mode="detailed"
32
- />
33
- </div>
34
- </section>
35
- <div
36
- v-else
37
- class="gap-small micro:gap-normal text-main-sm flex flex-wrap"
38
- >
39
- <ItemMaterials
40
- v-if="stats.materials"
41
- :count="stats.materials"
42
- mode="compact"
43
- />
44
- <ItemElement
45
- v-if="stats.elements"
46
- v-for="(count, schemaName) of stats.elements"
47
- :schemaName
48
- :count
49
- mode="compact"
50
- />
51
- </div>
52
- </template>
53
- </template>
1
+ <script lang="ts" setup>
2
+ import ItemElement from './ItemElement.vue';
3
+ import ItemMaterials from './ItemMaterials.vue';
4
+
5
+ defineProps<{
6
+ mode: 'single' | 'children';
7
+ stats?: ContentStats;
8
+ }>();
9
+
10
+ const phrase = await usePhrases('stats');
11
+ </script>
12
+
13
+ <template>
14
+ <template v-if="stats">
15
+ <section v-if="mode === 'single'" class="px-main py-main-half">
16
+ <MainSubTitle :title="phrase.stats + ':'" />
17
+ <div
18
+ class="micro:justify-start gap-small micro:gap-normal flex flex-wrap
19
+ justify-center"
20
+ >
21
+ <ItemMaterials
22
+ v-if="stats.materials"
23
+ :count="stats.materials"
24
+ mode="detailed"
25
+ />
26
+ <ItemElement
27
+ v-if="stats.elements"
28
+ v-for="(count, schemaName) of stats.elements"
29
+ :schemaName
30
+ :count
31
+ mode="detailed"
32
+ />
33
+ </div>
34
+ </section>
35
+ <div v-else class="gap-small micro:gap-normal text-main-sm flex flex-wrap">
36
+ <ItemMaterials
37
+ v-if="stats.materials"
38
+ :count="stats.materials"
39
+ mode="compact"
40
+ />
41
+ <ItemElement
42
+ v-if="stats.elements"
43
+ v-for="(count, schemaName) of stats.elements"
44
+ :schemaName
45
+ :count
46
+ mode="compact"
47
+ />
48
+ </div>
49
+ </template>
50
+ </template>