erudit 2.0.0-dev.8 → 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.
- package/.nuxtrc +1 -1
- package/app/components/SiteMain.vue +2 -2
- package/app/components/aside/major/panes/Search.vue +10 -2
- package/app/components/aside/minor/AsideMinorContributor.vue +1 -1
- package/app/components/aside/minor/AsideMinorPane.vue +2 -3
- package/app/components/aside/minor/topic/TopicToc.vue +2 -1
- package/app/components/aside/minor/topic/TopicTocItem.vue +3 -3
- package/app/components/bitran/BitranContent.vue +20 -21
- package/app/components/bitran/RenderWrapper.vue +2 -4
- package/app/components/main/topic/MainTopic.vue +1 -1
- package/app/components/main/utils/ContentDescription.vue +3 -4
- package/app/components/main/utils/ContentFlag.vue +3 -4
- package/app/components/main/utils/ContentReferences.vue +16 -22
- package/app/components/main/utils/ContentSection.vue +21 -18
- package/app/components/main/utils/ContentTitle.vue +12 -10
- package/app/components/main/utils/reference/ReferenceGroup.vue +5 -8
- package/app/components/main/utils/reference/ReferenceItem.vue +25 -21
- package/app/components/main/utils/reference/ReferenceSource.vue +42 -36
- package/app/components/preview/PreviewLoading.vue +2 -3
- package/app/components/preview/display/Unique.vue +2 -2
- package/app/components/transition/Fade.vue +4 -7
- package/app/components/tree/TreeContainer.vue +2 -3
- package/app/composables/bitran.ts +127 -132
- package/app/composables/bitranContent.ts +37 -36
- package/app/composables/bitranLocation.ts +7 -7
- package/app/composables/contentData.ts +36 -36
- package/app/composables/contentPage.ts +156 -156
- package/app/composables/contentRoute.ts +45 -45
- package/app/composables/darkMagic.ts +24 -24
- package/app/composables/externalApi.ts +63 -63
- package/app/composables/favicon.ts +8 -8
- package/app/composables/formatText.ts +86 -86
- package/app/composables/majorPane.ts +60 -60
- package/app/composables/theme.ts +29 -29
- package/app/composables/url.ts +33 -33
- package/app/pages/article/[...articleId].vue +1 -1
- package/app/pages/group/[...groupId].vue +2 -1
- package/app/pages/members.vue +2 -3
- package/app/pages/practice/[...practice].vue +1 -1
- package/app/pages/summary/[...summaryId].vue +1 -1
- package/app/public/favicon/article.svg +9 -9
- package/app/public/favicon/default.svg +9 -9
- package/app/public/favicon/practice.svg +9 -9
- package/app/public/favicon/summary.svg +9 -9
- package/app/public/logotype.svg +16 -16
- package/app/public/user.svg +9 -9
- package/app/scripts/_immediate.js +7 -2
- package/app/scripts/aside/index.ts +59 -59
- package/app/scripts/aside/major/nav.ts +26 -26
- package/app/scripts/aside/minor/state.ts +37 -37
- package/app/scripts/aside/minor/topic.ts +3 -3
- package/app/scripts/preview/build.ts +73 -84
- package/app/scripts/preview/data/alert.ts +19 -19
- package/app/scripts/preview/data/custom.ts +8 -8
- package/app/scripts/preview/data/genericLink.ts +24 -24
- package/app/scripts/preview/data/pageLink.ts +20 -20
- package/app/scripts/preview/data/unique.ts +70 -70
- package/app/scripts/preview/data.ts +24 -26
- package/app/scripts/preview/display.ts +37 -39
- package/app/scripts/preview/footer.ts +9 -9
- package/app/scripts/preview/request.ts +51 -51
- package/app/scripts/preview/state.ts +63 -63
- package/app/styles/_immediate.css +6 -2
- package/app/styles/_util.scss +13 -20
- package/app/styles/app.scss +91 -91
- package/app/styles/def/_bp.scss +27 -24
- package/app/styles/def/_size.scss +7 -7
- package/app/styles/def/_z.scss +5 -5
- package/app/styles/default.scss +33 -35
- package/app/styles/normalize.scss +63 -63
- package/app/styles/partials/_darkMagic.scss +3 -5
- package/app/styles/partials/_fnav.scss +4 -7
- package/app/styles/partials/_preview.scss +3 -5
- package/globals/bitran.ts +47 -39
- package/globals/content.ts +22 -22
- package/globals/contributor.ts +5 -5
- package/module/bitran.ts +34 -34
- package/module/index.ts +12 -0
- package/module/paths.ts +22 -22
- package/nuxt.config.ts +20 -5
- package/package.json +9 -6
- package/server/api/contributor/count.ts +6 -6
- package/server/api/fake/content.ts +6 -6
- package/server/api/preview/page/[...parts].ts +1 -1
- package/server/plugin/bitran/content.ts +187 -176
- package/server/plugin/bitran/location.ts +25 -25
- package/server/plugin/bitran/products/include.ts +230 -229
- package/server/plugin/bitran/products/link.ts +116 -114
- package/server/plugin/bitran/setup.ts +9 -10
- package/server/plugin/bitran/toc.ts +83 -82
- package/server/plugin/bitran/transpiler.ts +46 -0
- package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
- package/server/plugin/build/jobs/content/generic.ts +176 -176
- package/server/plugin/build/jobs/content/parse.ts +100 -90
- package/server/plugin/build/jobs/content/path.ts +6 -6
- package/server/plugin/build/jobs/content/type/book.ts +9 -9
- package/server/plugin/build/jobs/content/type/group.ts +37 -37
- package/server/plugin/build/jobs/content/type/topic.ts +36 -36
- package/server/plugin/build/jobs/contributors.ts +66 -66
- package/server/plugin/build/jobs/nav.ts +209 -209
- package/server/plugin/content/absoluteId.ts +94 -94
- package/server/plugin/content/context.ts +112 -112
- package/server/plugin/db/entities/Book.ts +7 -7
- package/server/plugin/db/entities/Content.ts +49 -49
- package/server/plugin/db/entities/Contribution.ts +10 -10
- package/server/plugin/db/entities/Contributor.ts +16 -16
- package/server/plugin/db/entities/Group.ts +14 -14
- package/server/plugin/db/entities/Hash.ts +15 -15
- package/server/plugin/db/entities/Topic.ts +20 -20
- package/server/plugin/db/entities/Unique.ts +21 -21
- package/server/plugin/db/setup.ts +34 -34
- package/server/plugin/nav/node.ts +26 -26
- package/server/plugin/nav/utils.ts +129 -129
- package/server/plugin/repository/book.ts +21 -21
- package/server/plugin/repository/content.ts +238 -238
- package/server/plugin/repository/contributor.ts +8 -8
- package/server/plugin/repository/frontNav.ts +148 -148
- package/server/plugin/repository/topic.ts +32 -32
- package/shared/aside/minor.ts +50 -50
- package/shared/asset.ts +15 -15
- package/shared/bitran/context.ts +8 -7
- package/shared/bitran/default.ts +46 -0
- package/shared/bitran/{products/link/render → link}/Link.vue +167 -174
- package/shared/bitran/link/factory.ts +24 -0
- package/shared/bitran/link/languages/en.ts +7 -0
- package/shared/bitran/link/languages/ru.ts +7 -0
- package/shared/bitran/link/renderer.ts +21 -0
- package/shared/bitran/link/shared.ts +17 -0
- package/shared/bitran/{products/link → link}/target.ts +134 -134
- package/shared/bitran/link/transpiler.ts +10 -0
- package/shared/bitran/location.ts +166 -166
- package/shared/bitran/toc.ts +8 -8
- package/shared/contributor.ts +5 -5
- package/shared/frontNav.ts +41 -41
- package/shared/icons.ts +38 -38
- package/shared/image.ts +5 -5
- package/shared/utils/objectsEqual.ts +4 -4
- package/shared/utils/stringColor.ts +9 -9
- package/test/bitran/{products/link → link}/target.test.ts +141 -138
- package/test/bitran/location.test.ts +143 -143
- package/server/plugin/bitran/core.ts +0 -51
- package/shared/bitran/alias.ts +0 -17
- package/shared/bitran/products/alias/core/factory.ts +0 -46
- package/shared/bitran/products/alias/core/index.ts +0 -13
- package/shared/bitran/products/alias/render/Alias.vue +0 -10
- package/shared/bitran/products/alias/render/icon.svg +0 -3
- package/shared/bitran/products/alias/render/index.ts +0 -17
- package/shared/bitran/products/alias/render/languages/en.ts +0 -5
- package/shared/bitran/products/alias/render/languages/ru.ts +0 -5
- package/shared/bitran/products/alias/shared.ts +0 -11
- package/shared/bitran/products/heading/core/factory.ts +0 -53
- package/shared/bitran/products/heading/core/index.ts +0 -19
- package/shared/bitran/products/heading/render/Heading.vue +0 -47
- package/shared/bitran/products/heading/render/icon.svg +0 -3
- package/shared/bitran/products/heading/render/index.ts +0 -17
- package/shared/bitran/products/heading/render/languages/en.ts +0 -5
- package/shared/bitran/products/heading/render/languages/ru.ts +0 -5
- package/shared/bitran/products/heading/shared.ts +0 -13
- package/shared/bitran/products/include/core/factory.ts +0 -61
- package/shared/bitran/products/include/core/index.ts +0 -13
- package/shared/bitran/products/include/render/Include.vue +0 -13
- package/shared/bitran/products/include/render/icon.svg +0 -3
- package/shared/bitran/products/include/render/index.ts +0 -18
- package/shared/bitran/products/include/render/languages/en.ts +0 -5
- package/shared/bitran/products/include/render/languages/ru.ts +0 -5
- package/shared/bitran/products/include/shared.ts +0 -15
- package/shared/bitran/products/link/core/factory.ts +0 -20
- package/shared/bitran/products/link/core/index.ts +0 -17
- package/shared/bitran/products/link/render/index.ts +0 -17
- package/shared/bitran/products/link/render/languages/en.ts +0 -5
- package/shared/bitran/products/link/render/languages/ru.ts +0 -5
- package/shared/bitran/products/link/shared.ts +0 -15
- package/test/bitran/alias.test.ts +0 -44
- package/test/bitran/products/alias.test.ts +0 -83
- package/test/bitran/products/heading.test.ts +0 -119
- package/test/bitran/products/include.test.ts +0 -77
- package/test/bitran/products/link/factory.test.ts +0 -30
- /package/shared/bitran/{products/link/render → link}/icon.svg +0 -0
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
import eruditConfig from '#erudit/config';
|
|
2
|
-
|
|
3
|
-
let formatFunction: FormatFunction;
|
|
4
|
-
|
|
5
|
-
export function useFormatText() {
|
|
6
|
-
if (!formatFunction) {
|
|
7
|
-
const language = eruditConfig?.language;
|
|
8
|
-
formatFunction = createFormatFunction(language);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return formatFunction;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
type FormatFunction = (text: string) => string;
|
|
15
|
-
|
|
16
|
-
function createFormatFunction(language?: string): FormatFunction {
|
|
17
|
-
const formatters: FormatFunction[] = [];
|
|
18
|
-
|
|
19
|
-
//
|
|
20
|
-
// Em Dashes
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
formatters.push((text) => text.replace(/(^| )--($| )/gm, '$1—$2'));
|
|
24
|
-
|
|
25
|
-
//
|
|
26
|
-
// Quotes
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
{
|
|
30
|
-
const quoteSymbols: [string, string] = (() => {
|
|
31
|
-
switch (language) {
|
|
32
|
-
case 'ru':
|
|
33
|
-
return ['«', '»'];
|
|
34
|
-
default:
|
|
35
|
-
return ['“', '”'];
|
|
36
|
-
}
|
|
37
|
-
})();
|
|
38
|
-
|
|
39
|
-
formatters.push((text) => {
|
|
40
|
-
let open = false;
|
|
41
|
-
return text.replaceAll(/"/gm, () => {
|
|
42
|
-
return (open = !open) ? quoteSymbols[0] : quoteSymbols[1];
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
//
|
|
48
|
-
// Ellipsis
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
formatters.push((text) => text.replace(/\.\.\./gm, '…'));
|
|
52
|
-
|
|
53
|
-
//
|
|
54
|
-
// Language specific formatters
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
if (language === 'ru') formatters.push(ruStickyPrepositions);
|
|
58
|
-
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
function formatText(text: string): string {
|
|
64
|
-
if (!text) return text;
|
|
65
|
-
|
|
66
|
-
for (const formatter of formatters) text = formatter(text);
|
|
67
|
-
|
|
68
|
-
return text;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return formatText;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
//
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Formats prepositions in Russian text so that they are always adjacent to the next word and are not left hanging “in the air” when the line breaks.
|
|
80
|
-
*/
|
|
81
|
-
function ruStickyPrepositions(text: string): string {
|
|
82
|
-
return text.replace(
|
|
83
|
-
/ (в|не|без|для|до|за|из|к|на|над|о|об|от|по|под|при|про|с|у|через|вокруг|около|после|перед|между|внутри|вне|из-за|из-под|ради|сквозь|среди|насчёт|вследствие|благодаря|несмотря|наперекор|вопреки|подле|возле|рядом|навстречу) /gimu,
|
|
84
|
-
' $1\xa0',
|
|
85
|
-
);
|
|
86
|
-
}
|
|
1
|
+
import eruditConfig from '#erudit/config';
|
|
2
|
+
|
|
3
|
+
let formatFunction: FormatFunction;
|
|
4
|
+
|
|
5
|
+
export function useFormatText() {
|
|
6
|
+
if (!formatFunction) {
|
|
7
|
+
const language = eruditConfig?.language;
|
|
8
|
+
formatFunction = createFormatFunction(language);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return formatFunction;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type FormatFunction = (text: string) => string;
|
|
15
|
+
|
|
16
|
+
function createFormatFunction(language?: string): FormatFunction {
|
|
17
|
+
const formatters: FormatFunction[] = [];
|
|
18
|
+
|
|
19
|
+
//
|
|
20
|
+
// Em Dashes
|
|
21
|
+
//
|
|
22
|
+
|
|
23
|
+
formatters.push((text) => text.replace(/(^| )--($| )/gm, '$1—$2'));
|
|
24
|
+
|
|
25
|
+
//
|
|
26
|
+
// Quotes
|
|
27
|
+
//
|
|
28
|
+
|
|
29
|
+
{
|
|
30
|
+
const quoteSymbols: [string, string] = (() => {
|
|
31
|
+
switch (language) {
|
|
32
|
+
case 'ru':
|
|
33
|
+
return ['«', '»'];
|
|
34
|
+
default:
|
|
35
|
+
return ['“', '”'];
|
|
36
|
+
}
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
formatters.push((text) => {
|
|
40
|
+
let open = false;
|
|
41
|
+
return text.replaceAll(/"/gm, () => {
|
|
42
|
+
return (open = !open) ? quoteSymbols[0] : quoteSymbols[1];
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//
|
|
48
|
+
// Ellipsis
|
|
49
|
+
//
|
|
50
|
+
|
|
51
|
+
formatters.push((text) => text.replace(/\.\.\./gm, '…'));
|
|
52
|
+
|
|
53
|
+
//
|
|
54
|
+
// Language specific formatters
|
|
55
|
+
//
|
|
56
|
+
|
|
57
|
+
if (language === 'ru') formatters.push(ruStickyPrepositions);
|
|
58
|
+
|
|
59
|
+
//
|
|
60
|
+
//
|
|
61
|
+
//
|
|
62
|
+
|
|
63
|
+
function formatText(text: string): string {
|
|
64
|
+
if (!text) return text;
|
|
65
|
+
|
|
66
|
+
for (const formatter of formatters) text = formatter(text);
|
|
67
|
+
|
|
68
|
+
return text;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return formatText;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
//
|
|
75
|
+
//
|
|
76
|
+
//
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Formats prepositions in Russian text so that they are always adjacent to the next word and are not left hanging “in the air” when the line breaks.
|
|
80
|
+
*/
|
|
81
|
+
function ruStickyPrepositions(text: string): string {
|
|
82
|
+
return text.replace(
|
|
83
|
+
/ (в|не|без|для|до|за|из|к|на|над|о|об|от|по|под|при|про|с|у|через|вокруг|около|после|перед|между|внутри|вне|из-за|из-под|ради|сквозь|среди|насчёт|вследствие|благодаря|несмотря|наперекор|вопреки|подле|возле|рядом|навстречу) /gimu,
|
|
84
|
+
' $1\xa0',
|
|
85
|
+
);
|
|
86
|
+
}
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import type { Component } from 'vue';
|
|
2
|
-
|
|
3
|
-
import type { MyIconName } from '#my-icons';
|
|
4
|
-
|
|
5
|
-
import Nav from '@app/components/aside/major/panes/nav/Nav.vue';
|
|
6
|
-
import Pages from '@app/components/aside/major/panes/Pages.vue';
|
|
7
|
-
import Search from '@app/components/aside/major/panes/Search.vue';
|
|
8
|
-
import Language from '@app/components/aside/major/panes/Language.vue';
|
|
9
|
-
import Other from '@app/components/aside/major/panes/other/Other.vue';
|
|
10
|
-
|
|
11
|
-
interface MajorPane {
|
|
12
|
-
icon: MyIconName;
|
|
13
|
-
phrase: EruditPhraseId;
|
|
14
|
-
content: Component;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function definePane<TPane extends MajorPane>(pane: TPane) {
|
|
18
|
-
return pane;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const majorPanes = {
|
|
22
|
-
index: definePane({ icon: 'book', phrase: 'index', content: Nav }),
|
|
23
|
-
pages: definePane({ icon: 'file-lines', phrase: 'pages', content: Pages }),
|
|
24
|
-
search: definePane({ icon: 'search', phrase: 'search', content: Search }),
|
|
25
|
-
language: definePane({
|
|
26
|
-
icon: 'globe',
|
|
27
|
-
phrase: 'language',
|
|
28
|
-
content: Language,
|
|
29
|
-
}),
|
|
30
|
-
other: definePane({
|
|
31
|
-
icon: 'ellipsis-vertical',
|
|
32
|
-
phrase: 'other',
|
|
33
|
-
content: Other,
|
|
34
|
-
}),
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
function getPaneOrder(paneKey: MajorPaneKey) {
|
|
38
|
-
return Object.keys(majorPanes).indexOf(paneKey);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export type MajorPaneKey = keyof typeof majorPanes;
|
|
42
|
-
|
|
43
|
-
export function useMajorPane() {
|
|
44
|
-
const route = useRoute();
|
|
45
|
-
|
|
46
|
-
const activePane = useState<MajorPaneKey>('major-pane', () => {
|
|
47
|
-
switch (route.path) {
|
|
48
|
-
case '/members':
|
|
49
|
-
return 'pages';
|
|
50
|
-
default:
|
|
51
|
-
return 'index';
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
return {
|
|
56
|
-
panes: majorPanes,
|
|
57
|
-
activePane,
|
|
58
|
-
getPaneOrder,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
|
|
3
|
+
import type { MyIconName } from '#my-icons';
|
|
4
|
+
|
|
5
|
+
import Nav from '@app/components/aside/major/panes/nav/Nav.vue';
|
|
6
|
+
import Pages from '@app/components/aside/major/panes/Pages.vue';
|
|
7
|
+
import Search from '@app/components/aside/major/panes/Search.vue';
|
|
8
|
+
import Language from '@app/components/aside/major/panes/Language.vue';
|
|
9
|
+
import Other from '@app/components/aside/major/panes/other/Other.vue';
|
|
10
|
+
|
|
11
|
+
interface MajorPane {
|
|
12
|
+
icon: MyIconName;
|
|
13
|
+
phrase: EruditPhraseId;
|
|
14
|
+
content: Component;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function definePane<TPane extends MajorPane>(pane: TPane) {
|
|
18
|
+
return pane;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const majorPanes = {
|
|
22
|
+
index: definePane({ icon: 'book', phrase: 'index', content: Nav }),
|
|
23
|
+
pages: definePane({ icon: 'file-lines', phrase: 'pages', content: Pages }),
|
|
24
|
+
search: definePane({ icon: 'search', phrase: 'search', content: Search }),
|
|
25
|
+
language: definePane({
|
|
26
|
+
icon: 'globe',
|
|
27
|
+
phrase: 'language',
|
|
28
|
+
content: Language,
|
|
29
|
+
}),
|
|
30
|
+
other: definePane({
|
|
31
|
+
icon: 'ellipsis-vertical',
|
|
32
|
+
phrase: 'other',
|
|
33
|
+
content: Other,
|
|
34
|
+
}),
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
function getPaneOrder(paneKey: MajorPaneKey) {
|
|
38
|
+
return Object.keys(majorPanes).indexOf(paneKey);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type MajorPaneKey = keyof typeof majorPanes;
|
|
42
|
+
|
|
43
|
+
export function useMajorPane() {
|
|
44
|
+
const route = useRoute();
|
|
45
|
+
|
|
46
|
+
const activePane = useState<MajorPaneKey>('major-pane', () => {
|
|
47
|
+
switch (route.path) {
|
|
48
|
+
case '/members':
|
|
49
|
+
return 'pages';
|
|
50
|
+
default:
|
|
51
|
+
return 'index';
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
panes: majorPanes,
|
|
57
|
+
activePane,
|
|
58
|
+
getPaneOrder,
|
|
59
|
+
};
|
|
60
|
+
}
|
package/app/composables/theme.ts
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
const themes = ['auto', 'light', 'dark'] as const;
|
|
2
|
-
|
|
3
|
-
export type Theme = (typeof themes)[number];
|
|
4
|
-
export type BinaryTheme = 'light' | 'dark';
|
|
5
|
-
|
|
6
|
-
export function useTheme() {
|
|
7
|
-
const theme = useState<Theme>('theme', () => {
|
|
8
|
-
return localStorage.getItem('theme') ?? ('auto' as any);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
const binaryTheme = computed(() => {
|
|
12
|
-
return theme.value === 'auto'
|
|
13
|
-
? window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
14
|
-
? 'dark'
|
|
15
|
-
: 'light'
|
|
16
|
-
: theme.value;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
const cycle = () => {
|
|
20
|
-
theme.value =
|
|
21
|
-
themes[(themes.indexOf(theme.value) + 1) % themes.length]!;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
return {
|
|
25
|
-
theme,
|
|
26
|
-
binaryTheme,
|
|
27
|
-
cycle,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
1
|
+
const themes = ['auto', 'light', 'dark'] as const;
|
|
2
|
+
|
|
3
|
+
export type Theme = (typeof themes)[number];
|
|
4
|
+
export type BinaryTheme = 'light' | 'dark';
|
|
5
|
+
|
|
6
|
+
export function useTheme() {
|
|
7
|
+
const theme = useState<Theme>('theme', () => {
|
|
8
|
+
return localStorage.getItem('theme') ?? ('auto' as any);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const binaryTheme = computed(() => {
|
|
12
|
+
return theme.value === 'auto'
|
|
13
|
+
? window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
14
|
+
? 'dark'
|
|
15
|
+
: 'light'
|
|
16
|
+
: theme.value;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const cycle = () => {
|
|
20
|
+
theme.value =
|
|
21
|
+
themes[(themes.indexOf(theme.value) + 1) % themes.length]!;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
theme,
|
|
26
|
+
binaryTheme,
|
|
27
|
+
cycle,
|
|
28
|
+
};
|
|
29
|
+
}
|
package/app/composables/url.ts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import eruditConfig from '#erudit/config';
|
|
2
|
-
|
|
3
|
-
export function useBaseUrlPath() {
|
|
4
|
-
const runtimeConfig = useRuntimeConfig();
|
|
5
|
-
return (path: string) => {
|
|
6
|
-
const baseURL = runtimeConfig.app.baseURL;
|
|
7
|
-
if (path.startsWith(baseURL)) return path;
|
|
8
|
-
else if (path.startsWith('/')) return baseURL + path.substring(1);
|
|
9
|
-
else return path;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function useSiteUrl() {
|
|
14
|
-
const runtimeConfig = useRuntimeConfig();
|
|
15
|
-
const baseUrl = runtimeConfig.app.baseURL;
|
|
16
|
-
const url = useRequestURL();
|
|
17
|
-
|
|
18
|
-
if (!import.meta.dev && eruditConfig.site?.buildUrl)
|
|
19
|
-
return eruditConfig.site.buildUrl + baseUrl.slice(0, -1);
|
|
20
|
-
|
|
21
|
-
return url.origin;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export function usePageUrl() {
|
|
25
|
-
const siteUrl = useSiteUrl();
|
|
26
|
-
const route = useRoute();
|
|
27
|
-
|
|
28
|
-
return computed(() => {
|
|
29
|
-
if (route.path === '/') return siteUrl;
|
|
30
|
-
|
|
31
|
-
return siteUrl + route.path;
|
|
32
|
-
});
|
|
33
|
-
}
|
|
1
|
+
import eruditConfig from '#erudit/config';
|
|
2
|
+
|
|
3
|
+
export function useBaseUrlPath() {
|
|
4
|
+
const runtimeConfig = useRuntimeConfig();
|
|
5
|
+
return (path: string) => {
|
|
6
|
+
const baseURL = runtimeConfig.app.baseURL;
|
|
7
|
+
if (path.startsWith(baseURL)) return path;
|
|
8
|
+
else if (path.startsWith('/')) return baseURL + path.substring(1);
|
|
9
|
+
else return path;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function useSiteUrl() {
|
|
14
|
+
const runtimeConfig = useRuntimeConfig();
|
|
15
|
+
const baseUrl = runtimeConfig.app.baseURL;
|
|
16
|
+
const url = useRequestURL();
|
|
17
|
+
|
|
18
|
+
if (!import.meta.dev && eruditConfig.site?.buildUrl)
|
|
19
|
+
return eruditConfig.site.buildUrl + baseUrl.slice(0, -1);
|
|
20
|
+
|
|
21
|
+
return url.origin;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function usePageUrl() {
|
|
25
|
+
const siteUrl = useSiteUrl();
|
|
26
|
+
const route = useRoute();
|
|
27
|
+
|
|
28
|
+
return computed(() => {
|
|
29
|
+
if (route.path === '/') return siteUrl;
|
|
30
|
+
|
|
31
|
+
return siteUrl + route.path;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
+
import { NO_ALIASES } from '@erudit-js/bitran-elements/aliases/shared';
|
|
3
|
+
|
|
2
4
|
import { type ContentGroupData } from '@shared/content/data/type/group';
|
|
3
5
|
import eruditConfig from '#erudit/config';
|
|
4
6
|
|
|
@@ -8,7 +10,6 @@ import ContentTitle from '@app/components/main/utils/ContentTitle.vue';
|
|
|
8
10
|
import ContentDescription from '@app/components/main/utils/ContentDescription.vue';
|
|
9
11
|
import ContentPopovers from '@app/components/main/utils/ContentPopovers.vue';
|
|
10
12
|
import ContentSection from '@app/components/main/utils/ContentSection.vue';
|
|
11
|
-
import { NO_ALIASES } from '@erudit/shared/bitran/alias';
|
|
12
13
|
import { locationIcon } from '@erudit/shared/icons';
|
|
13
14
|
|
|
14
15
|
const location = useBitranLocation();
|
package/app/pages/members.vue
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="gradient" x1="74.98" y1="423.02" x2="437.02" y2="60.98" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop offset="0" stop-color="#6fa552"/>
|
|
5
|
-
<stop offset="1" stop-color="#4475bc"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
</defs>
|
|
8
|
-
<circle cx="256" cy="256" r="256" fill="url(#gradient)"/>
|
|
9
|
-
<path d="M124.13,354.9c-4.67,0-8.59-1.58-11.74-4.74-3.16-3.16-4.74-7.07-4.74-11.74s1.58-8.59,4.74-11.74c3.16-3.16,7.07-4.74,11.74-4.74h164.84c4.67,0,8.59,1.58,11.74,4.74,3.16,3.16,4.74,7.07,4.74,11.74s-1.58,8.59-4.74,11.74c-3.16,3.16-7.07,4.74-11.74,4.74H124.13ZM124.13,272.48c-4.67,0-8.59-1.58-11.74-4.74-3.16-3.16-4.74-7.07-4.74-11.74s1.58-8.59,4.74-11.74c3.16-3.16,7.07-4.74,11.74-4.74h263.74c4.67,0,8.59,1.58,11.74,4.74,3.16,3.16,4.74,7.07,4.74,11.74s-1.58,8.59-4.74,11.74c-3.16,3.16-7.07,4.74-11.74,4.74H124.13ZM124.13,190.07c-4.67,0-8.59-1.58-11.74-4.74-3.16-3.16-4.74-7.07-4.74-11.74s1.58-8.59,4.74-11.74c3.16-3.16,7.07-4.74,11.74-4.74h263.74c4.67,0,8.59,1.58,11.74,4.74,3.16,3.16,4.74,7.07,4.74,11.74s-1.58,8.59-4.74,11.74c-3.16,3.16-7.07,4.74-11.74,4.74H124.13Z" fill="#fff"/>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="gradient" x1="74.98" y1="423.02" x2="437.02" y2="60.98" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#6fa552"/>
|
|
5
|
+
<stop offset="1" stop-color="#4475bc"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<circle cx="256" cy="256" r="256" fill="url(#gradient)"/>
|
|
9
|
+
<path d="M124.13,354.9c-4.67,0-8.59-1.58-11.74-4.74-3.16-3.16-4.74-7.07-4.74-11.74s1.58-8.59,4.74-11.74c3.16-3.16,7.07-4.74,11.74-4.74h164.84c4.67,0,8.59,1.58,11.74,4.74,3.16,3.16,4.74,7.07,4.74,11.74s-1.58,8.59-4.74,11.74c-3.16,3.16-7.07,4.74-11.74,4.74H124.13ZM124.13,272.48c-4.67,0-8.59-1.58-11.74-4.74-3.16-3.16-4.74-7.07-4.74-11.74s1.58-8.59,4.74-11.74c3.16-3.16,7.07-4.74,11.74-4.74h263.74c4.67,0,8.59,1.58,11.74,4.74,3.16,3.16,4.74,7.07,4.74,11.74s-1.58,8.59-4.74,11.74c-3.16,3.16-7.07,4.74-11.74,4.74H124.13ZM124.13,190.07c-4.67,0-8.59-1.58-11.74-4.74-3.16-3.16-4.74-7.07-4.74-11.74s1.58-8.59,4.74-11.74c3.16-3.16,7.07-4.74,11.74-4.74h263.74c4.67,0,8.59,1.58,11.74,4.74,3.16,3.16,4.74,7.07,4.74,11.74s-1.58,8.59-4.74,11.74c-3.16,3.16-7.07,4.74-11.74,4.74H124.13Z" fill="#fff"/>
|
|
10
10
|
</svg>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="gradient" x1="75" y1="423" x2="437" y2="61" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop offset="0" stop-color="#6fa552"/>
|
|
5
|
-
<stop offset="1" stop-color="#4475bc"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
</defs>
|
|
8
|
-
<circle fill="url(#gradient)" class="cls-2" cx="256" cy="256" r="256"/>
|
|
9
|
-
<path fill="white" d="M385.2,317.4v-91.1l-122.9,61.9c-5.5,2.8-11.4,4.3-17.5,4.3s-12-1.4-17.4-4.3l-126.5-63.9c-3.3-1.7-5.9-4.1-7.9-7s-2.9-6.1-2.9-9.6,1-6.6,2.9-9.6c2-3,4.6-5.4,7.9-7.2l126.5-63.9c2.8-1.5,5.7-2.6,8.6-3.3,2.9-.7,5.9-1,8.9-1s5.9.4,8.9,1c2.9.7,5.8,1.8,8.6,3.3l149.2,75.2c3.1,1.7,5.6,4,7.6,6.9,1.9,2.9,2.9,6.1,2.9,9.8v98.7c0,5-1.8,9.3-5.4,12.9-3.6,3.6-7.8,5.4-12.9,5.4s-9.3-1.8-13-5.4c-3.6-3.6-5.5-7.9-5.5-13h0ZM235.8,388.5c3,.5,5.9.8,8.9.8s5.9-.3,8.9-.8c2.9-.5,5.9-1.6,8.6-3.1l67.9-34.1c6.2-3.1,11.2-7.7,14.9-13.7,3.8-6.1,5.6-12.6,5.6-19.6v-37.9l-88.4,44.6c-5.4,2.9-11.3,4.3-17.4,4.3s-12-1.5-17.5-4.3l-88.4-44.6v37.9c0,7,1.9,13.6,5.6,19.6,3.8,6,8.7,10.6,14.9,13.7l67.9,34.1h0c2.8,1.5,5.7,2.6,8.6,3.1Z"/>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="gradient" x1="75" y1="423" x2="437" y2="61" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#6fa552"/>
|
|
5
|
+
<stop offset="1" stop-color="#4475bc"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<circle fill="url(#gradient)" class="cls-2" cx="256" cy="256" r="256"/>
|
|
9
|
+
<path fill="white" d="M385.2,317.4v-91.1l-122.9,61.9c-5.5,2.8-11.4,4.3-17.5,4.3s-12-1.4-17.4-4.3l-126.5-63.9c-3.3-1.7-5.9-4.1-7.9-7s-2.9-6.1-2.9-9.6,1-6.6,2.9-9.6c2-3,4.6-5.4,7.9-7.2l126.5-63.9c2.8-1.5,5.7-2.6,8.6-3.3,2.9-.7,5.9-1,8.9-1s5.9.4,8.9,1c2.9.7,5.8,1.8,8.6,3.3l149.2,75.2c3.1,1.7,5.6,4,7.6,6.9,1.9,2.9,2.9,6.1,2.9,9.8v98.7c0,5-1.8,9.3-5.4,12.9-3.6,3.6-7.8,5.4-12.9,5.4s-9.3-1.8-13-5.4c-3.6-3.6-5.5-7.9-5.5-13h0ZM235.8,388.5c3,.5,5.9.8,8.9.8s5.9-.3,8.9-.8c2.9-.5,5.9-1.6,8.6-3.1l67.9-34.1c6.2-3.1,11.2-7.7,14.9-13.7,3.8-6.1,5.6-12.6,5.6-19.6v-37.9l-88.4,44.6c-5.4,2.9-11.3,4.3-17.4,4.3s-12-1.5-17.5-4.3l-88.4-44.6v37.9c0,7,1.9,13.6,5.6,19.6,3.8,6,8.7,10.6,14.9,13.7l67.9,34.1h0c2.8,1.5,5.7,2.6,8.6,3.1Z"/>
|
|
10
10
|
</svg>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="gradient" x1="74.98" y1="423.02" x2="437.02" y2="60.98" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop offset="0" stop-color="#6fa552"/>
|
|
5
|
-
<stop offset="1" stop-color="#4475bc"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
</defs>
|
|
8
|
-
<circle cx="256" cy="256" r="256" fill="url(#gradient)"/>
|
|
9
|
-
<path d="M216.29,267.91l129.71-129.71,52.94,52.94-182.66,182.66-103.24-103.24,52.94-52.94,50.3,50.3Z" fill="#fff"/>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="gradient" x1="74.98" y1="423.02" x2="437.02" y2="60.98" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#6fa552"/>
|
|
5
|
+
<stop offset="1" stop-color="#4475bc"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<circle cx="256" cy="256" r="256" fill="url(#gradient)"/>
|
|
9
|
+
<path d="M216.29,267.91l129.71-129.71,52.94,52.94-182.66,182.66-103.24-103.24,52.94-52.94,50.3,50.3Z" fill="#fff"/>
|
|
10
10
|
</svg>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="gradient" x1="74.98" y1="423.02" x2="437.02" y2="60.98" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop offset="0" stop-color="#6fa552"/>
|
|
5
|
-
<stop offset="1" stop-color="#4475bc"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
</defs>
|
|
8
|
-
<circle cx="256" cy="256" r="256" fill="url(#gradient)"/>
|
|
9
|
-
<path d="M271.03,131.48c-2.77-5.75-8.63-9.42-15.07-9.42s-12.24,3.66-15.07,9.42l-33.64,69.21-75.12,11.09c-6.28.94-11.51,5.34-13.44,11.35s-.37,12.66,4.13,17.11l54.51,53.93-12.87,76.22c-1.05,6.28,1.57,12.66,6.75,16.37,5.18,3.71,12.03,4.18,17.68,1.2l67.12-35.83,67.12,35.83c5.65,2.98,12.5,2.56,17.68-1.2,5.18-3.77,7.79-10.1,6.75-16.37l-12.92-76.22,54.51-53.93c4.5-4.45,6.12-11.09,4.13-17.11-1.99-6.02-7.17-10.41-13.44-11.35l-75.17-11.09-33.64-69.21Z" fill="#fff"/>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="gradient" x1="74.98" y1="423.02" x2="437.02" y2="60.98" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#6fa552"/>
|
|
5
|
+
<stop offset="1" stop-color="#4475bc"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<circle cx="256" cy="256" r="256" fill="url(#gradient)"/>
|
|
9
|
+
<path d="M271.03,131.48c-2.77-5.75-8.63-9.42-15.07-9.42s-12.24,3.66-15.07,9.42l-33.64,69.21-75.12,11.09c-6.28.94-11.51,5.34-13.44,11.35s-.37,12.66,4.13,17.11l54.51,53.93-12.87,76.22c-1.05,6.28,1.57,12.66,6.75,16.37,5.18,3.71,12.03,4.18,17.68,1.2l67.12-35.83,67.12,35.83c5.65,2.98,12.5,2.56,17.68-1.2,5.18-3.77,7.79-10.1,6.75-16.37l-12.92-76.22,54.51-53.93c4.5-4.45,6.12-11.09,4.13-17.11-1.99-6.02-7.17-10.41-13.44-11.35l-75.17-11.09-33.64-69.21Z" fill="#fff"/>
|
|
10
10
|
</svg>
|
package/app/public/logotype.svg
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 135 135">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="gradient" x1="19.77" y1="115.23" x2="115.23" y2="19.77" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop offset="0" stop-color="#4475bc"/>
|
|
5
|
-
<stop offset="1" stop-color="#6fa552"/>
|
|
6
|
-
<animateTransform
|
|
7
|
-
attributeName="gradientTransform"
|
|
8
|
-
type="rotate"
|
|
9
|
-
from="0 70 70"
|
|
10
|
-
to="360 70 70"
|
|
11
|
-
dur="5s"
|
|
12
|
-
repeatCount="indefinite"
|
|
13
|
-
/>
|
|
14
|
-
</linearGradient>
|
|
15
|
-
</defs>
|
|
16
|
-
<path d="M95.99,81.04v-20.08l-27.1,13.64c-1.22.62-2.51.94-3.86.94-1.36,0-2.64-.31-3.84-.94l-27.89-14.1c-.73-.38-1.31-.9-1.74-1.55-.43-.65-.65-1.35-.65-2.11,0-.75.21-1.46.64-2.11.43-.66,1.01-1.18,1.74-1.58l27.89-14.09c.61-.33,1.25-.57,1.9-.73.65-.15,1.3-.23,1.96-.23s1.3.08,1.96.23c.65.15,1.28.39,1.9.73l32.89,16.57c.69.38,1.24.89,1.67,1.52.42.63.64,1.35.64,2.15v21.76c0,1.11-.39,2.06-1.18,2.85-.79.79-1.73,1.18-2.84,1.18s-2.06-.4-2.87-1.19c-.8-.8-1.21-1.75-1.21-2.86ZM61.18,96.02l-14.97-7.51c-1.37-.69-2.46-1.7-3.29-3.03-.83-1.33-1.24-2.77-1.24-4.32v-8.36l19.5,9.83c1.22.63,2.51.95,3.86.95s2.64-.32,3.84-.95l19.5-9.83v8.36c0,1.54-.41,2.98-1.24,4.32-.83,1.33-1.92,2.34-3.29,3.03l-14.97,7.51c-.61.34-1.25.58-1.9.69-.65.12-1.3.18-1.96.18s-1.3-.06-1.96-.18c-.65-.12-1.28-.35-1.9-.69ZM19.5,67.5C19.5,36.11,39.79,9.52,67.87,0c-.13,0-.25,0-.37,0C30.22,0,0,30.22,0,67.5s30.22,67.5,67.5,67.5c.13,0,.25,0,.37,0-28.09-9.51-48.37-36.1-48.37-67.49ZM67.93.01c28.18,9.51,48.37,36.1,48.37,67.49s-20.19,57.98-48.37,67.49c37.08-.23,67.07-30.35,67.07-67.49S105.01.24,67.93.01Z" fill="url(#gradient)"/>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 135 135">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="gradient" x1="19.77" y1="115.23" x2="115.23" y2="19.77" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#4475bc"/>
|
|
5
|
+
<stop offset="1" stop-color="#6fa552"/>
|
|
6
|
+
<animateTransform
|
|
7
|
+
attributeName="gradientTransform"
|
|
8
|
+
type="rotate"
|
|
9
|
+
from="0 70 70"
|
|
10
|
+
to="360 70 70"
|
|
11
|
+
dur="5s"
|
|
12
|
+
repeatCount="indefinite"
|
|
13
|
+
/>
|
|
14
|
+
</linearGradient>
|
|
15
|
+
</defs>
|
|
16
|
+
<path d="M95.99,81.04v-20.08l-27.1,13.64c-1.22.62-2.51.94-3.86.94-1.36,0-2.64-.31-3.84-.94l-27.89-14.1c-.73-.38-1.31-.9-1.74-1.55-.43-.65-.65-1.35-.65-2.11,0-.75.21-1.46.64-2.11.43-.66,1.01-1.18,1.74-1.58l27.89-14.09c.61-.33,1.25-.57,1.9-.73.65-.15,1.3-.23,1.96-.23s1.3.08,1.96.23c.65.15,1.28.39,1.9.73l32.89,16.57c.69.38,1.24.89,1.67,1.52.42.63.64,1.35.64,2.15v21.76c0,1.11-.39,2.06-1.18,2.85-.79.79-1.73,1.18-2.84,1.18s-2.06-.4-2.87-1.19c-.8-.8-1.21-1.75-1.21-2.86ZM61.18,96.02l-14.97-7.51c-1.37-.69-2.46-1.7-3.29-3.03-.83-1.33-1.24-2.77-1.24-4.32v-8.36l19.5,9.83c1.22.63,2.51.95,3.86.95s2.64-.32,3.84-.95l19.5-9.83v8.36c0,1.54-.41,2.98-1.24,4.32-.83,1.33-1.92,2.34-3.29,3.03l-14.97,7.51c-.61.34-1.25.58-1.9.69-.65.12-1.3.18-1.96.18s-1.3-.06-1.96-.18c-.65-.12-1.28-.35-1.9-.69ZM19.5,67.5C19.5,36.11,39.79,9.52,67.87,0c-.13,0-.25,0-.37,0C30.22,0,0,30.22,0,67.5s30.22,67.5,67.5,67.5c.13,0,.25,0,.37,0-28.09-9.51-48.37-36.1-48.37-67.49ZM67.93.01c28.18,9.51,48.37,36.1,48.37,67.49s-20.19,57.98-48.37,67.49c37.08-.23,67.07-30.35,67.07-67.49S105.01.24,67.93.01Z" fill="url(#gradient)"/>
|
|
17
17
|
</svg>
|
package/app/public/user.svg
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="gradient" x1="0" y1="500" x2="500" y2="0" gradientUnits="userSpaceOnUse">
|
|
4
|
-
<stop offset="0" stop-color="#bcbcbc"/>
|
|
5
|
-
<stop offset="1" stop-color="#e6e6e6"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
</defs>
|
|
8
|
-
<rect width="500" height="500" fill="url(#gradient)"/>
|
|
9
|
-
<path d="M250,224c-20.62,0-38.28-7.34-52.97-22.03-14.69-14.69-22.03-32.34-22.03-52.97s7.34-38.28,22.03-52.97,32.34-22.03,52.97-22.03,38.28,7.34,52.97,22.03,22.03,32.34,22.03,52.97-7.34,38.28-22.03,52.97c-14.69,14.69-32.34,22.03-52.97,22.03ZM100,374v-52.5c0-10.62,2.73-20.39,8.2-29.3,5.47-8.91,12.73-15.7,21.8-20.39,19.38-9.69,39.06-16.95,59.06-21.8,20-4.84,40.31-7.27,60.94-7.27s40.94,2.42,60.94,7.27c20,4.84,39.69,12.11,59.06,21.8,9.06,4.69,16.33,11.48,21.8,20.39,5.47,8.91,8.2,18.67,8.2,29.3v52.5H100ZM137.5,336.5h225v-15c0-3.44-.86-6.56-2.58-9.37-1.72-2.81-3.98-5-6.8-6.56-16.87-8.44-33.91-14.77-51.09-18.98-17.19-4.22-34.53-6.33-52.03-6.33s-34.84,2.11-52.03,6.33c-17.19,4.22-34.22,10.55-51.09,18.98-2.81,1.56-5.08,3.75-6.8,6.56s-2.58,5.94-2.58,9.37v15ZM250,186.5c10.31,0,19.14-3.67,26.48-11.02,7.34-7.34,11.02-16.17,11.02-26.48s-3.67-19.14-11.02-26.48c-7.34-7.34-16.17-11.02-26.48-11.02s-19.14,3.67-26.48,11.02c-7.34,7.34-11.02,16.17-11.02,26.48s3.67,19.14,11.02,26.48c7.34,7.34,16.17,11.02,26.48,11.02Z" fill="#666"/>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="gradient" x1="0" y1="500" x2="500" y2="0" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#bcbcbc"/>
|
|
5
|
+
<stop offset="1" stop-color="#e6e6e6"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<rect width="500" height="500" fill="url(#gradient)"/>
|
|
9
|
+
<path d="M250,224c-20.62,0-38.28-7.34-52.97-22.03-14.69-14.69-22.03-32.34-22.03-52.97s7.34-38.28,22.03-52.97,32.34-22.03,52.97-22.03,38.28,7.34,52.97,22.03,22.03,32.34,22.03,52.97-7.34,38.28-22.03,52.97c-14.69,14.69-32.34,22.03-52.97,22.03ZM100,374v-52.5c0-10.62,2.73-20.39,8.2-29.3,5.47-8.91,12.73-15.7,21.8-20.39,19.38-9.69,39.06-16.95,59.06-21.8,20-4.84,40.31-7.27,60.94-7.27s40.94,2.42,60.94,7.27c20,4.84,39.69,12.11,59.06,21.8,9.06,4.69,16.33,11.48,21.8,20.39,5.47,8.91,8.2,18.67,8.2,29.3v52.5H100ZM137.5,336.5h225v-15c0-3.44-.86-6.56-2.58-9.37-1.72-2.81-3.98-5-6.8-6.56-16.87-8.44-33.91-14.77-51.09-18.98-17.19-4.22-34.53-6.33-52.03-6.33s-34.84,2.11-52.03,6.33c-17.19,4.22-34.22,10.55-51.09,18.98-2.81,1.56-5.08,3.75-6.8,6.56s-2.58,5.94-2.58,9.37v15ZM250,186.5c10.31,0,19.14-3.67,26.48-11.02,7.34-7.34,11.02-16.17,11.02-26.48s-3.67-19.14-11.02-26.48c-7.34-7.34-16.17-11.02-26.48-11.02s-19.14,3.67-26.48,11.02c-7.34,7.34-11.02,16.17-11.02,26.48s3.67,19.14,11.02,26.48c7.34,7.34,16.17,11.02,26.48,11.02Z" fill="#666"/>
|
|
10
10
|
</svg>
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
// Instant color theme setup
|
|
2
2
|
const theme = localStorage.getItem('theme') ?? 'auto';
|
|
3
|
-
const binaryTheme =
|
|
4
|
-
|
|
3
|
+
const binaryTheme =
|
|
4
|
+
theme === 'auto'
|
|
5
|
+
? window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
6
|
+
? 'dark'
|
|
7
|
+
: 'light'
|
|
8
|
+
: theme;
|
|
9
|
+
document.documentElement.setAttribute('data-theme', binaryTheme);
|