@c-rex/components 0.1.38 → 0.1.39

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 (71) hide show
  1. package/README.md +73 -73
  2. package/package.json +250 -218
  3. package/src/article/article-action-bar.tsx +110 -110
  4. package/src/article/article-content.tsx +18 -46
  5. package/src/autocomplete.tsx +201 -201
  6. package/src/breadcrumb.tsx +124 -124
  7. package/src/carousel/carousel.tsx +353 -353
  8. package/src/check-article-lang.tsx +47 -47
  9. package/src/directoryNodes/directory-tree-context.tsx +388 -0
  10. package/src/directoryNodes/tree-of-content.tsx +68 -67
  11. package/src/documents/result-list.tsx +124 -127
  12. package/src/favorites/bookmark-button.tsx +97 -94
  13. package/src/favorites/favorite-button.tsx +137 -120
  14. package/src/footer/footer-shell.tsx +52 -0
  15. package/src/footer/footer.tsx +7 -0
  16. package/src/footer/legal-links-block.tsx +25 -0
  17. package/src/footer/organization-contact-block.tsx +94 -0
  18. package/src/footer/social-links-block.tsx +38 -0
  19. package/src/footer/types.ts +10 -0
  20. package/src/footer/vcard-footer.tsx +72 -0
  21. package/src/generated/client-components.tsx +1366 -1350
  22. package/src/generated/create-client-request.tsx +116 -113
  23. package/src/generated/create-server-request.tsx +70 -61
  24. package/src/generated/create-suggestions-request.tsx +55 -55
  25. package/src/generated/server-components.tsx +1056 -1056
  26. package/src/generated/suggestions.tsx +302 -299
  27. package/src/icons/file-icon.tsx +8 -8
  28. package/src/icons/flag-icon.tsx +15 -15
  29. package/src/icons/loading.tsx +11 -11
  30. package/src/icons/social-icon.tsx +24 -0
  31. package/src/info/info-card.tsx +43 -0
  32. package/src/info/{info-table.tsx → information-unit-metadata-grid.tsx} +157 -168
  33. package/src/info/shared.tsx +49 -25
  34. package/src/navbar/language-switcher/content-language-switch.tsx +92 -92
  35. package/src/navbar/language-switcher/shared.tsx +33 -33
  36. package/src/navbar/language-switcher/ui-language-switch.tsx +37 -37
  37. package/src/navbar/navbar.tsx +157 -152
  38. package/src/navbar/settings.tsx +62 -62
  39. package/src/navbar/sign-in-out-btns.tsx +35 -35
  40. package/src/navbar/user-menu.tsx +60 -60
  41. package/src/page-wrapper.tsx +54 -31
  42. package/src/render-article.module.css +155 -0
  43. package/src/render-article.tsx +75 -68
  44. package/src/renditions/file-download.tsx +83 -83
  45. package/src/renditions/html.tsx +64 -64
  46. package/src/renditions/image/container.tsx +54 -54
  47. package/src/renditions/image/rendition.tsx +55 -55
  48. package/src/restriction-menu/restriction-menu-container.tsx +117 -53
  49. package/src/restriction-menu/restriction-menu-item.tsx +155 -147
  50. package/src/restriction-menu/restriction-menu.tsx +341 -156
  51. package/src/results/dialog-filter.tsx +166 -166
  52. package/src/results/empty.tsx +15 -15
  53. package/src/results/filter-navbar.tsx +294 -261
  54. package/src/results/filter-sidebar/__tests__/utils.test.ts +129 -0
  55. package/src/results/filter-sidebar/index.tsx +270 -126
  56. package/src/results/filter-sidebar/utils.ts +196 -164
  57. package/src/results/generic/table-result-list.tsx +97 -99
  58. package/src/results/{table-with-images.tsx → information-unit-search-results-card-list.tsx} +125 -127
  59. package/src/results/{cards.tsx → information-unit-search-results-cards.tsx} +99 -99
  60. package/src/results/{table.tsx → information-unit-search-results-table.tsx} +104 -104
  61. package/src/results/pagination.tsx +81 -81
  62. package/src/results/summary.ts +30 -0
  63. package/src/results/utils.ts +54 -54
  64. package/src/search-input.tsx +70 -70
  65. package/src/share-button.tsx +49 -49
  66. package/src/stores/favorites-store.ts +88 -88
  67. package/src/stores/highlight-store.ts +15 -15
  68. package/src/stores/language-store.ts +14 -14
  69. package/src/stores/restriction-store.ts +11 -11
  70. package/src/stores/search-settings-store.ts +68 -64
  71. package/src/info/set-available-versions.tsx +0 -19
@@ -1,62 +1,62 @@
1
- import {
2
- DropdownMenu,
3
- DropdownMenuContent,
4
- DropdownMenuLabel,
5
- DropdownMenuPortal,
6
- DropdownMenuSeparator,
7
- DropdownMenuSub,
8
- DropdownMenuSubContent,
9
- DropdownMenuSubTrigger,
10
- DropdownMenuTrigger,
11
- } from "@c-rex/ui/dropdown-menu"
12
- import { Settings } from "lucide-react";
13
- import { useTranslations } from "next-intl";
14
- import { FC } from 'react';
15
- import { ContentLanguageSwitch } from "./language-switcher/content-language-switch";
16
- import { UILanguageSwitch } from "./language-switcher/ui-language-switch";
17
- import { CrexSDK } from "@c-rex/core/sdk";
18
-
19
- export const SettingsMenu: FC = () => {
20
- const t = useTranslations();
21
- const sdk = new CrexSDK();
22
- const clientConfigs = sdk.getClientConfig();
23
-
24
- return (
25
- <DropdownMenu>
26
- <DropdownMenuTrigger className="block">
27
- <Settings />
28
- </DropdownMenuTrigger>
29
- <DropdownMenuContent align="end" sideOffset={10} alignOffset={0}>
30
- <DropdownMenuLabel>{t("accountSettings.accountSettings")}</DropdownMenuLabel>
31
- <DropdownMenuSeparator />
32
-
33
- <DropdownMenuSub>
34
- <DropdownMenuSubTrigger>
35
- <span>{t("accountSettings.contentLanguage")}</span>
36
- </DropdownMenuSubTrigger>
37
-
38
- <DropdownMenuPortal>
39
- <DropdownMenuSubContent>
40
- <ContentLanguageSwitch
41
- contentLangDefault={clientConfigs.languageSwitcher.default}
42
- />
43
- </DropdownMenuSubContent>
44
- </DropdownMenuPortal>
45
- </DropdownMenuSub>
46
-
47
-
48
- <DropdownMenuSub>
49
- <DropdownMenuSubTrigger>
50
- <span>{t("accountSettings.uiLanguage")}</span>
51
- </DropdownMenuSubTrigger>
52
-
53
- <DropdownMenuPortal>
54
- <DropdownMenuSubContent>
55
- <UILanguageSwitch />
56
- </DropdownMenuSubContent>
57
- </DropdownMenuPortal>
58
- </DropdownMenuSub>
59
- </DropdownMenuContent>
60
- </DropdownMenu>
61
- );
62
- };
1
+ import {
2
+ DropdownMenu,
3
+ DropdownMenuContent,
4
+ DropdownMenuLabel,
5
+ DropdownMenuPortal,
6
+ DropdownMenuSeparator,
7
+ DropdownMenuSub,
8
+ DropdownMenuSubContent,
9
+ DropdownMenuSubTrigger,
10
+ DropdownMenuTrigger,
11
+ } from "@c-rex/ui/dropdown-menu"
12
+ import { Settings } from "lucide-react";
13
+ import { useTranslations } from "next-intl";
14
+ import { FC } from 'react';
15
+ import { ContentLanguageSwitch } from "./language-switcher/content-language-switch";
16
+ import { UILanguageSwitch } from "./language-switcher/ui-language-switch";
17
+ import { CrexSDK } from "@c-rex/core/sdk";
18
+
19
+ export const SettingsMenu: FC = () => {
20
+ const t = useTranslations();
21
+ const sdk = new CrexSDK();
22
+ const clientConfigs = sdk.getClientConfig();
23
+
24
+ return (
25
+ <DropdownMenu>
26
+ <DropdownMenuTrigger className="block">
27
+ <Settings />
28
+ </DropdownMenuTrigger>
29
+ <DropdownMenuContent align="end" sideOffset={10} alignOffset={0}>
30
+ <DropdownMenuLabel>{t("accountSettings.accountSettings")}</DropdownMenuLabel>
31
+ <DropdownMenuSeparator />
32
+
33
+ <DropdownMenuSub>
34
+ <DropdownMenuSubTrigger>
35
+ <span>{t("accountSettings.contentLanguage")}</span>
36
+ </DropdownMenuSubTrigger>
37
+
38
+ <DropdownMenuPortal>
39
+ <DropdownMenuSubContent>
40
+ <ContentLanguageSwitch
41
+ contentLangDefault={clientConfigs.languageSwitcher.default}
42
+ />
43
+ </DropdownMenuSubContent>
44
+ </DropdownMenuPortal>
45
+ </DropdownMenuSub>
46
+
47
+
48
+ <DropdownMenuSub>
49
+ <DropdownMenuSubTrigger>
50
+ <span>{t("accountSettings.uiLanguage")}</span>
51
+ </DropdownMenuSubTrigger>
52
+
53
+ <DropdownMenuPortal>
54
+ <DropdownMenuSubContent>
55
+ <UILanguageSwitch />
56
+ </DropdownMenuSubContent>
57
+ </DropdownMenuPortal>
58
+ </DropdownMenuSub>
59
+ </DropdownMenuContent>
60
+ </DropdownMenu>
61
+ );
62
+ };
@@ -1,35 +1,35 @@
1
- "use client"
2
-
3
- import React, { useState } from "react";
4
- import { signIn } from "next-auth/react";
5
- import { Button } from "@c-rex/ui/button";
6
- import { useTranslations } from "next-intl";
7
-
8
- export const SignInBtn = () => {
9
- const t = useTranslations("user")
10
- const [isLoading, setIsLoading] = useState<boolean>(false)
11
-
12
- const handleSignIn = () => {
13
- setIsLoading(true);
14
- signIn("crex", { prompt: "login", callbackUrl: "/" });
15
- }
16
-
17
- return (
18
- <Button
19
- className="gap-2 px-5 md:flex"
20
- variant="default"
21
- size="sm"
22
- rounded="full"
23
- disabled={isLoading}
24
- onClick={handleSignIn}
25
- >
26
- {isLoading ? (
27
- <div className="flex items-center justify-center py-4">
28
- <div className="animate-spin rounded-full h-5 w-5 border-2 border-gray-300 border-t-gray-950" />
29
- </div>
30
- ) : (
31
- <span>{t("signIn")}</span>
32
- )}
33
- </Button>
34
- );
35
- }
1
+ "use client"
2
+
3
+ import React, { useState } from "react";
4
+ import { signIn } from "next-auth/react";
5
+ import { Button } from "@c-rex/ui/button";
6
+ import { useTranslations } from "next-intl";
7
+
8
+ export const SignInBtn = () => {
9
+ const t = useTranslations("user")
10
+ const [isLoading, setIsLoading] = useState<boolean>(false)
11
+
12
+ const handleSignIn = () => {
13
+ setIsLoading(true);
14
+ signIn("crex", { prompt: "login", callbackUrl: "/" });
15
+ }
16
+
17
+ return (
18
+ <Button
19
+ className="gap-2 px-5 md:flex"
20
+ variant="default"
21
+ size="sm"
22
+ rounded="full"
23
+ disabled={isLoading}
24
+ onClick={handleSignIn}
25
+ >
26
+ {isLoading ? (
27
+ <div className="flex items-center justify-center py-4">
28
+ <div className="animate-spin rounded-full h-5 w-5 border-2 border-gray-300 border-t-gray-950" />
29
+ </div>
30
+ ) : (
31
+ <span>{t("signIn")}</span>
32
+ )}
33
+ </Button>
34
+ );
35
+ }
@@ -1,60 +1,60 @@
1
- "use client"
2
- import { FC } from 'react';
3
- import {
4
- DropdownMenu,
5
- DropdownMenuContent,
6
- DropdownMenuGroup,
7
- DropdownMenuItem,
8
- DropdownMenuLabel,
9
- DropdownMenuSeparator,
10
- DropdownMenuTrigger,
11
- } from "@c-rex/ui/dropdown-menu"
12
- import { CircleUser } from "lucide-react";
13
- import { useTranslations } from "next-intl";
14
- import { signOut } from "next-auth/react";
15
-
16
-
17
- interface Props {
18
- session: any
19
- OIDCEndPoint: string
20
- }
21
-
22
-
23
- export const UserMenu: FC<Props> = ({ session, OIDCEndPoint }) => {
24
- const t = useTranslations();
25
-
26
- return (
27
- <DropdownMenu>
28
- <DropdownMenuTrigger>
29
- <CircleUser />
30
- </DropdownMenuTrigger>
31
- <DropdownMenuContent align="end" sideOffset={10} alignOffset={0}>
32
- <DropdownMenuLabel>
33
- {t("user.welcome", { userName: session.user.name.split(" ")[0] })}
34
- </DropdownMenuLabel>
35
- <DropdownMenuLabel className='font-normal text-gray-600'>{session.user.email}</DropdownMenuLabel>
36
- <DropdownMenuSeparator />
37
- <DropdownMenuGroup>
38
- <DropdownMenuItem>
39
- <a href={`${OIDCEndPoint}oidc/Profile`} target="_blank" rel="noreferrer">
40
- Profile settings
41
- </a>
42
- </DropdownMenuItem>
43
-
44
- <DropdownMenuItem>
45
- <a href={`${OIDCEndPoint}oidc/Profile/ChangePassword`} target="_blank" rel="noreferrer">
46
- Change password
47
- </a>
48
- </DropdownMenuItem>
49
-
50
- <DropdownMenuItem
51
- onClick={() => signOut({ callbackUrl: "/api/auth/logout" })}
52
- className='text-red-500 focus:text-red-500'
53
- >
54
- {t("user.signOut")}
55
- </DropdownMenuItem>
56
- </DropdownMenuGroup>
57
- </DropdownMenuContent>
58
- </DropdownMenu>
59
- );
60
- };
1
+ "use client"
2
+ import { FC } from 'react';
3
+ import {
4
+ DropdownMenu,
5
+ DropdownMenuContent,
6
+ DropdownMenuGroup,
7
+ DropdownMenuItem,
8
+ DropdownMenuLabel,
9
+ DropdownMenuSeparator,
10
+ DropdownMenuTrigger,
11
+ } from "@c-rex/ui/dropdown-menu"
12
+ import { CircleUser } from "lucide-react";
13
+ import { useTranslations } from "next-intl";
14
+ import { signOut } from "next-auth/react";
15
+
16
+
17
+ interface Props {
18
+ session: any
19
+ OIDCEndPoint: string
20
+ }
21
+
22
+
23
+ export const UserMenu: FC<Props> = ({ session, OIDCEndPoint }) => {
24
+ const t = useTranslations();
25
+
26
+ return (
27
+ <DropdownMenu>
28
+ <DropdownMenuTrigger>
29
+ <CircleUser />
30
+ </DropdownMenuTrigger>
31
+ <DropdownMenuContent align="end" sideOffset={10} alignOffset={0}>
32
+ <DropdownMenuLabel>
33
+ {t("user.welcome", { userName: session.user.name.split(" ")[0] })}
34
+ </DropdownMenuLabel>
35
+ <DropdownMenuLabel className='font-normal text-gray-600'>{session.user.email}</DropdownMenuLabel>
36
+ <DropdownMenuSeparator />
37
+ <DropdownMenuGroup>
38
+ <DropdownMenuItem>
39
+ <a href={`${OIDCEndPoint}oidc/Profile`} target="_blank" rel="noreferrer">
40
+ Profile settings
41
+ </a>
42
+ </DropdownMenuItem>
43
+
44
+ <DropdownMenuItem>
45
+ <a href={`${OIDCEndPoint}oidc/Profile/ChangePassword`} target="_blank" rel="noreferrer">
46
+ Change password
47
+ </a>
48
+ </DropdownMenuItem>
49
+
50
+ <DropdownMenuItem
51
+ onClick={() => signOut({ callbackUrl: "/api/auth/logout" })}
52
+ className='text-red-500 focus:text-red-500'
53
+ >
54
+ {t("user.signOut")}
55
+ </DropdownMenuItem>
56
+ </DropdownMenuGroup>
57
+ </DropdownMenuContent>
58
+ </DropdownMenu>
59
+ );
60
+ };
@@ -1,31 +1,54 @@
1
- import { ComponentProps, ReactNode } from "react";
2
- import { NavBar } from './navbar/navbar';
3
- import { MultiSidebarProvider } from "@c-rex/ui/sidebar";
4
- import { RestrictionMenuContainer } from "./restriction-menu/restriction-menu-container";
5
-
6
- type Props = {
7
- children: ReactNode;
8
- showRestrictMenu?: boolean
9
- } & Partial<ComponentProps<typeof NavBar>> & Partial<ComponentProps<typeof RestrictionMenuContainer>>;
10
-
11
- export const PageWrapper = ({
12
- children,
13
- showInput = false,
14
- showPkgFilter = false,
15
- showRestrictMenu = false,
16
- ...props
17
- }: Props) => {
18
- return (
19
- <MultiSidebarProvider>
20
- <NavBar showInput={showInput} showPkgFilter={showPkgFilter} {...props} />
21
-
22
- {showRestrictMenu && (
23
- <div className="flex-1 container pt-6">
24
- <RestrictionMenuContainer {...props} />
25
- </div>
26
- )}
27
-
28
- {children}
29
- </MultiSidebarProvider>
30
- );
31
- }
1
+ import { ComponentProps, ReactNode } from "react";
2
+ import { NavBar } from './navbar/navbar';
3
+ import { MultiSidebarProvider } from "@c-rex/ui/sidebar";
4
+ import { RestrictionMenuContainer } from "./restriction-menu/restriction-menu-container";
5
+ import { Footer } from "./footer/footer";
6
+
7
+ type Props = {
8
+ children: ReactNode;
9
+ showRestrictMenu?: boolean;
10
+ showFooter?: boolean;
11
+ renderFooter?: () => ReactNode;
12
+ } & Partial<ComponentProps<typeof NavBar>> & Partial<ComponentProps<typeof RestrictionMenuContainer>>;
13
+
14
+ export const PageWrapper = ({
15
+ children,
16
+ showInput = false,
17
+ showPkgFilter = false,
18
+ showRestrictMenu = false,
19
+ showFooter = true,
20
+ renderFooter,
21
+ restrictField,
22
+ requestType,
23
+ itemsToRender,
24
+ onlyUsedEntries = true,
25
+ enableHierarchy = false,
26
+ fetchMode = "deferred",
27
+ queryParams,
28
+ navigationMenuListClassName,
29
+ ...props
30
+ }: Props) => {
31
+ return (
32
+ <MultiSidebarProvider>
33
+ <NavBar showInput={showInput} showPkgFilter={showPkgFilter} {...props} />
34
+
35
+ {showRestrictMenu && (
36
+ <div className="flex-1 container pt-6">
37
+ <RestrictionMenuContainer
38
+ restrictField={restrictField ?? "informationSubjects"}
39
+ requestType={requestType ?? "InformationSubjectsGetAllClient"}
40
+ itemsToRender={itemsToRender}
41
+ onlyUsedEntries={onlyUsedEntries}
42
+ enableHierarchy={enableHierarchy}
43
+ fetchMode={fetchMode}
44
+ queryParams={queryParams}
45
+ navigationMenuListClassName={navigationMenuListClassName}
46
+ />
47
+ </div>
48
+ )}
49
+
50
+ {children}
51
+ {showFooter && (renderFooter ? renderFooter() : <Footer showOrganizationLogo={false} />)}
52
+ </MultiSidebarProvider>
53
+ );
54
+ }
@@ -0,0 +1,155 @@
1
+ .idsContent {
2
+ line-height: 1.6;
3
+ color: hsl(var(--foreground));
4
+ }
5
+
6
+ .idsContent :global(.title),
7
+ .idsContent :global(.topictitle1),
8
+ .idsContent h1 {
9
+ font-size: 1.875rem;
10
+ line-height: 1.2;
11
+ font-weight: 700;
12
+ margin: 0 0 1rem;
13
+ }
14
+
15
+ .idsContent :global(.topictitle2),
16
+ .idsContent h2 {
17
+ font-size: 1.5rem;
18
+ line-height: 1.25;
19
+ font-weight: 600;
20
+ margin: 1.25rem 0 0.5rem;
21
+ }
22
+
23
+ .idsContent :global(.topictitle3),
24
+ .idsContent h3,
25
+ .idsContent h4 {
26
+ line-height: 1.3;
27
+ font-weight: 600;
28
+ margin: 1rem 0 0.5rem;
29
+ }
30
+
31
+ .idsContent :global(.body),
32
+ .idsContent :global(.conbody),
33
+ .idsContent :global(.topic),
34
+ .idsContent :global(.concept),
35
+ .idsContent :global(.task),
36
+ .idsContent :global(.reference),
37
+ .idsContent :global(.troubleshooting) {
38
+ margin-top: 0.75rem;
39
+ }
40
+
41
+ .idsContent p,
42
+ .idsContent :global(.p) {
43
+ margin: 0.5rem 0;
44
+ }
45
+
46
+ .idsContent :global(.shortdesc) {
47
+ margin: 0.5rem 0 1rem;
48
+ color: hsl(var(--muted-foreground));
49
+ }
50
+
51
+ .idsContent section,
52
+ .idsContent :global(.section) {
53
+ margin: 1rem 0;
54
+ }
55
+
56
+ .idsContent :global(.sectiontitle) {
57
+ font-weight: 600;
58
+ margin: 0.5rem 0;
59
+ }
60
+
61
+ .idsContent dl,
62
+ .idsContent :global(.dl) {
63
+ margin: 1rem 0;
64
+ }
65
+
66
+ .idsContent dt,
67
+ .idsContent :global(.dt),
68
+ .idsContent :global(.dlterm) {
69
+ font-weight: 600;
70
+ margin-top: 0.75rem;
71
+ }
72
+
73
+ .idsContent dd,
74
+ .idsContent :global(.dd),
75
+ .idsContent :global(.dlentry) {
76
+ margin: 0.25rem 0 0.75rem 1.25rem;
77
+ }
78
+
79
+ .idsContent ul,
80
+ .idsContent ol,
81
+ .idsContent :global(.ul),
82
+ .idsContent :global(.ol),
83
+ .idsContent :global(.sl) {
84
+ margin: 0.75rem 0 0.75rem 1.5rem;
85
+ }
86
+
87
+ .idsContent li,
88
+ .idsContent :global(.li),
89
+ .idsContent :global(.sli) {
90
+ margin: 0.25rem 0;
91
+ }
92
+
93
+ .idsContent code,
94
+ .idsContent :global(.codeph) {
95
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
96
+ background: hsl(var(--muted));
97
+ border-radius: 0.25rem;
98
+ padding: 0.1rem 0.25rem;
99
+ font-size: 0.9em;
100
+ }
101
+
102
+ .idsContent pre,
103
+ .idsContent :global(.codeblock) {
104
+ overflow-x: auto;
105
+ background: hsl(var(--muted));
106
+ border-radius: 0.375rem;
107
+ padding: 0.75rem;
108
+ }
109
+
110
+ .idsContent table,
111
+ .idsContent :global(.table),
112
+ .idsContent :global(.simpletable) {
113
+ width: 100%;
114
+ border-collapse: collapse;
115
+ margin: 1rem 0;
116
+ }
117
+
118
+ .idsContent th,
119
+ .idsContent td,
120
+ .idsContent :global(.entry),
121
+ .idsContent :global(.stentry) {
122
+ border: 1px solid hsl(var(--border));
123
+ padding: 0.5rem;
124
+ text-align: left;
125
+ vertical-align: top;
126
+ }
127
+
128
+ .idsContent :global(.note) {
129
+ border-left: 3px solid hsl(var(--border));
130
+ padding-left: 0.75rem;
131
+ margin: 0.75rem 0;
132
+ }
133
+
134
+ .idsContent :global(.notetitle) {
135
+ font-weight: 600;
136
+ margin-bottom: 0.25rem;
137
+ }
138
+
139
+ .idsContent :global(.fig),
140
+ .idsContent figure {
141
+ margin: 1rem 0;
142
+ }
143
+
144
+ .idsContent :global(.figcap),
145
+ .idsContent figcaption {
146
+ color: hsl(var(--muted-foreground));
147
+ font-size: 0.9rem;
148
+ margin-top: 0.25rem;
149
+ }
150
+
151
+ .idsContent img,
152
+ .idsContent :global(.image) {
153
+ max-width: 100%;
154
+ height: auto;
155
+ }