@stack-spot/portal-components 2.27.1 → 2.27.2
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/CHANGELOG.md +635 -628
- package/dist/components/AnimatedHeight.d.ts +1 -1
- package/dist/components/AnimatedHeight.js +26 -26
- package/dist/components/AsyncContent.d.ts +1 -1
- package/dist/components/AsyncContent.js +1 -1
- package/dist/components/BannerWarning.d.ts +1 -1
- package/dist/components/BannerWarning.js +1 -1
- package/dist/components/Breadcrumb/index.d.ts +2 -2
- package/dist/components/Breadcrumb/index.js +1 -1
- package/dist/components/Breadcrumb/styled.js +31 -31
- package/dist/components/ButtonLoading.d.ts +1 -1
- package/dist/components/ButtonLoading.js +1 -1
- package/dist/components/ChatBot.d.ts +1 -1
- package/dist/components/ChatBot.js +1 -1
- package/dist/components/ContentValidateFilter.d.ts +1 -1
- package/dist/components/ContentValidateFilter.js +1 -1
- package/dist/components/FadingOverflow.d.ts +1 -1
- package/dist/components/FadingOverflow.js +69 -69
- package/dist/components/FileTreeView/More.d.ts +1 -1
- package/dist/components/FileTreeView/More.js +1 -1
- package/dist/components/FileTreeView/index.d.ts +1 -1
- package/dist/components/FileTreeView/index.js +1 -1
- package/dist/components/InfiniteScroll.d.ts +1 -1
- package/dist/components/InfiniteScroll.js +1 -1
- package/dist/components/InfoMaintenanceBanner.d.ts +1 -1
- package/dist/components/InfoMaintenanceBanner.js +2 -2
- package/dist/components/LazyMarkdown/BlockquoteMd.d.ts +1 -1
- package/dist/components/LazyMarkdown/BlockquoteMd.js +1 -1
- package/dist/components/LazyMarkdown/CodeViewer.d.ts +1 -1
- package/dist/components/LazyMarkdown/CodeViewer.js +76 -76
- package/dist/components/LazyMarkdown/Markdown.d.ts +1 -1
- package/dist/components/LazyMarkdown/Markdown.js +1 -1
- package/dist/components/LazyMarkdown/MarkdownButton.d.ts +1 -1
- package/dist/components/LazyMarkdown/MarkdownButton.js +1 -1
- package/dist/components/LazyMarkdown/Video.d.ts +1 -1
- package/dist/components/LazyMarkdown/Video.js +1 -1
- package/dist/components/LazyMarkdown/index.d.ts +1 -1
- package/dist/components/LazyMarkdown/index.js +1 -1
- package/dist/components/Placeholder.d.ts +7 -3
- package/dist/components/Placeholder.d.ts.map +1 -1
- package/dist/components/Placeholder.js +3 -3
- package/dist/components/Placeholder.js.map +1 -1
- package/dist/components/ScrollView.js +16 -16
- package/dist/components/Select/BadgeItem.d.ts +1 -1
- package/dist/components/Select/BadgeItem.js +1 -1
- package/dist/components/Select/ClearInput.d.ts +1 -1
- package/dist/components/Select/ClearInput.js +1 -1
- package/dist/components/Select/CloseItem.d.ts +1 -1
- package/dist/components/Select/CloseItem.js +1 -1
- package/dist/components/Select/CreatableSelect.js +1 -1
- package/dist/components/Select/CustomMenu.d.ts +1 -1
- package/dist/components/Select/CustomMenu.js +1 -1
- package/dist/components/Select/LabelItem.d.ts +1 -1
- package/dist/components/Select/LabelItem.js +1 -1
- package/dist/components/Select/MultiValue.d.ts +1 -1
- package/dist/components/Select/MultiValue.js +1 -1
- package/dist/components/Select/SelectInfiniteScroll.d.ts +1 -1
- package/dist/components/Select/SelectInfiniteScroll.js +1 -1
- package/dist/components/Select/SelectSearch.d.ts +1 -1
- package/dist/components/Select/SelectSearch.js +1 -1
- package/dist/components/SelectionList.d.ts +1 -1
- package/dist/components/SelectionList.js +61 -61
- package/dist/components/StatusCircle.d.ts +1 -1
- package/dist/components/StatusCircle.js +6 -6
- package/dist/components/Stepper/Navigation.js +4 -4
- package/dist/components/Stepper/Step.js +3 -3
- package/dist/components/Stepper/Stepper.js +6 -6
- package/dist/components/Stepper/headers.js +22 -22
- package/dist/components/Table/HeaderItem.js +1 -1
- package/dist/components/Table/SettingsVerticalMenu.d.ts +1 -1
- package/dist/components/Table/SettingsVerticalMenu.js +1 -1
- package/dist/components/Table/StyledLinkTable.d.ts +1 -1
- package/dist/components/Table/StyledLinkTable.js +5 -5
- package/dist/components/Table/TableData.d.ts +1 -1
- package/dist/components/Table/TableData.js +25 -25
- package/dist/components/TimelineSection.d.ts +1 -1
- package/dist/components/TimelineSection.js +14 -14
- package/dist/components/error/ErrorFeedback.d.ts +1 -1
- package/dist/components/error/ErrorFeedback.js +35 -35
- package/dist/components/error/NotFound.d.ts +1 -1
- package/dist/components/error/NotFound.js +1 -1
- package/dist/components/error/UnderMaintenance.d.ts +1 -1
- package/dist/components/error/UnderMaintenance.js +1 -1
- package/dist/components/form/Form/Form.d.ts +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/FormGroup.d.ts +2 -2
- package/dist/components/form/Form/FormGroup.js +1 -1
- package/dist/components/form/SearchInput.d.ts +1 -1
- package/dist/components/form/SearchInput.js +1 -1
- package/dist/components/form/Select/CustomSelect.d.ts +1 -1
- package/dist/components/form/Select/CustomSelect.js +1 -1
- package/dist/components/form/Select/DetailedSelect.d.ts +1 -1
- package/dist/components/form/Select/DetailedSelect.js +1 -1
- package/dist/components/form/Select/Select.d.ts +1 -1
- package/dist/components/form/Select/Select.js +1 -1
- package/dist/components/form/Select/styled.js +161 -161
- package/dist/components/form/Select/utils.js +1 -1
- package/dist/components/notification/NotificationComponent.d.ts +1 -1
- package/dist/components/notification/NotificationComponent.js +54 -54
- package/dist/components/notification/NotificationItem.d.ts +1 -1
- package/dist/components/notification/NotificationItem.d.ts.map +1 -1
- package/dist/components/notification/NotificationItem.js +8 -2
- package/dist/components/notification/NotificationItem.js.map +1 -1
- package/dist/components/notification/NotificationList.d.ts +1 -1
- package/dist/components/notification/NotificationList.d.ts.map +1 -1
- package/dist/components/notification/NotificationList.js +44 -44
- package/dist/components/notification/NotificationList.js.map +1 -1
- package/dist/components/notification/NotificationPlaceholder.d.ts +1 -1
- package/dist/components/notification/NotificationPlaceholder.d.ts.map +1 -1
- package/dist/components/notification/NotificationPlaceholder.js +2 -2
- package/dist/components/notification/NotificationPlaceholder.js.map +1 -1
- package/dist/containers/NotificationsPage.d.ts +1 -1
- package/dist/containers/NotificationsPage.js +10 -10
- package/dist/context/anchor.d.ts +1 -1
- package/dist/context/anchor.js +1 -1
- package/dist/context/loading.d.ts +1 -1
- package/dist/context/loading.js +1 -1
- package/dist/context/notification/context.d.ts +1 -1
- package/dist/context/notification/context.js +1 -1
- package/dist/hooks/date.js +1 -1
- package/dist/hooks/service-now.js +28 -28
- package/dist/svg/AI.d.ts +1 -1
- package/dist/svg/AI.js +1 -1
- package/dist/svg/CS.d.ts +1 -1
- package/dist/svg/CS.js +1 -1
- package/dist/svg/EDP.d.ts +1 -1
- package/dist/svg/EDP.js +1 -1
- package/dist/svg/Forbidden.d.ts +1 -1
- package/dist/svg/Forbidden.js +1 -1
- package/dist/svg/GenericPlaceholder.d.ts +4 -2
- package/dist/svg/GenericPlaceholder.d.ts.map +1 -1
- package/dist/svg/GenericPlaceholder.js +2 -2
- package/dist/svg/GenericPlaceholder.js.map +1 -1
- package/dist/svg/HUB.d.ts +1 -1
- package/dist/svg/HUB.js +1 -1
- package/dist/svg/Logo.d.ts +1 -1
- package/dist/svg/Logo.js +1 -1
- package/dist/svg/MiniLogo.d.ts +1 -1
- package/dist/svg/MiniLogo.js +1 -1
- package/dist/svg/NotFound.d.ts +1 -1
- package/dist/svg/NotFound.js +1 -1
- package/dist/svg/ServerError.d.ts +1 -1
- package/dist/svg/ServerError.js +1 -1
- package/dist/svg/Unauthenticated.d.ts +1 -1
- package/dist/svg/Unauthenticated.js +1 -1
- package/package.json +80 -80
- package/readme.md +66 -66
- package/src/components/AnimatedHeight.tsx +174 -174
- package/src/components/AsyncContent.tsx +78 -78
- package/src/components/BannerWarning.tsx +91 -91
- package/src/components/Breadcrumb/index.tsx +76 -76
- package/src/components/Breadcrumb/styled.ts +37 -37
- package/src/components/ButtonLoading.tsx +29 -29
- package/src/components/ChatBot.tsx +82 -82
- package/src/components/ContentValidateFilter.tsx +15 -15
- package/src/components/FadingOverflow.tsx +265 -265
- package/src/components/FileTreeView/More.tsx +114 -114
- package/src/components/FileTreeView/index.tsx +186 -186
- package/src/components/InfiniteScroll.tsx +24 -24
- package/src/components/InfoMaintenanceBanner.tsx +29 -29
- package/src/components/LazyMarkdown/BlockquoteMd.tsx +107 -107
- package/src/components/LazyMarkdown/CodeViewer.tsx +161 -161
- package/src/components/LazyMarkdown/Markdown.tsx +122 -122
- package/src/components/LazyMarkdown/MarkdownButton.tsx +24 -24
- package/src/components/LazyMarkdown/Video.tsx +13 -13
- package/src/components/LazyMarkdown/index.tsx +21 -21
- package/src/components/Placeholder.tsx +123 -118
- package/src/components/ScrollView.tsx +57 -57
- package/src/components/Select/BadgeItem.tsx +58 -58
- package/src/components/Select/ClearInput.tsx +24 -24
- package/src/components/Select/CloseItem.tsx +38 -38
- package/src/components/Select/CreatableSelect.tsx +155 -155
- package/src/components/Select/CustomMenu.tsx +16 -16
- package/src/components/Select/LabelItem.tsx +8 -8
- package/src/components/Select/MultiValue.tsx +49 -49
- package/src/components/Select/SelectInfiniteScroll.tsx +82 -82
- package/src/components/Select/SelectSearch.tsx +195 -195
- package/src/components/Select/index.tsx +7 -7
- package/src/components/Select/types.ts +8 -8
- package/src/components/SelectionList.tsx +427 -427
- package/src/components/StatusCircle.tsx +67 -67
- package/src/components/Stepper/Navigation.tsx +97 -97
- package/src/components/Stepper/Step.tsx +30 -30
- package/src/components/Stepper/Stepper.tsx +113 -113
- package/src/components/Stepper/headers.tsx +64 -64
- package/src/components/Stepper/index.ts +3 -3
- package/src/components/Table/HeaderItem.tsx +52 -52
- package/src/components/Table/SettingsVerticalMenu.tsx +50 -50
- package/src/components/Table/StyledLinkTable.tsx +22 -22
- package/src/components/Table/TableData.tsx +251 -251
- package/src/components/Table/index.tsx +2 -2
- package/src/components/TimelineSection.tsx +66 -66
- package/src/components/error/ErrorFeedback.tsx +217 -217
- package/src/components/error/NotFound.tsx +24 -24
- package/src/components/error/UnderMaintenance.tsx +30 -30
- package/src/components/error/index.ts +4 -4
- package/src/components/form/Form/Form.tsx +101 -101
- package/src/components/form/Form/FormGroup.tsx +221 -221
- package/src/components/form/Form/index.ts +2 -2
- package/src/components/form/SearchInput.tsx +69 -69
- package/src/components/form/Select/CustomSelect.tsx +232 -232
- package/src/components/form/Select/DetailedSelect.tsx +85 -85
- package/src/components/form/Select/Select.tsx +67 -67
- package/src/components/form/Select/index.ts +4 -4
- package/src/components/form/Select/styled.ts +165 -165
- package/src/components/form/Select/types.ts +112 -112
- package/src/components/form/Select/utils.tsx +28 -28
- package/src/components/notification/NotificationComponent.tsx +340 -340
- package/src/components/notification/NotificationItem.tsx +345 -337
- package/src/components/notification/NotificationList.tsx +179 -178
- package/src/components/notification/NotificationPlaceholder.tsx +44 -43
- package/src/components/notification/types.ts +72 -72
- package/src/containers/NotificationsPage.tsx +119 -119
- package/src/context/anchor.tsx +37 -37
- package/src/context/loading.tsx +36 -36
- package/src/context/notification/LazyNotificationList.ts +103 -103
- package/src/context/notification/NotificationController.ts +104 -104
- package/src/context/notification/context.tsx +23 -23
- package/src/context/notification/hooks.ts +98 -98
- package/src/context/notification/types.ts +66 -66
- package/src/hooks/date.ts +31 -31
- package/src/hooks/keyboard.tsx +128 -128
- package/src/hooks/manual-render.tsx +10 -10
- package/src/hooks/service-now.tsx +233 -233
- package/src/hooks/text.tsx +30 -30
- package/src/hooks/title.tsx +28 -28
- package/src/hooks/use-effect-once.tsx +43 -43
- package/src/index.ts +19 -19
- package/src/notifications.ts +11 -11
- package/src/svg/AI.tsx +41 -41
- package/src/svg/CS.tsx +48 -48
- package/src/svg/EDP.tsx +31 -31
- package/src/svg/Forbidden.tsx +22 -22
- package/src/svg/GenericPlaceholder.tsx +20 -20
- package/src/svg/HUB.tsx +48 -48
- package/src/svg/Logo.tsx +16 -16
- package/src/svg/MiniLogo.tsx +12 -12
- package/src/svg/NotFound.tsx +16 -16
- package/src/svg/ServerError.tsx +33 -33
- package/src/svg/Unauthenticated.tsx +16 -16
- package/src/svg/index.ts +11 -11
- package/src/utils/accessibility.ts +135 -135
- package/src/utils/cookie.ts +73 -73
- package/src/utils/promise.ts +5 -5
- package/src/utils/read-file.ts +16 -16
- package/tsconfig.json +10 -10
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
import { Box, Image, Link, Text } from '@citric/core'
|
|
2
|
-
import { SxProp } from '@citric/core/dist/component-style'
|
|
3
|
-
import { Table, Tbody, Td, Th, Thead, Tr } from '@citric/ui'
|
|
4
|
-
import ReactMarkdown, { Components } from 'react-markdown'
|
|
5
|
-
import rehypeRaw from 'rehype-raw'
|
|
6
|
-
import remarkBreaks from 'remark-breaks'
|
|
7
|
-
import remarkGfm from 'remark-gfm'
|
|
8
|
-
import { BlockquoteMd } from './BlockquoteMd'
|
|
9
|
-
import { CodeViewer } from './CodeViewer'
|
|
10
|
-
import { Video } from './Video'
|
|
11
|
-
|
|
12
|
-
interface MarkdownProps {
|
|
13
|
-
/**
|
|
14
|
-
* The markdown content to be rendered.
|
|
15
|
-
*/
|
|
16
|
-
children: string,
|
|
17
|
-
/**
|
|
18
|
-
* The markdown components to be rendered.
|
|
19
|
-
*/
|
|
20
|
-
components?: Components,
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const styles: Record<string, SxProp | Record<string, SxProp>> = {
|
|
24
|
-
title: {
|
|
25
|
-
mb: 3,
|
|
26
|
-
},
|
|
27
|
-
boxContainer: {
|
|
28
|
-
position: 'relative',
|
|
29
|
-
bg: 'light.300',
|
|
30
|
-
borderRadius: 'sm',
|
|
31
|
-
mb: 10,
|
|
32
|
-
},
|
|
33
|
-
table: {
|
|
34
|
-
borderRadius: 'xs',
|
|
35
|
-
},
|
|
36
|
-
customScroll: {
|
|
37
|
-
height: '232px',
|
|
38
|
-
overflow: 'auto',
|
|
39
|
-
'&::-webkit-scrollbar': {
|
|
40
|
-
width: '2px',
|
|
41
|
-
},
|
|
42
|
-
'&::-webkit-scrollbar-track': {
|
|
43
|
-
background: 'light.400',
|
|
44
|
-
},
|
|
45
|
-
'&::-webkit-scrollbar-thumb': {
|
|
46
|
-
background: 'primary.500',
|
|
47
|
-
},
|
|
48
|
-
'&::-webkit-scrollbar-thumb:hover': {
|
|
49
|
-
background: 'primary.500',
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
refreshButton: {
|
|
53
|
-
position: 'absolute',
|
|
54
|
-
top: '8px',
|
|
55
|
-
right: '48px',
|
|
56
|
-
},
|
|
57
|
-
copyButton: {
|
|
58
|
-
position: 'absolute',
|
|
59
|
-
top: '8px',
|
|
60
|
-
right: '16px',
|
|
61
|
-
},
|
|
62
|
-
code: {
|
|
63
|
-
bg: 'blue.900',
|
|
64
|
-
color: 'blue.100',
|
|
65
|
-
px: 1,
|
|
66
|
-
py: 1,
|
|
67
|
-
borderRadius: 'xs',
|
|
68
|
-
},
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Custom components for rendering markdown elements.
|
|
73
|
-
*/
|
|
74
|
-
const component = () => ({
|
|
75
|
-
p: (props: any) => <Text appearance="body2" {...props} />,
|
|
76
|
-
strong: (props: any) => <Text weight="bold" colorScheme="light.700" as="strong" {...props} />,
|
|
77
|
-
h1: (props: any) => <Text as="h1" appearance="h2" gutterBottom {...props} sx={styles.title} />,
|
|
78
|
-
h2: (props: any) => <Text as="h2" appearance="h3" gutterBottom {...props} sx={styles.title} />,
|
|
79
|
-
h3: (props: any) => <Text as="h3" appearance="h4" gutterBottom {...props} sx={styles.title} />,
|
|
80
|
-
h4: (props: any) => <Text as="h4" appearance="h5" gutterBottom {...props} sx={styles.title} />,
|
|
81
|
-
a: (props: any) => <Link colorScheme="primary" {...props} target="_blank" />,
|
|
82
|
-
table: (props: any) => <Table appearance="striped" {...props} sx={styles.table} />,
|
|
83
|
-
thead: (props: any) => <Thead {...props} />,
|
|
84
|
-
tbody: (props: any) => <Tbody {...props} />,
|
|
85
|
-
tr: (props: any) => <Tr {...props} />,
|
|
86
|
-
td: (props: any) => <Td {...props} />,
|
|
87
|
-
th: (props: any) => <Th {...props} />,
|
|
88
|
-
li: (props: any) => <Text as="li" appearance="body2" colorScheme="light.700" {...props} />,
|
|
89
|
-
br: (props: any) => <Box my={5} {...props} />,
|
|
90
|
-
blockquote: (props: any) => <BlockquoteMd {...{ props }} />,
|
|
91
|
-
video: (props: any) => <Video {...props} />,
|
|
92
|
-
img: (props: any) => <Image {...props} />,
|
|
93
|
-
pre(props: any) {
|
|
94
|
-
const propComp = props.children.props
|
|
95
|
-
const match = /language-(\w+)/.exec(propComp.className || '')
|
|
96
|
-
const inferredLanguage = match && match.length > 1 ? match[1] : undefined
|
|
97
|
-
|
|
98
|
-
return (
|
|
99
|
-
<Box sx={{ ...styles.boxContainer }}>
|
|
100
|
-
<CodeViewer language={inferredLanguage} {...propComp} data={propComp.children} />
|
|
101
|
-
</Box>
|
|
102
|
-
)
|
|
103
|
-
},
|
|
104
|
-
code: ({ ...props }: any) =>
|
|
105
|
-
<Text as="code" sx={styles.code} {...props}>
|
|
106
|
-
{props.children}
|
|
107
|
-
</Text>,
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Renders a component that provides markdown content visualization using citric components.
|
|
112
|
-
*
|
|
113
|
-
* @param options the props for rendering the component: {@link MarkdownProps}.
|
|
114
|
-
*/
|
|
115
|
-
const Markdown = ({ children, components }: MarkdownProps) => (
|
|
116
|
-
<ReactMarkdown rehypePlugins={[rehypeRaw]} remarkPlugins={[remarkGfm, remarkBreaks]} components={{ ...component(), ...components }}>
|
|
117
|
-
{children}
|
|
118
|
-
</ReactMarkdown>
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
// eslint-disable-next-line import/no-default-export
|
|
122
|
-
export default Markdown
|
|
1
|
+
import { Box, Image, Link, Text } from '@citric/core'
|
|
2
|
+
import { SxProp } from '@citric/core/dist/component-style'
|
|
3
|
+
import { Table, Tbody, Td, Th, Thead, Tr } from '@citric/ui'
|
|
4
|
+
import ReactMarkdown, { Components } from 'react-markdown'
|
|
5
|
+
import rehypeRaw from 'rehype-raw'
|
|
6
|
+
import remarkBreaks from 'remark-breaks'
|
|
7
|
+
import remarkGfm from 'remark-gfm'
|
|
8
|
+
import { BlockquoteMd } from './BlockquoteMd'
|
|
9
|
+
import { CodeViewer } from './CodeViewer'
|
|
10
|
+
import { Video } from './Video'
|
|
11
|
+
|
|
12
|
+
interface MarkdownProps {
|
|
13
|
+
/**
|
|
14
|
+
* The markdown content to be rendered.
|
|
15
|
+
*/
|
|
16
|
+
children: string,
|
|
17
|
+
/**
|
|
18
|
+
* The markdown components to be rendered.
|
|
19
|
+
*/
|
|
20
|
+
components?: Components,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const styles: Record<string, SxProp | Record<string, SxProp>> = {
|
|
24
|
+
title: {
|
|
25
|
+
mb: 3,
|
|
26
|
+
},
|
|
27
|
+
boxContainer: {
|
|
28
|
+
position: 'relative',
|
|
29
|
+
bg: 'light.300',
|
|
30
|
+
borderRadius: 'sm',
|
|
31
|
+
mb: 10,
|
|
32
|
+
},
|
|
33
|
+
table: {
|
|
34
|
+
borderRadius: 'xs',
|
|
35
|
+
},
|
|
36
|
+
customScroll: {
|
|
37
|
+
height: '232px',
|
|
38
|
+
overflow: 'auto',
|
|
39
|
+
'&::-webkit-scrollbar': {
|
|
40
|
+
width: '2px',
|
|
41
|
+
},
|
|
42
|
+
'&::-webkit-scrollbar-track': {
|
|
43
|
+
background: 'light.400',
|
|
44
|
+
},
|
|
45
|
+
'&::-webkit-scrollbar-thumb': {
|
|
46
|
+
background: 'primary.500',
|
|
47
|
+
},
|
|
48
|
+
'&::-webkit-scrollbar-thumb:hover': {
|
|
49
|
+
background: 'primary.500',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
refreshButton: {
|
|
53
|
+
position: 'absolute',
|
|
54
|
+
top: '8px',
|
|
55
|
+
right: '48px',
|
|
56
|
+
},
|
|
57
|
+
copyButton: {
|
|
58
|
+
position: 'absolute',
|
|
59
|
+
top: '8px',
|
|
60
|
+
right: '16px',
|
|
61
|
+
},
|
|
62
|
+
code: {
|
|
63
|
+
bg: 'blue.900',
|
|
64
|
+
color: 'blue.100',
|
|
65
|
+
px: 1,
|
|
66
|
+
py: 1,
|
|
67
|
+
borderRadius: 'xs',
|
|
68
|
+
},
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Custom components for rendering markdown elements.
|
|
73
|
+
*/
|
|
74
|
+
const component = () => ({
|
|
75
|
+
p: (props: any) => <Text appearance="body2" {...props} />,
|
|
76
|
+
strong: (props: any) => <Text weight="bold" colorScheme="light.700" as="strong" {...props} />,
|
|
77
|
+
h1: (props: any) => <Text as="h1" appearance="h2" gutterBottom {...props} sx={styles.title} />,
|
|
78
|
+
h2: (props: any) => <Text as="h2" appearance="h3" gutterBottom {...props} sx={styles.title} />,
|
|
79
|
+
h3: (props: any) => <Text as="h3" appearance="h4" gutterBottom {...props} sx={styles.title} />,
|
|
80
|
+
h4: (props: any) => <Text as="h4" appearance="h5" gutterBottom {...props} sx={styles.title} />,
|
|
81
|
+
a: (props: any) => <Link colorScheme="primary" {...props} target="_blank" />,
|
|
82
|
+
table: (props: any) => <Table appearance="striped" {...props} sx={styles.table} />,
|
|
83
|
+
thead: (props: any) => <Thead {...props} />,
|
|
84
|
+
tbody: (props: any) => <Tbody {...props} />,
|
|
85
|
+
tr: (props: any) => <Tr {...props} />,
|
|
86
|
+
td: (props: any) => <Td {...props} />,
|
|
87
|
+
th: (props: any) => <Th {...props} />,
|
|
88
|
+
li: (props: any) => <Text as="li" appearance="body2" colorScheme="light.700" {...props} />,
|
|
89
|
+
br: (props: any) => <Box my={5} {...props} />,
|
|
90
|
+
blockquote: (props: any) => <BlockquoteMd {...{ props }} />,
|
|
91
|
+
video: (props: any) => <Video {...props} />,
|
|
92
|
+
img: (props: any) => <Image {...props} />,
|
|
93
|
+
pre(props: any) {
|
|
94
|
+
const propComp = props.children.props
|
|
95
|
+
const match = /language-(\w+)/.exec(propComp.className || '')
|
|
96
|
+
const inferredLanguage = match && match.length > 1 ? match[1] : undefined
|
|
97
|
+
|
|
98
|
+
return (
|
|
99
|
+
<Box sx={{ ...styles.boxContainer }}>
|
|
100
|
+
<CodeViewer language={inferredLanguage} {...propComp} data={propComp.children} />
|
|
101
|
+
</Box>
|
|
102
|
+
)
|
|
103
|
+
},
|
|
104
|
+
code: ({ ...props }: any) =>
|
|
105
|
+
<Text as="code" sx={styles.code} {...props}>
|
|
106
|
+
{props.children}
|
|
107
|
+
</Text>,
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Renders a component that provides markdown content visualization using citric components.
|
|
112
|
+
*
|
|
113
|
+
* @param options the props for rendering the component: {@link MarkdownProps}.
|
|
114
|
+
*/
|
|
115
|
+
const Markdown = ({ children, components }: MarkdownProps) => (
|
|
116
|
+
<ReactMarkdown rehypePlugins={[rehypeRaw]} remarkPlugins={[remarkGfm, remarkBreaks]} components={{ ...component(), ...components }}>
|
|
117
|
+
{children}
|
|
118
|
+
</ReactMarkdown>
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
// eslint-disable-next-line import/no-default-export
|
|
122
|
+
export default Markdown
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { IconButton } from '@citric/ui'
|
|
2
|
-
import { ReactNode } from 'react'
|
|
3
|
-
|
|
4
|
-
interface MarkdownButtonProps {
|
|
5
|
-
/**
|
|
6
|
-
* Optional click handler for the button.
|
|
7
|
-
*/
|
|
8
|
-
onClick?: () => void,
|
|
9
|
-
/**
|
|
10
|
-
* The content to be displayed inside the button.
|
|
11
|
-
*/
|
|
12
|
-
children: ReactNode,
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Renders a component that provides an IconButton with custom styles and content.
|
|
17
|
-
*
|
|
18
|
-
* @param options the props for rendering the component: {@link MarkdownButtonProps}.
|
|
19
|
-
*/
|
|
20
|
-
export const MarkdownButton = ({ ...props }: MarkdownButtonProps) => (
|
|
21
|
-
<IconButton sx={{ position: 'absolute', top: '16px', right: '16px' }} onClick={props.onClick}>
|
|
22
|
-
{props.children}
|
|
23
|
-
</IconButton>
|
|
24
|
-
)
|
|
1
|
+
import { IconButton } from '@citric/ui'
|
|
2
|
+
import { ReactNode } from 'react'
|
|
3
|
+
|
|
4
|
+
interface MarkdownButtonProps {
|
|
5
|
+
/**
|
|
6
|
+
* Optional click handler for the button.
|
|
7
|
+
*/
|
|
8
|
+
onClick?: () => void,
|
|
9
|
+
/**
|
|
10
|
+
* The content to be displayed inside the button.
|
|
11
|
+
*/
|
|
12
|
+
children: ReactNode,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Renders a component that provides an IconButton with custom styles and content.
|
|
17
|
+
*
|
|
18
|
+
* @param options the props for rendering the component: {@link MarkdownButtonProps}.
|
|
19
|
+
*/
|
|
20
|
+
export const MarkdownButton = ({ ...props }: MarkdownButtonProps) => (
|
|
21
|
+
<IconButton sx={{ position: 'absolute', top: '16px', right: '16px' }} onClick={props.onClick}>
|
|
22
|
+
{props.children}
|
|
23
|
+
</IconButton>
|
|
24
|
+
)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Video component that renders an iframe with the given source URL.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object} props - The props for the Video component.
|
|
5
|
-
* @param {string} props.children - The URL to be used as the source of the iframe.
|
|
6
|
-
* @returns {JSX.Element} The rendered iframe element.
|
|
7
|
-
*/
|
|
8
|
-
export const Video = ({ children }: { children: string }) => (
|
|
9
|
-
<iframe
|
|
10
|
-
src={children}
|
|
11
|
-
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
12
|
-
/>
|
|
13
|
-
)
|
|
1
|
+
/**
|
|
2
|
+
* Video component that renders an iframe with the given source URL.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} props - The props for the Video component.
|
|
5
|
+
* @param {string} props.children - The URL to be used as the source of the iframe.
|
|
6
|
+
* @returns {JSX.Element} The rendered iframe element.
|
|
7
|
+
*/
|
|
8
|
+
export const Video = ({ children }: { children: string }) => (
|
|
9
|
+
<iframe
|
|
10
|
+
src={children}
|
|
11
|
+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
12
|
+
/>
|
|
13
|
+
)
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { Skeleton } from '@citric/ui'
|
|
2
|
-
import { Suspense, lazy } from 'react'
|
|
3
|
-
import { Components } from 'react-markdown'
|
|
4
|
-
import { MarkdownButton } from './MarkdownButton'
|
|
5
|
-
|
|
6
|
-
const Markdown = lazy(() => import('./Markdown'))
|
|
7
|
-
|
|
8
|
-
interface Props {
|
|
9
|
-
children: string,
|
|
10
|
-
language?: string,
|
|
11
|
-
components?: Components,
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const LazyMarkdown = ({ children, components }: Props) => (
|
|
15
|
-
<Suspense fallback={<Skeleton />}>
|
|
16
|
-
<Markdown components={components}>{children}</Markdown>
|
|
17
|
-
</Suspense>
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
export { LazyMarkdown, MarkdownButton }
|
|
21
|
-
|
|
1
|
+
import { Skeleton } from '@citric/ui'
|
|
2
|
+
import { Suspense, lazy } from 'react'
|
|
3
|
+
import { Components } from 'react-markdown'
|
|
4
|
+
import { MarkdownButton } from './MarkdownButton'
|
|
5
|
+
|
|
6
|
+
const Markdown = lazy(() => import('./Markdown'))
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
children: string,
|
|
10
|
+
language?: string,
|
|
11
|
+
components?: Components,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const LazyMarkdown = ({ children, components }: Props) => (
|
|
15
|
+
<Suspense fallback={<Skeleton />}>
|
|
16
|
+
<Markdown components={components}>{children}</Markdown>
|
|
17
|
+
</Suspense>
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
export { LazyMarkdown, MarkdownButton }
|
|
21
|
+
|
|
@@ -1,118 +1,123 @@
|
|
|
1
|
-
import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
|
|
2
|
-
import { Box, Flex, Text } from '@citric/core'
|
|
3
|
-
import { AsProp } from '@citric/core/dist/forward-ref-as'
|
|
4
|
-
import { SxProperties } from '@citric/core/dist/sx'
|
|
5
|
-
import { Card, CardContent } from '@citric/ui'
|
|
6
|
-
import { GenericPlaceholder } from '../svg'
|
|
7
|
-
|
|
8
|
-
interface Props {
|
|
9
|
-
title?: string,
|
|
10
|
-
description?: string,
|
|
11
|
-
img?: React.ReactElement,
|
|
12
|
-
button?: React.ReactElement | null,
|
|
13
|
-
show?: boolean,
|
|
14
|
-
fullWidth?: boolean,
|
|
15
|
-
sx?: SxProperties,
|
|
16
|
-
sxCard?: SxProperties,
|
|
17
|
-
style?: React.CSSProperties,
|
|
18
|
-
className?: string,
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
interface PropsCallToAction extends Props {
|
|
22
|
-
subDescription?: string,
|
|
23
|
-
titleAs?: AsProp,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
<Text
|
|
41
|
-
{
|
|
42
|
-
</Text>
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
1
|
+
import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
|
|
2
|
+
import { Box, Flex, Text } from '@citric/core'
|
|
3
|
+
import { AsProp } from '@citric/core/dist/forward-ref-as'
|
|
4
|
+
import { SxProperties } from '@citric/core/dist/sx'
|
|
5
|
+
import { Card, CardContent } from '@citric/ui'
|
|
6
|
+
import { GenericPlaceholder } from '../svg'
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
title?: string,
|
|
10
|
+
description?: string,
|
|
11
|
+
img?: React.ReactElement,
|
|
12
|
+
button?: React.ReactElement | null,
|
|
13
|
+
show?: boolean,
|
|
14
|
+
fullWidth?: boolean,
|
|
15
|
+
sx?: SxProperties,
|
|
16
|
+
sxCard?: SxProperties,
|
|
17
|
+
style?: React.CSSProperties,
|
|
18
|
+
className?: string,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface PropsCallToAction extends Props {
|
|
22
|
+
subDescription?: string,
|
|
23
|
+
titleAs?: AsProp,
|
|
24
|
+
placeholderImageConfig?: {
|
|
25
|
+
width?: string,
|
|
26
|
+
height?: string,
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const Placeholder = ({ title, description, button, img, fullWidth, show = true, sx, style, className }: Props) => {
|
|
31
|
+
if (!show) {
|
|
32
|
+
return null
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<Card sx={{ ...(fullWidth ? { w: '100%' } : {}) }} style={style} className={className}>
|
|
37
|
+
<Flex alignItems="center" justifyContent="center" py={15} sx={{ gap: '20px', ...sx }}>
|
|
38
|
+
<Box sx={{ justifySelf: 'end' }}>{img ?? <GenericPlaceholder />}</Box>
|
|
39
|
+
<Box>
|
|
40
|
+
{title && <Text as="label" appearance="h4" mb="3" pt={5}>
|
|
41
|
+
{title}
|
|
42
|
+
</Text>}
|
|
43
|
+
|
|
44
|
+
<Text mb="3" appearance="body2" colorScheme="light.700">
|
|
45
|
+
{description}
|
|
46
|
+
</Text>
|
|
47
|
+
|
|
48
|
+
{button}
|
|
49
|
+
</Box>
|
|
50
|
+
</Flex>
|
|
51
|
+
</Card>
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const PlaceholderCallToAction = ({
|
|
56
|
+
title,
|
|
57
|
+
description,
|
|
58
|
+
subDescription,
|
|
59
|
+
img,
|
|
60
|
+
button,
|
|
61
|
+
fullWidth,
|
|
62
|
+
show = true,
|
|
63
|
+
sx,
|
|
64
|
+
sxCard,
|
|
65
|
+
style,
|
|
66
|
+
className,
|
|
67
|
+
titleAs,
|
|
68
|
+
placeholderImageConfig,
|
|
69
|
+
}: PropsCallToAction) => {
|
|
70
|
+
if (!show) {
|
|
71
|
+
return null
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<Card sx={{ w: fullWidth ? '100%' : 'auto', bg: 'transparent', ...sxCard }} style={style} className={className}>
|
|
76
|
+
<CardContent
|
|
77
|
+
as={Flex}
|
|
78
|
+
py={15}
|
|
79
|
+
sx={{ flexDirection: 'column', justifyContent: 'center', alignItems: 'center', gap: '92px', ...sx }}
|
|
80
|
+
>
|
|
81
|
+
<Box sx={{ justifySelf: 'end' }}>{img ?? <GenericPlaceholder {...placeholderImageConfig} />}</Box>
|
|
82
|
+
|
|
83
|
+
<Box>
|
|
84
|
+
{title && <Text as={titleAs} appearance="h4" mb="3" aria-live="assertive">
|
|
85
|
+
{title}
|
|
86
|
+
</Text>}
|
|
87
|
+
|
|
88
|
+
<Text mb="3" appearance="body2" colorScheme="light.700">
|
|
89
|
+
{description}
|
|
90
|
+
</Text>
|
|
91
|
+
|
|
92
|
+
<Text mb="3" appearance="body2" colorScheme="light.700">
|
|
93
|
+
{subDescription}
|
|
94
|
+
</Text>
|
|
95
|
+
|
|
96
|
+
{button}
|
|
97
|
+
</Box>
|
|
98
|
+
</CardContent>
|
|
99
|
+
</Card>
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
export const PlaceholderResourceEmptySearch = ({ title, description }: Pick<Props, 'title' | 'description'>) => {
|
|
105
|
+
const t = useTranslate(dictionary)
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<PlaceholderCallToAction fullWidth={true}
|
|
109
|
+
title={title || t.title} description={description || t.description}
|
|
110
|
+
/>
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const dictionary = {
|
|
115
|
+
en: {
|
|
116
|
+
title: 'Sorry, your search did not match any results.',
|
|
117
|
+
description: 'Please, refine your search and try again.',
|
|
118
|
+
},
|
|
119
|
+
pt: {
|
|
120
|
+
title: 'Desculpe, sua busca não encontrou nenhum resultado.',
|
|
121
|
+
description: 'Por favor, refine sua busca e tente novamente.',
|
|
122
|
+
},
|
|
123
|
+
} satisfies Dictionary
|