erudit 3.0.0-dev.1 → 3.0.0-dev.10

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 (252) hide show
  1. package/app/app.vue +195 -172
  2. package/app/components/Loading.vue +23 -23
  3. package/app/components/SiteAside.vue +393 -382
  4. package/app/components/SiteMain.vue +34 -35
  5. package/app/components/ads/BannerTemplate.vue +51 -51
  6. package/app/components/ads/BottomBanner.vue +45 -45
  7. package/app/components/ads/LeftBanner.vue +50 -50
  8. package/app/components/aside/AsideListItem.vue +74 -74
  9. package/app/components/aside/AsideMajor.vue +56 -56
  10. package/app/components/aside/AsideMinor.vue +71 -71
  11. package/app/components/aside/major/PaneContentScroll.vue +23 -23
  12. package/app/components/aside/major/PaneSwitch.vue +54 -54
  13. package/app/components/aside/major/PaneSwitchButton.vue +63 -63
  14. package/app/components/aside/major/SiteInfo.vue +85 -85
  15. package/app/components/aside/major/panes/Language.vue +79 -79
  16. package/app/components/aside/major/panes/Pages.vue +34 -34
  17. package/app/components/aside/major/panes/Search.vue +11 -11
  18. package/app/components/aside/major/panes/nav/Nav.vue +87 -91
  19. package/app/components/aside/major/panes/nav/NavBook.vue +87 -86
  20. package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
  21. package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
  22. package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
  23. package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
  24. package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
  25. package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
  26. package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
  27. package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
  28. package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
  29. package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
  30. package/app/components/aside/major/panes/other/ItemGenerator.vue +13 -15
  31. package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
  32. package/app/components/aside/major/panes/other/Other.vue +16 -16
  33. package/app/components/aside/minor/AsideMinorContributor.vue +5 -5
  34. package/app/components/aside/minor/AsideMinorNews.vue +11 -11
  35. package/app/components/aside/minor/AsideMinorPane.vue +15 -15
  36. package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
  37. package/app/components/aside/minor/Contribute.vue +145 -145
  38. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  39. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  40. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  41. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  42. package/app/components/aside/minor/topic/TopicToc.vue +219 -203
  43. package/app/components/aside/minor/topic/TopicTocItem.vue +30 -31
  44. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  45. package/app/components/bitran/BitranContent.vue +91 -63
  46. package/app/components/bitran/RenderWrapper.vue +10 -10
  47. package/app/components/contributor/ContributorAvatar.vue +45 -43
  48. package/app/components/contributor/ContributorListItem.vue +35 -35
  49. package/app/components/main/topic/MainTopic.vue +78 -79
  50. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  51. package/app/components/main/utils/Breadcrumb.vue +70 -75
  52. package/app/components/main/utils/ContentDecoration.vue +29 -29
  53. package/app/components/main/utils/ContentDescription.vue +19 -19
  54. package/app/components/main/utils/ContentPopover.vue +188 -176
  55. package/app/components/main/utils/ContentPopovers.vue +111 -105
  56. package/app/components/main/utils/ContentReferences.vue +70 -70
  57. package/app/components/main/utils/ContentSection.vue +45 -45
  58. package/app/components/main/utils/ContentTitle.vue +63 -39
  59. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
  60. package/app/components/main/utils/reference/ReferenceItem.vue +68 -68
  61. package/app/components/main/utils/reference/ReferenceSource.vue +116 -116
  62. package/app/components/preview/Preview.vue +186 -177
  63. package/app/components/preview/PreviewDisplay.vue +139 -139
  64. package/app/components/preview/PreviewFooterAction.vue +73 -73
  65. package/app/components/preview/PreviewLoading.vue +14 -14
  66. package/app/components/preview/PreviewScreen.vue +141 -99
  67. package/app/components/preview/display/Alert.vue +50 -50
  68. package/app/components/preview/display/Custom.vue +18 -18
  69. package/app/components/preview/display/GenericLink.vue +48 -48
  70. package/app/components/preview/display/PageLink.vue +20 -20
  71. package/app/components/preview/display/Unique.vue +55 -49
  72. package/app/components/transition/Fade.vue +19 -19
  73. package/app/components/tree/TreeContainer.vue +11 -11
  74. package/app/components/tree/TreeItem.vue +89 -89
  75. package/app/composables/bitran.ts +108 -127
  76. package/app/composables/bitranContent.ts +69 -37
  77. package/app/composables/bitranLocation.ts +7 -7
  78. package/app/composables/contentData.ts +36 -36
  79. package/app/composables/contentPage.ts +157 -156
  80. package/app/composables/contentRoute.ts +45 -45
  81. package/app/composables/darkMagic.ts +24 -24
  82. package/app/composables/externalApi.ts +63 -63
  83. package/app/composables/favicon.ts +8 -8
  84. package/app/composables/formatText.ts +86 -86
  85. package/app/composables/majorPane.ts +60 -60
  86. package/app/composables/phrases.ts +81 -80
  87. package/app/composables/theme.ts +29 -29
  88. package/app/composables/url.ts +33 -33
  89. package/app/pages/_test/preview.vue +110 -110
  90. package/app/pages/article/[...articleId].vue +3 -3
  91. package/app/pages/book/[...bookId].vue +47 -47
  92. package/app/pages/group/[...groupId].vue +64 -65
  93. package/app/pages/index.vue +32 -32
  94. package/app/pages/members.vue +6 -6
  95. package/app/pages/practice/[...practice].vue +3 -3
  96. package/app/pages/summary/[...summaryId].vue +3 -3
  97. package/app/public/favicon/article.svg +5 -5
  98. package/app/public/favicon/default.svg +3 -3
  99. package/app/public/favicon/practice.svg +3 -3
  100. package/app/public/favicon/summary.svg +4 -4
  101. package/app/public/logotype.svg +2 -2
  102. package/app/scripts/_immediate.js +9 -9
  103. package/app/scripts/aside/index.ts +59 -59
  104. package/app/scripts/aside/major/nav.ts +26 -26
  105. package/app/scripts/aside/minor/state.ts +37 -37
  106. package/app/scripts/aside/minor/topic.ts +3 -3
  107. package/app/scripts/flag.ts +28 -28
  108. package/app/scripts/og.ts +27 -27
  109. package/app/scripts/preview/build.ts +73 -73
  110. package/app/scripts/preview/data/alert.ts +19 -19
  111. package/app/scripts/preview/data/custom.ts +8 -8
  112. package/app/scripts/preview/data/genericLink.ts +24 -24
  113. package/app/scripts/preview/data/pageLink.ts +22 -20
  114. package/app/scripts/preview/data/unique.ts +72 -70
  115. package/app/scripts/preview/data.ts +24 -24
  116. package/app/scripts/preview/display.ts +37 -37
  117. package/app/scripts/preview/footer.ts +9 -9
  118. package/app/scripts/preview/request.ts +51 -51
  119. package/app/scripts/preview/state.ts +63 -63
  120. package/app/styles/_immediate.css +7 -7
  121. package/app/styles/_util.scss +43 -43
  122. package/app/styles/_utils.scss +44 -44
  123. package/app/styles/app.scss +91 -91
  124. package/app/styles/def/_bp.scss +27 -27
  125. package/app/styles/def/_size.scss +7 -7
  126. package/app/styles/def/_z.scss +5 -5
  127. package/app/styles/normalize.scss +63 -63
  128. package/app/styles/partials/_darkMagic.scss +5 -5
  129. package/app/styles/partials/_fnav.scss +15 -15
  130. package/app/styles/partials/_preview.scss +5 -5
  131. package/bin/erudit.mjs +2 -0
  132. package/const.ts +4 -0
  133. package/globalPath.ts +21 -21
  134. package/globals/bitran.ts +1 -47
  135. package/globals/content.ts +22 -22
  136. package/globals/contributor.ts +5 -5
  137. package/globals/erudit.ts +5 -5
  138. package/globals/register.ts +18 -18
  139. package/languages/en.ts +94 -95
  140. package/languages/ru.ts +98 -99
  141. package/module/bitran.ts +66 -34
  142. package/module/config.ts +35 -34
  143. package/module/imports.ts +61 -46
  144. package/module/index.ts +47 -47
  145. package/module/logger.ts +10 -10
  146. package/module/paths.ts +22 -22
  147. package/module/restart.ts +61 -61
  148. package/nuxt.config.ts +123 -111
  149. package/package.json +19 -13
  150. package/server/api/aside/major/nav/bookIds.ts +5 -5
  151. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
  152. package/server/api/aside/major/nav/global.ts +7 -7
  153. package/server/api/aside/minor/news.ts +7 -7
  154. package/server/api/aside/minor/path.ts +77 -78
  155. package/server/api/bitran/content/{[location].ts → [...location].ts} +8 -7
  156. package/server/api/bitran/toc/{[location].ts → [...location].ts} +7 -7
  157. package/server/api/content/data.ts +72 -72
  158. package/server/api/contributor/count.ts +6 -6
  159. package/server/api/fake/content.ts +11 -11
  160. package/server/api/fake/shared/languages.ts +12 -12
  161. package/server/api/language/functions.ts +12 -12
  162. package/server/api/language/phrase/[phraseId].ts +19 -19
  163. package/server/api/language/phraseIds.ts +8 -8
  164. package/server/api/preview/page/[...parts].ts +52 -51
  165. package/server/api/preview/unique/[location].ts +60 -55
  166. package/server/plugin/bitran/content.ts +214 -187
  167. package/server/plugin/bitran/{products → elements}/include.ts +216 -230
  168. package/server/plugin/bitran/location.ts +25 -25
  169. package/server/plugin/bitran/toc.ts +75 -83
  170. package/server/plugin/bitran/transpiler.ts +9 -46
  171. package/server/plugin/build/close.ts +10 -10
  172. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  173. package/server/plugin/build/jobs/content/files.ts +79 -0
  174. package/server/plugin/build/jobs/content/generic.ts +192 -176
  175. package/server/plugin/build/jobs/content/parse.ts +109 -100
  176. package/server/plugin/build/jobs/content/path.ts +6 -6
  177. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  178. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  179. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  180. package/server/plugin/build/jobs/contributors.ts +66 -66
  181. package/server/plugin/build/jobs/language.ts +36 -36
  182. package/server/plugin/build/jobs/nav.ts +214 -209
  183. package/server/plugin/build/process.ts +25 -25
  184. package/server/plugin/build/rebuild.ts +55 -55
  185. package/server/plugin/build/setup.ts +19 -21
  186. package/server/plugin/content/context.ts +116 -112
  187. package/server/plugin/db/entities/Book.ts +7 -7
  188. package/server/plugin/db/entities/Content.ts +49 -49
  189. package/server/plugin/db/entities/Contribution.ts +10 -10
  190. package/server/plugin/db/entities/Contributor.ts +16 -16
  191. package/server/plugin/db/entities/File.ts +10 -0
  192. package/server/plugin/db/entities/Group.ts +14 -14
  193. package/server/plugin/db/entities/Hash.ts +15 -15
  194. package/server/plugin/db/entities/Topic.ts +20 -20
  195. package/server/plugin/db/entities/Unique.ts +21 -21
  196. package/server/plugin/db/setup.ts +36 -34
  197. package/server/plugin/global.ts +16 -18
  198. package/server/plugin/importer.ts +12 -12
  199. package/server/plugin/index.ts +9 -9
  200. package/server/plugin/logger.ts +23 -23
  201. package/server/plugin/nav/node.ts +26 -26
  202. package/server/plugin/nav/utils.ts +133 -129
  203. package/server/plugin/repository/book.ts +21 -21
  204. package/server/plugin/repository/content.ts +237 -238
  205. package/server/plugin/repository/contributor.ts +8 -8
  206. package/server/plugin/repository/file.ts +10 -0
  207. package/server/plugin/repository/frontNav.ts +148 -148
  208. package/server/plugin/repository/topic.ts +32 -32
  209. package/server/tsconfig.json +9 -7
  210. package/shared/aside/minor.ts +51 -50
  211. package/shared/asset.ts +22 -15
  212. package/shared/bitran/contentId.ts +88 -0
  213. package/shared/bitran/stringContent.ts +6 -0
  214. package/shared/bitran/toc.ts +8 -8
  215. package/shared/content/context.ts +9 -9
  216. package/shared/content/data/base.ts +32 -32
  217. package/shared/content/data/index.ts +5 -5
  218. package/shared/content/data/type/book.ts +5 -5
  219. package/shared/content/data/type/group.ts +6 -6
  220. package/shared/content/data/type/topic.ts +11 -11
  221. package/shared/content/previousNext.ts +9 -9
  222. package/shared/contributor.ts +5 -5
  223. package/shared/frontNav.ts +41 -41
  224. package/shared/icons.ts +38 -38
  225. package/shared/image.ts +5 -5
  226. package/shared/link.ts +28 -25
  227. package/shared/popover.ts +8 -0
  228. package/shared/types/language.ts +74 -75
  229. package/shared/utils/objectsEqual.ts +4 -4
  230. package/shared/utils/stringColor.ts +9 -9
  231. package/test/contentId.test.ts +91 -0
  232. package/tsconfig.json +8 -8
  233. package/utils/stress.ts +9 -9
  234. package/app/components/main/utils/ContentFlag.vue +0 -15
  235. package/app/styles/default.scss +0 -83
  236. package/server/plugin/bitran/products/link.ts +0 -116
  237. package/server/plugin/bitran/setup.ts +0 -9
  238. package/server/plugin/content/absoluteId.ts +0 -94
  239. package/shared/bitran/context.ts +0 -8
  240. package/shared/bitran/default.ts +0 -46
  241. package/shared/bitran/link/Link.vue +0 -167
  242. package/shared/bitran/link/factory.ts +0 -24
  243. package/shared/bitran/link/icon.svg +0 -3
  244. package/shared/bitran/link/languages/en.ts +0 -7
  245. package/shared/bitran/link/languages/ru.ts +0 -7
  246. package/shared/bitran/link/renderer.ts +0 -21
  247. package/shared/bitran/link/shared.ts +0 -17
  248. package/shared/bitran/link/target.ts +0 -134
  249. package/shared/bitran/link/transpiler.ts +0 -10
  250. package/shared/bitran/location.ts +0 -166
  251. package/test/bitran/link/target.test.ts +0 -141
  252. package/test/bitran/location.test.ts +0 -143
@@ -1,20 +1,22 @@
1
- import { PreviewDataType, type PreviewDataBase } from '../data';
2
- import { PreviewRequestType, type PreviewRequest } from '../request';
3
- import type { PreviewFooter } from '../footer';
4
-
5
- export interface PreviewDataPageLink extends PreviewDataBase {
6
- type: PreviewDataType.PageLink;
7
- footer: PreviewFooter;
8
- }
9
-
10
- export async function buildPageLink(
11
- request: PreviewRequest,
12
- ): Promise<PreviewDataPageLink> {
13
- if (request.type !== PreviewRequestType.Link) return;
14
-
15
- const { linkTarget } = request;
16
-
17
- if (linkTarget.type !== 'page') return;
18
-
19
- return await $fetch(`/api/preview/page${linkTarget._href}`);
20
- }
1
+ import { PreviewDataType, type PreviewDataBase } from '../data';
2
+ import { PreviewRequestType, type PreviewRequest } from '../request';
3
+ import type { PreviewFooter } from '../footer';
4
+
5
+ export interface PreviewDataPageLink extends PreviewDataBase {
6
+ type: PreviewDataType.PageLink;
7
+ footer: PreviewFooter;
8
+ }
9
+
10
+ export async function buildPageLink(
11
+ request: PreviewRequest,
12
+ ): Promise<PreviewDataPageLink> {
13
+ if (request.type !== PreviewRequestType.Link) return;
14
+
15
+ const { linkTarget } = request;
16
+
17
+ if (linkTarget.type !== 'page') return;
18
+
19
+ return await $fetch(`/api/preview/page${linkTarget._href}`, {
20
+ responseType: 'json',
21
+ });
22
+ }
@@ -1,70 +1,72 @@
1
- import type { BitranContent } from 'bitran';
2
-
3
- import type { BitranContext } from '@erudit/shared/bitran/context';
4
-
5
- import { PreviewDataType, type PreviewDataBase } from '../data';
6
- import type { PreviewFooter } from '../footer';
7
- import { PreviewRequestType, type PreviewRequest } from '../request';
8
- import { encodeBitranLocation } from '@erudit/shared/bitran/location';
9
-
10
- export interface PreviewDataUnique extends PreviewDataBase {
11
- type: PreviewDataType.Unique;
12
- productName: string;
13
- bitran: {
14
- context: BitranContext;
15
- content: BitranContent;
16
- };
17
- footer: PreviewFooter;
18
- }
19
-
20
- export async function buildUnique(
21
- request: PreviewRequest,
22
- ): Promise<PreviewDataUnique> {
23
- if (request.type !== PreviewRequestType.Link) return;
24
-
25
- const { linkTarget } = request;
26
-
27
- if (linkTarget.type !== 'unique') return;
28
-
29
- const serverData = (await $fetch(
30
- `/api/preview/unique/${encodeBitranLocation(linkTarget._absoluteStrLocation!)}`,
31
- )) as any;
32
- const productName = serverData.bitran.productName;
33
- const customTitle = serverData.productTitle;
34
-
35
- const icon = await useBitranElementIcon(productName);
36
-
37
- const productPhraseName = await (async () => {
38
- const elementPhrase = await useBitranElementLanguage(productName);
39
- try {
40
- return elementPhrase('_element_title');
41
- } catch {
42
- return productName;
43
- }
44
- })();
45
-
46
- let secondary = serverData.context
47
- .filter((i) => !i.hidden)
48
- .map((i) => i.title)
49
- .join(' / ');
50
- secondary += customTitle
51
- ? (secondary ? ' ' : '') + productPhraseName
52
- : '';
53
-
54
- const primary = customTitle || productPhraseName || productName;
55
-
56
- return {
57
- type: PreviewDataType.Unique,
58
- productName,
59
- bitran: {
60
- context: serverData.bitran.context,
61
- content: serverData.bitran.content as any,
62
- },
63
- footer: {
64
- iconSvg: icon,
65
- primary,
66
- secondary,
67
- href: linkTarget._href,
68
- },
69
- };
70
- }
1
+ import {
2
+ encodeBitranLocation,
3
+ type BitranContext,
4
+ } from '@erudit-js/cog/schema';
5
+
6
+ import { PreviewDataType, type PreviewDataBase } from '../data';
7
+ import type { PreviewFooter } from '../footer';
8
+ import { PreviewRequestType, type PreviewRequest } from '../request';
9
+ import type { StringBitranContent } from '@erudit/shared/bitran/stringContent';
10
+
11
+ export interface PreviewDataUnique extends PreviewDataBase {
12
+ type: PreviewDataType.Unique;
13
+ productName: string;
14
+ bitran: {
15
+ context: BitranContext;
16
+ content: StringBitranContent;
17
+ };
18
+ footer: PreviewFooter;
19
+ }
20
+
21
+ export async function buildUnique(
22
+ request: PreviewRequest,
23
+ ): Promise<PreviewDataUnique> {
24
+ if (request.type !== PreviewRequestType.Link) return;
25
+
26
+ const { linkTarget } = request;
27
+
28
+ if (linkTarget.type !== 'unique') return;
29
+
30
+ const serverData = (await $fetch(
31
+ `/api/preview/unique/${encodeBitranLocation(linkTarget._absoluteStrLocation!)}`,
32
+ { responseType: 'json' },
33
+ )) as any;
34
+ const productName = serverData.bitran.productName;
35
+ const customTitle = serverData.productTitle;
36
+
37
+ const icon = await useBitranElementIcon(productName);
38
+
39
+ const productPhraseName = await (async () => {
40
+ const elementPhrase = await useBitranElementLanguage(productName);
41
+ try {
42
+ return elementPhrase('_element_title');
43
+ } catch {
44
+ return productName;
45
+ }
46
+ })();
47
+
48
+ let secondary = serverData.context
49
+ .filter((i) => !i.hidden)
50
+ .map((i) => i.title)
51
+ .join(' / ');
52
+ secondary += customTitle
53
+ ? (secondary ? ' • ' : '') + productPhraseName
54
+ : '';
55
+
56
+ const primary = customTitle || productPhraseName || productName;
57
+
58
+ return {
59
+ type: PreviewDataType.Unique,
60
+ productName,
61
+ bitran: {
62
+ context: serverData.bitran.context,
63
+ content: serverData.bitran.content as any,
64
+ },
65
+ footer: {
66
+ iconSvg: icon,
67
+ primary,
68
+ secondary,
69
+ href: linkTarget._href,
70
+ },
71
+ };
72
+ }
@@ -1,24 +1,24 @@
1
- import type { PreviewDataAlert } from './data/alert';
2
- import type { PreviewDataCustom } from './data/custom';
3
- import type { PreviewDataGenericLink } from './data/genericLink';
4
- import type { PreviewDataPageLink } from './data/pageLink';
5
- import type { PreviewDataUnique } from './data/unique';
6
-
7
- export enum PreviewDataType {
8
- Alert = 'alert',
9
- Custom = 'custom',
10
- GenericLink = 'generic-link',
11
- PageLink = 'page-link',
12
- Unique = 'unique',
13
- }
14
-
15
- export interface PreviewDataBase {
16
- type: `${PreviewDataType}`;
17
- }
18
-
19
- export type PreviewData =
20
- | PreviewDataAlert
21
- | PreviewDataCustom
22
- | PreviewDataGenericLink
23
- | PreviewDataPageLink
24
- | PreviewDataUnique;
1
+ import type { PreviewDataAlert } from './data/alert';
2
+ import type { PreviewDataCustom } from './data/custom';
3
+ import type { PreviewDataGenericLink } from './data/genericLink';
4
+ import type { PreviewDataPageLink } from './data/pageLink';
5
+ import type { PreviewDataUnique } from './data/unique';
6
+
7
+ export enum PreviewDataType {
8
+ Alert = 'alert',
9
+ Custom = 'custom',
10
+ GenericLink = 'generic-link',
11
+ PageLink = 'page-link',
12
+ Unique = 'unique',
13
+ }
14
+
15
+ export interface PreviewDataBase {
16
+ type: `${PreviewDataType}`;
17
+ }
18
+
19
+ export type PreviewData =
20
+ | PreviewDataAlert
21
+ | PreviewDataCustom
22
+ | PreviewDataGenericLink
23
+ | PreviewDataPageLink
24
+ | PreviewDataUnique;
@@ -1,37 +1,37 @@
1
- import type { Component } from 'vue';
2
-
3
- import { PreviewDataType, type PreviewData } from './data';
4
-
5
- import {
6
- LazyPreviewDisplayAlert,
7
- LazyPreviewDisplayCustom,
8
- LazyPreviewDisplayGenericLink,
9
- LazyPreviewDisplayPageLink,
10
- LazyPreviewDisplayUnique,
11
- } from '#components';
12
-
13
- import { createPreviewError } from './data/alert';
14
-
15
- export interface PreviewDisplayProps<T extends PreviewData> {
16
- data: T;
17
- }
18
-
19
- export function getPreviewDisplayComponent(data: PreviewData): Component {
20
- switch (data.type) {
21
- case PreviewDataType.Alert:
22
- return LazyPreviewDisplayAlert;
23
- case PreviewDataType.Custom:
24
- return LazyPreviewDisplayCustom;
25
- case PreviewDataType.GenericLink:
26
- return LazyPreviewDisplayGenericLink;
27
- case PreviewDataType.PageLink:
28
- return LazyPreviewDisplayPageLink;
29
- case PreviewDataType.Unique:
30
- return LazyPreviewDisplayUnique;
31
- }
32
-
33
- throw createPreviewError({
34
- message: `Unable to build preview data for request!`,
35
- pre: JSON.stringify(data, null, 4),
36
- });
37
- }
1
+ import type { Component } from 'vue';
2
+
3
+ import { PreviewDataType, type PreviewData } from './data';
4
+
5
+ import {
6
+ LazyPreviewDisplayAlert,
7
+ LazyPreviewDisplayCustom,
8
+ LazyPreviewDisplayGenericLink,
9
+ LazyPreviewDisplayPageLink,
10
+ LazyPreviewDisplayUnique,
11
+ } from '#components';
12
+
13
+ import { createPreviewError } from './data/alert';
14
+
15
+ export interface PreviewDisplayProps<T extends PreviewData> {
16
+ data: T;
17
+ }
18
+
19
+ export function getPreviewDisplayComponent(data: PreviewData): Component {
20
+ switch (data.type) {
21
+ case PreviewDataType.Alert:
22
+ return LazyPreviewDisplayAlert;
23
+ case PreviewDataType.Custom:
24
+ return LazyPreviewDisplayCustom;
25
+ case PreviewDataType.GenericLink:
26
+ return LazyPreviewDisplayGenericLink;
27
+ case PreviewDataType.PageLink:
28
+ return LazyPreviewDisplayPageLink;
29
+ case PreviewDataType.Unique:
30
+ return LazyPreviewDisplayUnique;
31
+ }
32
+
33
+ throw createPreviewError({
34
+ message: `Unable to build preview data for request!`,
35
+ pre: JSON.stringify(data, null, 4),
36
+ });
37
+ }
@@ -1,9 +1,9 @@
1
- import type { MyIconName } from '#my-icons';
2
-
3
- export type PreviewFooter = Partial<{
4
- iconName: MyIconName;
5
- iconSvg: string;
6
- secondary: string;
7
- primary: string;
8
- href: string;
9
- }>;
1
+ import type { MyIconName } from '#my-icons';
2
+
3
+ export type PreviewFooter = Partial<{
4
+ iconName: MyIconName;
5
+ iconSvg: string;
6
+ secondary: string;
7
+ primary: string;
8
+ href: string;
9
+ }>;
@@ -1,51 +1,51 @@
1
- import type { LinkData } from '@erudit/shared/bitran/link/shared';
2
- import type { LinkTarget } from '@erudit/shared/bitran/link/target';
3
-
4
- import type { PreviewData } from './data';
5
-
6
- export enum PreviewRequestType {
7
- Link = 'link',
8
- Data = 'data',
9
- MissingElement = 'missing-element',
10
- HashMismatch = 'hash-mismatch',
11
- }
12
-
13
- export interface PreviewRequestData extends PreviewRequestBase {
14
- type: PreviewRequestType.Data;
15
- data: PreviewData;
16
- }
17
-
18
- export interface PreviewRequestLink extends PreviewRequestBase {
19
- type: PreviewRequestType.Link;
20
- linkData: LinkData;
21
- linkTarget: LinkTarget;
22
- }
23
-
24
- export interface PreviewRequestMissingElement extends PreviewRequestBase {
25
- type: PreviewRequestType.MissingElement;
26
- elementId: string;
27
- hashMismatch?: {
28
- current: string;
29
- expected: string;
30
- };
31
- }
32
-
33
- export interface PreviewRequestHashMismatch extends PreviewRequestBase {
34
- type: PreviewRequestType.HashMismatch;
35
- currentHash: string;
36
- expectedHash: string;
37
- }
38
-
39
- export type PreviewRequest =
40
- | PreviewRequestData
41
- | PreviewRequestLink
42
- | PreviewRequestMissingElement
43
- | PreviewRequestHashMismatch;
44
-
45
- //
46
- //
47
- //
48
-
49
- interface PreviewRequestBase {
50
- type: `${PreviewRequestType}`;
51
- }
1
+ import type { LinkData } from '@erudit/shared/bitran/link/shared';
2
+ import type { LinkTarget } from '@erudit/shared/bitran/link/target';
3
+
4
+ import type { PreviewData } from './data';
5
+
6
+ export enum PreviewRequestType {
7
+ Link = 'link',
8
+ Data = 'data',
9
+ MissingElement = 'missing-element',
10
+ HashMismatch = 'hash-mismatch',
11
+ }
12
+
13
+ export interface PreviewRequestData extends PreviewRequestBase {
14
+ type: PreviewRequestType.Data;
15
+ data: PreviewData;
16
+ }
17
+
18
+ export interface PreviewRequestLink extends PreviewRequestBase {
19
+ type: PreviewRequestType.Link;
20
+ linkData: LinkData;
21
+ linkTarget: LinkTarget;
22
+ }
23
+
24
+ export interface PreviewRequestMissingElement extends PreviewRequestBase {
25
+ type: PreviewRequestType.MissingElement;
26
+ elementId: string;
27
+ hashMismatch?: {
28
+ current: string;
29
+ expected: string;
30
+ };
31
+ }
32
+
33
+ export interface PreviewRequestHashMismatch extends PreviewRequestBase {
34
+ type: PreviewRequestType.HashMismatch;
35
+ currentHash: string;
36
+ expectedHash: string;
37
+ }
38
+
39
+ export type PreviewRequest =
40
+ | PreviewRequestData
41
+ | PreviewRequestLink
42
+ | PreviewRequestMissingElement
43
+ | PreviewRequestHashMismatch;
44
+
45
+ //
46
+ //
47
+ //
48
+
49
+ interface PreviewRequestBase {
50
+ type: `${PreviewRequestType}`;
51
+ }
@@ -1,63 +1,63 @@
1
- import { objectsEqual } from '@shared/utils/objectsEqual';
2
- import { PreviewRequestType, type PreviewRequest } from './request';
3
-
4
- export enum PreviewThemeName {
5
- Error = 'error',
6
- Warn = 'warn',
7
- Success = 'success',
8
- Brand = 'brand',
9
- }
10
-
11
- //
12
-
13
- const _request = ref<PreviewRequest>();
14
- const _visible = ref(false);
15
- const _history = ref<PreviewRequest[]>([]);
16
- const _theme = ref<PreviewThemeName>();
17
- const _blinki = ref(0);
18
-
19
- //
20
-
21
- export const previewRequest = readonly(_request);
22
- export const previewVisible = readonly(_visible);
23
- export const previewTheme = readonly(_theme);
24
- export const previewBlinkTrigger = readonly(_blinki);
25
-
26
- export const hasPreviewHistory = computed(() => _history.value.length > 0);
27
-
28
- export function showPreviousPreview() {
29
- if (!hasPreviewHistory.value) return;
30
-
31
- _request.value = _history.value.pop();
32
- }
33
-
34
- export function showPreview(request: PreviewRequest) {
35
- if (objectsEqual(_request.value, request)) {
36
- if (_visible.value) _blinki.value++;
37
- else _visible.value = true;
38
- return;
39
- }
40
-
41
- if (_request.value) _history.value.push(_request.value);
42
-
43
- _request.value = request;
44
- _visible.value = true;
45
- }
46
-
47
- export function closePreview() {
48
- _visible.value = false;
49
- _request.value = undefined;
50
- _history.value.length = 0;
51
- }
52
-
53
- export function togglePreview(visible?: boolean) {
54
- _visible.value = visible === undefined ? !_visible.value : visible;
55
- }
56
-
57
- export function setPreviewTheme(newTheme: PreviewThemeName) {
58
- _theme.value = newTheme;
59
- }
60
-
61
- export function unsetPreviewTheme() {
62
- _theme.value = undefined;
63
- }
1
+ import { objectsEqual } from '@shared/utils/objectsEqual';
2
+ import { PreviewRequestType, type PreviewRequest } from './request';
3
+
4
+ export enum PreviewThemeName {
5
+ Error = 'error',
6
+ Warn = 'warn',
7
+ Success = 'success',
8
+ Brand = 'brand',
9
+ }
10
+
11
+ //
12
+
13
+ const _request = ref<PreviewRequest>();
14
+ const _visible = ref(false);
15
+ const _history = ref<PreviewRequest[]>([]);
16
+ const _theme = ref<PreviewThemeName>();
17
+ const _blinki = ref(0);
18
+
19
+ //
20
+
21
+ export const previewRequest = readonly(_request);
22
+ export const previewVisible = readonly(_visible);
23
+ export const previewTheme = readonly(_theme);
24
+ export const previewBlinkTrigger = readonly(_blinki);
25
+
26
+ export const hasPreviewHistory = computed(() => _history.value.length > 0);
27
+
28
+ export function showPreviousPreview() {
29
+ if (!hasPreviewHistory.value) return;
30
+
31
+ _request.value = _history.value.pop();
32
+ }
33
+
34
+ export function showPreview(request: PreviewRequest) {
35
+ if (objectsEqual(_request.value, request)) {
36
+ if (_visible.value) _blinki.value++;
37
+ else _visible.value = true;
38
+ return;
39
+ }
40
+
41
+ if (_request.value) _history.value.push(_request.value);
42
+
43
+ _request.value = request;
44
+ _visible.value = true;
45
+ }
46
+
47
+ export function closePreview() {
48
+ _visible.value = false;
49
+ _request.value = undefined;
50
+ _history.value.length = 0;
51
+ }
52
+
53
+ export function togglePreview(visible?: boolean) {
54
+ _visible.value = visible === undefined ? !_visible.value : visible;
55
+ }
56
+
57
+ export function setPreviewTheme(newTheme: PreviewThemeName) {
58
+ _theme.value = newTheme;
59
+ }
60
+
61
+ export function unsetPreviewTheme() {
62
+ _theme.value = undefined;
63
+ }
@@ -1,7 +1,7 @@
1
- /* Instant color theme setup */
2
- :root {
3
- color-scheme: light;
4
- }
5
- :root[data-theme='dark'] {
6
- color-scheme: dark;
7
- }
1
+ /* Instant color theme setup */
2
+ :root {
3
+ color-scheme: light;
4
+ }
5
+ :root[data-theme='dark'] {
6
+ color-scheme: dark;
7
+ }
@@ -1,43 +1,43 @@
1
- @mixin transition($properties...) {
2
- transition: all var(--transitionSpeed) var(--transitionFunction);
3
- transition-property: $properties;
4
- }
5
-
6
- @mixin dark {
7
- :root[data-theme='dark'] & {
8
- @content;
9
- }
10
- }
11
-
12
- @mixin hoverLink {
13
- cursor: pointer;
14
- color: inherit;
15
- text-decoration: underline;
16
- text-decoration-color: transparent;
17
- @include transition(text-decoration-color);
18
-
19
- &:hover {
20
- text-decoration: underline;
21
- }
22
- }
23
-
24
- @mixin scroll {
25
- -webkit-overflow-scrolling: auto;
26
-
27
- &::-webkit-scrollbar {
28
- -webkit-appearance: none;
29
- height: 5px;
30
- width: 5px;
31
- }
32
-
33
- &::-webkit-scrollbar-thumb {
34
- background: var(--scrollbar);
35
- &:hover {
36
- background: color-mix(in srgb, var(--scrollbar), var(--invert) 15%);
37
- }
38
- }
39
-
40
- &::-webkit-scrollbar-corner {
41
- background: var(--border);
42
- }
43
- }
1
+ @mixin transition($properties...) {
2
+ transition: all var(--transitionSpeed) var(--transitionFunction);
3
+ transition-property: $properties;
4
+ }
5
+
6
+ @mixin dark {
7
+ :root[data-theme='dark'] & {
8
+ @content;
9
+ }
10
+ }
11
+
12
+ @mixin hoverLink {
13
+ cursor: pointer;
14
+ color: inherit;
15
+ text-decoration: underline;
16
+ text-decoration-color: transparent;
17
+ @include transition(text-decoration-color);
18
+
19
+ &:hover {
20
+ text-decoration: underline;
21
+ }
22
+ }
23
+
24
+ @mixin scroll {
25
+ -webkit-overflow-scrolling: auto;
26
+
27
+ &::-webkit-scrollbar {
28
+ -webkit-appearance: none;
29
+ height: 5px;
30
+ width: 5px;
31
+ }
32
+
33
+ &::-webkit-scrollbar-thumb {
34
+ background: var(--scrollbar);
35
+ &:hover {
36
+ background: color-mix(in srgb, var(--scrollbar), var(--invert) 15%);
37
+ }
38
+ }
39
+
40
+ &::-webkit-scrollbar-corner {
41
+ background: var(--border);
42
+ }
43
+ }