erudit 2.0.0-dev.9 → 3.0.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/app/app.vue +172 -172
  2. package/app/components/Loading.vue +23 -23
  3. package/app/components/SiteAside.vue +382 -382
  4. package/app/components/SiteMain.vue +35 -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 -3
  18. package/app/components/aside/major/panes/nav/Nav.vue +91 -91
  19. package/app/components/aside/major/panes/nav/NavBook.vue +86 -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 +15 -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 -16
  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 +203 -203
  43. package/app/components/aside/minor/topic/TopicTocItem.vue +31 -31
  44. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  45. package/app/components/bitran/BitranContent.vue +63 -63
  46. package/app/components/bitran/RenderWrapper.vue +10 -10
  47. package/app/components/contributor/ContributorAvatar.vue +43 -43
  48. package/app/components/contributor/ContributorListItem.vue +35 -35
  49. package/app/components/main/topic/MainTopic.vue +79 -79
  50. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  51. package/app/components/main/utils/Breadcrumb.vue +75 -75
  52. package/app/components/main/utils/ContentDecoration.vue +29 -29
  53. package/app/components/main/utils/ContentDescription.vue +19 -20
  54. package/app/components/main/utils/ContentFlag.vue +15 -16
  55. package/app/components/main/utils/ContentPopover.vue +176 -176
  56. package/app/components/main/utils/ContentPopovers.vue +105 -105
  57. package/app/components/main/utils/ContentReferences.vue +70 -76
  58. package/app/components/main/utils/ContentSection.vue +45 -42
  59. package/app/components/main/utils/ContentTitle.vue +39 -37
  60. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -41
  61. package/app/components/main/utils/reference/ReferenceItem.vue +68 -64
  62. package/app/components/main/utils/reference/ReferenceSource.vue +116 -110
  63. package/app/components/preview/Preview.vue +177 -177
  64. package/app/components/preview/PreviewDisplay.vue +139 -139
  65. package/app/components/preview/PreviewFooterAction.vue +73 -73
  66. package/app/components/preview/PreviewLoading.vue +14 -15
  67. package/app/components/preview/PreviewScreen.vue +99 -99
  68. package/app/components/preview/display/Alert.vue +50 -50
  69. package/app/components/preview/display/Custom.vue +18 -18
  70. package/app/components/preview/display/GenericLink.vue +48 -48
  71. package/app/components/preview/display/PageLink.vue +20 -20
  72. package/app/components/preview/display/Unique.vue +49 -49
  73. package/app/components/transition/Fade.vue +19 -22
  74. package/app/components/tree/TreeContainer.vue +11 -12
  75. package/app/components/tree/TreeItem.vue +89 -89
  76. package/app/composables/bitran.ts +127 -127
  77. package/app/composables/bitranContent.ts +37 -37
  78. package/app/composables/bitranLocation.ts +7 -7
  79. package/app/composables/contentData.ts +36 -36
  80. package/app/composables/contentPage.ts +156 -156
  81. package/app/composables/contentRoute.ts +45 -45
  82. package/app/composables/darkMagic.ts +24 -24
  83. package/app/composables/externalApi.ts +63 -63
  84. package/app/composables/favicon.ts +8 -8
  85. package/app/composables/formatText.ts +86 -86
  86. package/app/composables/majorPane.ts +60 -60
  87. package/app/composables/phrases.ts +80 -80
  88. package/app/composables/theme.ts +29 -29
  89. package/app/composables/url.ts +33 -33
  90. package/app/pages/_test/preview.vue +110 -110
  91. package/app/pages/article/[...articleId].vue +3 -3
  92. package/app/pages/book/[...bookId].vue +47 -47
  93. package/app/pages/group/[...groupId].vue +65 -65
  94. package/app/pages/index.vue +32 -32
  95. package/app/pages/members.vue +6 -7
  96. package/app/pages/practice/[...practice].vue +3 -3
  97. package/app/pages/summary/[...summaryId].vue +3 -3
  98. package/app/scripts/_immediate.js +9 -4
  99. package/app/scripts/aside/index.ts +59 -59
  100. package/app/scripts/aside/major/nav.ts +26 -26
  101. package/app/scripts/aside/minor/state.ts +37 -37
  102. package/app/scripts/aside/minor/topic.ts +3 -3
  103. package/app/scripts/flag.ts +28 -28
  104. package/app/scripts/og.ts +27 -27
  105. package/app/scripts/preview/build.ts +73 -84
  106. package/app/scripts/preview/data/alert.ts +19 -19
  107. package/app/scripts/preview/data/custom.ts +8 -8
  108. package/app/scripts/preview/data/genericLink.ts +24 -24
  109. package/app/scripts/preview/data/pageLink.ts +20 -20
  110. package/app/scripts/preview/data/unique.ts +70 -70
  111. package/app/scripts/preview/data.ts +24 -26
  112. package/app/scripts/preview/display.ts +37 -37
  113. package/app/scripts/preview/footer.ts +9 -9
  114. package/app/scripts/preview/request.ts +51 -51
  115. package/app/scripts/preview/state.ts +63 -63
  116. package/app/styles/_immediate.css +7 -3
  117. package/app/styles/_util.scss +43 -50
  118. package/app/styles/_utils.scss +44 -44
  119. package/app/styles/app.scss +91 -91
  120. package/app/styles/def/_bp.scss +27 -24
  121. package/app/styles/def/_size.scss +7 -7
  122. package/app/styles/def/_z.scss +5 -5
  123. package/app/styles/default.scss +83 -85
  124. package/app/styles/normalize.scss +63 -63
  125. package/app/styles/partials/_darkMagic.scss +5 -7
  126. package/app/styles/partials/_fnav.scss +15 -18
  127. package/app/styles/partials/_preview.scss +5 -7
  128. package/globalPath.ts +21 -21
  129. package/globals/bitran.ts +47 -47
  130. package/globals/content.ts +22 -22
  131. package/globals/contributor.ts +5 -5
  132. package/globals/erudit.ts +5 -5
  133. package/globals/register.ts +18 -18
  134. package/languages/en.ts +95 -95
  135. package/languages/ru.ts +99 -99
  136. package/module/bitran.ts +34 -34
  137. package/module/config.ts +34 -34
  138. package/module/imports.ts +46 -46
  139. package/module/index.ts +47 -47
  140. package/module/logger.ts +10 -10
  141. package/module/paths.ts +22 -22
  142. package/module/restart.ts +61 -61
  143. package/nuxt.config.ts +111 -107
  144. package/package.json +3 -3
  145. package/server/api/aside/major/nav/bookIds.ts +5 -5
  146. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
  147. package/server/api/aside/major/nav/global.ts +7 -7
  148. package/server/api/aside/minor/news.ts +7 -7
  149. package/server/api/aside/minor/path.ts +78 -78
  150. package/server/api/bitran/content/[location].ts +7 -7
  151. package/server/api/bitran/toc/[location].ts +7 -7
  152. package/server/api/content/data.ts +72 -72
  153. package/server/api/contributor/count.ts +6 -6
  154. package/server/api/fake/content.ts +11 -11
  155. package/server/api/fake/shared/languages.ts +12 -12
  156. package/server/api/language/functions.ts +12 -12
  157. package/server/api/language/phrase/[phraseId].ts +19 -19
  158. package/server/api/language/phraseIds.ts +8 -8
  159. package/server/api/preview/page/[...parts].ts +51 -51
  160. package/server/api/preview/unique/[location].ts +55 -55
  161. package/server/plugin/bitran/content.ts +187 -187
  162. package/server/plugin/bitran/location.ts +25 -25
  163. package/server/plugin/bitran/products/include.ts +230 -230
  164. package/server/plugin/bitran/products/link.ts +116 -116
  165. package/server/plugin/bitran/setup.ts +9 -9
  166. package/server/plugin/bitran/toc.ts +83 -83
  167. package/server/plugin/bitran/transpiler.ts +46 -46
  168. package/server/plugin/build/close.ts +10 -10
  169. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  170. package/server/plugin/build/jobs/content/generic.ts +176 -176
  171. package/server/plugin/build/jobs/content/parse.ts +100 -100
  172. package/server/plugin/build/jobs/content/path.ts +6 -6
  173. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  174. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  175. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  176. package/server/plugin/build/jobs/contributors.ts +66 -66
  177. package/server/plugin/build/jobs/language.ts +36 -36
  178. package/server/plugin/build/jobs/nav.ts +209 -209
  179. package/server/plugin/build/process.ts +25 -25
  180. package/server/plugin/build/rebuild.ts +55 -55
  181. package/server/plugin/build/setup.ts +21 -21
  182. package/server/plugin/content/absoluteId.ts +94 -94
  183. package/server/plugin/content/context.ts +112 -112
  184. package/server/plugin/db/entities/Book.ts +7 -7
  185. package/server/plugin/db/entities/Content.ts +49 -49
  186. package/server/plugin/db/entities/Contribution.ts +10 -10
  187. package/server/plugin/db/entities/Contributor.ts +16 -16
  188. package/server/plugin/db/entities/Group.ts +14 -14
  189. package/server/plugin/db/entities/Hash.ts +15 -15
  190. package/server/plugin/db/entities/Topic.ts +20 -20
  191. package/server/plugin/db/entities/Unique.ts +21 -21
  192. package/server/plugin/db/setup.ts +34 -34
  193. package/server/plugin/global.ts +18 -18
  194. package/server/plugin/importer.ts +12 -12
  195. package/server/plugin/index.ts +9 -9
  196. package/server/plugin/logger.ts +23 -23
  197. package/server/plugin/nav/node.ts +26 -26
  198. package/server/plugin/nav/utils.ts +129 -129
  199. package/server/plugin/repository/book.ts +21 -21
  200. package/server/plugin/repository/content.ts +238 -238
  201. package/server/plugin/repository/contributor.ts +8 -8
  202. package/server/plugin/repository/frontNav.ts +148 -148
  203. package/server/plugin/repository/topic.ts +32 -32
  204. package/server/tsconfig.json +7 -7
  205. package/shared/aside/minor.ts +50 -50
  206. package/shared/asset.ts +15 -15
  207. package/shared/bitran/context.ts +8 -8
  208. package/shared/bitran/default.ts +46 -46
  209. package/shared/bitran/link/Link.vue +167 -167
  210. package/shared/bitran/link/factory.ts +24 -24
  211. package/shared/bitran/link/languages/en.ts +7 -7
  212. package/shared/bitran/link/languages/ru.ts +7 -7
  213. package/shared/bitran/link/renderer.ts +21 -21
  214. package/shared/bitran/link/shared.ts +17 -17
  215. package/shared/bitran/link/target.ts +134 -134
  216. package/shared/bitran/link/transpiler.ts +10 -10
  217. package/shared/bitran/location.ts +166 -166
  218. package/shared/bitran/toc.ts +8 -8
  219. package/shared/content/context.ts +9 -9
  220. package/shared/content/data/base.ts +32 -32
  221. package/shared/content/data/index.ts +5 -5
  222. package/shared/content/data/type/book.ts +5 -5
  223. package/shared/content/data/type/group.ts +6 -6
  224. package/shared/content/data/type/topic.ts +11 -11
  225. package/shared/content/previousNext.ts +9 -9
  226. package/shared/contributor.ts +5 -5
  227. package/shared/frontNav.ts +41 -41
  228. package/shared/icons.ts +38 -38
  229. package/shared/image.ts +5 -5
  230. package/shared/link.ts +25 -25
  231. package/shared/types/language.ts +75 -75
  232. package/shared/utils/objectsEqual.ts +4 -4
  233. package/shared/utils/stringColor.ts +9 -9
  234. package/test/bitran/link/target.test.ts +141 -141
  235. package/test/bitran/location.test.ts +143 -143
  236. package/tsconfig.json +8 -8
  237. package/utils/stress.ts +9 -9
@@ -1,167 +1,167 @@
1
- <script lang="ts" setup>
2
- import type { ElementProps } from '@bitran-js/renderer-vue';
3
- import { isContentType, isTopicPart } from 'erudit-cog/schema';
4
-
5
- import { CONTENT_TYPE_ICON, ICON, TOPIC_PART_ICON } from '@erudit/shared/icons';
6
- import type { LinkSchema } from './shared';
7
- import { MyIcon, MyRuntimeIcon } from '#components';
8
- import { showPreview, togglePreview } from '@erudit/app/scripts/preview/state';
9
- import { PreviewRequestType } from '@erudit/app/scripts/preview/request';
10
- import { encodeBitranLocation } from '@erudit/shared/bitran/location';
11
-
12
- const { node } = defineProps<ElementProps<LinkSchema>>();
13
- const { label } = node.parseData;
14
- const linkTarget = node.renderData;
15
-
16
- const baseUrlPath = useBaseUrlPath();
17
- const formatText = useFormatText();
18
-
19
- const Icon = await (async () => {
20
- const type = linkTarget.type;
21
-
22
- if (type === 'unique') {
23
- return h(MyRuntimeIcon, {
24
- name: 'link-icon',
25
- svg: await useBitranElementIcon(linkTarget._productName!),
26
- });
27
- } else if (type === 'absolute') {
28
- return h(MyIcon, { name: 'link' });
29
- } else if (type === 'external') {
30
- return h(MyIcon, { name: 'link-external' });
31
- } else if (type === 'page') {
32
- const pageType = linkTarget.pageType;
33
-
34
- if (isTopicPart(pageType))
35
- return h(MyIcon, { name: TOPIC_PART_ICON[pageType] });
36
- if (isContentType(pageType))
37
- return h(MyIcon, { name: CONTENT_TYPE_ICON[pageType] });
38
-
39
- switch (pageType) {
40
- case 'contributor':
41
- return h(MyIcon, { name: ICON.contributor });
42
- }
43
-
44
- return h(MyIcon, { name: 'link' });
45
- }
46
- })();
47
-
48
- const href = (() => {
49
- switch (linkTarget.type) {
50
- case 'absolute':
51
- case 'external':
52
- return linkTarget.href;
53
- case 'page':
54
- case 'unique':
55
- return linkTarget._href!;
56
- }
57
- })();
58
-
59
- // Prerendering data for previews to work after site build
60
- switch (linkTarget.type) {
61
- case 'page':
62
- prerenderRoutes(`/api/preview/page${linkTarget._href}`);
63
- break;
64
- case 'unique':
65
- prerenderRoutes(
66
- `/api/preview/unique/${encodeBitranLocation(linkTarget._absoluteStrLocation!)}`,
67
- );
68
- break;
69
- }
70
-
71
- const doubleClick = {
72
- timeout: null as any,
73
- startTimeout() {
74
- this.timeout = setTimeout(() => {
75
- this.reset();
76
- }, 400);
77
- },
78
- reset() {
79
- clearTimeout(this.timeout);
80
- this.timeout = null;
81
- },
82
- };
83
-
84
- function linkClick(e: Event) {
85
- // Direct link traversal is disabled, use double click instead!
86
-
87
- e.stopPropagation();
88
- e.preventDefault();
89
-
90
- if (doubleClick.timeout) {
91
- doubleClick.reset();
92
- togglePreview(false);
93
- window.open(baseUrlPath(href), '_blank');
94
- return false;
95
- }
96
-
97
- showPreview({
98
- type: PreviewRequestType.Link,
99
- linkData: node.parseData,
100
- linkTarget,
101
- });
102
-
103
- doubleClick.startTimeout();
104
-
105
- return false;
106
- }
107
- </script>
108
-
109
- <template>
110
- <a
111
- :href="baseUrlPath(href)"
112
- :class="$style.link"
113
- @click="linkClick"
114
- :external="true"
115
- >
116
- <Icon :class="$style.icon" wrapper="span" />
117
- <span :class="$style.label">{{ formatText(label) }}</span>
118
- </a>
119
- </template>
120
-
121
- <style lang="scss" module>
122
- .link {
123
- --linkColor: var(--brand); //light-dark(#3e66a1, #77a0db);
124
-
125
- display: inline-flex;
126
- align-items: center;
127
- gap: 3px;
128
-
129
- position: relative;
130
- top: 1px;
131
-
132
- padding: 0 3px;
133
- margin: 0 -2px;
134
-
135
- color: var(--linkColor);
136
- text-decoration-thickness: 2px;
137
- text-decoration-style: solid;
138
- text-decoration-color: color-mix(
139
- in srgb,
140
- var(--linkColor),
141
- transparent 75%
142
- );
143
-
144
- border-radius: 5px;
145
-
146
- @include transition(background);
147
-
148
- &:hover,
149
- &:active {
150
- background: color-mix(in srgb, var(--linkColor), transparent 87.5%);
151
- }
152
-
153
- .icon {
154
- flex-shrink: 0;
155
- position: relative;
156
- top: 1px;
157
- font-size: 0.86em;
158
-
159
- text-decoration: none;
160
- color: color-mix(in srgb, var(--linkColor), transparent 10%);
161
- }
162
-
163
- .label {
164
- font-weight: 450;
165
- }
166
- }
167
- </style>
1
+ <script lang="ts" setup>
2
+ import type { ElementProps } from '@bitran-js/renderer-vue';
3
+ import { isContentType, isTopicPart } from 'erudit-cog/schema';
4
+
5
+ import { CONTENT_TYPE_ICON, ICON, TOPIC_PART_ICON } from '@erudit/shared/icons';
6
+ import type { LinkSchema } from './shared';
7
+ import { MyIcon, MyRuntimeIcon } from '#components';
8
+ import { showPreview, togglePreview } from '@erudit/app/scripts/preview/state';
9
+ import { PreviewRequestType } from '@erudit/app/scripts/preview/request';
10
+ import { encodeBitranLocation } from '@erudit/shared/bitran/location';
11
+
12
+ const { node } = defineProps<ElementProps<LinkSchema>>();
13
+ const { label } = node.parseData;
14
+ const linkTarget = node.renderData;
15
+
16
+ const baseUrlPath = useBaseUrlPath();
17
+ const formatText = useFormatText();
18
+
19
+ const Icon = await (async () => {
20
+ const type = linkTarget.type;
21
+
22
+ if (type === 'unique') {
23
+ return h(MyRuntimeIcon, {
24
+ name: 'link-icon',
25
+ svg: await useBitranElementIcon(linkTarget._productName!),
26
+ });
27
+ } else if (type === 'absolute') {
28
+ return h(MyIcon, { name: 'link' });
29
+ } else if (type === 'external') {
30
+ return h(MyIcon, { name: 'link-external' });
31
+ } else if (type === 'page') {
32
+ const pageType = linkTarget.pageType;
33
+
34
+ if (isTopicPart(pageType))
35
+ return h(MyIcon, { name: TOPIC_PART_ICON[pageType] });
36
+ if (isContentType(pageType))
37
+ return h(MyIcon, { name: CONTENT_TYPE_ICON[pageType] });
38
+
39
+ switch (pageType) {
40
+ case 'contributor':
41
+ return h(MyIcon, { name: ICON.contributor });
42
+ }
43
+
44
+ return h(MyIcon, { name: 'link' });
45
+ }
46
+ })();
47
+
48
+ const href = (() => {
49
+ switch (linkTarget.type) {
50
+ case 'absolute':
51
+ case 'external':
52
+ return linkTarget.href;
53
+ case 'page':
54
+ case 'unique':
55
+ return linkTarget._href!;
56
+ }
57
+ })();
58
+
59
+ // Prerendering data for previews to work after site build
60
+ switch (linkTarget.type) {
61
+ case 'page':
62
+ prerenderRoutes(`/api/preview/page${linkTarget._href}`);
63
+ break;
64
+ case 'unique':
65
+ prerenderRoutes(
66
+ `/api/preview/unique/${encodeBitranLocation(linkTarget._absoluteStrLocation!)}`,
67
+ );
68
+ break;
69
+ }
70
+
71
+ const doubleClick = {
72
+ timeout: null as any,
73
+ startTimeout() {
74
+ this.timeout = setTimeout(() => {
75
+ this.reset();
76
+ }, 400);
77
+ },
78
+ reset() {
79
+ clearTimeout(this.timeout);
80
+ this.timeout = null;
81
+ },
82
+ };
83
+
84
+ function linkClick(e: Event) {
85
+ // Direct link traversal is disabled, use double click instead!
86
+
87
+ e.stopPropagation();
88
+ e.preventDefault();
89
+
90
+ if (doubleClick.timeout) {
91
+ doubleClick.reset();
92
+ togglePreview(false);
93
+ window.open(baseUrlPath(href), '_blank');
94
+ return false;
95
+ }
96
+
97
+ showPreview({
98
+ type: PreviewRequestType.Link,
99
+ linkData: node.parseData,
100
+ linkTarget,
101
+ });
102
+
103
+ doubleClick.startTimeout();
104
+
105
+ return false;
106
+ }
107
+ </script>
108
+
109
+ <template>
110
+ <a
111
+ :href="baseUrlPath(href)"
112
+ :class="$style.link"
113
+ @click="linkClick"
114
+ :external="true"
115
+ >
116
+ <Icon :class="$style.icon" wrapper="span" />
117
+ <span :class="$style.label">{{ formatText(label) }}</span>
118
+ </a>
119
+ </template>
120
+
121
+ <style lang="scss" module>
122
+ .link {
123
+ --linkColor: var(--brand); //light-dark(#3e66a1, #77a0db);
124
+
125
+ display: inline-flex;
126
+ align-items: center;
127
+ gap: 3px;
128
+
129
+ position: relative;
130
+ top: 1px;
131
+
132
+ padding: 0 3px;
133
+ margin: 0 -2px;
134
+
135
+ color: var(--linkColor);
136
+ text-decoration-thickness: 2px;
137
+ text-decoration-style: solid;
138
+ text-decoration-color: color-mix(
139
+ in srgb,
140
+ var(--linkColor),
141
+ transparent 75%
142
+ );
143
+
144
+ border-radius: 5px;
145
+
146
+ @include transition(background);
147
+
148
+ &:hover,
149
+ &:active {
150
+ background: color-mix(in srgb, var(--linkColor), transparent 87.5%);
151
+ }
152
+
153
+ .icon {
154
+ flex-shrink: 0;
155
+ position: relative;
156
+ top: 1px;
157
+ font-size: 0.86em;
158
+
159
+ text-decoration: none;
160
+ color: color-mix(in srgb, var(--linkColor), transparent 10%);
161
+ }
162
+
163
+ .label {
164
+ font-weight: 450;
165
+ }
166
+ }
167
+ </style>
@@ -1,24 +1,24 @@
1
- import {
2
- RegexpInlinerParseFactory,
3
- StringifyFactory,
4
- } from '@bitran-js/transpiler';
5
-
6
- import type { LinkNode, LinkSchema } from './shared';
7
-
8
- export class LinkParser extends RegexpInlinerParseFactory<LinkSchema> {
9
- regexp = /\[(.+?)\]\((.+?)\)/gm;
10
-
11
- override async parseDataFromRegexp(match: RegExpExecArray) {
12
- return {
13
- label: match[1]!,
14
- target: match[2]!,
15
- };
16
- }
17
- }
18
-
19
- export class LinkStringifier extends StringifyFactory<LinkSchema> {
20
- override async stringifyElement(elementNode: LinkNode): Promise<string> {
21
- const parseData = elementNode.parseData;
22
- return `[${parseData.label}](${parseData.target})`;
23
- }
24
- }
1
+ import {
2
+ RegexpInlinerParseFactory,
3
+ StringifyFactory,
4
+ } from '@bitran-js/transpiler';
5
+
6
+ import type { LinkNode, LinkSchema } from './shared';
7
+
8
+ export class LinkParser extends RegexpInlinerParseFactory<LinkSchema> {
9
+ regexp = /\[(.+?)\]\((.+?)\)/gm;
10
+
11
+ override async parseDataFromRegexp(match: RegExpExecArray) {
12
+ return {
13
+ label: match[1]!,
14
+ target: match[2]!,
15
+ };
16
+ }
17
+ }
18
+
19
+ export class LinkStringifier extends StringifyFactory<LinkSchema> {
20
+ override async stringifyElement(elementNode: LinkNode): Promise<string> {
21
+ const parseData = elementNode.parseData;
22
+ return `[${parseData.label}](${parseData.target})`;
23
+ }
24
+ }
@@ -1,7 +1,7 @@
1
- import { defineLanguage } from '@bitran-js/renderer-vue';
2
-
3
- const english = defineLanguage({
4
- _element_title: 'Link',
5
- });
6
-
7
- export default english;
1
+ import { defineLanguage } from '@bitran-js/renderer-vue';
2
+
3
+ const english = defineLanguage({
4
+ _element_title: 'Link',
5
+ });
6
+
7
+ export default english;
@@ -1,7 +1,7 @@
1
- import { defineLanguage } from '@bitran-js/renderer-vue';
2
-
3
- const russian = defineLanguage({
4
- _element_title: 'Ссылка',
5
- });
6
-
7
- export default russian;
1
+ import { defineLanguage } from '@bitran-js/renderer-vue';
2
+
3
+ const russian = defineLanguage({
4
+ _element_title: 'Ссылка',
5
+ });
6
+
7
+ export default russian;
@@ -1,21 +1,21 @@
1
- import {
2
- defineElementVueRenderer,
3
- defineComponent,
4
- defineIcon,
5
- defineLanguages,
6
- } from '@bitran-js/renderer-vue';
7
-
8
- import { LinkNode, type LinkSchema } from './shared';
9
-
10
- export const linkRenderer = defineElementVueRenderer<LinkSchema>({
11
- Node: LinkNode,
12
- component: defineComponent(() => import('./Link.vue')),
13
- icon: defineIcon(() => import('./icon.svg?raw')),
14
- languages: defineLanguages({
15
- en: () => import('./languages/en'),
16
- ru: () => import('./languages/ru'),
17
- }),
18
- createRenderData: async () => {
19
- throw Error('Render data for Links must be built only on server side!');
20
- },
21
- });
1
+ import {
2
+ defineElementVueRenderer,
3
+ defineComponent,
4
+ defineIcon,
5
+ defineLanguages,
6
+ } from '@bitran-js/renderer-vue';
7
+
8
+ import { LinkNode, type LinkSchema } from './shared';
9
+
10
+ export const linkRenderer = defineElementVueRenderer<LinkSchema>({
11
+ Node: LinkNode,
12
+ component: defineComponent(() => import('./Link.vue')),
13
+ icon: defineIcon(() => import('./icon.svg?raw')),
14
+ languages: defineLanguages({
15
+ en: () => import('./languages/en'),
16
+ ru: () => import('./languages/ru'),
17
+ }),
18
+ createRenderData: async () => {
19
+ throw Error('Render data for Links must be built only on server side!');
20
+ },
21
+ });
@@ -1,17 +1,17 @@
1
- import { InlinerNode, type DefineElementSchema } from '@bitran-js/core';
2
-
3
- import type { LinkTarget } from './target';
4
-
5
- export const linkName = 'link';
6
-
7
- export interface LinkParseData {
8
- target: string;
9
- label: string;
10
- }
11
-
12
- export type LinkSchema = DefineElementSchema<{
13
- ParseData: LinkParseData;
14
- RenderData: LinkTarget;
15
- }>;
16
-
17
- export class LinkNode extends InlinerNode<LinkSchema> {}
1
+ import { InlinerNode, type DefineElementSchema } from '@bitran-js/core';
2
+
3
+ import type { LinkTarget } from './target';
4
+
5
+ export const linkName = 'link';
6
+
7
+ export interface LinkParseData {
8
+ target: string;
9
+ label: string;
10
+ }
11
+
12
+ export type LinkSchema = DefineElementSchema<{
13
+ ParseData: LinkParseData;
14
+ RenderData: LinkTarget;
15
+ }>;
16
+
17
+ export class LinkNode extends InlinerNode<LinkSchema> {}