@drodil/backstage-plugin-qeta-react 3.29.0 → 3.29.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/dist/components/ArticleContent/ArticleContent.esm.js +0 -1
- package/dist/components/ArticleContent/ArticleContent.esm.js.map +1 -1
- package/dist/components/AuthorBox/AuthorBox.esm.js +34 -46
- package/dist/components/AuthorBox/AuthorBox.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentForm.esm.js +1 -0
- package/dist/components/CommentSection/CommentForm.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentListItem.esm.js +0 -2
- package/dist/components/CommentSection/CommentListItem.esm.js.map +1 -1
- package/dist/components/CommentSection/CommentSection.esm.js +7 -2
- package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
- package/dist/components/LeftMenu/LeftMenu.esm.js +0 -1
- package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
- package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js +1 -2
- package/dist/components/MarkdownRenderer/MarkdownRenderer.esm.js.map +1 -1
- package/dist/components/PostHighlightList/PostHighlightList.esm.js +0 -2
- package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostListItem.esm.js +8 -10
- package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
- package/dist/components/PostsGrid/PostsGridItem.esm.js +4 -5
- package/dist/components/PostsGrid/PostsGridItem.esm.js.map +1 -1
- package/dist/components/QuestionCard/QuestionCard.esm.js +2 -2
- package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
- package/dist/components/SearchBar/SearchBar.esm.js +1 -2
- package/dist/components/SearchBar/SearchBar.esm.js.map +1 -1
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js +1 -2
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +1 -2
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
- package/dist/components/Utility/RightList.esm.js +1 -1
- package/dist/components/Utility/RightList.esm.js.map +1 -1
- package/dist/components/Utility/SmallAvatar.esm.js +0 -1
- package/dist/components/Utility/SmallAvatar.esm.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArticleContent.esm.js","sources":["../../../src/components/ArticleContent/ArticleContent.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { Avatar, Grid, makeStyles, Typography } from '@material-ui/core';\nimport { MarkdownRenderer } from '../MarkdownRenderer';\nimport { useState } from 'react';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { ArticleButtons } from './ArticleButtons';\nimport { TagsAndEntities } from '../TagsAndEntities/TagsAndEntities';\nimport { CommentSection } from '../CommentSection/CommentSection';\nimport { WarningPanel } from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useEntityAuthor } from '../../hooks/useEntityAuthor';\n\nexport type QetaArticleContentClassKey =\n | 'content'\n | 'headerImage'\n | 'commentSection';\n\nexport const useStyles = makeStyles(\n theme => {\n return {\n content: {\n
|
|
1
|
+
{"version":3,"file":"ArticleContent.esm.js","sources":["../../../src/components/ArticleContent/ArticleContent.tsx"],"sourcesContent":["import {\n AnswerResponse,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { Avatar, Grid, makeStyles, Typography } from '@material-ui/core';\nimport { MarkdownRenderer } from '../MarkdownRenderer';\nimport { useState } from 'react';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { ArticleButtons } from './ArticleButtons';\nimport { TagsAndEntities } from '../TagsAndEntities/TagsAndEntities';\nimport { CommentSection } from '../CommentSection/CommentSection';\nimport { WarningPanel } from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { useEntityAuthor } from '../../hooks/useEntityAuthor';\n\nexport type QetaArticleContentClassKey =\n | 'content'\n | 'headerImage'\n | 'commentSection';\n\nexport const useStyles = makeStyles(\n theme => {\n return {\n content: {\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n marginBottom: theme.spacing(2),\n borderBottom: `1px solid ${theme.palette.background.paper}`,\n },\n headerImage: {\n marginBottom: theme.spacing(2),\n marginTop: theme.spacing(2),\n height: '300px',\n objectFit: 'cover',\n width: '100%',\n border: `1px solid ${theme.palette.background.paper}`,\n boxShadow: theme.shadows[1],\n },\n commentSection: {\n borderBottom: `1px solid ${theme.palette.background.paper}`,\n paddingBottom: theme.spacing(2),\n marginBottom: theme.spacing(2),\n marginLeft: 0,\n },\n };\n },\n { name: 'QetaArticle' },\n);\n\nexport const ArticleContent = (props: {\n post: PostResponse;\n views: number;\n}) => {\n const { post, views } = props;\n const styles = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const { name, initials, user } = useEntityAuthor(post);\n const [postEntity, setPostEntity] = useState(post);\n const onCommentAction = (q: PostResponse, _?: AnswerResponse) => {\n setPostEntity(q);\n };\n\n if (post.type !== 'article') {\n return (\n <WarningPanel title=\"Not found\" message=\"Could not find the article\" />\n );\n }\n\n return (\n <>\n <Typography variant=\"h2\">{postEntity.title}</Typography>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Avatar\n src={user?.spec?.profile?.picture}\n className=\"qetaAvatar avatar\"\n alt={name}\n variant=\"rounded\"\n >\n {initials}\n </Avatar>\n </Grid>\n <Grid item>\n <Typography variant=\"subtitle1\">{name}</Typography>\n <Typography variant=\"caption\">\n {t('common.viewsCount', { count: views })} {' · '}\n {t('authorBox.postedAtTime')}{' '}\n <RelativeTimeWithTooltip value={postEntity.created} />\n </Typography>\n </Grid>\n </Grid>\n <Grid container>\n <Grid item xs={12}>\n <ArticleButtons post={postEntity} />\n </Grid>\n </Grid>\n {postEntity.headerImage && (\n <img\n src={post.headerImage}\n alt={post.title}\n className={styles.headerImage}\n />\n )}\n <MarkdownRenderer\n content={postEntity.content}\n className={styles.content}\n showToc\n />\n <Typography variant=\"h6\">{t('common.comments')}</Typography>\n <CommentSection\n className={styles.commentSection}\n post={postEntity}\n onCommentAction={onCommentAction}\n />\n <Grid container>\n <Grid item xs={12}>\n <TagsAndEntities entity={postEntity} />\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,6 @@ const useStyles = makeStyles(
|
|
|
28
28
|
avatar: {
|
|
29
29
|
width: theme.spacing(3),
|
|
30
30
|
height: theme.spacing(3),
|
|
31
|
-
fontSize: "1rem",
|
|
32
31
|
marginRight: theme.spacing(1)
|
|
33
32
|
},
|
|
34
33
|
authorLink: {
|
|
@@ -36,7 +35,6 @@ const useStyles = makeStyles(
|
|
|
36
35
|
overflow: "hidden",
|
|
37
36
|
whiteSpace: "nowrap",
|
|
38
37
|
fontWeight: 600,
|
|
39
|
-
fontSize: "1.05rem",
|
|
40
38
|
color: theme.palette.text.primary,
|
|
41
39
|
display: "flex",
|
|
42
40
|
alignItems: "center",
|
|
@@ -48,7 +46,6 @@ const useStyles = makeStyles(
|
|
|
48
46
|
},
|
|
49
47
|
meta: {
|
|
50
48
|
color: theme.palette.text.secondary,
|
|
51
|
-
fontSize: "0.85rem",
|
|
52
49
|
textAlign: "center",
|
|
53
50
|
margin: 0
|
|
54
51
|
}
|
|
@@ -59,49 +56,40 @@ const AuthorBox = (props) => {
|
|
|
59
56
|
const { userEntityRef, time, label, expert, anonymous } = props;
|
|
60
57
|
const { name, initials, user } = useUserInfo(userEntityRef);
|
|
61
58
|
const styles = useStyles();
|
|
62
|
-
return /* @__PURE__ */ jsx(Box, { className: `qetaAuthorBox ${styles.authorBox}`, children: /* @__PURE__ */ jsxs(
|
|
63
|
-
Grid,
|
|
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
|
-
children: /* @__PURE__ */ jsxs(Box, { style: { paddingLeft: "0.3em" }, children: [
|
|
97
|
-
/* @__PURE__ */ jsx(UserLink, { entityRef: userEntityRef, anonymous }),
|
|
98
|
-
expert && /* @__PURE__ */ jsx(ExpertIcon, {})
|
|
99
|
-
] })
|
|
100
|
-
}
|
|
101
|
-
)
|
|
102
|
-
]
|
|
103
|
-
}
|
|
104
|
-
) });
|
|
59
|
+
return /* @__PURE__ */ jsx(Box, { className: `qetaAuthorBox ${styles.authorBox}`, children: /* @__PURE__ */ jsxs(Grid, { container: true, alignItems: "center", justifyContent: "flex-end", spacing: 0, children: [
|
|
60
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, style: { paddingBottom: 0 }, children: /* @__PURE__ */ jsxs(Typography, { className: "qetaAuthorBoxCreated", variant: "caption", children: [
|
|
61
|
+
label,
|
|
62
|
+
" ",
|
|
63
|
+
/* @__PURE__ */ jsx(RelativeTimeWithTooltip, { value: time })
|
|
64
|
+
] }) }),
|
|
65
|
+
/* @__PURE__ */ jsx(Grid, { item: true, style: { paddingTop: 0 }, children: /* @__PURE__ */ jsx(
|
|
66
|
+
Avatar,
|
|
67
|
+
{
|
|
68
|
+
src: user?.spec?.profile?.picture,
|
|
69
|
+
className: "qetaAuthorBoxAvatar avatar",
|
|
70
|
+
alt: name,
|
|
71
|
+
variant: "rounded",
|
|
72
|
+
style: { width: "1.2em", height: "1.2em" },
|
|
73
|
+
children: initials
|
|
74
|
+
}
|
|
75
|
+
) }),
|
|
76
|
+
/* @__PURE__ */ jsx(
|
|
77
|
+
Grid,
|
|
78
|
+
{
|
|
79
|
+
item: true,
|
|
80
|
+
style: {
|
|
81
|
+
paddingTop: 0,
|
|
82
|
+
textOverflow: "ellipsis",
|
|
83
|
+
overflow: "hidden",
|
|
84
|
+
whiteSpace: "nowrap"
|
|
85
|
+
},
|
|
86
|
+
children: /* @__PURE__ */ jsxs(Box, { style: { paddingLeft: "0.3em" }, children: [
|
|
87
|
+
/* @__PURE__ */ jsx(UserLink, { entityRef: userEntityRef, anonymous }),
|
|
88
|
+
expert && /* @__PURE__ */ jsx(ExpertIcon, {})
|
|
89
|
+
] })
|
|
90
|
+
}
|
|
91
|
+
)
|
|
92
|
+
] }) });
|
|
105
93
|
};
|
|
106
94
|
|
|
107
95
|
export { AuthorBox };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorBox.esm.js","sources":["../../../src/components/AuthorBox/AuthorBox.tsx"],"sourcesContent":["import { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { UserLink } from '../Links';\nimport { useUserInfo } from '../../hooks/useEntityAuthor';\nimport { Avatar, Box, Grid, makeStyles, Typography } from '@material-ui/core';\nimport { ExpertIcon } from '../Icons/ExpertIcon.tsx';\n\nconst useStyles = makeStyles(\n theme => ({\n authorBox: {\n padding: theme.spacing(0, 1.5, 0, 0),\n textAlign: 'right',\n width: 220,\n background: theme.palette.background.paper,\n borderRadius: theme.shape.borderRadius,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-start',\n gap: theme.spacing(0.5),\n },\n authorRow: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n marginTop: theme.spacing(0.5),\n marginBottom: theme.spacing(0.5),\n },\n avatar: {\n width: theme.spacing(3),\n height: theme.spacing(3),\n
|
|
1
|
+
{"version":3,"file":"AuthorBox.esm.js","sources":["../../../src/components/AuthorBox/AuthorBox.tsx"],"sourcesContent":["import { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { UserLink } from '../Links';\nimport { useUserInfo } from '../../hooks/useEntityAuthor';\nimport { Avatar, Box, Grid, makeStyles, Typography } from '@material-ui/core';\nimport { ExpertIcon } from '../Icons/ExpertIcon.tsx';\n\nconst useStyles = makeStyles(\n theme => ({\n authorBox: {\n padding: theme.spacing(0, 1.5, 0, 0),\n textAlign: 'right',\n width: 220,\n background: theme.palette.background.paper,\n borderRadius: theme.shape.borderRadius,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-start',\n gap: theme.spacing(0.5),\n },\n authorRow: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n marginTop: theme.spacing(0.5),\n marginBottom: theme.spacing(0.5),\n },\n avatar: {\n width: theme.spacing(3),\n height: theme.spacing(3),\n marginRight: theme.spacing(1),\n },\n authorLink: {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n fontWeight: 600,\n color: theme.palette.text.primary,\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n },\n expertIcon: {\n marginLeft: theme.spacing(0.5),\n verticalAlign: 'middle',\n },\n meta: {\n color: theme.palette.text.secondary,\n textAlign: 'center',\n margin: 0,\n },\n }),\n { name: 'QetaAuthorBox' },\n);\n\nexport const AuthorBox = (props: {\n userEntityRef: string;\n time: string | Date;\n label: string;\n expert?: boolean;\n anonymous?: boolean;\n}) => {\n const { userEntityRef, time, label, expert, anonymous } = props;\n const { name, initials, user } = useUserInfo(userEntityRef);\n const styles = useStyles();\n\n return (\n <Box className={`qetaAuthorBox ${styles.authorBox}`}>\n <Grid container alignItems=\"center\" justifyContent=\"flex-end\" spacing={0}>\n <Grid item xs={12} style={{ paddingBottom: 0 }}>\n <Typography className=\"qetaAuthorBoxCreated\" variant=\"caption\">\n {label} <RelativeTimeWithTooltip value={time} />\n </Typography>\n </Grid>\n\n <Grid item style={{ paddingTop: 0 }}>\n <Avatar\n src={user?.spec?.profile?.picture}\n className=\"qetaAuthorBoxAvatar avatar\"\n alt={name}\n variant=\"rounded\"\n style={{ width: '1.2em', height: '1.2em' }}\n >\n {initials}\n </Avatar>\n </Grid>\n <Grid\n item\n style={{\n paddingTop: 0,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n >\n <Box style={{ paddingLeft: '0.3em' }}>\n <UserLink entityRef={userEntityRef} anonymous={anonymous} />\n {expert && <ExpertIcon />}\n </Box>\n </Grid>\n </Grid>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentForm.esm.js","sources":["../../../src/components/CommentSection/CommentForm.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-autofocus */\nimport { useState } from 'react';\nimport { Button, Grid } from '@material-ui/core';\nimport { Controller, useForm } from 'react-hook-form';\nimport { MarkdownEditor } from '../MarkdownEditor/MarkdownEditor.tsx';\nimport { useConfirmNavigationIfEdited } from '../../utils';\n\nexport const CommentForm = (props: {\n submit: (data: { content: string }) => void;\n disabled?: boolean;\n defaultValues?: { content: string };\n saveButtonTitle: string;\n}) => {\n const { submit, disabled, saveButtonTitle, defaultValues } = props;\n const { handleSubmit, control } = useForm<{ content: string }>({\n defaultValues,\n });\n const [edited, setEdited] = useState(false);\n useConfirmNavigationIfEdited(edited);\n\n return (\n <form\n onSubmit={handleSubmit(submit)}\n onChange={() => {\n setEdited(true);\n }}\n className=\"qetaCommentForm\"\n >\n <Grid container>\n <Grid item xs={11}>\n <Controller\n control={control}\n defaultValue=\"\"\n rules={{\n required: true,\n }}\n render={({ field: { onChange, value } }) => (\n <MarkdownEditor\n autoFocus\n value={value}\n onChange={onChange}\n height={100}\n disablePreview\n disableAttachments\n disableToolbar\n disabled={disabled}\n />\n )}\n name=\"content\"\n />\n </Grid>\n <Grid item xs={1}>\n <Button\n variant=\"contained\"\n size=\"small\"\n className=\"qetaCommentBtn\"\n type=\"submit\"\n color=\"primary\"\n disabled={disabled}\n >\n {saveButtonTitle}\n </Button>\n </Grid>\n </Grid>\n </form>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAOa,MAAA,WAAA,GAAc,CAAC,KAKtB,KAAA;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAU,EAAA,eAAA,EAAiB,eAAkB,GAAA,KAAA;AAC7D,EAAA,MAAM,EAAE,YAAA,EAAc,OAAQ,EAAA,GAAI,OAA6B,CAAA;AAAA,IAC7D;AAAA,GACD,CAAA;AACD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,EAAA,4BAAA,CAA6B,MAAM,CAAA;AAEnC,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,aAAa,MAAM,CAAA;AAAA,MAC7B,UAAU,MAAM;AACd,QAAA,SAAA,CAAU,IAAI,CAAA;AAAA,OAChB;AAAA,MACA,SAAU,EAAA,iBAAA;AAAA,MAEV,QAAA,kBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IACb,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,YAAa,EAAA,EAAA;AAAA,YACb,KAAO,EAAA;AAAA,cACL,QAAU,EAAA;AAAA,aACZ;AAAA,YACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,EAAE,QAAU,EAAA,KAAA,IAC5B,qBAAA,GAAA;AAAA,cAAC,cAAA;AAAA,cAAA;AAAA,gBACC,SAAS,EAAA,IAAA;AAAA,gBACT,KAAA;AAAA,gBACA,QAAA;AAAA,gBACA,MAAQ,EAAA,GAAA;AAAA,gBACR,cAAc,EAAA,IAAA;AAAA,gBACd,kBAAkB,EAAA,IAAA;AAAA,gBAClB,cAAc,EAAA,IAAA;AAAA,gBACd;AAAA;AAAA,aACF;AAAA,YAEF,IAAK,EAAA;AAAA;AAAA,SAET,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,WAAA;AAAA,YACR,IAAK,EAAA,OAAA;AAAA,YACL,SAAU,EAAA,gBAAA;AAAA,YACV,IAAK,EAAA,QAAA;AAAA,YACL,KAAM,EAAA,SAAA;AAAA,YACN,QAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"CommentForm.esm.js","sources":["../../../src/components/CommentSection/CommentForm.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-autofocus */\nimport { useState } from 'react';\nimport { Button, Grid } from '@material-ui/core';\nimport { Controller, useForm } from 'react-hook-form';\nimport { MarkdownEditor } from '../MarkdownEditor/MarkdownEditor.tsx';\nimport { useConfirmNavigationIfEdited } from '../../utils';\n\nexport const CommentForm = (props: {\n submit: (data: { content: string }) => void;\n disabled?: boolean;\n defaultValues?: { content: string };\n saveButtonTitle: string;\n}) => {\n const { submit, disabled, saveButtonTitle, defaultValues } = props;\n const { handleSubmit, control } = useForm<{ content: string }>({\n defaultValues,\n });\n const [edited, setEdited] = useState(false);\n useConfirmNavigationIfEdited(edited);\n\n return (\n <form\n onSubmit={handleSubmit(submit)}\n onChange={() => {\n setEdited(true);\n }}\n className=\"qetaCommentForm\"\n >\n <Grid container>\n <Grid item xs={11}>\n <Controller\n control={control}\n defaultValue=\"\"\n rules={{\n required: true,\n }}\n render={({ field: { onChange, value } }) => (\n <MarkdownEditor\n autoFocus\n value={value}\n onChange={onChange}\n height={100}\n disablePreview\n disableAttachments\n disableToolbar\n disabled={disabled}\n />\n )}\n name=\"content\"\n />\n </Grid>\n <Grid item xs={1}>\n <Button\n variant=\"contained\"\n size=\"small\"\n className=\"qetaCommentBtn\"\n type=\"submit\"\n color=\"primary\"\n disabled={disabled}\n style={{ minWidth: '100%' }}\n >\n {saveButtonTitle}\n </Button>\n </Grid>\n </Grid>\n </form>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAOa,MAAA,WAAA,GAAc,CAAC,KAKtB,KAAA;AACJ,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAU,EAAA,eAAA,EAAiB,eAAkB,GAAA,KAAA;AAC7D,EAAA,MAAM,EAAE,YAAA,EAAc,OAAQ,EAAA,GAAI,OAA6B,CAAA;AAAA,IAC7D;AAAA,GACD,CAAA;AACD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,EAAA,4BAAA,CAA6B,MAAM,CAAA;AAEnC,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,aAAa,MAAM,CAAA;AAAA,MAC7B,UAAU,MAAM;AACd,QAAA,SAAA,CAAU,IAAI,CAAA;AAAA,OAChB;AAAA,MACA,SAAU,EAAA,iBAAA;AAAA,MAEV,QAAA,kBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IACb,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,YAAa,EAAA,EAAA;AAAA,YACb,KAAO,EAAA;AAAA,cACL,QAAU,EAAA;AAAA,aACZ;AAAA,YACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,EAAE,QAAU,EAAA,KAAA,IAC5B,qBAAA,GAAA;AAAA,cAAC,cAAA;AAAA,cAAA;AAAA,gBACC,SAAS,EAAA,IAAA;AAAA,gBACT,KAAA;AAAA,gBACA,QAAA;AAAA,gBACA,MAAQ,EAAA,GAAA;AAAA,gBACR,cAAc,EAAA,IAAA;AAAA,gBACd,kBAAkB,EAAA,IAAA;AAAA,gBAClB,cAAc,EAAA,IAAA;AAAA,gBACd;AAAA;AAAA,aACF;AAAA,YAEF,IAAK,EAAA;AAAA;AAAA,SAET,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,WAAA;AAAA,YACR,IAAK,EAAA,OAAA;AAAA,YACL,SAAU,EAAA,gBAAA;AAAA,YACV,IAAK,EAAA,QAAA;AAAA,YACL,KAAM,EAAA,SAAA;AAAA,YACN,QAAA;AAAA,YACA,KAAA,EAAO,EAAE,QAAA,EAAU,MAAO,EAAA;AAAA,YAEzB,QAAA,EAAA;AAAA;AAAA,SAEL,EAAA;AAAA,OACF,EAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -28,12 +28,10 @@ const useStyles = makeStyles(
|
|
|
28
28
|
"& *:last-child": {
|
|
29
29
|
display: "inline"
|
|
30
30
|
},
|
|
31
|
-
fontSize: "0.8rem",
|
|
32
31
|
lineHeight: 1.5
|
|
33
32
|
},
|
|
34
33
|
metadata: {
|
|
35
34
|
color: theme.palette.text.secondary,
|
|
36
|
-
fontSize: "0.85rem",
|
|
37
35
|
marginTop: theme.spacing(0.5),
|
|
38
36
|
"& a": {
|
|
39
37
|
color: theme.palette.primary.main,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentListItem.esm.js","sources":["../../../src/components/CommentSection/CommentListItem.tsx"],"sourcesContent":["import { Box, makeStyles, Typography } from '@material-ui/core';\nimport { MarkdownRenderer } from '../MarkdownRenderer';\nimport { AuthorLink } from '../Links';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { Link } from '@backstage/core-components';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n AnswerResponse,\n Comment,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api.ts';\nimport { CommentForm } from './CommentForm.tsx';\nimport { ExpertIcon } from '../Icons/ExpertIcon.tsx';\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n box: {\n padding: theme.spacing(1.5),\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n content: {\n display: 'inline',\n '& *:last-child': {\n display: 'inline',\n },\n
|
|
1
|
+
{"version":3,"file":"CommentListItem.esm.js","sources":["../../../src/components/CommentSection/CommentListItem.tsx"],"sourcesContent":["import { Box, makeStyles, Typography } from '@material-ui/core';\nimport { MarkdownRenderer } from '../MarkdownRenderer';\nimport { AuthorLink } from '../Links';\nimport { RelativeTimeWithTooltip } from '../RelativeTimeWithTooltip';\nimport { Link } from '@backstage/core-components';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport {\n AnswerResponse,\n Comment,\n PostResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api.ts';\nimport { CommentForm } from './CommentForm.tsx';\nimport { ExpertIcon } from '../Icons/ExpertIcon.tsx';\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n box: {\n padding: theme.spacing(1.5),\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n content: {\n display: 'inline',\n '& *:last-child': {\n display: 'inline',\n },\n lineHeight: 1.5,\n },\n metadata: {\n color: theme.palette.text.secondary,\n marginTop: theme.spacing(0.5),\n '& a': {\n color: theme.palette.primary.main,\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n textDecoration: 'underline',\n opacity: 0.8,\n },\n },\n },\n }),\n { name: 'QetaCommentList' },\n);\n\nexport const CommentListItem = (props: {\n comment: Comment;\n onCommentAction: (question: PostResponse, answer?: AnswerResponse) => void;\n post: PostResponse;\n answer?: AnswerResponse;\n}) => {\n const { t } = useTranslationRef(qetaTranslationRef);\n const { comment, onCommentAction, post, answer } = props;\n const qetaApi = useApi(qetaApiRef);\n const [posting, setPosting] = React.useState(false);\n const styles = useStyles();\n const [editing, setEditing] = useState(false);\n\n const deleteComment = (id: number) => {\n if (answer) {\n qetaApi.deleteAnswerComment(post.id, answer.id, id).then(a => {\n onCommentAction(post, a);\n });\n return;\n }\n qetaApi.deletePostComment(post.id, id).then(q => onCommentAction(q));\n };\n\n const saveComment = (data: { content: string }) => {\n setPosting(true);\n if (answer) {\n qetaApi\n .updateAnswerComment(post.id, answer.id, comment.id, data.content)\n .then(a => {\n setEditing(false);\n setPosting(false);\n onCommentAction(post, a);\n });\n return;\n }\n qetaApi.updatePostComment(post.id, comment.id, data.content).then(q => {\n setEditing(false);\n setPosting(false);\n onCommentAction(q);\n });\n };\n\n return (\n <Box className={styles.box}>\n {editing ? (\n <>\n <CommentForm\n submit={saveComment}\n saveButtonTitle={t('commentList.save')}\n defaultValues={{ content: comment.content }}\n disabled={posting}\n />\n </>\n ) : (\n <>\n <MarkdownRenderer\n content={comment.content}\n className={styles.content}\n />\n <Typography variant=\"caption\" className={styles.metadata}>\n {' – '}\n <AuthorLink entity={comment} />\n {comment.expert && <ExpertIcon />}{' '}\n <RelativeTimeWithTooltip value={comment.created} />\n {comment.canEdit && (\n <>\n {' / '}\n <Link\n underline=\"none\"\n to=\"#\"\n className=\"qetaCommentEditBtn\"\n onClick={() => setEditing(true)}\n >\n {t('commentList.editLink')}\n </Link>\n </>\n )}\n {comment.canDelete && (\n <>\n {' / '}\n <Link\n underline=\"none\"\n to=\"#\"\n className=\"qetaCommentDeleteBtn\"\n onClick={() => deleteComment(comment.id)}\n >\n {t('commentList.deleteLink')}\n </Link>\n </>\n )}\n </Typography>\n </>\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,6 @@ const useStyles = makeStyles(
|
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
addCommentButton: {
|
|
37
|
-
fontSize: "0.875rem",
|
|
38
37
|
textTransform: "none",
|
|
39
38
|
color: theme.palette.text.secondary,
|
|
40
39
|
"&:hover": {
|
|
@@ -91,8 +90,14 @@ const CommentSection = (props) => {
|
|
|
91
90
|
Button,
|
|
92
91
|
{
|
|
93
92
|
size: "small",
|
|
93
|
+
variant: "text",
|
|
94
94
|
onClick: () => setCommentsVisible((v) => !v),
|
|
95
|
-
style: {
|
|
95
|
+
style: {
|
|
96
|
+
textTransform: "none",
|
|
97
|
+
padding: "0.5rem 0.8rem",
|
|
98
|
+
border: "none",
|
|
99
|
+
backgroundColor: "transparent"
|
|
100
|
+
},
|
|
96
101
|
endIcon: commentsVisible ? /* @__PURE__ */ jsx(ExpandMoreIcon, { fontSize: "small" }) : /* @__PURE__ */ jsx(ExpandLessIcon, { fontSize: "small" }),
|
|
97
102
|
children: `${commentsCount} ${t("common.comments")}`
|
|
98
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentSection.esm.js","sources":["../../../src/components/CommentSection/CommentSection.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-autofocus */\nimport
|
|
1
|
+
{"version":3,"file":"CommentSection.esm.js","sources":["../../../src/components/CommentSection/CommentSection.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-autofocus */\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { Box, Button, Grid, makeStyles } from '@material-ui/core';\nimport {\n AnswerResponse,\n PostResponse,\n qetaCreateCommentPermission,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useAnalytics, useApi } from '@backstage/core-plugin-api';\nimport { CommentList } from './CommentList';\nimport { qetaApiRef } from '../../api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport AddCommentIcon from '@material-ui/icons/AddComment';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\nimport { OptionalRequirePermission } from '../Utility/OptionalRequirePermission';\nimport { CommentForm } from './CommentForm.tsx';\nimport { useConfirmNavigationIfEdited } from '../../utils';\n\nexport type QetaCommentSectionClassKey =\n | 'root'\n | 'addCommentButton'\n | 'commentSection'\n | 'commentForm';\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n commentSection: {\n position: 'relative',\n marginLeft: theme.spacing(3.5),\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n left: theme.spacing(1),\n height: 'calc(100% - 46px)',\n width: '1px',\n backgroundColor: theme.palette.divider,\n opacity: 0.4,\n transition: 'all 0.2s ease-in-out',\n zIndex: 1,\n },\n },\n addCommentButton: {\n textTransform: 'none',\n color: theme.palette.text.secondary,\n '&:hover': {\n backgroundColor: 'transparent',\n color: theme.palette.primary.main,\n },\n },\n commentForm: {\n marginLeft: theme.spacing(2.5),\n marginTop: theme.spacing(1),\n },\n }),\n { name: 'QetaCommentSection' },\n);\n\nexport const CommentSection = (props: {\n onCommentAction: (post: PostResponse, answer?: AnswerResponse) => void;\n post: PostResponse;\n answer?: AnswerResponse;\n className?: string;\n}) => {\n const { answer, post, onCommentAction } = props;\n const analytics = useAnalytics();\n const qetaApi = useApi(qetaApiRef);\n const [posting, setPosting] = React.useState(false);\n const [formVisible, setFormVisible] = useState(false);\n const [edited, setEdited] = React.useState(false);\n const { t } = useTranslationRef(qetaTranslationRef);\n const styles = useStyles();\n\n // Determine the entity to get comments from\n const entity = answer ?? post;\n const commentsCount = entity.comments?.length || 0;\n const [commentsVisible, setCommentsVisible] = useState(true);\n\n const postComment = (data: { content: string }) => {\n setPosting(true);\n if (answer) {\n qetaApi.commentAnswer(post.id, answer.id, data.content).then(a => {\n setFormVisible(false);\n analytics.captureEvent('comment', 'answer');\n setPosting(false);\n setEdited(false);\n onCommentAction(post, a);\n });\n return;\n }\n\n qetaApi.commentPost(post.id, data.content).then(q => {\n setFormVisible(false);\n analytics.captureEvent('comment', post.type);\n setPosting(false);\n setEdited(false);\n onCommentAction(q);\n });\n };\n\n useConfirmNavigationIfEdited(edited);\n\n return (\n <Box\n className={`${styles.root} ${styles.commentSection} ${props.className} qetaCommentSection`}\n >\n {commentsCount > 0 && (\n <Box display=\"flex\" alignItems=\"center\" pl={1}>\n <Button\n size=\"small\"\n variant=\"text\"\n onClick={() => setCommentsVisible(v => !v)}\n style={{\n textTransform: 'none',\n padding: '0.5rem 0.8rem',\n border: 'none',\n backgroundColor: 'transparent',\n }}\n endIcon={\n commentsVisible ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ExpandLessIcon fontSize=\"small\" />\n )\n }\n >\n {`${commentsCount} ${t('common.comments')}`}\n </Button>\n </Box>\n )}\n {commentsVisible && (\n <Box pl={1}>\n <CommentList\n post={post}\n answer={answer}\n onCommentAction={onCommentAction}\n />\n </Box>\n )}\n <OptionalRequirePermission\n permission={qetaCreateCommentPermission}\n errorPage={<></>}\n >\n {!formVisible && (\n <Grid container justifyContent=\"flex-end\">\n <Grid item>\n <Button\n size=\"small\"\n startIcon={<AddCommentIcon fontSize=\"small\" />}\n onClick={() => setFormVisible(true)}\n className={styles.addCommentButton}\n >\n {t('commentSection.addComment')}\n </Button>\n </Grid>\n </Grid>\n )}\n {formVisible && (\n <Box className={styles.commentForm}>\n <CommentForm\n submit={postComment}\n saveButtonTitle={t('commentSection.post')}\n disabled={posting}\n />\n </Box>\n )}\n </OptionalRequirePermission>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftMenu.esm.js","sources":["../../../src/components/LeftMenu/LeftMenu.tsx"],"sourcesContent":["import {\n Box,\n ListItemIcon,\n makeStyles,\n MenuItem,\n MenuList,\n SvgIcon,\n Typography,\n Divider,\n} from '@material-ui/core';\nimport AccountBox from '@material-ui/icons/AccountBox';\nimport LoyaltyOutlined from '@material-ui/icons/LoyaltyOutlined';\nimport StarIcon from '@material-ui/icons/Star';\nimport { KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useApp, useRouteRef } from '@backstage/core-plugin-api';\nimport HelpOutlined from '@material-ui/icons/HelpOutlined';\nimport { useNavigate } from 'react-router-dom';\nimport Home from '@material-ui/icons/Home';\nimport { useLocation } from 'react-use';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport PlaylistPlay from '@material-ui/icons/PlaylistPlay';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport { GroupIcon } from '@backstage/core-components';\nimport {\n articlesRouteRef,\n collectionsRouteRef,\n entitiesRouteRef,\n favoriteQuestionsRouteRef,\n moderatorRouteRef,\n qetaRouteRef,\n questionsRouteRef,\n statisticsRouteRef,\n tagsRouteRef,\n userRouteRef,\n usersRouteRef,\n} from '../../routes';\nimport { TrophyIcon } from '../TopRankingUsersCard';\nimport { useIdentityApi, useIsModerator } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport type QetaLeftMenuClassKey =\n | 'leftMenu'\n | 'inPopup'\n | 'outsidePopup'\n | 'selectedMenuItem'\n | 'nonSelectedMenuItem'\n | 'menuIcon';\n\nexport const useStyles = makeStyles(\n theme => {\n return {\n leftMenu: {\n top: '0',\n width: '200px',\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n transition: 'all 0.2s ease-in-out',\n },\n inPopup: {\n marginRight: 0,\n padding: theme.spacing(1),\n },\n outsidePopup: {\n marginRight: theme.spacing(3),\n float: 'right',\n position: 'sticky',\n top: theme.spacing(2),\n },\n selectedMenuItem: {\n color: theme.palette.primary.contrastText,\n backgroundColor: theme.palette.primary.main,\n borderRadius: theme.shape.borderRadius,\n margin: theme.spacing(0.5, 1),\n padding: theme.spacing(0.75, 1.5),\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n color: theme.palette.primary.contrastText,\n transform: 'translateX(4px)',\n },\n '& svg': {\n color: theme.palette.primary.contrastText,\n },\n },\n nonSelectedMenuItem: {\n margin: theme.spacing(0.5, 1),\n padding: theme.spacing(0.75, 1.5),\n borderRadius: theme.shape.borderRadius,\n transition: 'all 0.2s ease-in-out',\n color: theme.palette.text.primary,\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n transform: 'translateX(4px)',\n },\n },\n menuIcon: {\n minWidth: '32px',\n color: 'inherit',\n },\n sectionHeader: {\n padding: theme.spacing(1, 2, 0.5, 2),\n marginTop: theme.spacing(2),\n color: theme.palette.text.secondary,\n fontSize: '0.875rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n },\n divider: {\n margin: theme.spacing(1, 2),\n backgroundColor: theme.palette.divider,\n },\n };\n },\n { name: 'QetaLeftMenu' },\n);\n\nexport const LeftMenu = (props: {\n onKeyDown?: (event: KeyboardEvent) => void;\n autoFocusItem?: boolean;\n onClick?: (event: MouseEvent<EventTarget>) => void;\n inPopup?: boolean;\n}) => {\n const rootRoute = useRouteRef(qetaRouteRef);\n const tagsRoute = useRouteRef(tagsRouteRef);\n const favoritesRoute = useRouteRef(favoriteQuestionsRouteRef);\n const statisticsRoute = useRouteRef(statisticsRouteRef);\n const userRoute = useRouteRef(userRouteRef);\n const questionsRoute = useRouteRef(questionsRouteRef);\n const articlesRoute = useRouteRef(articlesRouteRef);\n const collectionsRoute = useRouteRef(collectionsRouteRef);\n const entitiesRoute = useRouteRef(entitiesRouteRef);\n const usersRoute = useRouteRef(usersRouteRef);\n const moderatorRoute = useRouteRef(moderatorRouteRef);\n const styles = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const location = useLocation();\n const navigate = useNavigate();\n const { isModerator } = useIsModerator();\n const app = useApp();\n const {\n value: user,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n const CustomMenuItem = ({\n route,\n hasSubRoutes,\n children,\n }: {\n route: string;\n hasSubRoutes?: boolean;\n children: ReactNode[];\n }) => {\n return (\n <MenuItem\n onClick={e => {\n if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) {\n return;\n }\n e.preventDefault();\n navigate(route);\n if (props.onClick) {\n props.onClick(e);\n }\n }}\n className={\n route === location.pathname ||\n (hasSubRoutes && location.pathname?.startsWith(route))\n ? styles.selectedMenuItem\n : styles.nonSelectedMenuItem\n }\n href={route}\n component=\"a\"\n >\n {children}\n </MenuItem>\n );\n };\n\n const EntityIcon = app.getSystemIcon('kind:system') ?? SvgIcon;\n\n return (\n <MenuList\n id=\"left-menu\"\n className={`${styles.leftMenu} ${\n props.inPopup ? styles.inPopup : styles.outsidePopup\n }`}\n onKeyDown={props.onKeyDown}\n autoFocusItem={props.autoFocusItem}\n >\n <Box\n display={\n props.inPopup\n ? {}\n : { xs: 'none', sm: 'none', md: 'none', lg: 'block' }\n }\n >\n <CustomMenuItem route={rootRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <Home fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.home')}\n </CustomMenuItem>\n\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.content')}\n </Typography>\n <Divider className={styles.divider} />\n\n <CustomMenuItem route={questionsRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <HelpOutlined fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.questions')}\n </CustomMenuItem>\n\n <CustomMenuItem route={articlesRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <CollectionsBookmarkIcon fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.articles')}\n </CustomMenuItem>\n\n <CustomMenuItem route={favoritesRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <StarIcon fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.favoriteQuestions')}\n </CustomMenuItem>\n\n <CustomMenuItem route={entitiesRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <EntityIcon fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.entities')}\n </CustomMenuItem>\n\n <CustomMenuItem route={tagsRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <LoyaltyOutlined fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.tags')}\n </CustomMenuItem>\n\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.community')}\n </Typography>\n <Divider className={styles.divider} />\n\n <CustomMenuItem route={collectionsRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <PlaylistPlay fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.collections')}\n </CustomMenuItem>\n\n <CustomMenuItem route={usersRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <GroupIcon fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.users')}\n </CustomMenuItem>\n\n {user && !loadingUser && !userError && (\n <CustomMenuItem route={`${userRoute()}/${user.userEntityRef}`}>\n <ListItemIcon className={styles.menuIcon}>\n <AccountBox fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.profile')}\n </CustomMenuItem>\n )}\n\n <CustomMenuItem route={statisticsRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <TrophyIcon />\n </ListItemIcon>\n {t('leftMenu.statistics')}\n </CustomMenuItem>\n\n {isModerator && (\n <>\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.manage')}\n </Typography>\n <Divider className={styles.divider} />\n\n <CustomMenuItem route={moderatorRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <SettingsIcon />\n </ListItemIcon>\n {t('leftMenu.moderate')}\n </CustomMenuItem>\n </>\n )}\n </Box>\n </MenuList>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LeftMenu.esm.js","sources":["../../../src/components/LeftMenu/LeftMenu.tsx"],"sourcesContent":["import {\n Box,\n Divider,\n ListItemIcon,\n makeStyles,\n MenuItem,\n MenuList,\n SvgIcon,\n Typography,\n} from '@material-ui/core';\nimport AccountBox from '@material-ui/icons/AccountBox';\nimport LoyaltyOutlined from '@material-ui/icons/LoyaltyOutlined';\nimport StarIcon from '@material-ui/icons/Star';\nimport { KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useApp, useRouteRef } from '@backstage/core-plugin-api';\nimport HelpOutlined from '@material-ui/icons/HelpOutlined';\nimport { useNavigate } from 'react-router-dom';\nimport Home from '@material-ui/icons/Home';\nimport { useLocation } from 'react-use';\nimport CollectionsBookmarkIcon from '@material-ui/icons/CollectionsBookmark';\nimport PlaylistPlay from '@material-ui/icons/PlaylistPlay';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport { GroupIcon } from '@backstage/core-components';\nimport {\n articlesRouteRef,\n collectionsRouteRef,\n entitiesRouteRef,\n favoriteQuestionsRouteRef,\n moderatorRouteRef,\n qetaRouteRef,\n questionsRouteRef,\n statisticsRouteRef,\n tagsRouteRef,\n userRouteRef,\n usersRouteRef,\n} from '../../routes';\nimport { TrophyIcon } from '../TopRankingUsersCard';\nimport { useIdentityApi, useIsModerator } from '../../hooks';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport type QetaLeftMenuClassKey =\n | 'leftMenu'\n | 'inPopup'\n | 'outsidePopup'\n | 'selectedMenuItem'\n | 'nonSelectedMenuItem'\n | 'menuIcon';\n\nexport const useStyles = makeStyles(\n theme => {\n return {\n leftMenu: {\n top: '0',\n width: '200px',\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n transition: 'all 0.2s ease-in-out',\n },\n inPopup: {\n marginRight: 0,\n padding: theme.spacing(1),\n },\n outsidePopup: {\n marginRight: theme.spacing(3),\n float: 'right',\n position: 'sticky',\n top: theme.spacing(2),\n },\n selectedMenuItem: {\n color: theme.palette.primary.contrastText,\n backgroundColor: theme.palette.primary.main,\n borderRadius: theme.shape.borderRadius,\n margin: theme.spacing(0.5, 1),\n padding: theme.spacing(0.75, 1.5),\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n backgroundColor: theme.palette.primary.dark,\n color: theme.palette.primary.contrastText,\n transform: 'translateX(4px)',\n },\n '& svg': {\n color: theme.palette.primary.contrastText,\n },\n },\n nonSelectedMenuItem: {\n margin: theme.spacing(0.5, 1),\n padding: theme.spacing(0.75, 1.5),\n borderRadius: theme.shape.borderRadius,\n transition: 'all 0.2s ease-in-out',\n color: theme.palette.text.primary,\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n transform: 'translateX(4px)',\n },\n },\n menuIcon: {\n minWidth: '32px',\n color: 'inherit',\n },\n sectionHeader: {\n padding: theme.spacing(1, 2, 0.5, 2),\n marginTop: theme.spacing(2),\n color: theme.palette.text.secondary,\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n },\n divider: {\n margin: theme.spacing(1, 2),\n backgroundColor: theme.palette.divider,\n },\n };\n },\n { name: 'QetaLeftMenu' },\n);\n\nexport const LeftMenu = (props: {\n onKeyDown?: (event: KeyboardEvent) => void;\n autoFocusItem?: boolean;\n onClick?: (event: MouseEvent<EventTarget>) => void;\n inPopup?: boolean;\n}) => {\n const rootRoute = useRouteRef(qetaRouteRef);\n const tagsRoute = useRouteRef(tagsRouteRef);\n const favoritesRoute = useRouteRef(favoriteQuestionsRouteRef);\n const statisticsRoute = useRouteRef(statisticsRouteRef);\n const userRoute = useRouteRef(userRouteRef);\n const questionsRoute = useRouteRef(questionsRouteRef);\n const articlesRoute = useRouteRef(articlesRouteRef);\n const collectionsRoute = useRouteRef(collectionsRouteRef);\n const entitiesRoute = useRouteRef(entitiesRouteRef);\n const usersRoute = useRouteRef(usersRouteRef);\n const moderatorRoute = useRouteRef(moderatorRouteRef);\n const styles = useStyles();\n const { t } = useTranslationRef(qetaTranslationRef);\n const location = useLocation();\n const navigate = useNavigate();\n const { isModerator } = useIsModerator();\n const app = useApp();\n const {\n value: user,\n loading: loadingUser,\n error: userError,\n } = useIdentityApi(api => api.getBackstageIdentity(), []);\n\n const CustomMenuItem = ({\n route,\n hasSubRoutes,\n children,\n }: {\n route: string;\n hasSubRoutes?: boolean;\n children: ReactNode[];\n }) => {\n return (\n <MenuItem\n onClick={e => {\n if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) {\n return;\n }\n e.preventDefault();\n navigate(route);\n if (props.onClick) {\n props.onClick(e);\n }\n }}\n className={\n route === location.pathname ||\n (hasSubRoutes && location.pathname?.startsWith(route))\n ? styles.selectedMenuItem\n : styles.nonSelectedMenuItem\n }\n href={route}\n component=\"a\"\n >\n {children}\n </MenuItem>\n );\n };\n\n const EntityIcon = app.getSystemIcon('kind:system') ?? SvgIcon;\n\n return (\n <MenuList\n id=\"left-menu\"\n className={`${styles.leftMenu} ${\n props.inPopup ? styles.inPopup : styles.outsidePopup\n }`}\n onKeyDown={props.onKeyDown}\n autoFocusItem={props.autoFocusItem}\n >\n <Box\n display={\n props.inPopup\n ? {}\n : { xs: 'none', sm: 'none', md: 'none', lg: 'block' }\n }\n >\n <CustomMenuItem route={rootRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <Home fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.home')}\n </CustomMenuItem>\n\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.content')}\n </Typography>\n <Divider className={styles.divider} />\n\n <CustomMenuItem route={questionsRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <HelpOutlined fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.questions')}\n </CustomMenuItem>\n\n <CustomMenuItem route={articlesRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <CollectionsBookmarkIcon fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.articles')}\n </CustomMenuItem>\n\n <CustomMenuItem route={favoritesRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <StarIcon fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.favoriteQuestions')}\n </CustomMenuItem>\n\n <CustomMenuItem route={entitiesRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <EntityIcon fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.entities')}\n </CustomMenuItem>\n\n <CustomMenuItem route={tagsRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <LoyaltyOutlined fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.tags')}\n </CustomMenuItem>\n\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.community')}\n </Typography>\n <Divider className={styles.divider} />\n\n <CustomMenuItem route={collectionsRoute()} hasSubRoutes>\n <ListItemIcon className={styles.menuIcon}>\n <PlaylistPlay fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.collections')}\n </CustomMenuItem>\n\n <CustomMenuItem route={usersRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <GroupIcon fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.users')}\n </CustomMenuItem>\n\n {user && !loadingUser && !userError && (\n <CustomMenuItem route={`${userRoute()}/${user.userEntityRef}`}>\n <ListItemIcon className={styles.menuIcon}>\n <AccountBox fontSize=\"small\" />\n </ListItemIcon>\n {t('leftMenu.profile')}\n </CustomMenuItem>\n )}\n\n <CustomMenuItem route={statisticsRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <TrophyIcon />\n </ListItemIcon>\n {t('leftMenu.statistics')}\n </CustomMenuItem>\n\n {isModerator && (\n <>\n <Typography className={styles.sectionHeader}>\n {t('leftMenu.manage')}\n </Typography>\n <Divider className={styles.divider} />\n\n <CustomMenuItem route={moderatorRoute()}>\n <ListItemIcon className={styles.menuIcon}>\n <SettingsIcon />\n </ListItemIcon>\n {t('leftMenu.moderate')}\n </CustomMenuItem>\n </>\n )}\n </Box>\n </MenuList>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownRenderer.esm.js","sources":["../../../src/components/MarkdownRenderer/MarkdownRenderer.tsx"],"sourcesContent":["import { Children, createElement, PropsWithChildren, useEffect } from 'react';\nimport SyntaxHighlighter from 'react-syntax-highlighter';\nimport ReactMarkdown from 'react-markdown';\nimport {\n a11yDark,\n a11yLight,\n} from 'react-syntax-highlighter/dist/esm/styles/hljs';\nimport { IconButton, makeStyles, Tooltip, Typography } from '@material-ui/core';\nimport {\n findTagMentions,\n findUserMentions,\n} from '@drodil/backstage-plugin-qeta-common';\nimport gfm from 'remark-gfm';\nimport rehypeSlug from 'rehype-slug';\nimport rehypeToc, { HeadingNode, TextNode } from '@jsdevtools/rehype-toc';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useIsDarkTheme } from '../../hooks/useIsDarkTheme';\nimport { BackstageOverrides } from '@backstage/core-components';\nimport LinkIcon from '@material-ui/icons/Link';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { Variant } from '@material-ui/core/styles/createTypography';\nimport GithubSlugger from 'github-slugger';\nimport { HtmlElementNode } from '@jsdevtools/rehype-toc/lib/types';\nimport { find } from 'unist-util-find';\nimport { TagChip } from '../TagsAndEntities/TagChip';\n\nconst slugger = new GithubSlugger();\n\nexport type QetaMarkdownContentClassKey =\n | 'markdown'\n | 'header'\n | 'tocHeader'\n | 'toc'\n | 'tocList'\n | 'tocListItem'\n | 'tocLink';\n\nconst useStyles = makeStyles(\n theme => {\n const overrides = theme.overrides as BackstageOverrides;\n return {\n markdown: {\n lineHeight: 1.75,\n '& p': {\n ...theme.typography?.body1,\n margin: '0 0 1em 0',\n wordBreak: 'break-word',\n },\n '& h1': {\n ...theme.typography?.h1,\n marginBottom: 2,\n marginTop: '1.5em',\n },\n '& h2': {\n ...theme.typography?.h2,\n marginBottom: 2,\n marginTop: '1.2em',\n },\n '& h3': {\n ...theme.typography?.h3,\n marginBottom: 2,\n marginTop: '1em',\n },\n '& h4': {\n ...theme.typography?.h4,\n marginBottom: 2,\n marginTop: '0.8em',\n },\n '& h5': {\n ...theme.typography?.h5,\n marginBottom: 2,\n marginTop: '0.7em',\n },\n '& h6': {\n ...theme.typography?.h6,\n marginBottom: 2,\n marginTop: '0.6em',\n },\n '& table': {\n borderCollapse: 'collapse',\n border: `1px solid ${theme.palette.border}`,\n },\n '& th, & td': {\n border: `1px solid ${theme.palette.border}`,\n padding: theme.spacing(1),\n },\n '& td': {\n wordBreak: 'break-word',\n overflow: 'hidden',\n verticalAlign: 'middle',\n lineHeight: '1',\n margin: 0,\n padding: theme.spacing(3, 2, 3, 2.5),\n borderBottom: 0,\n },\n '& th': {\n backgroundColor: theme.palette.background.paper,\n },\n '& tr': {\n backgroundColor: theme.palette.background.paper,\n },\n '& tr:nth-child(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n '& a': {\n color: theme.palette.link,\n },\n '& img': {\n maxWidth: '100%',\n },\n '& code': {\n fontFamily: 'Courier New,Courier,monospace',\n fontStyle: 'normal',\n display: 'block',\n width: '100%',\n overflowX: 'auto',\n borderRadius: 4,\n padding: '0.2em 0.4em',\n fontSize: '0.97em',\n },\n '& em': {\n fontStyle: 'italic !important',\n },\n '& ol': {\n listStyle: 'decimal',\n marginLeft: '2em',\n marginBottom: '1em',\n marginTop: '1em',\n },\n '& ul': {\n listStyle: 'disc',\n marginLeft: '2em',\n marginBottom: '1em',\n marginTop: '1em',\n },\n '& blockquote': {\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n padding: '1em 1.5em',\n margin: '1.5em 0',\n color: theme.palette.text.secondary,\n borderLeft: `4px solid ${theme.palette.divider}`,\n },\n '& li': {\n marginTop: '0.5em',\n },\n '& *:first-child': {\n marginTop: 0,\n },\n '& *:last-child': {\n marginBottom: 0,\n },\n ...(overrides?.BackstageMarkdownContent ?? {}),\n },\n codeBlockContainer: {\n position: 'relative',\n '& .copyCodeButton': {\n opacity: 0,\n pointerEvents: 'none',\n transition: 'opacity 0.2s',\n },\n '&:hover .copyCodeButton': {\n opacity: 1,\n pointerEvents: 'auto',\n },\n },\n header: {\n '& .anchor-link': {\n display: 'none',\n marginLeft: '0.5em',\n },\n '&:hover .anchor-link': {\n display: 'inline-block',\n },\n },\n tocHeader: {\n marginTop: '0.5em',\n marginBottom: 0,\n },\n toc: {\n marginTop: '0.5em',\n marginLeft: '0.2em',\n paddingBottom: '1em',\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n tocList: {\n marginLeft: '0 !important',\n marginTop: '0.5em !important',\n paddingInlineStart: '1em',\n counterReset: 'item',\n },\n tocListItem: {\n display: 'block',\n '&:before': {\n content: 'counters(item, \".\") \" \"',\n counterIncrement: 'item',\n },\n },\n tocLink: {\n color: theme.palette.link,\n },\n };\n },\n { name: 'QetaMarkdownContent' },\n);\n\nconst flatten = (text: string, child: any): string => {\n if (!child) return text;\n\n return typeof child === 'string'\n ? text + child\n : Children.toArray(child.props.children).reduce(flatten, text);\n};\n\nexport const MarkdownRenderer = (props: {\n content: string;\n className?: string;\n showToc?: boolean;\n useBlankLinks?: boolean;\n}) => {\n const { content, className: mainClassName, showToc, useBlankLinks } = props;\n const darkTheme = useIsDarkTheme();\n const { t } = useTranslationRef(qetaTranslationRef);\n const classes = useStyles();\n const alertApi = useApi(alertApiRef);\n slugger.reset();\n\n const copyToClipboard = (slug: string) => {\n const url = new URL(window.location.href);\n url.hash = `#${slug}`;\n window.navigator.clipboard.writeText(url.toString());\n alertApi.post({\n message: t('link.copied'),\n severity: 'info',\n display: 'transient',\n });\n };\n\n const copyCodeToClipboard = (code: string) => {\n window.navigator.clipboard.writeText(code);\n alertApi.post({\n message: t('code.copied'),\n severity: 'info',\n display: 'transient',\n });\n };\n\n const headingRenderer = (\n hProps: PropsWithChildren<{ node: { tagName: string } }>,\n ) => {\n const { node, children } = hProps;\n const childrenArray = Children.toArray(children);\n const text = childrenArray.reduce(flatten, '');\n const slug = slugger.slug(text);\n const link = (\n <Tooltip title={t('link.aria')}>\n <IconButton\n aria-label={t('link.aria')}\n onClick={() => copyToClipboard(slug)}\n size=\"small\"\n className=\"anchor-link\"\n >\n <LinkIcon />\n </IconButton>\n </Tooltip>\n );\n return (\n <>\n {createElement(\n Typography,\n {\n variant: node.tagName as Variant,\n id: slug,\n className: classes.header,\n },\n [children, link],\n )}\n </>\n );\n };\n\n useEffect(() => {\n if (!window.location.hash) {\n return;\n }\n\n const id = window.location.hash.slice(1);\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({ behavior: 'auto', block: 'start' });\n }\n }, []);\n\n const rehypePlugins: import('unified').PluggableList = [[rehypeSlug]];\n if (showToc) {\n rehypePlugins.push([\n rehypeToc,\n {\n cssClasses: {\n toc: classes.toc,\n list: classes.tocList,\n listItem: classes.tocListItem,\n link: classes.tocLink,\n },\n customizeTOC: (toc: HtmlElementNode) => {\n const listItems = find(toc, { tagName: 'li' });\n if (!toc.children || !listItems) {\n return false;\n }\n const tocHeader: TextNode = {\n type: 'text',\n value: t('markdown.toc'),\n };\n const heading: HeadingNode = {\n type: 'element',\n tagName: 'h3',\n properties: {},\n children: [tocHeader],\n };\n\n toc.children.unshift(heading);\n return toc;\n },\n },\n ]);\n }\n\n return (\n <ReactMarkdown\n remarkPlugins={[gfm]}\n rehypePlugins={rehypePlugins}\n className={`${classes.markdown} ${mainClassName ?? ''}`.trim()}\n components={{\n h1: (p: any) => headingRenderer(p),\n h2: (p: any) => headingRenderer(p),\n h3: (p: any) => headingRenderer(p),\n h4: (p: any) => headingRenderer(p),\n h5: (p: any) => headingRenderer(p),\n h6: (p: any) => headingRenderer(p),\n p: (p: any) => {\n const { children } = p;\n const arr = Children.toArray(children);\n const formatted = arr.map((child: any) => {\n if (typeof child !== 'string') {\n return child;\n }\n const userMentions = findUserMentions(child);\n const tagMentions = findTagMentions(child);\n if (userMentions.length === 0 && tagMentions.length === 0) {\n return child;\n }\n\n return child.split(' ').map((word: string) => {\n const userMention = userMentions.find(m => word === m);\n if (userMention) {\n return (\n <>\n <EntityRefLink\n entityRef={userMention.slice(1)}\n hideIcon\n target={useBlankLinks ? '_blank' : undefined}\n />{' '}\n </>\n );\n }\n\n const tagMention = tagMentions.find(m => word === m);\n if (tagMention) {\n return (\n <TagChip\n tag={tagMention.slice(1)}\n style={{ marginBottom: 0 }}\n useHref={useBlankLinks}\n key={tagMention}\n />\n );\n }\n\n return <>{word} </>;\n });\n });\n\n return <p>{formatted}</p>;\n },\n code(p: any) {\n const { children, className, node, ...rest } = p;\n const match = /language-(\\w+)/.exec(className || '');\n const codeString = String(children).replace(/\\n$/, '');\n return match ? (\n <div className={classes.codeBlockContainer}>\n <SyntaxHighlighter\n {...rest}\n PreTag=\"div\"\n language={match[1]}\n style={darkTheme ? a11yDark : a11yLight}\n showLineNumbers\n >\n {codeString}\n </SyntaxHighlighter>\n <Tooltip title={t('code.aria')}>\n <IconButton\n aria-label={t('code.aria')}\n size=\"small\"\n className=\"copyCodeButton\"\n style={{\n position: 'absolute',\n top: 8,\n right: 8,\n zIndex: 2,\n }}\n onClick={() => copyCodeToClipboard(codeString)}\n >\n <FileCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </div>\n ) : (\n <code {...rest} className={className}>\n {children}\n </code>\n );\n },\n }}\n >\n {content}\n </ReactMarkdown>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkdownRenderer.esm.js","sources":["../../../src/components/MarkdownRenderer/MarkdownRenderer.tsx"],"sourcesContent":["import { Children, createElement, PropsWithChildren, useEffect } from 'react';\nimport SyntaxHighlighter from 'react-syntax-highlighter';\nimport ReactMarkdown from 'react-markdown';\nimport {\n a11yDark,\n a11yLight,\n} from 'react-syntax-highlighter/dist/esm/styles/hljs';\nimport { IconButton, makeStyles, Tooltip, Typography } from '@material-ui/core';\nimport {\n findTagMentions,\n findUserMentions,\n} from '@drodil/backstage-plugin-qeta-common';\nimport gfm from 'remark-gfm';\nimport rehypeSlug from 'rehype-slug';\nimport rehypeToc, { HeadingNode, TextNode } from '@jsdevtools/rehype-toc';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useIsDarkTheme } from '../../hooks/useIsDarkTheme';\nimport { BackstageOverrides } from '@backstage/core-components';\nimport LinkIcon from '@material-ui/icons/Link';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { Variant } from '@material-ui/core/styles/createTypography';\nimport GithubSlugger from 'github-slugger';\nimport { HtmlElementNode } from '@jsdevtools/rehype-toc/lib/types';\nimport { find } from 'unist-util-find';\nimport { TagChip } from '../TagsAndEntities/TagChip';\n\nconst slugger = new GithubSlugger();\n\nexport type QetaMarkdownContentClassKey =\n | 'markdown'\n | 'header'\n | 'tocHeader'\n | 'toc'\n | 'tocList'\n | 'tocListItem'\n | 'tocLink';\n\nconst useStyles = makeStyles(\n theme => {\n const overrides = theme.overrides as BackstageOverrides;\n return {\n markdown: {\n lineHeight: 1.75,\n '& p': {\n ...theme.typography?.body1,\n margin: '0 0 1em 0',\n wordBreak: 'break-word',\n },\n '& h1': {\n ...theme.typography?.h1,\n marginBottom: 2,\n marginTop: '1.5em',\n },\n '& h2': {\n ...theme.typography?.h2,\n marginBottom: 2,\n marginTop: '1.2em',\n },\n '& h3': {\n ...theme.typography?.h3,\n marginBottom: 2,\n marginTop: '1em',\n },\n '& h4': {\n ...theme.typography?.h4,\n marginBottom: 2,\n marginTop: '0.8em',\n },\n '& h5': {\n ...theme.typography?.h5,\n marginBottom: 2,\n marginTop: '0.7em',\n },\n '& h6': {\n ...theme.typography?.h6,\n marginBottom: 2,\n marginTop: '0.6em',\n },\n '& table': {\n borderCollapse: 'collapse',\n border: `1px solid ${theme.palette.border}`,\n },\n '& th, & td': {\n border: `1px solid ${theme.palette.border}`,\n padding: theme.spacing(1),\n },\n '& td': {\n wordBreak: 'break-word',\n overflow: 'hidden',\n verticalAlign: 'middle',\n lineHeight: '1',\n margin: 0,\n padding: theme.spacing(3, 2, 3, 2.5),\n borderBottom: 0,\n },\n '& th': {\n backgroundColor: theme.palette.background.paper,\n },\n '& tr': {\n backgroundColor: theme.palette.background.paper,\n },\n '& tr:nth-child(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n '& a': {\n color: theme.palette.link,\n },\n '& img': {\n maxWidth: '100%',\n },\n '& code': {\n fontFamily: 'Courier New,Courier,monospace',\n fontStyle: 'normal',\n display: 'block',\n width: '100%',\n overflowX: 'auto',\n borderRadius: 4,\n padding: '0.2em 0.4em',\n },\n '& em': {\n fontStyle: 'italic !important',\n },\n '& ol': {\n listStyle: 'decimal',\n marginLeft: '2em',\n marginBottom: '1em',\n marginTop: '1em',\n },\n '& ul': {\n listStyle: 'disc',\n marginLeft: '2em',\n marginBottom: '1em',\n marginTop: '1em',\n },\n '& blockquote': {\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n padding: '1em 1.5em',\n margin: '1.5em 0',\n color: theme.palette.text.secondary,\n borderLeft: `4px solid ${theme.palette.divider}`,\n },\n '& li': {\n marginTop: '0.5em',\n },\n '& *:first-child': {\n marginTop: 0,\n },\n '& *:last-child': {\n marginBottom: 0,\n },\n ...(overrides?.BackstageMarkdownContent ?? {}),\n },\n codeBlockContainer: {\n position: 'relative',\n '& .copyCodeButton': {\n opacity: 0,\n pointerEvents: 'none',\n transition: 'opacity 0.2s',\n },\n '&:hover .copyCodeButton': {\n opacity: 1,\n pointerEvents: 'auto',\n },\n },\n header: {\n '& .anchor-link': {\n display: 'none',\n marginLeft: '0.5em',\n },\n '&:hover .anchor-link': {\n display: 'inline-block',\n },\n },\n tocHeader: {\n marginTop: '0.5em',\n marginBottom: 0,\n },\n toc: {\n marginTop: '0.5em',\n marginLeft: '0.2em',\n paddingBottom: '1em',\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n tocList: {\n marginLeft: '0 !important',\n marginTop: '0.5em !important',\n paddingInlineStart: '1em',\n counterReset: 'item',\n },\n tocListItem: {\n display: 'block',\n '&:before': {\n content: 'counters(item, \".\") \" \"',\n counterIncrement: 'item',\n },\n },\n tocLink: {\n color: theme.palette.link,\n },\n };\n },\n { name: 'QetaMarkdownContent' },\n);\n\nconst flatten = (text: string, child: any): string => {\n if (!child) return text;\n\n return typeof child === 'string'\n ? text + child\n : Children.toArray(child.props.children).reduce(flatten, text);\n};\n\nexport const MarkdownRenderer = (props: {\n content: string;\n className?: string;\n showToc?: boolean;\n useBlankLinks?: boolean;\n}) => {\n const { content, className: mainClassName, showToc, useBlankLinks } = props;\n const darkTheme = useIsDarkTheme();\n const { t } = useTranslationRef(qetaTranslationRef);\n const classes = useStyles();\n const alertApi = useApi(alertApiRef);\n slugger.reset();\n\n const copyToClipboard = (slug: string) => {\n const url = new URL(window.location.href);\n url.hash = `#${slug}`;\n window.navigator.clipboard.writeText(url.toString());\n alertApi.post({\n message: t('link.copied'),\n severity: 'info',\n display: 'transient',\n });\n };\n\n const copyCodeToClipboard = (code: string) => {\n window.navigator.clipboard.writeText(code);\n alertApi.post({\n message: t('code.copied'),\n severity: 'info',\n display: 'transient',\n });\n };\n\n const headingRenderer = (\n hProps: PropsWithChildren<{ node: { tagName: string } }>,\n ) => {\n const { node, children } = hProps;\n const childrenArray = Children.toArray(children);\n const text = childrenArray.reduce(flatten, '');\n const slug = slugger.slug(text);\n const link = (\n <Tooltip title={t('link.aria')}>\n <IconButton\n aria-label={t('link.aria')}\n onClick={() => copyToClipboard(slug)}\n size=\"small\"\n className=\"anchor-link\"\n >\n <LinkIcon />\n </IconButton>\n </Tooltip>\n );\n return (\n <>\n {createElement(\n Typography,\n {\n variant: node.tagName as Variant,\n id: slug,\n className: classes.header,\n },\n [children, link],\n )}\n </>\n );\n };\n\n useEffect(() => {\n if (!window.location.hash) {\n return;\n }\n\n const id = window.location.hash.slice(1);\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({ behavior: 'auto', block: 'start' });\n }\n }, []);\n\n const rehypePlugins: import('unified').PluggableList = [[rehypeSlug]];\n if (showToc) {\n rehypePlugins.push([\n rehypeToc,\n {\n cssClasses: {\n toc: classes.toc,\n list: classes.tocList,\n listItem: classes.tocListItem,\n link: classes.tocLink,\n },\n customizeTOC: (toc: HtmlElementNode) => {\n const listItems = find(toc, { tagName: 'li' });\n if (!toc.children || !listItems) {\n return false;\n }\n const tocHeader: TextNode = {\n type: 'text',\n value: t('markdown.toc'),\n };\n const heading: HeadingNode = {\n type: 'element',\n tagName: 'h3',\n properties: {},\n children: [tocHeader],\n };\n\n toc.children.unshift(heading);\n return toc;\n },\n },\n ]);\n }\n\n return (\n <ReactMarkdown\n remarkPlugins={[gfm]}\n rehypePlugins={rehypePlugins}\n className={`${classes.markdown} ${mainClassName ?? ''}`.trim()}\n components={{\n h1: (p: any) => headingRenderer(p),\n h2: (p: any) => headingRenderer(p),\n h3: (p: any) => headingRenderer(p),\n h4: (p: any) => headingRenderer(p),\n h5: (p: any) => headingRenderer(p),\n h6: (p: any) => headingRenderer(p),\n p: (p: any) => {\n const { children } = p;\n const arr = Children.toArray(children);\n const formatted = arr.map((child: any) => {\n if (typeof child !== 'string') {\n return child;\n }\n const userMentions = findUserMentions(child);\n const tagMentions = findTagMentions(child);\n if (userMentions.length === 0 && tagMentions.length === 0) {\n return child;\n }\n\n return child.split(' ').map((word: string) => {\n const userMention = userMentions.find(m => word === m);\n if (userMention) {\n return (\n <>\n <EntityRefLink\n entityRef={userMention.slice(1)}\n hideIcon\n target={useBlankLinks ? '_blank' : undefined}\n />{' '}\n </>\n );\n }\n\n const tagMention = tagMentions.find(m => word === m);\n if (tagMention) {\n return (\n <TagChip\n tag={tagMention.slice(1)}\n style={{ marginBottom: 0 }}\n useHref={useBlankLinks}\n key={tagMention}\n />\n );\n }\n\n return <>{word} </>;\n });\n });\n\n return <p>{formatted}</p>;\n },\n code(p: any) {\n const { children, className, node, ...rest } = p;\n const match = /language-(\\w+)/.exec(className || '');\n const codeString = String(children).replace(/\\n$/, '');\n return match ? (\n <div className={classes.codeBlockContainer}>\n <SyntaxHighlighter\n {...rest}\n PreTag=\"div\"\n language={match[1]}\n style={darkTheme ? a11yDark : a11yLight}\n showLineNumbers\n >\n {codeString}\n </SyntaxHighlighter>\n <Tooltip title={t('code.aria')}>\n <IconButton\n aria-label={t('code.aria')}\n size=\"small\"\n className=\"copyCodeButton\"\n style={{\n position: 'absolute',\n top: 8,\n right: 8,\n zIndex: 2,\n }}\n onClick={() => copyCodeToClipboard(codeString)}\n >\n <FileCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </div>\n ) : (\n <code {...rest} className={className}>\n {children}\n </code>\n );\n },\n }}\n >\n {content}\n </ReactMarkdown>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,6 @@ const useStyles = makeStyles((theme) => ({
|
|
|
44
44
|
justifyContent: "center",
|
|
45
45
|
borderRadius: 4,
|
|
46
46
|
fontWeight: 600,
|
|
47
|
-
fontSize: "0.9rem",
|
|
48
47
|
marginRight: theme.spacing(1),
|
|
49
48
|
marginLeft: theme.spacing(0.5),
|
|
50
49
|
background: theme.palette.background.paper,
|
|
@@ -60,7 +59,6 @@ const useStyles = makeStyles((theme) => ({
|
|
|
60
59
|
color: theme.palette.getContrastText(theme.palette.error.main)
|
|
61
60
|
},
|
|
62
61
|
listItemText: {
|
|
63
|
-
fontSize: "0.8rem",
|
|
64
62
|
color: theme.palette.text.primary,
|
|
65
63
|
whiteSpace: "nowrap",
|
|
66
64
|
overflow: "hidden",
|