@stackoverflow/backstage-plugin-stack-overflow-teams 1.5.0 → 1.6.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 (58) hide show
  1. package/README.md +3 -3
  2. package/config.d.ts +1 -1
  3. package/package.json +4 -12
  4. package/dist/api/StackOverflowAPI.esm.js +0 -125
  5. package/dist/api/StackOverflowAPI.esm.js.map +0 -1
  6. package/dist/components/StackOverflow/StackOverflowMe.esm.js +0 -110
  7. package/dist/components/StackOverflow/StackOverflowMe.esm.js.map +0 -1
  8. package/dist/components/StackOverflow/StackOverflowPostQuestionModal.esm.js +0 -406
  9. package/dist/components/StackOverflow/StackOverflowPostQuestionModal.esm.js.map +0 -1
  10. package/dist/components/StackOverflow/StackOverflowPosts.esm.js +0 -402
  11. package/dist/components/StackOverflow/StackOverflowPosts.esm.js.map +0 -1
  12. package/dist/components/StackOverflow/StackOverflowSearchResultListItem.esm.js +0 -147
  13. package/dist/components/StackOverflow/StackOverflowSearchResultListItem.esm.js.map +0 -1
  14. package/dist/components/StackOverflow/StackOverflowTags.esm.js +0 -117
  15. package/dist/components/StackOverflow/StackOverflowTags.esm.js.map +0 -1
  16. package/dist/components/StackOverflow/StackOverflowUsers.esm.js +0 -193
  17. package/dist/components/StackOverflow/StackOverflowUsers.esm.js.map +0 -1
  18. package/dist/components/StackOverflow/TiptapEditor.esm.js +0 -308
  19. package/dist/components/StackOverflow/TiptapEditor.esm.js.map +0 -1
  20. package/dist/components/StackOverflow/hooks/useStackOverflowData.esm.js +0 -128
  21. package/dist/components/StackOverflow/hooks/useStackOverflowData.esm.js.map +0 -1
  22. package/dist/components/StackOverflow/hooks/useStackOverflowSearch.esm.js +0 -53
  23. package/dist/components/StackOverflow/hooks/useStackOverflowSearch.esm.js.map +0 -1
  24. package/dist/components/StackOverflow/hooks/useStackOverflowStyles.esm.js +0 -39
  25. package/dist/components/StackOverflow/hooks/useStackOverflowStyles.esm.js.map +0 -1
  26. package/dist/components/StackOverflowAuth/StackAuthCallback.esm.js +0 -47
  27. package/dist/components/StackOverflowAuth/StackAuthCallback.esm.js.map +0 -1
  28. package/dist/components/StackOverflowAuth/StackAuthFailed.esm.js +0 -35
  29. package/dist/components/StackOverflowAuth/StackAuthFailed.esm.js.map +0 -1
  30. package/dist/components/StackOverflowAuth/StackAuthLoading.esm.js +0 -20
  31. package/dist/components/StackOverflowAuth/StackAuthLoading.esm.js.map +0 -1
  32. package/dist/components/StackOverflowAuth/StackAuthStart.esm.js +0 -225
  33. package/dist/components/StackOverflowAuth/StackAuthStart.esm.js.map +0 -1
  34. package/dist/components/StackOverflowAuth/StackAuthSuccess.esm.js +0 -37
  35. package/dist/components/StackOverflowAuth/StackAuthSuccess.esm.js.map +0 -1
  36. package/dist/icons/LogoutIcon.esm.js +0 -24
  37. package/dist/icons/LogoutIcon.esm.js.map +0 -1
  38. package/dist/icons/StackOverflowIcon.esm.js +0 -25
  39. package/dist/icons/StackOverflowIcon.esm.js.map +0 -1
  40. package/dist/index.d.ts +0 -48
  41. package/dist/index.esm.js +0 -18
  42. package/dist/index.esm.js.map +0 -1
  43. package/dist/package.json.esm.js +0 -98
  44. package/dist/package.json.esm.js.map +0 -1
  45. package/dist/pages/StackOverflowHub.esm.js +0 -82
  46. package/dist/pages/StackOverflowHub.esm.js.map +0 -1
  47. package/dist/pages/StackOverflowTeamsPage.esm.js +0 -42
  48. package/dist/pages/StackOverflowTeamsPage.esm.js.map +0 -1
  49. package/dist/pages/index.esm.js +0 -3
  50. package/dist/pages/index.esm.js.map +0 -1
  51. package/dist/plugin.esm.js +0 -27
  52. package/dist/plugin.esm.js.map +0 -1
  53. package/dist/routes.esm.js +0 -8
  54. package/dist/routes.esm.js.map +0 -1
  55. package/dist/utils/decodeHtml.esm.js +0 -8
  56. package/dist/utils/decodeHtml.esm.js.map +0 -1
  57. package/dist/utils/getTimeAgo.esm.js +0 -30
  58. package/dist/utils/getTimeAgo.esm.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"StackAuthCallback.esm.js","sources":["../../../src/components/StackOverflowAuth/StackAuthCallback.tsx"],"sourcesContent":["import { useApi } from '@backstage/core-plugin-api';\nimport { stackoverflowteamsApiRef } from '../../api';\nimport React, { useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { StackAuthSuccess } from './StackAuthSuccess';\nimport { StackAuthLoading } from './StackAuthLoading';\nimport { StackAuthFailed } from './StackAuthFailed';\n\nexport const StackOverflowCallback = () => {\n const stackOverflowTeamsApi = useApi(stackoverflowteamsApiRef);\n const location = useLocation();\n const [status, setStatus] = useState<'loading' | 'success' | 'error'>('loading');\n\n useEffect(() => {\n const handleCallback = async () => {\n const queryParams = new URLSearchParams(location.search);\n const code = queryParams.get('code');\n const state = queryParams.get('state');\n const isLoggedIn = await stackOverflowTeamsApi.getAuthStatus();\n\n if (isLoggedIn) {\n setStatus('success')\n return;\n }\n\n if (!code || !state) {\n setStatus('error');\n return;\n }\n\n try {\n await stackOverflowTeamsApi.completeAuth(code, state);\n setStatus('success');\n window.history.replaceState({}, document.title, location.pathname);\n } catch (error) {\n setStatus('error');\n }\n };\n\n handleCallback();\n }, [location.pathname,location.search, stackOverflowTeamsApi]);\n\n if (status === 'loading') {\n return <StackAuthLoading />;\n }\n\n if (status === 'success') {\n return <StackAuthSuccess />;\n }\n\n return <StackAuthFailed />;\n};\n"],"names":[],"mappings":";;;;;;;;AAQO,MAAM,wBAAwB,MAAM;AACzC,EAAM,MAAA,qBAAA,GAAwB,OAAO,wBAAwB,CAAA;AAC7D,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAA0C,SAAS,CAAA;AAE/E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,iBAAiB,YAAY;AACjC,MAAA,MAAM,WAAc,GAAA,IAAI,eAAgB,CAAA,QAAA,CAAS,MAAM,CAAA;AACvD,MAAM,MAAA,IAAA,GAAO,WAAY,CAAA,GAAA,CAAI,MAAM,CAAA;AACnC,MAAM,MAAA,KAAA,GAAQ,WAAY,CAAA,GAAA,CAAI,OAAO,CAAA;AACrC,MAAM,MAAA,UAAA,GAAa,MAAM,qBAAA,CAAsB,aAAc,EAAA;AAE7D,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,SAAA,CAAU,SAAS,CAAA;AACnB,QAAA;AAAA;AAGF,MAAI,IAAA,CAAC,IAAQ,IAAA,CAAC,KAAO,EAAA;AACnB,QAAA,SAAA,CAAU,OAAO,CAAA;AACjB,QAAA;AAAA;AAGF,MAAI,IAAA;AACF,QAAM,MAAA,qBAAA,CAAsB,YAAa,CAAA,IAAA,EAAM,KAAK,CAAA;AACpD,QAAA,SAAA,CAAU,SAAS,CAAA;AACnB,QAAA,MAAA,CAAO,QAAQ,YAAa,CAAA,IAAI,QAAS,CAAA,KAAA,EAAO,SAAS,QAAQ,CAAA;AAAA,eAC1D,KAAO,EAAA;AACd,QAAA,SAAA,CAAU,OAAO,CAAA;AAAA;AACnB,KACF;AAEA,IAAe,cAAA,EAAA;AAAA,KACd,CAAC,QAAA,CAAS,UAAS,QAAS,CAAA,MAAA,EAAQ,qBAAqB,CAAC,CAAA;AAE7D,EAAA,IAAI,WAAW,SAAW,EAAA;AACxB,IAAA,2CAAQ,gBAAiB,EAAA,IAAA,CAAA;AAAA;AAG3B,EAAA,IAAI,WAAW,SAAW,EAAA;AACxB,IAAA,2CAAQ,gBAAiB,EAAA,IAAA,CAAA;AAAA;AAG3B,EAAA,2CAAQ,eAAgB,EAAA,IAAA,CAAA;AAC1B;;;;"}
@@ -1,35 +0,0 @@
1
- import React from 'react';
2
- import { Box, Typography, Button } from '@mui/material';
3
- import '@backstage/core-plugin-api';
4
- import '../../api/StackOverflowAPI.esm.js';
5
- import { useStackOverflowStyles } from '../StackOverflow/hooks/useStackOverflowStyles.esm.js';
6
- import { useNavigate } from 'react-router-dom';
7
-
8
- const StackAuthFailed = () => {
9
- const classes = useStackOverflowStyles();
10
- const navigate = useNavigate();
11
- return /* @__PURE__ */ React.createElement(
12
- Box,
13
- {
14
- display: "flex",
15
- flexDirection: "column",
16
- alignItems: "center",
17
- justifyContent: "center",
18
- height: "100vh"
19
- },
20
- /* @__PURE__ */ React.createElement(Typography, { variant: "h5", sx: { color: "#FF6B6B" } }, "Authentication Failed"),
21
- /* @__PURE__ */ React.createElement(Box, { mt: 1 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body1", sx: { color: "textSecondary" } }, "Something went wrong. Please try again.")),
22
- /* @__PURE__ */ React.createElement(Box, { mt: 1 }, /* @__PURE__ */ React.createElement(
23
- Button,
24
- {
25
- variant: "contained",
26
- className: classes.button,
27
- onClick: () => navigate("/stack-overflow-teams")
28
- },
29
- "Return to Stack Overflow for Teams"
30
- ))
31
- );
32
- };
33
-
34
- export { StackAuthFailed };
35
- //# sourceMappingURL=StackAuthFailed.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StackAuthFailed.esm.js","sources":["../../../src/components/StackOverflowAuth/StackAuthFailed.tsx"],"sourcesContent":["import React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport { Box, Typography, Button } from '@mui/material';\nimport { useStackOverflowStyles } from '../StackOverflow/hooks'; \nimport { useNavigate } from 'react-router-dom'; \n\nexport const StackAuthFailed = () => {\n const classes = useStackOverflowStyles(); \n const navigate = useNavigate(); \n return (\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n height=\"100vh\"\n >\n <Typography variant=\"h5\" sx={{ color: '#FF6B6B' }}> \n Authentication Failed\n </Typography>\n <Box mt={1}>\n <Typography variant=\"body1\" sx={{ color: 'textSecondary' }}>\n Something went wrong. Please try again.\n </Typography>\n </Box>\n <Box mt={1}>\n <Button\n variant=\"contained\"\n className={classes.button} \n \n onClick={() => navigate('/stack-overflow-teams')} \n >\n Return to Stack Overflow for Teams\n </Button>\n </Box>\n </Box>\n );\n};"],"names":[],"mappings":";;;;;;;AAMO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,UAAU,sBAAuB,EAAA;AACvC,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,MAAA;AAAA,MACR,aAAc,EAAA,QAAA;AAAA,MACd,UAAW,EAAA,QAAA;AAAA,MACX,cAAe,EAAA,QAAA;AAAA,MACf,MAAO,EAAA;AAAA,KAAA;AAAA,oBAEP,KAAA,CAAA,aAAA,CAAC,cAAW,OAAQ,EAAA,IAAA,EAAK,IAAI,EAAE,KAAA,EAAO,SAAU,EAAA,EAAA,EAAG,uBAEnD,CAAA;AAAA,oBACC,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,EAAI,EAAA,CAAA,EAAA,sCACR,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAS,EAAA,EAAA,EAAI,EAAE,KAAA,EAAO,eAAgB,EAAA,EAAA,EAAG,yCAE7D,CACA,CAAA;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,CACT,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,WAAA;AAAA,QACR,WAAW,OAAQ,CAAA,MAAA;AAAA,QAEnB,OAAA,EAAS,MAAM,QAAA,CAAS,uBAAuB;AAAA,OAAA;AAAA,MAChD;AAAA,KAGD;AAAA,GACF;AAEJ;;;;"}
@@ -1,20 +0,0 @@
1
- import React from 'react';
2
- import { Box, CircularProgress, Typography } from '@mui/material';
3
-
4
- const StackAuthLoading = () => {
5
- return /* @__PURE__ */ React.createElement(
6
- Box,
7
- {
8
- display: "flex",
9
- flexDirection: "column",
10
- alignItems: "center",
11
- justifyContent: "center",
12
- height: "100vh"
13
- },
14
- /* @__PURE__ */ React.createElement(CircularProgress, { sx: { color: " #F48024" } }),
15
- /* @__PURE__ */ React.createElement(Typography, { variant: "h6", mt: 2 }, "Authenticating...")
16
- );
17
- };
18
-
19
- export { StackAuthLoading };
20
- //# sourceMappingURL=StackAuthLoading.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StackAuthLoading.esm.js","sources":["../../../src/components/StackOverflowAuth/StackAuthLoading.tsx"],"sourcesContent":["import React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport { Box, Typography, CircularProgress } from '@mui/material';\n\nexport const StackAuthLoading = () => {\n\n return (\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n height=\"100vh\" // Center vertically and horizontally\n >\n <CircularProgress sx={{ color:' #F48024' }} />\n <Typography variant=\"h6\" mt={2} >\n Authenticating...\n </Typography>\n </Box>\n );\n};"],"names":[],"mappings":";;;AAIO,MAAM,mBAAmB,MAAM;AAEpC,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,MAAA;AAAA,MACR,aAAc,EAAA,QAAA;AAAA,MACd,UAAW,EAAA,QAAA;AAAA,MACX,cAAe,EAAA,QAAA;AAAA,MACf,MAAO,EAAA;AAAA,KAAA;AAAA,wCAEN,gBAAiB,EAAA,EAAA,EAAA,EAAI,EAAE,KAAA,EAAM,YAAc,EAAA,CAAA;AAAA,wCAC3C,UAAW,EAAA,EAAA,OAAA,EAAQ,IAAK,EAAA,EAAA,EAAI,KAAI,mBAEjC;AAAA,GACF;AAEJ;;;;"}
@@ -1,225 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { useApi } from '@backstage/core-plugin-api';
3
- import { stackoverflowteamsApiRef } from '../../api/StackOverflowAPI.esm.js';
4
- import Button from '@mui/material/Button';
5
- import Typography from '@mui/material/Typography';
6
- import Box from '@mui/material/Box';
7
- import TextField from '@mui/material/TextField';
8
- import Paper from '@mui/material/Paper';
9
- import InputAdornment from '@mui/material/InputAdornment';
10
- import IconButton from '@mui/material/IconButton';
11
- import Snackbar from '@mui/material/Snackbar';
12
- import Alert from '@mui/material/Alert';
13
- import Link from '@mui/material/Link';
14
- import VisibilityIcon from '@mui/icons-material/Visibility';
15
- import VisibilityOffIcon from '@mui/icons-material/VisibilityOff';
16
- import { useStackOverflowStyles } from '../StackOverflow/hooks/useStackOverflowStyles.esm.js';
17
- import { StackOverflowIcon } from '../../icons/StackOverflowIcon.esm.js';
18
-
19
- const StackOverflowAuthStart = () => {
20
- const stackOverflowTeamsApi = useApi(stackoverflowteamsApiRef);
21
- const classes = useStackOverflowStyles();
22
- const [authError, setAuthError] = useState(null);
23
- const [accessToken, setAccessToken] = useState("");
24
- const [showToken, setShowToken] = useState(false);
25
- const [isSubmitting, setIsSubmitting] = useState(false);
26
- const [tokenSuccess, setTokenSuccess] = useState(false);
27
- const [teamName, setTeamName] = useState(null);
28
- const [isLoading, setIsLoading] = useState(true);
29
- useEffect(() => {
30
- const fetchTeamName = async () => {
31
- try {
32
- setIsLoading(true);
33
- const teamNameValue = await stackOverflowTeamsApi.getTeamName();
34
- setTeamName(teamNameValue);
35
- } catch (error) {
36
- setAuthError("Failed to fetch Stack Overflow instance information.");
37
- } finally {
38
- setIsLoading(false);
39
- }
40
- };
41
- fetchTeamName();
42
- }, [stackOverflowTeamsApi]);
43
- const isBasicOrBusinessPlan = Boolean(teamName);
44
- const handleAuth = async () => {
45
- try {
46
- setAuthError(null);
47
- const authUrl = await stackOverflowTeamsApi.startAuth();
48
- window.location.href = authUrl;
49
- } catch (error) {
50
- setAuthError(
51
- "Something went wrong during authentication. Please try again."
52
- );
53
- }
54
- };
55
- const handleTokenSubmit = async () => {
56
- if (!accessToken.trim()) {
57
- setAuthError("Access token cannot be empty");
58
- return;
59
- }
60
- setIsSubmitting(true);
61
- setAuthError(null);
62
- try {
63
- const success = await stackOverflowTeamsApi.submitAccessToken(
64
- accessToken
65
- );
66
- if (success) {
67
- setTokenSuccess(true);
68
- setAccessToken("");
69
- window.location.reload();
70
- } else {
71
- setAuthError(
72
- "Failed to validate token. Please check your token and try again."
73
- );
74
- }
75
- } catch (error) {
76
- setAuthError("Network error. Please try again.");
77
- } finally {
78
- setIsSubmitting(false);
79
- }
80
- };
81
- if (isLoading) {
82
- return /* @__PURE__ */ React.createElement(
83
- Box,
84
- {
85
- display: "flex",
86
- flexDirection: "column",
87
- alignItems: "center",
88
- justifyContent: "center",
89
- height: "100vh"
90
- },
91
- /* @__PURE__ */ React.createElement(Typography, { variant: "body1" }, "Loading Stack Overflow configuration...")
92
- );
93
- }
94
- return /* @__PURE__ */ React.createElement(
95
- Box,
96
- {
97
- display: "flex",
98
- flexDirection: "column",
99
- alignItems: "center",
100
- justifyContent: "center",
101
- height: "100vh",
102
- bgcolor: "background.default"
103
- },
104
- /* @__PURE__ */ React.createElement(
105
- Paper,
106
- {
107
- elevation: 3,
108
- sx: {
109
- padding: 4,
110
- width: "100%",
111
- maxWidth: "500px",
112
- display: "flex",
113
- flexDirection: "column",
114
- alignItems: "center"
115
- }
116
- },
117
- /* @__PURE__ */ React.createElement(StackOverflowIcon, null),
118
- /* @__PURE__ */ React.createElement(Typography, { variant: "h5", gutterBottom: true }, "Stack Overflow for Teams"),
119
- !isBasicOrBusinessPlan && /* @__PURE__ */ React.createElement(Box, { width: "100%", mb: 3 }, /* @__PURE__ */ React.createElement(
120
- Typography,
121
- {
122
- variant: "body1",
123
- color: "textSecondary",
124
- align: "center",
125
- gutterBottom: true
126
- },
127
- "Connect with your Stack Overflow for Enterprise account"
128
- ), /* @__PURE__ */ React.createElement(Box, { mt: 2, display: "flex", justifyContent: "center" }, /* @__PURE__ */ React.createElement(
129
- Button,
130
- {
131
- variant: "contained",
132
- className: classes.button,
133
- onClick: handleAuth,
134
- disabled: isSubmitting,
135
- fullWidth: true
136
- },
137
- "Login with Stack Overflow"
138
- ))),
139
- isBasicOrBusinessPlan && /* @__PURE__ */ React.createElement(Box, { width: "100%" }, /* @__PURE__ */ React.createElement(
140
- Typography,
141
- {
142
- variant: "body1",
143
- color: "textSecondary",
144
- align: "center",
145
- gutterBottom: true
146
- },
147
- "Enter your Personal Access Token (PAT)"
148
- ), /* @__PURE__ */ React.createElement(
149
- Typography,
150
- {
151
- variant: "body2",
152
- color: "textSecondary",
153
- align: "center",
154
- gutterBottom: true
155
- },
156
- /* @__PURE__ */ React.createElement(
157
- Link,
158
- {
159
- href: "https://stackoverflowteams.help/en/articles/10908790-personal-access-tokens-pats-for-api-authentication",
160
- target: "_blank",
161
- rel: "noopener noreferrer",
162
- color: "primary"
163
- },
164
- "Learn how to generate a Personal Access Token"
165
- )
166
- ), /* @__PURE__ */ React.createElement(
167
- TextField,
168
- {
169
- fullWidth: true,
170
- label: "Personal Access Token",
171
- variant: "outlined",
172
- margin: "normal",
173
- value: accessToken,
174
- onChange: (e) => setAccessToken(e.target.value),
175
- type: showToken ? "text" : "password",
176
- disabled: isSubmitting,
177
- InputProps: {
178
- endAdornment: /* @__PURE__ */ React.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React.createElement(
179
- IconButton,
180
- {
181
- "aria-label": "toggle token visibility",
182
- onClick: () => setShowToken(!showToken),
183
- edge: "end"
184
- },
185
- showToken ? /* @__PURE__ */ React.createElement(VisibilityOffIcon, null) : /* @__PURE__ */ React.createElement(VisibilityIcon, null)
186
- ))
187
- }
188
- }
189
- ), /* @__PURE__ */ React.createElement(Box, { mt: 2 }, /* @__PURE__ */ React.createElement(
190
- Button,
191
- {
192
- variant: "contained",
193
- color: "primary",
194
- fullWidth: true,
195
- onClick: handleTokenSubmit,
196
- disabled: isSubmitting || !accessToken.trim(),
197
- className: classes.button
198
- },
199
- isSubmitting ? "Validating..." : "Submit Token"
200
- ))),
201
- authError && /* @__PURE__ */ React.createElement(
202
- Typography,
203
- {
204
- variant: "body2",
205
- color: "error",
206
- sx: { maxWidth: "100%", textAlign: "center", mt: 2 }
207
- },
208
- authError
209
- )
210
- ),
211
- /* @__PURE__ */ React.createElement(
212
- Snackbar,
213
- {
214
- open: tokenSuccess,
215
- autoHideDuration: 6e3,
216
- onClose: () => setTokenSuccess(false),
217
- anchorOrigin: { vertical: "bottom", horizontal: "center" }
218
- },
219
- /* @__PURE__ */ React.createElement(Alert, { severity: "success", variant: "filled" }, "Stack Overflow token accepted successfully!")
220
- )
221
- );
222
- };
223
-
224
- export { StackOverflowAuthStart };
225
- //# sourceMappingURL=StackAuthStart.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StackAuthStart.esm.js","sources":["../../../src/components/StackOverflowAuth/StackAuthStart.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { stackoverflowteamsApiRef } from '../../api';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport TextField from '@mui/material/TextField';\nimport Paper from '@mui/material/Paper';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\nimport Snackbar from '@mui/material/Snackbar';\nimport Alert from '@mui/material/Alert';\nimport Link from '@mui/material/Link';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport VisibilityOffIcon from '@mui/icons-material/VisibilityOff';\nimport { useStackOverflowStyles } from '../StackOverflow/hooks';\nimport { StackOverflowIcon } from '../../icons';\n\nexport const StackOverflowAuthStart = () => {\n const stackOverflowTeamsApi = useApi(stackoverflowteamsApiRef);\n const classes = useStackOverflowStyles();\n const [authError, setAuthError] = useState<string | null>(null);\n const [accessToken, setAccessToken] = useState<string>('');\n const [showToken, setShowToken] = useState<boolean>(false);\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n const [tokenSuccess, setTokenSuccess] = useState<boolean>(false);\n const [teamName, setTeamName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n\n useEffect(() => {\n const fetchTeamName = async () => {\n try {\n setIsLoading(true);\n const teamNameValue = await stackOverflowTeamsApi.getTeamName();\n setTeamName(teamNameValue);\n } catch (error) {\n setAuthError('Failed to fetch Stack Overflow instance information.');\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchTeamName();\n }, [stackOverflowTeamsApi]);\n\n // Determine if user is on basic or business plan based on the teamName\n const isBasicOrBusinessPlan = Boolean(teamName)\n\n const handleAuth = async () => {\n try {\n setAuthError(null); // Clear previous errors when retrying\n const authUrl = await stackOverflowTeamsApi.startAuth();\n window.location.href = authUrl;\n } catch (error) {\n setAuthError(\n 'Something went wrong during authentication. Please try again.',\n );\n }\n };\n\n const handleTokenSubmit = async () => {\n if (!accessToken.trim()) {\n setAuthError('Access token cannot be empty');\n return;\n }\n\n setIsSubmitting(true);\n setAuthError(null);\n\n try {\n const success = await stackOverflowTeamsApi.submitAccessToken(\n accessToken,\n );\n\n if (success) {\n setTokenSuccess(true);\n setAccessToken('');\n window.location.reload();\n } else {\n setAuthError(\n 'Failed to validate token. Please check your token and try again.',\n );\n }\n } catch (error) {\n setAuthError('Network error. Please try again.');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n if (isLoading) {\n return (\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n height=\"100vh\"\n >\n <Typography variant=\"body1\">Loading Stack Overflow configuration...</Typography>\n </Box>\n );\n }\n\n return (\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n height=\"100vh\"\n bgcolor=\"background.default\"\n >\n <Paper\n elevation={3}\n sx={{\n padding: 4,\n width: '100%',\n maxWidth: '500px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <StackOverflowIcon />\n <Typography variant=\"h5\" gutterBottom>\n Stack Overflow for Teams\n </Typography>\n\n {/* Standard OAuth login - only displayed if NOT on basic/business plan */}\n {!isBasicOrBusinessPlan && (\n <Box width=\"100%\" mb={3}>\n <Typography\n variant=\"body1\"\n color=\"textSecondary\"\n align=\"center\"\n gutterBottom\n >\n Connect with your Stack Overflow for Enterprise account\n </Typography>\n\n <Box mt={2} display=\"flex\" justifyContent=\"center\">\n <Button\n variant=\"contained\"\n className={classes.button}\n onClick={handleAuth}\n disabled={isSubmitting}\n fullWidth\n >\n Login with Stack Overflow\n </Button>\n </Box>\n </Box>\n )}\n\n {/* Manual PAT token input for basic/business plans */}\n {isBasicOrBusinessPlan && (\n <Box width=\"100%\">\n <Typography\n variant=\"body1\"\n color=\"textSecondary\"\n align=\"center\"\n gutterBottom\n >\n Enter your Personal Access Token (PAT)\n </Typography>\n\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n align=\"center\"\n gutterBottom\n >\n <Link\n href=\"https://stackoverflowteams.help/en/articles/10908790-personal-access-tokens-pats-for-api-authentication\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"primary\"\n >\n Learn how to generate a Personal Access Token\n </Link>\n </Typography>\n\n <TextField\n fullWidth\n label=\"Personal Access Token\"\n variant=\"outlined\"\n margin=\"normal\"\n value={accessToken}\n onChange={e => setAccessToken(e.target.value)}\n type={showToken ? 'text' : 'password'}\n disabled={isSubmitting}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle token visibility\"\n onClick={() => setShowToken(!showToken)}\n edge=\"end\"\n >\n {showToken ? <VisibilityOffIcon /> : <VisibilityIcon />}\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n\n <Box mt={2}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n fullWidth\n onClick={handleTokenSubmit}\n disabled={isSubmitting || !accessToken.trim()}\n className={classes.button}\n >\n {isSubmitting ? 'Validating...' : 'Submit Token'}\n </Button>\n </Box>\n </Box>\n )}\n {authError && (\n <Typography\n variant=\"body2\"\n color=\"error\"\n sx={{ maxWidth: '100%', textAlign: 'center', mt: 2 }}\n >\n {authError}\n </Typography>\n )}\n </Paper>\n\n <Snackbar\n open={tokenSuccess}\n autoHideDuration={6000}\n onClose={() => setTokenSuccess(false)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n >\n <Alert severity=\"success\" variant=\"filled\">\n Stack Overflow token accepted successfully!\n </Alert>\n </Snackbar>\n </Box>\n );\n};"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import React from 'react';
2
- import { Box, Typography, Button } from '@mui/material';
3
- import { StackOverflowIcon } from '../../icons/StackOverflowIcon.esm.js';
4
- import '@backstage/core-plugin-api';
5
- import '../../api/StackOverflowAPI.esm.js';
6
- import { useStackOverflowStyles } from '../StackOverflow/hooks/useStackOverflowStyles.esm.js';
7
- import { useNavigate } from 'react-router-dom';
8
-
9
- const StackAuthSuccess = () => {
10
- const classes = useStackOverflowStyles();
11
- const navigate = useNavigate();
12
- return /* @__PURE__ */ React.createElement(
13
- Box,
14
- {
15
- display: "flex",
16
- flexDirection: "column",
17
- alignItems: "center",
18
- justifyContent: "center",
19
- height: "100vh"
20
- },
21
- /* @__PURE__ */ React.createElement(StackOverflowIcon, null),
22
- /* @__PURE__ */ React.createElement(Box, { mt: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5" }, "You have successfully logged in with Stack Overflow!")),
23
- /* @__PURE__ */ React.createElement(Box, { mt: 1 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body1" }, "You can now access all Stack Overflow features from Backstage")),
24
- /* @__PURE__ */ React.createElement(Box, { mt: 2 }, /* @__PURE__ */ React.createElement(
25
- Button,
26
- {
27
- variant: "contained",
28
- className: classes.button,
29
- onClick: () => navigate("/stack-overflow-teams")
30
- },
31
- "Return to Stack Overflow for Teams"
32
- ))
33
- );
34
- };
35
-
36
- export { StackAuthSuccess };
37
- //# sourceMappingURL=StackAuthSuccess.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StackAuthSuccess.esm.js","sources":["../../../src/components/StackOverflowAuth/StackAuthSuccess.tsx"],"sourcesContent":["import React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport { Box, Button, Typography } from '@mui/material';\nimport { StackOverflowIcon } from '../../icons';\nimport { useStackOverflowStyles } from '../StackOverflow/hooks';\nimport { useNavigate } from 'react-router-dom'\n\nexport const StackAuthSuccess = () => {\n const classes = useStackOverflowStyles();\n const navigate = useNavigate();\n return (\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n height=\"100vh\"\n >\n <StackOverflowIcon />\n <Box mt={2}>\n <Typography variant=\"h5\" >\n You have successfully logged in with Stack Overflow!\n </Typography>\n </Box>\n <Box mt={1}>\n <Typography variant=\"body1\" >\n You can now access all Stack Overflow features from Backstage\n </Typography>\n </Box>\n <Box mt={2}>\n <Button\n variant=\"contained\"\n className={classes.button}\n onClick={() => navigate('/stack-overflow-teams')}\n >\n Return to Stack Overflow for Teams\n </Button>\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAOO,MAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,UAAU,sBAAuB,EAAA;AACvC,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,MAAA;AAAA,MACR,aAAc,EAAA,QAAA;AAAA,MACd,UAAW,EAAA,QAAA;AAAA,MACX,cAAe,EAAA,QAAA;AAAA,MACf,MAAO,EAAA;AAAA,KAAA;AAAA,wCAEN,iBAAkB,EAAA,IAAA,CAAA;AAAA,oBACnB,KAAA,CAAA,aAAA,CAAC,OAAI,EAAI,EAAA,CAAA,EAAA,sCACR,UAAW,EAAA,EAAA,OAAA,EAAQ,IAAM,EAAA,EAAA,sDAE1B,CACA,CAAA;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,OAAI,EAAI,EAAA,CAAA,EAAA,sCACR,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAS,EAAA,EAAA,+DAE7B,CACA,CAAA;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,CACT,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,WAAA;AAAA,QACR,WAAW,OAAQ,CAAA,MAAA;AAAA,QACnB,OAAA,EAAS,MAAM,QAAA,CAAS,uBAAuB;AAAA,OAAA;AAAA,MAChD;AAAA,KAGD;AAAA,GACF;AAEJ;;;;"}
@@ -1,24 +0,0 @@
1
- import React from 'react';
2
-
3
- const LogoutIcon = () => {
4
- return /* @__PURE__ */ React.createElement(
5
- "svg",
6
- {
7
- xmlns: "http://www.w3.org/2000/svg",
8
- width: "25",
9
- height: "25",
10
- fill: "none",
11
- viewBox: "0 0 512 512"
12
- },
13
- /* @__PURE__ */ React.createElement(
14
- "path",
15
- {
16
- fill: "#ff8d19",
17
- d: "M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z"
18
- }
19
- )
20
- );
21
- };
22
-
23
- export { LogoutIcon };
24
- //# sourceMappingURL=LogoutIcon.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LogoutIcon.esm.js","sources":["../../src/icons/LogoutIcon.tsx"],"sourcesContent":["import React from 'react';\n\nexport const LogoutIcon = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"25\"\n height=\"25\"\n fill=\"none\"\n viewBox=\"0 0 512 512\"\n >\n <path\n fill=\"#ff8d19\"\n d=\"M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"\n />\n </svg>\n );\n};\n"],"names":[],"mappings":";;AAEO,MAAM,aAAa,MAAM;AAC9B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,4BAAA;AAAA,MACN,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,IAAK,EAAA,MAAA;AAAA,MACL,OAAQ,EAAA;AAAA,KAAA;AAAA,oBAER,KAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,SAAA;AAAA,QACL,CAAE,EAAA;AAAA;AAAA;AACJ,GACF;AAEJ;;;;"}
@@ -1,25 +0,0 @@
1
- import React from 'react';
2
-
3
- const StackOverflowIcon = () => {
4
- return /* @__PURE__ */ React.createElement(
5
- "svg",
6
- {
7
- viewBox: "0 0 125 125",
8
- width: "25",
9
- height: "25",
10
- fill: "none",
11
- xmlns: "http://www.w3.org/2000/svg"
12
- },
13
- /* @__PURE__ */ React.createElement("path", { d: "M84.021 75.825v31H11v-31H0v42h95v-42H84.021z", fill: "#BCBBBB" }),
14
- /* @__PURE__ */ React.createElement(
15
- "path",
16
- {
17
- d: "M21.057 96.825H74v-10H21.057v10zm1.058-23.915l51.428 10.794 2.117-10.265L24.23 62.645 22.115 72.91zm6.773-24.656l47.618 22.222 4.445-9.524L33.33 38.73l-4.444 9.524zm13.227-23.386l40.423 33.65 6.773-8.042-40.53-33.65-6.666 8.042zM68.147 0L59.68 6.243l31.323 42.222 8.465-6.243L68.147 0z",
18
- fill: "#F48024"
19
- }
20
- )
21
- );
22
- };
23
-
24
- export { StackOverflowIcon };
25
- //# sourceMappingURL=StackOverflowIcon.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StackOverflowIcon.esm.js","sources":["../../src/icons/StackOverflowIcon.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 React from 'react';\n\n/**\n * Stack Overflow Icon\n * @public\n */\nexport const StackOverflowIcon = () => {\n return (\n <svg\n viewBox=\"0 0 125 125\"\n width=\"25\"\n height=\"25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M84.021 75.825v31H11v-31H0v42h95v-42H84.021z\" fill=\"#BCBBBB\" />\n <path\n d=\"M21.057 96.825H74v-10H21.057v10zm1.058-23.915l51.428 10.794 2.117-10.265L24.23 62.645 22.115 72.91zm6.773-24.656l47.618 22.222 4.445-9.524L33.33 38.73l-4.444 9.524zm13.227-23.386l40.423 33.65 6.773-8.042-40.53-33.65-6.666 8.042zM68.147 0L59.68 6.243l31.323 42.222 8.465-6.243L68.147 0z\"\n fill=\"#F48024\"\n />\n </svg>\n );\n};\n"],"names":[],"mappings":";;AAqBO,MAAM,oBAAoB,MAAM;AACrC,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,aAAA;AAAA,MACR,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,IAAK,EAAA,MAAA;AAAA,MACL,KAAM,EAAA;AAAA,KAAA;AAAA,oBAEL,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,8CAAA,EAA+C,MAAK,SAAU,EAAA,CAAA;AAAA,oBACtE,KAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAE,EAAA,+RAAA;AAAA,QACF,IAAK,EAAA;AAAA;AAAA;AACP,GACF;AAEJ;;;;"}
package/dist/index.d.ts DELETED
@@ -1,48 +0,0 @@
1
- import * as React from 'react';
2
- import React__default from 'react';
3
- import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
4
- import { ResultHighlight } from '@backstage/plugin-search-common';
5
-
6
- declare const stackOverflowTeamsPlugin: _backstage_core_plugin_api.BackstagePlugin<{
7
- root: _backstage_core_plugin_api.RouteRef<undefined>;
8
- }, {}, {}>;
9
- declare const StackOverflowTeamsPage: () => React.JSX.Element;
10
-
11
- declare const StackOverflowQuestions: () => React__default.JSX.Element;
12
-
13
- declare const StackOverflowTags: () => React__default.JSX.Element;
14
-
15
- declare const StackOverflowUsers: () => React__default.JSX.Element;
16
-
17
- /**
18
- * Props for {@link StackOverflowSearchResultListItem}
19
- *
20
- * @public
21
- */
22
- type StackOverflowSearchResultListItemProps = {
23
- result?: any;
24
- icon?: React__default.ReactNode;
25
- rank?: number;
26
- highlight?: ResultHighlight;
27
- };
28
- declare const StackOverflowSearchResultListItem: (props: StackOverflowSearchResultListItemProps) => React__default.JSX.Element | null;
29
-
30
- declare const StackOverflowPostQuestionModal: () => React__default.JSX.Element;
31
-
32
- declare const StackOverflowMe: () => React__default.JSX.Element | null;
33
-
34
- declare const StackOverflowCallback: () => React__default.JSX.Element;
35
-
36
- declare const StackOverflowAuthStart: () => React__default.JSX.Element;
37
-
38
- /**
39
- * Stack Overflow Icon
40
- * @public
41
- */
42
- declare const StackOverflowIcon: () => React__default.JSX.Element;
43
-
44
- declare const LogoutIcon: () => React__default.JSX.Element;
45
-
46
- declare const StackOverflowHub: () => React__default.JSX.Element;
47
-
48
- export { LogoutIcon, StackOverflowAuthStart, StackOverflowCallback, StackOverflowHub, StackOverflowIcon, StackOverflowMe, StackOverflowPostQuestionModal, StackOverflowQuestions, StackOverflowSearchResultListItem, StackOverflowTags, StackOverflowTeamsPage, StackOverflowUsers, stackOverflowTeamsPlugin };
package/dist/index.esm.js DELETED
@@ -1,18 +0,0 @@
1
- export { StackOverflowTeamsPage, stackOverflowTeamsPlugin } from './plugin.esm.js';
2
- export { StackOverflowQuestions } from './components/StackOverflow/StackOverflowPosts.esm.js';
3
- export { StackOverflowTags } from './components/StackOverflow/StackOverflowTags.esm.js';
4
- export { StackOverflowUsers } from './components/StackOverflow/StackOverflowUsers.esm.js';
5
- export { StackOverflowSearchResultListItem } from './components/StackOverflow/StackOverflowSearchResultListItem.esm.js';
6
- export { StackOverflowPostQuestionModal } from './components/StackOverflow/StackOverflowPostQuestionModal.esm.js';
7
- export { StackOverflowMe } from './components/StackOverflow/StackOverflowMe.esm.js';
8
- export { StackOverflowCallback } from './components/StackOverflowAuth/StackAuthCallback.esm.js';
9
- export { StackOverflowAuthStart } from './components/StackOverflowAuth/StackAuthStart.esm.js';
10
- export { StackOverflowIcon } from './icons/StackOverflowIcon.esm.js';
11
- export { LogoutIcon } from './icons/LogoutIcon.esm.js';
12
- export { StackOverflowHub } from './pages/StackOverflowHub.esm.js';
13
- import 'react';
14
- import '@backstage/core-plugin-api';
15
- import './api/StackOverflowAPI.esm.js';
16
- import 'react-router-dom';
17
- import '@mui/material';
18
- //# sourceMappingURL=index.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
@@ -1,98 +0,0 @@
1
- var name = "backstage-plugin-stack-overflow-teams";
2
- var version = "1.4.0";
3
- var main = "src/index.ts";
4
- var types = "src/index.ts";
5
- var license = "Apache-2.0";
6
- var publishConfig = {
7
- access: "public",
8
- main: "dist/index.esm.js",
9
- types: "dist/index.d.ts"
10
- };
11
- var backstage = {
12
- role: "frontend-plugin",
13
- pluginId: "stack-overflow-teams",
14
- pluginPackages: [
15
- "backstage-plugin-stack-overflow-teams",
16
- "backstage-plugin-stack-overflow-teams-backend"
17
- ]
18
- };
19
- var repository = {
20
- type: "git",
21
- url: "https://github.com/StackExchange/backstage-stackoverflow"
22
- };
23
- var bugs = {
24
- url: "https://github.com/StackExchange/backstage-stackoverflow/issues"
25
- };
26
- var sideEffects = false;
27
- var scripts = {
28
- start: "backstage-cli package start",
29
- build: "backstage-cli package build",
30
- lint: "backstage-cli package lint",
31
- test: "backstage-cli package test",
32
- clean: "backstage-cli package clean",
33
- prepack: "backstage-cli package prepack",
34
- postpack: "backstage-cli package postpack"
35
- };
36
- var dependencies = {
37
- "@backstage/core-components": "^0.16.2",
38
- "@backstage/core-plugin-api": "^1.10.2",
39
- "@backstage/plugin-search-react": "^1.8.6",
40
- "@backstage/theme": "^0.6.3",
41
- "@emotion/react": "^11.14.0",
42
- "@emotion/styled": "^11.14.1",
43
- "@material-ui/core": "^4.9.13",
44
- "@material-ui/icons": "^4.9.1",
45
- "@material-ui/lab": "^4.0.0-alpha.61",
46
- "@mui/icons-material": "^7.2.0",
47
- "@mui/material": "5.16.14",
48
- "@tiptap/core": "^3.0.7",
49
- "@tiptap/extension-heading": "^3.0.7",
50
- "@tiptap/extension-image": "^3.0.7",
51
- "@tiptap/extension-table": "^3.0.7",
52
- "@tiptap/extensions": "^3.0.7",
53
- "@tiptap/pm": "^3.0.7",
54
- "@tiptap/react": "^3.0.7",
55
- "@tiptap/starter-kit": "^3.0.7",
56
- "react-use": "^17.2.4"
57
- };
58
- var peerDependencies = {
59
- react: "^17.0.0 || ^18.0.0",
60
- "react-dom": "^17.0.0 || ^18.0.0",
61
- "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
62
- };
63
- var devDependencies = {
64
- "@backstage/cli": "^0.29.4",
65
- "@backstage/core-app-api": "^1.15.3",
66
- "@backstage/dev-utils": "^1.1.5",
67
- "@backstage/test-utils": "^1.7.3",
68
- "@testing-library/jest-dom": "^6.0.0",
69
- "@testing-library/react": "^14.0.0",
70
- "@testing-library/user-event": "^14.0.0",
71
- msw: "^1.0.0",
72
- react: "^16.13.1 || ^17.0.0 || ^18.0.0",
73
- typescript: "^5.8.2"
74
- };
75
- var files = [
76
- "dist",
77
- "config.d.ts"
78
- ];
79
- var packageJson = {
80
- name: name,
81
- version: version,
82
- main: main,
83
- types: types,
84
- license: license,
85
- publishConfig: publishConfig,
86
- backstage: backstage,
87
- repository: repository,
88
- bugs: bugs,
89
- sideEffects: sideEffects,
90
- scripts: scripts,
91
- dependencies: dependencies,
92
- peerDependencies: peerDependencies,
93
- devDependencies: devDependencies,
94
- files: files
95
- };
96
-
97
- export { backstage, bugs, packageJson as default, dependencies, devDependencies, files, license, main, name, peerDependencies, publishConfig, repository, scripts, sideEffects, types, version };
98
- //# sourceMappingURL=package.json.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}