@backstage-community/plugin-announcements 1.3.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/{alpha/Router.esm.js → Router.esm.js} +11 -7
  3. package/dist/Router.esm.js.map +1 -0
  4. package/dist/alpha/components/admin/announcements/AnnouncementForm/AnnouncementForm.esm.js.map +1 -0
  5. package/dist/alpha/components/admin/announcements/AnnouncementForm/CategoryInput.esm.js.map +1 -0
  6. package/dist/alpha/components/admin/announcements/AnnouncementForm/OnBehalfTeamDropdown.esm.js.map +1 -0
  7. package/dist/alpha/components/admin/announcements/AnnouncementForm/TagsInput.esm.js.map +1 -0
  8. package/dist/alpha/components/admin/announcements/AnnouncementsContent.esm.js +27 -23
  9. package/dist/alpha/components/admin/announcements/AnnouncementsContent.esm.js.map +1 -1
  10. package/dist/alpha/components/admin/announcements/AnnouncementsTable.esm.js +128 -121
  11. package/dist/alpha/components/admin/announcements/AnnouncementsTable.esm.js.map +1 -1
  12. package/dist/alpha/components/admin/announcements/AnnouncementsTableCard.esm.js +12 -21
  13. package/dist/alpha/components/admin/announcements/AnnouncementsTableCard.esm.js.map +1 -1
  14. package/dist/alpha/components/admin/categories/CategoriesTable.esm.js +43 -42
  15. package/dist/alpha/components/admin/categories/CategoriesTable.esm.js.map +1 -1
  16. package/dist/alpha/components/admin/categories/CategoriesTableCard.esm.js +2 -20
  17. package/dist/alpha/components/admin/categories/CategoriesTableCard.esm.js.map +1 -1
  18. package/dist/alpha/components/admin/tags/TagsTable.esm.js +43 -36
  19. package/dist/alpha/components/admin/tags/TagsTable.esm.js.map +1 -1
  20. package/dist/alpha/components/admin/tags/TagsTableCard.esm.js +2 -20
  21. package/dist/alpha/components/admin/tags/TagsTableCard.esm.js.map +1 -1
  22. package/dist/alpha/components/announcements/ViewAnnouncementPage.esm.js +0 -30
  23. package/dist/alpha/components/announcements/ViewAnnouncementPage.esm.js.map +1 -1
  24. package/dist/alpha/pages.esm.js +1 -1
  25. package/dist/alpha/pages.esm.js.map +1 -1
  26. package/dist/alpha/search.esm.js +5 -3
  27. package/dist/alpha/search.esm.js.map +1 -1
  28. package/dist/alpha.d.ts +2 -2
  29. package/dist/index.d.ts +1 -80
  30. package/dist/index.esm.js +1 -1
  31. package/dist/plugin.esm.js +2 -18
  32. package/dist/plugin.esm.js.map +1 -1
  33. package/package.json +13 -13
  34. package/dist/alpha/Router.esm.js.map +0 -1
  35. package/dist/components/Admin/AdminPortal/AdminPortal.esm.js +0 -65
  36. package/dist/components/Admin/AdminPortal/AdminPortal.esm.js.map +0 -1
  37. package/dist/components/Admin/AnnouncementsContent/AnnouncementForm/AnnouncementForm.esm.js.map +0 -1
  38. package/dist/components/Admin/AnnouncementsContent/AnnouncementForm/CategoryInput.esm.js.map +0 -1
  39. package/dist/components/Admin/AnnouncementsContent/AnnouncementForm/OnBehalfTeamDropdown.esm.js.map +0 -1
  40. package/dist/components/Admin/AnnouncementsContent/AnnouncementForm/TagsInput.esm.js.map +0 -1
  41. package/dist/components/Admin/AnnouncementsContent/AnnouncementsContent.esm.js +0 -305
  42. package/dist/components/Admin/AnnouncementsContent/AnnouncementsContent.esm.js.map +0 -1
  43. package/dist/components/Admin/CategoriesContent/CategoriesContent.esm.js +0 -143
  44. package/dist/components/Admin/CategoriesContent/CategoriesContent.esm.js.map +0 -1
  45. package/dist/components/Admin/TagsContent/TagsContent.esm.js +0 -158
  46. package/dist/components/Admin/TagsContent/TagsContent.esm.js.map +0 -1
  47. package/dist/components/Admin/index.esm.js +0 -3
  48. package/dist/components/Admin/index.esm.js.map +0 -1
  49. package/dist/components/Admin/shared/DeleteDialog/DeleteDialog.esm.js +0 -30
  50. package/dist/components/Admin/shared/DeleteDialog/DeleteDialog.esm.js.map +0 -1
  51. package/dist/components/Admin/shared/DeleteDialog/useDeleteDialogState.esm.js +0 -29
  52. package/dist/components/Admin/shared/DeleteDialog/useDeleteDialogState.esm.js.map +0 -1
  53. package/dist/components/Admin/shared/TitleForm/TitleForm.esm.js +0 -71
  54. package/dist/components/Admin/shared/TitleForm/TitleForm.esm.js.map +0 -1
  55. package/dist/components/AnnouncementPage/AnnouncementPage.esm.js +0 -99
  56. package/dist/components/AnnouncementPage/AnnouncementPage.esm.js.map +0 -1
  57. package/dist/components/AnnouncementsPage/AnnouncementsPage.esm.js +0 -197
  58. package/dist/components/AnnouncementsPage/AnnouncementsPage.esm.js.map +0 -1
  59. package/dist/components/AnnouncementsPage/ContextMenu.esm.js +0 -60
  60. package/dist/components/AnnouncementsPage/ContextMenu.esm.js.map +0 -1
  61. package/dist/components/AnnouncementsTimeline/AnnouncementsTimeline.esm.js +0 -75
  62. package/dist/components/AnnouncementsTimeline/AnnouncementsTimeline.esm.js.map +0 -1
  63. package/dist/components/Router.esm.js +0 -75
  64. package/dist/components/Router.esm.js.map +0 -1
  65. package/dist/components/index.esm.js +0 -5
  66. package/dist/components/index.esm.js.map +0 -1
  67. /package/dist/{components/Admin/AnnouncementsContent → alpha/components/admin/announcements}/AnnouncementForm/AnnouncementForm.esm.js +0 -0
  68. /package/dist/{components/Admin/AnnouncementsContent → alpha/components/admin/announcements}/AnnouncementForm/CategoryInput.esm.js +0 -0
  69. /package/dist/{components/Admin/AnnouncementsContent → alpha/components/admin/announcements}/AnnouncementForm/OnBehalfTeamDropdown.esm.js +0 -0
  70. /package/dist/{components/Admin/AnnouncementsContent → alpha/components/admin/announcements}/AnnouncementForm/TagsInput.esm.js +0 -0
@@ -1,197 +0,0 @@
1
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import { useState, useMemo } from 'react';
3
- import { useLocation } from 'react-router-dom';
4
- import { DateTime } from 'luxon';
5
- import { Page, Header, Content, Progress, ItemCardGrid, Link } from '@backstage/core-components';
6
- import { useRouteRef } from '@backstage/core-plugin-api';
7
- import { EntityRefLink } from '@backstage/plugin-catalog-react';
8
- import { useAnnouncementsPermissions, useAnnouncements, useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react';
9
- import { makeStyles, Tooltip, Typography, Box, Chip, Card, CardHeader, CardContent } from '@material-ui/core';
10
- import { Alert, Pagination } from '@material-ui/lab';
11
- import { rootRouteRef, announcementViewRouteRef } from '../../routes.esm.js';
12
- import { ContextMenu } from './ContextMenu.esm.js';
13
- import { formatAnnouncementStartTime } from '../utils/announcementDateUtils.esm.js';
14
- import { truncate } from '../utils/truncateUtils.esm.js';
15
-
16
- const useStyles = makeStyles((theme) => {
17
- return {
18
- cardHeader: {
19
- color: theme?.palette?.text?.primary || "#000"
20
- },
21
- pagination: {
22
- display: "flex",
23
- justifyContent: "center",
24
- marginTop: theme?.spacing?.(4) || 32
25
- }
26
- };
27
- });
28
- const AnnouncementCard = ({
29
- announcement,
30
- options: { titleLength = 50 },
31
- hideStartAt
32
- }) => {
33
- const classes = useStyles();
34
- const announcementsLink = useRouteRef(rootRouteRef);
35
- const viewAnnouncementLink = useRouteRef(announcementViewRouteRef);
36
- const { t } = useAnnouncementsTranslation();
37
- const title = /* @__PURE__ */ jsx(
38
- Tooltip,
39
- {
40
- title: announcement.title,
41
- disableFocusListener: true,
42
- "data-testid": "announcement-card-title-tooltip",
43
- children: /* @__PURE__ */ jsx(
44
- Link,
45
- {
46
- className: classes.cardHeader,
47
- to: viewAnnouncementLink({ id: announcement.id }),
48
- children: truncate(announcement.title, titleLength)
49
- }
50
- )
51
- }
52
- );
53
- const subTitle = /* @__PURE__ */ jsxs(Fragment, { children: [
54
- /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "textSecondary", component: "span", children: [
55
- t("announcementsPage.card.by"),
56
- " ",
57
- /* @__PURE__ */ jsx(
58
- EntityRefLink,
59
- {
60
- entityRef: announcement.on_behalf_of || announcement.publisher,
61
- hideIcon: true
62
- }
63
- ),
64
- announcement.category && /* @__PURE__ */ jsxs(Fragment, { children: [
65
- " ",
66
- t("announcementsPage.card.in"),
67
- " ",
68
- /* @__PURE__ */ jsx(
69
- Link,
70
- {
71
- to: `${announcementsLink()}?category=${announcement.category.slug}`,
72
- children: announcement.category.title
73
- }
74
- )
75
- ] }),
76
- ", ",
77
- DateTime.fromISO(announcement.created_at).toRelative()
78
- ] }),
79
- /* @__PURE__ */ jsx(Box, { children: !hideStartAt && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: formatAnnouncementStartTime(
80
- announcement.start_at,
81
- t("announcementsCard.occurred"),
82
- t("announcementsCard.scheduled"),
83
- t("announcementsCard.today")
84
- ) }) }),
85
- announcement.tags && announcement.tags.length > 0 && /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "textSecondary", children: /* @__PURE__ */ jsx(Box, { mt: 1, children: announcement.tags.map((tag) => /* @__PURE__ */ jsx(
86
- Chip,
87
- {
88
- size: "small",
89
- label: tag.title,
90
- component: Link,
91
- to: `${announcementsLink()}?tags=${tag.slug}`,
92
- clickable: true,
93
- style: { marginRight: 4, marginBottom: 4 }
94
- },
95
- tag.slug
96
- )) }) })
97
- ] });
98
- return /* @__PURE__ */ jsxs(Card, { children: [
99
- /* @__PURE__ */ jsx(CardHeader, { title, subheader: subTitle }),
100
- /* @__PURE__ */ jsx(CardContent, { children: announcement.excerpt })
101
- ] });
102
- };
103
- const AnnouncementsGrid = ({
104
- maxPerPage,
105
- category,
106
- tags,
107
- cardTitleLength,
108
- active,
109
- sortBy,
110
- order,
111
- hideStartAt
112
- }) => {
113
- const classes = useStyles();
114
- const location = useLocation();
115
- const queryParams = new URLSearchParams(location.search);
116
- const [page, setPage] = useState(1);
117
- const handleChange = (_event, value) => {
118
- setPage(value);
119
- };
120
- const tagsParam = queryParams.get("tags");
121
- const tagsFromUrl = useMemo(() => {
122
- return tagsParam ? tagsParam.split(",") : void 0;
123
- }, [tagsParam]);
124
- const { announcements, loading, error } = useAnnouncements(
125
- {
126
- max: maxPerPage,
127
- page,
128
- category,
129
- tags: tags || tagsFromUrl,
130
- active,
131
- sortBy,
132
- order
133
- },
134
- { dependencies: [maxPerPage, page, category, tagsFromUrl] }
135
- );
136
- if (loading) {
137
- return /* @__PURE__ */ jsx(Progress, {});
138
- } else if (error) {
139
- return /* @__PURE__ */ jsx(Alert, { severity: "error", children: error.message });
140
- }
141
- return /* @__PURE__ */ jsxs(Fragment, { children: [
142
- /* @__PURE__ */ jsx(ItemCardGrid, { children: announcements.results.map((announcement) => /* @__PURE__ */ jsx(
143
- AnnouncementCard,
144
- {
145
- announcement,
146
- options: { titleLength: cardTitleLength },
147
- hideStartAt
148
- },
149
- announcement.id
150
- )) }),
151
- announcements && announcements.count !== 0 && /* @__PURE__ */ jsx("div", { className: classes.pagination, children: /* @__PURE__ */ jsx(
152
- Pagination,
153
- {
154
- count: Math.ceil(announcements.count / maxPerPage),
155
- page,
156
- onChange: handleChange
157
- }
158
- ) })
159
- ] });
160
- };
161
- const AnnouncementsPage = (props) => {
162
- const location = useLocation();
163
- const queryParams = new URLSearchParams(location.search);
164
- const permissions = useAnnouncementsPermissions();
165
- const {
166
- hideContextMenu,
167
- hideInactive,
168
- hideStartAt,
169
- themeId,
170
- title,
171
- subtitle,
172
- maxPerPage,
173
- category,
174
- cardOptions,
175
- sortby,
176
- order
177
- } = props;
178
- return /* @__PURE__ */ jsxs(Page, { themeId, children: [
179
- /* @__PURE__ */ jsx(Header, { title, subtitle, children: !hideContextMenu && !permissions.create.loading && permissions.create.allowed && /* @__PURE__ */ jsx(ContextMenu, {}) }),
180
- /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(
181
- AnnouncementsGrid,
182
- {
183
- maxPerPage: maxPerPage ?? 10,
184
- category: category ?? queryParams.get("category") ?? void 0,
185
- tags: props.tags,
186
- cardTitleLength: cardOptions?.titleLength,
187
- active: !!hideInactive,
188
- sortBy: sortby ?? "created_at",
189
- order: order ?? "desc",
190
- hideStartAt
191
- }
192
- ) })
193
- ] });
194
- };
195
-
196
- export { AnnouncementsPage };
197
- //# sourceMappingURL=AnnouncementsPage.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnnouncementsPage.esm.js","sources":["../../../src/components/AnnouncementsPage/AnnouncementsPage.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useState, ReactNode, useMemo } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { Announcement } from '@backstage-community/plugin-announcements-common';\nimport { DateTime } from 'luxon';\nimport {\n Page,\n Header,\n Content,\n Link,\n ItemCardGrid,\n Progress,\n} from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport {\n useAnnouncements,\n useAnnouncementsTranslation,\n useAnnouncementsPermissions,\n} from '@backstage-community/plugin-announcements-react';\nimport {\n Box,\n Card,\n CardContent,\n CardHeader,\n Chip,\n makeStyles,\n Tooltip,\n Typography,\n} from '@material-ui/core';\nimport { Alert, Pagination } from '@material-ui/lab';\n\nimport { announcementViewRouteRef, rootRouteRef } from '../../routes';\nimport { ContextMenu } from './ContextMenu';\nimport { formatAnnouncementStartTime } from '../utils/announcementDateUtils';\nimport { MarkdownRendererTypeProps } from '../MarkdownRenderer/MarkdownRenderer';\nimport { truncate } from '../utils/truncateUtils';\n\nconst useStyles = makeStyles(theme => {\n return {\n cardHeader: {\n color: theme?.palette?.text?.primary || '#000',\n },\n pagination: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: theme?.spacing?.(4) || 32,\n },\n };\n});\n\nconst AnnouncementCard = ({\n announcement,\n options: { titleLength = 50 },\n hideStartAt,\n}: {\n announcement: Announcement;\n options: AnnouncementCardProps;\n hideStartAt?: boolean;\n}) => {\n const classes = useStyles();\n const announcementsLink = useRouteRef(rootRouteRef);\n const viewAnnouncementLink = useRouteRef(announcementViewRouteRef);\n const { t } = useAnnouncementsTranslation();\n\n const title = (\n <Tooltip\n title={announcement.title}\n disableFocusListener\n data-testid=\"announcement-card-title-tooltip\"\n >\n <Link\n className={classes.cardHeader}\n to={viewAnnouncementLink({ id: announcement.id })}\n >\n {truncate(announcement.title, titleLength)}\n </Link>\n </Tooltip>\n );\n const subTitle = (\n <>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"span\">\n {t('announcementsPage.card.by')}{' '}\n <EntityRefLink\n entityRef={announcement.on_behalf_of || announcement.publisher}\n hideIcon\n />\n {announcement.category && (\n <>\n {' '}\n {t('announcementsPage.card.in')}{' '}\n <Link\n to={`${announcementsLink()}?category=${\n announcement.category.slug\n }`}\n >\n {announcement.category.title}\n </Link>\n </>\n )}\n , {DateTime.fromISO(announcement.created_at).toRelative()}\n </Typography>\n <Box>\n {!hideStartAt && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n {formatAnnouncementStartTime(\n announcement.start_at,\n t('announcementsCard.occurred'),\n t('announcementsCard.scheduled'),\n t('announcementsCard.today'),\n )}\n </Typography>\n )}\n </Box>\n {announcement.tags && announcement.tags.length > 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n <Box mt={1}>\n {announcement.tags.map(tag => (\n <Chip\n key={tag.slug}\n size=\"small\"\n label={tag.title}\n component={Link}\n to={`${announcementsLink()}?tags=${tag.slug}`}\n clickable\n style={{ marginRight: 4, marginBottom: 4 }}\n />\n ))}\n </Box>\n </Typography>\n )}\n </>\n );\n\n return (\n <Card>\n <CardHeader title={title} subheader={subTitle} />\n <CardContent>{announcement.excerpt}</CardContent>\n </Card>\n );\n};\n\nconst AnnouncementsGrid = ({\n maxPerPage,\n category,\n tags,\n cardTitleLength,\n active,\n sortBy,\n order,\n hideStartAt,\n}: {\n maxPerPage: number;\n category?: string;\n tags?: string[];\n cardTitleLength?: number;\n active?: boolean;\n sortBy?: 'created_at' | 'start_at';\n order?: 'asc' | 'desc';\n hideStartAt?: boolean;\n}) => {\n const classes = useStyles();\n const location = useLocation();\n const queryParams = new URLSearchParams(location.search);\n\n const [page, setPage] = useState(1);\n const handleChange = (_event: any, value: number) => {\n setPage(value);\n };\n\n const tagsParam = queryParams.get('tags');\n const tagsFromUrl = useMemo(() => {\n return tagsParam ? tagsParam.split(',') : undefined;\n }, [tagsParam]);\n\n const { announcements, loading, error } = useAnnouncements(\n {\n max: maxPerPage,\n page: page,\n category,\n tags: tags || tagsFromUrl,\n active,\n sortBy,\n order,\n },\n { dependencies: [maxPerPage, page, category, tagsFromUrl] },\n );\n\n if (loading) {\n return <Progress />;\n } else if (error) {\n return <Alert severity=\"error\">{error.message}</Alert>;\n }\n\n return (\n <>\n <ItemCardGrid>\n {announcements.results.map(announcement => (\n <AnnouncementCard\n key={announcement.id}\n announcement={announcement}\n options={{ titleLength: cardTitleLength }}\n hideStartAt={hideStartAt}\n />\n ))}\n </ItemCardGrid>\n\n {announcements && announcements.count !== 0 && (\n <div className={classes.pagination}>\n <Pagination\n count={Math.ceil(announcements.count / maxPerPage)}\n page={page}\n onChange={handleChange}\n />\n </div>\n )}\n </>\n );\n};\n\ntype AnnouncementCardProps = {\n titleLength?: number;\n};\n\ntype AnnouncementCreateButtonProps = {\n name?: string;\n};\n\nexport type AnnouncementsPageProps = {\n themeId: string;\n title: string;\n subtitle?: ReactNode;\n maxPerPage?: number;\n category?: string;\n tags?: string[];\n buttonOptions?: AnnouncementCreateButtonProps;\n cardOptions?: AnnouncementCardProps;\n hideContextMenu?: boolean;\n hideInactive?: boolean;\n hideStartAt?: boolean;\n markdownRenderer?: MarkdownRendererTypeProps;\n sortby?: 'created_at' | 'start_at';\n order?: 'asc' | 'desc';\n};\n\nexport const AnnouncementsPage = (props: AnnouncementsPageProps) => {\n const location = useLocation();\n const queryParams = new URLSearchParams(location.search);\n const permissions = useAnnouncementsPermissions();\n\n const {\n hideContextMenu,\n hideInactive,\n hideStartAt,\n themeId,\n title,\n subtitle,\n maxPerPage,\n category,\n cardOptions,\n sortby,\n order,\n } = props;\n\n return (\n <Page themeId={themeId}>\n <Header title={title} subtitle={subtitle}>\n {!hideContextMenu &&\n !permissions.create.loading &&\n permissions.create.allowed && <ContextMenu />}\n </Header>\n\n <Content>\n <AnnouncementsGrid\n maxPerPage={maxPerPage ?? 10}\n category={category ?? queryParams.get('category') ?? undefined}\n tags={props.tags}\n cardTitleLength={cardOptions?.titleLength}\n active={!!hideInactive}\n sortBy={sortby ?? 'created_at'}\n order={order ?? 'desc'}\n hideStartAt={hideStartAt}\n />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,60 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useState } from 'react';
3
- import { useNavigate } from 'react-router-dom';
4
- import { useRouteRef } from '@backstage/core-plugin-api';
5
- import { useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react';
6
- import { makeStyles, Box, IconButton, Popover, MenuList, MenuItem, ListItemIcon, ListItemText } from '@material-ui/core';
7
- import MoreVert from '@material-ui/icons/MoreVert';
8
- import Description from '@material-ui/icons/Description';
9
- import { announcementAdminRouteRef } from '../../routes.esm.js';
10
-
11
- const useStyles = makeStyles((theme) => ({
12
- button: {
13
- color: theme.page.fontColor
14
- }
15
- }));
16
- function ContextMenu() {
17
- const classes = useStyles();
18
- const [anchorEl, setAnchorEl] = useState();
19
- const announcementsLink = useRouteRef(announcementAdminRouteRef);
20
- const navigate = useNavigate();
21
- const { t } = useAnnouncementsTranslation();
22
- const onOpen = (event) => {
23
- setAnchorEl(event.currentTarget);
24
- };
25
- const onClose = () => {
26
- setAnchorEl(void 0);
27
- };
28
- return /* @__PURE__ */ jsxs(Box, { "data-testid": "announcements-context-menu", children: [
29
- /* @__PURE__ */ jsx(
30
- IconButton,
31
- {
32
- "aria-label": "more",
33
- "aria-controls": "long-menu",
34
- "aria-haspopup": "true",
35
- onClick: onOpen,
36
- "data-testid": "menu-button",
37
- color: "inherit",
38
- className: classes.button,
39
- children: /* @__PURE__ */ jsx(MoreVert, {})
40
- }
41
- ),
42
- /* @__PURE__ */ jsx(
43
- Popover,
44
- {
45
- open: Boolean(anchorEl),
46
- onClose,
47
- anchorEl,
48
- anchorOrigin: { vertical: "bottom", horizontal: "right" },
49
- transformOrigin: { vertical: "top", horizontal: "right" },
50
- children: /* @__PURE__ */ jsx(MenuList, { children: /* @__PURE__ */ jsxs(MenuItem, { onClick: () => navigate(announcementsLink()), children: [
51
- /* @__PURE__ */ jsx(ListItemIcon, { children: /* @__PURE__ */ jsx(Description, { fontSize: "small" }) }),
52
- /* @__PURE__ */ jsx(ListItemText, { primary: t("announcementsPage.contextMenu.admin") })
53
- ] }) })
54
- }
55
- )
56
- ] });
57
- }
58
-
59
- export { ContextMenu };
60
- //# sourceMappingURL=ContextMenu.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ContextMenu.esm.js","sources":["../../../src/components/AnnouncementsPage/ContextMenu.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SyntheticEvent, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react';\nimport {\n makeStyles,\n Box,\n IconButton,\n Popover,\n MenuList,\n MenuItem,\n ListItemIcon,\n ListItemText,\n} from '@material-ui/core';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport Description from '@material-ui/icons/Description';\nimport { announcementAdminRouteRef } from '../../routes';\n\nconst useStyles = makeStyles(theme => ({\n button: {\n color: theme.page.fontColor,\n },\n}));\n\nexport function ContextMenu() {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>();\n const announcementsLink = useRouteRef(announcementAdminRouteRef);\n const navigate = useNavigate();\n const { t } = useAnnouncementsTranslation();\n\n const onOpen = (event: SyntheticEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const onClose = () => {\n setAnchorEl(undefined);\n };\n\n return (\n <Box data-testid=\"announcements-context-menu\">\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={onOpen}\n data-testid=\"menu-button\"\n color=\"inherit\"\n className={classes.button}\n >\n <MoreVert />\n </IconButton>\n <Popover\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <MenuList>\n <MenuItem onClick={() => navigate(announcementsLink())}>\n <ListItemIcon>\n <Description fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary={t('announcementsPage.contextMenu.admin')} />\n </MenuItem>\n </MenuList>\n </Popover>\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAiCA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,MAAQ,EAAA;AAAA,IACN,KAAA,EAAO,MAAM,IAAK,CAAA;AAAA;AAEtB,CAAE,CAAA,CAAA;AAEK,SAAS,WAAc,GAAA;AAC5B,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAA4B,EAAA;AAC5D,EAAM,MAAA,iBAAA,GAAoB,YAAY,yBAAyB,CAAA;AAC/D,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,2BAA4B,EAAA;AAE1C,EAAM,MAAA,MAAA,GAAS,CAAC,KAA6C,KAAA;AAC3D,IAAA,WAAA,CAAY,MAAM,aAAa,CAAA;AAAA,GACjC;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,WAAA,CAAY,KAAS,CAAA,CAAA;AAAA,GACvB;AAEA,EACE,uBAAA,IAAA,CAAC,GAAI,EAAA,EAAA,aAAA,EAAY,4BACf,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,YAAW,EAAA,MAAA;AAAA,QACX,eAAc,EAAA,WAAA;AAAA,QACd,eAAc,EAAA,MAAA;AAAA,QACd,OAAS,EAAA,MAAA;AAAA,QACT,aAAY,EAAA,aAAA;AAAA,QACZ,KAAM,EAAA,SAAA;AAAA,QACN,WAAW,OAAQ,CAAA,MAAA;AAAA,QAEnB,8BAAC,QAAS,EAAA,EAAA;AAAA;AAAA,KACZ;AAAA,oBACA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,QAAQ,QAAQ,CAAA;AAAA,QACtB,OAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAc,EAAA,EAAE,QAAU,EAAA,QAAA,EAAU,YAAY,OAAQ,EAAA;AAAA,QACxD,eAAiB,EAAA,EAAE,QAAU,EAAA,KAAA,EAAO,YAAY,OAAQ,EAAA;AAAA,QAExD,QAAA,kBAAA,GAAA,CAAC,YACC,QAAC,kBAAA,IAAA,CAAA,QAAA,EAAA,EAAS,SAAS,MAAM,QAAA,CAAS,iBAAkB,EAAC,CACnD,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,YACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAS,SAAQ,CAChC,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,YAAA,EAAA,EAAa,OAAS,EAAA,CAAA,CAAE,qCAAqC,CAAG,EAAA;AAAA,SAAA,EACnE,CACF,EAAA;AAAA;AAAA;AACF,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,75 +0,0 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
- import { useRouteRef } from '@backstage/core-plugin-api';
3
- import { Link } from 'react-router-dom';
4
- import { DateTime } from 'luxon';
5
- import { useAnnouncements, useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react';
6
- import { Progress } from '@backstage/core-components';
7
- import { Timeline, TimelineItem, TimelineOppositeContent, TimelineSeparator, TimelineConnector, TimelineDot, TimelineContent } from '@material-ui/lab';
8
- import { Box, Typography } from '@material-ui/core';
9
- import Stack from '@mui/material/Stack';
10
- import { announcementViewRouteRef } from '../../routes.esm.js';
11
-
12
- const DEFAULT_TIMELINE_ALIGNMENT = "alternate";
13
- const DEFAULT_TIMELINE_WIDTH = "425px";
14
- const DEFAULT_RESULTS_MAX = 10;
15
- const DEFAULT_INACTIVE = false;
16
- const DEFAULT_SORTBY = "created_at";
17
- const DEFAULT_ORDER = "desc";
18
- const DEFAULT_CURRENT = false;
19
- const AnnouncementsTimeline = ({
20
- maxResults = DEFAULT_RESULTS_MAX,
21
- timelineAlignment = DEFAULT_TIMELINE_ALIGNMENT,
22
- timelineMinWidth = DEFAULT_TIMELINE_WIDTH,
23
- hideInactive = DEFAULT_INACTIVE,
24
- sortBy = DEFAULT_SORTBY,
25
- order = DEFAULT_ORDER,
26
- current = DEFAULT_CURRENT
27
- }) => {
28
- const viewAnnouncementLink = useRouteRef(announcementViewRouteRef);
29
- const { announcements, loading, error } = useAnnouncements({
30
- max: maxResults,
31
- active: hideInactive,
32
- sortBy,
33
- order,
34
- current
35
- });
36
- const { t } = useAnnouncementsTranslation();
37
- if (loading) {
38
- return /* @__PURE__ */ jsx(Progress, {});
39
- }
40
- if (!announcements || announcements.count === 0)
41
- return /* @__PURE__ */ jsx(Fragment, { children: t("announcementsTimeline.noAnnouncements") });
42
- if (error)
43
- return /* @__PURE__ */ jsx(Fragment, { children: `${t("announcementsTimeline.error")}: ${error.message}` });
44
- return /* @__PURE__ */ jsx(
45
- Stack,
46
- {
47
- direction: "column",
48
- justifyContent: "center",
49
- alignItems: "center",
50
- spacing: 0,
51
- children: /* @__PURE__ */ jsx(Box, { sx: { minWidth: timelineMinWidth }, children: /* @__PURE__ */ jsx(Timeline, { align: timelineAlignment, children: announcements.results.map((a) => /* @__PURE__ */ jsxs(TimelineItem, { children: [
52
- /* @__PURE__ */ jsx(
53
- TimelineOppositeContent,
54
- {
55
- style: { margin: "auto 0" },
56
- children: DateTime.fromISO(a.created_at).toRelative()
57
- },
58
- `toc-${a.id}`
59
- ),
60
- /* @__PURE__ */ jsxs(TimelineSeparator, { children: [
61
- /* @__PURE__ */ jsx(TimelineConnector, {}),
62
- /* @__PURE__ */ jsx(TimelineDot, { color: "primary" }),
63
- /* @__PURE__ */ jsx(TimelineConnector, {})
64
- ] }),
65
- /* @__PURE__ */ jsxs(TimelineContent, { children: [
66
- /* @__PURE__ */ jsx(Link, { to: viewAnnouncementLink({ id: a.id }), children: /* @__PURE__ */ jsx(Typography, { variant: "h6", component: "span", children: a.title }, `th6-${a.id}`) }),
67
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: a.excerpt }, `te-${a.id}`)
68
- ] }, `tc-${a.id}`)
69
- ] }, `ti-${a.id}`)) }) })
70
- }
71
- );
72
- };
73
-
74
- export { AnnouncementsTimeline };
75
- //# sourceMappingURL=AnnouncementsTimeline.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnnouncementsTimeline.esm.js","sources":["../../../src/components/AnnouncementsTimeline/AnnouncementsTimeline.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { Link } from 'react-router-dom';\nimport { DateTime } from 'luxon';\nimport {\n useAnnouncements,\n useAnnouncementsTranslation,\n} from '@backstage-community/plugin-announcements-react';\nimport { Progress } from '@backstage/core-components';\nimport {\n Timeline,\n TimelineItem,\n TimelineConnector,\n TimelineDot,\n TimelineSeparator,\n TimelineOppositeContent,\n TimelineContent,\n} from '@material-ui/lab';\nimport { Box, Typography } from '@material-ui/core';\nimport Stack from '@mui/material/Stack';\n\nimport { announcementViewRouteRef } from '../../routes';\n/**\n * Props for the AnnouncementsTimeline component.\n *\n * @public\n */\nexport type AnnouncementsTimelineProps = {\n /**\n * The maximum number of results to display.\n * Default: 10\n */\n maxResults?: number;\n /**\n * The alignment of the timeline items. Can be 'left', 'right', or 'alternate'.\n * Default: 'alternate'\n */\n timelineAlignment?: 'left' | 'right' | 'alternate';\n /**\n * The minimum width of the timeline.\n * Default: '425px'\n */\n timelineMinWidth?: string;\n /**\n * Whether to only show active announcements.\n * Default: false\n */\n hideInactive?: boolean;\n /**\n * The field by which date time to sort the announcements.\n * Can be 'created_at' or 'start_at'.\n * Default: 'created_at'\n */\n sortBy?: 'created_at' | 'start_at';\n /**\n * The order in which to sort the announcements.\n * Can be 'asc' for ascending (older first) or 'desc' for descending (new first).\n * Default: 'desc'\n */\n order?: 'asc' | 'desc';\n /**\n * Whether to show current announcements or not.\n * Default: false\n */\n current?: boolean;\n};\n\n/**\n * Default alignment for the timeline.\n */\nconst DEFAULT_TIMELINE_ALIGNMENT = 'alternate';\n\n/**\n * Default width for the timeline.\n */\nconst DEFAULT_TIMELINE_WIDTH = '425px';\n\n/**\n * Default maximum number of results to display.\n */\nconst DEFAULT_RESULTS_MAX = 10;\n\n/**\n * Default setting for only displaying active annoucenments.\n */\nconst DEFAULT_INACTIVE = false;\n\n/**\n * Default sort by filter\n */\nconst DEFAULT_SORTBY = 'created_at';\n\n/**\n * Default order to display announcments. Newer announcements are display by default\n */\nconst DEFAULT_ORDER = 'desc';\n\n/**\n * Default setting for only displaying current annoucenments.\n */\nconst DEFAULT_CURRENT = false;\n\n/**\n * Timeline of most recent announcements.\n *\n * @param options - The options for the announcements timeline.\n * @returns The rendered announcements timeline.\n */\nexport const AnnouncementsTimeline = ({\n maxResults = DEFAULT_RESULTS_MAX,\n timelineAlignment = DEFAULT_TIMELINE_ALIGNMENT,\n timelineMinWidth = DEFAULT_TIMELINE_WIDTH,\n hideInactive = DEFAULT_INACTIVE,\n sortBy = DEFAULT_SORTBY,\n order = DEFAULT_ORDER,\n current = DEFAULT_CURRENT,\n}: AnnouncementsTimelineProps) => {\n const viewAnnouncementLink = useRouteRef(announcementViewRouteRef);\n\n const { announcements, loading, error } = useAnnouncements({\n max: maxResults,\n active: hideInactive,\n sortBy,\n order,\n current,\n });\n const { t } = useAnnouncementsTranslation();\n\n if (loading) {\n return <Progress />;\n }\n\n if (!announcements || announcements.count === 0)\n return <>{t('announcementsTimeline.noAnnouncements')}</>;\n\n if (error)\n return <>{`${t('announcementsTimeline.error')}: ${error.message}`}</>;\n\n return (\n <Stack\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n spacing={0}\n >\n <Box sx={{ minWidth: timelineMinWidth }}>\n <Timeline align={timelineAlignment}>\n {announcements.results.map(a => (\n <TimelineItem key={`ti-${a.id}`}>\n <TimelineOppositeContent\n key={`toc-${a.id}`}\n style={{ margin: 'auto 0' }}\n >\n {DateTime.fromISO(a.created_at).toRelative()}\n </TimelineOppositeContent>\n\n <TimelineSeparator>\n <TimelineConnector />\n <TimelineDot color=\"primary\" />\n <TimelineConnector />\n </TimelineSeparator>\n\n <TimelineContent key={`tc-${a.id}`}>\n <Link to={viewAnnouncementLink({ id: a.id })}>\n <Typography key={`th6-${a.id}`} variant=\"h6\" component=\"span\">\n {a.title}\n </Typography>\n </Link>\n <Typography key={`te-${a.id}`} variant=\"body2\">\n {a.excerpt}\n </Typography>\n </TimelineContent>\n </TimelineItem>\n ))}\n </Timeline>\n </Box>\n </Stack>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,75 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Routes, Route } from 'react-router-dom';
3
- import { RequirePermission } from '@backstage/plugin-permission-react';
4
- import { announcementCreatePermission } from '@backstage-community/plugin-announcements-common';
5
- import { announcementViewRouteRef, announcementAdminRouteRef } from '../routes.esm.js';
6
- import { AnnouncementsPage } from './AnnouncementsPage/AnnouncementsPage.esm.js';
7
- import { AnnouncementPage } from './AnnouncementPage/AnnouncementPage.esm.js';
8
- import { AdminPortal } from './Admin/AdminPortal/AdminPortal.esm.js';
9
- import 'react';
10
- import '@backstage/core-components';
11
- import '@backstage/core-plugin-api';
12
- import '@backstage-community/plugin-announcements-react';
13
- import 'react-use/esm/useAsyncRetry';
14
- import '@material-ui/core';
15
- import '@uiw/react-md-editor';
16
- import 'luxon';
17
- import 'slugify';
18
- import './Admin/AnnouncementsContent/AnnouncementForm/CategoryInput.esm.js';
19
- import '@mui/material/TextField';
20
- import '@mui/material/Autocomplete';
21
- import '@mui/material/CircularProgress';
22
- import 'react-use/esm/useAsync';
23
- import '@backstage/catalog-model';
24
- import '@mui/material/Box';
25
- import '@mui/material/Typography';
26
- import './Admin/AnnouncementsContent/AnnouncementForm/TagsInput.esm.js';
27
- import '@mui/material/Button';
28
- import '@mui/material/Divider';
29
- import '@mui/material/FormControlLabel';
30
- import '@mui/material/FormGroup';
31
- import '@mui/material/Grid';
32
- import '@mui/material/Paper';
33
- import '@mui/icons-material/SaveAlt';
34
- import '@mui/material/Switch';
35
- import '@material-ui/icons/Delete';
36
- import '@material-ui/icons/Edit';
37
- import '@material-ui/icons/Visibility';
38
-
39
- const Router = (props) => {
40
- const propsWithDefaults = {
41
- themeId: "home",
42
- title: "Announcements",
43
- hideInactive: false,
44
- hideStartAt: false,
45
- markdownRenderer: "backstage",
46
- ...props
47
- };
48
- return /* @__PURE__ */ jsxs(Routes, { children: [
49
- /* @__PURE__ */ jsx(Route, { path: "/", element: /* @__PURE__ */ jsx(AnnouncementsPage, { ...propsWithDefaults }) }),
50
- /* @__PURE__ */ jsx(
51
- Route,
52
- {
53
- path: `${announcementViewRouteRef.path}`,
54
- element: /* @__PURE__ */ jsx(AnnouncementPage, { ...propsWithDefaults })
55
- }
56
- ),
57
- /* @__PURE__ */ jsx(
58
- Route,
59
- {
60
- path: `${announcementAdminRouteRef.path}`,
61
- element: /* @__PURE__ */ jsx(RequirePermission, { permission: announcementCreatePermission, children: /* @__PURE__ */ jsx(AdminPortal, {}) })
62
- }
63
- ),
64
- /* @__PURE__ */ jsx(
65
- Route,
66
- {
67
- path: `${announcementAdminRouteRef.path}`,
68
- element: /* @__PURE__ */ jsx(RequirePermission, { permission: announcementCreatePermission, children: /* @__PURE__ */ jsx(AdminPortal, {}) })
69
- }
70
- )
71
- ] });
72
- };
73
-
74
- export { Router };
75
- //# sourceMappingURL=Router.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Router.esm.js","sources":["../../src/components/Router.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Routes, Route } from 'react-router-dom';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { announcementCreatePermission } from '@backstage-community/plugin-announcements-common';\nimport { announcementAdminRouteRef, announcementViewRouteRef } from '../routes';\nimport { AnnouncementsPage, AnnouncementsPageProps } from './AnnouncementsPage';\nimport { AnnouncementPage } from './AnnouncementPage';\nimport { AdminPortal } from './Admin';\nimport { MarkdownRendererTypeProps } from './MarkdownRenderer';\n\ntype RouterProps = {\n themeId?: string;\n title?: string;\n subtitle?: string;\n category?: string;\n hideContextMenu?: boolean;\n cardOptions?: {\n titleLength: number | undefined;\n };\n buttonOptions?: {\n name: string | undefined;\n };\n hideInactive?: boolean;\n hideStartAt?: boolean;\n markdownRenderer?: MarkdownRendererTypeProps;\n defaultInactive?: boolean;\n};\n\nexport const Router = (props: RouterProps) => {\n const propsWithDefaults: AnnouncementsPageProps = {\n themeId: 'home',\n title: 'Announcements',\n hideInactive: false,\n hideStartAt: false,\n markdownRenderer: 'backstage',\n ...props,\n };\n\n return (\n <Routes>\n <Route path=\"/\" element={<AnnouncementsPage {...propsWithDefaults} />} />\n <Route\n path={`${announcementViewRouteRef.path}`}\n element={<AnnouncementPage {...propsWithDefaults} />}\n />\n <Route\n path={`${announcementAdminRouteRef.path}`}\n element={\n <RequirePermission permission={announcementCreatePermission}>\n <AdminPortal />\n </RequirePermission>\n }\n />\n <Route\n path={`${announcementAdminRouteRef.path}`}\n element={\n <RequirePermission permission={announcementCreatePermission}>\n <AdminPortal />\n </RequirePermission>\n }\n />\n </Routes>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0Ca,MAAA,MAAA,GAAS,CAAC,KAAuB,KAAA;AAC5C,EAAA,MAAM,iBAA4C,GAAA;AAAA,IAChD,OAAS,EAAA,MAAA;AAAA,IACT,KAAO,EAAA,eAAA;AAAA,IACP,YAAc,EAAA,KAAA;AAAA,IACd,WAAa,EAAA,KAAA;AAAA,IACb,gBAAkB,EAAA,WAAA;AAAA,IAClB,GAAG;AAAA,GACL;AAEA,EAAA,4BACG,MACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,KAAA,EAAA,EAAM,MAAK,GAAI,EAAA,OAAA,sBAAU,iBAAmB,EAAA,EAAA,GAAG,mBAAmB,CAAI,EAAA,CAAA;AAAA,oBACvE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,CAAG,EAAA,wBAAA,CAAyB,IAAI,CAAA,CAAA;AAAA,QACtC,OAAS,kBAAA,GAAA,CAAC,gBAAkB,EAAA,EAAA,GAAG,iBAAmB,EAAA;AAAA;AAAA,KACpD;AAAA,oBACA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,CAAG,EAAA,yBAAA,CAA0B,IAAI,CAAA,CAAA;AAAA,QACvC,yBACG,GAAA,CAAA,iBAAA,EAAA,EAAkB,YAAY,4BAC7B,EAAA,QAAA,kBAAA,GAAA,CAAC,eAAY,CACf,EAAA;AAAA;AAAA,KAEJ;AAAA,oBACA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,CAAG,EAAA,yBAAA,CAA0B,IAAI,CAAA,CAAA;AAAA,QACvC,yBACG,GAAA,CAAA,iBAAA,EAAA,EAAkB,YAAY,4BAC7B,EAAA,QAAA,kBAAA,GAAA,CAAC,eAAY,CACf,EAAA;AAAA;AAAA;AAEJ,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,5 +0,0 @@
1
- export { AnnouncementsTimeline } from './AnnouncementsTimeline/AnnouncementsTimeline.esm.js';
2
- export { AdminPortal } from './Admin/AdminPortal/AdminPortal.esm.js';
3
- export { AnnouncementsContent } from './Admin/AnnouncementsContent/AnnouncementsContent.esm.js';
4
- export { MarkdownRenderer } from './MarkdownRenderer/MarkdownRenderer.esm.js';
5
- //# sourceMappingURL=index.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}