@backstage/core-components 0.12.3 → 0.12.4-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/dist/esm/{RealLogViewer-e1898ae1.esm.js → RealLogViewer-38d8327e.esm.js} +15 -13
- package/dist/esm/RealLogViewer-38d8327e.esm.js.map +1 -0
- package/dist/index.d.ts +16 -6
- package/dist/index.esm.js +19 -13
- package/dist/index.esm.js.map +1 -1
- package/package.json +4 -4
- package/dist/esm/RealLogViewer-e1898ae1.esm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# @backstage/core-components
|
|
2
2
|
|
|
3
|
+
## 0.12.4-next.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 66e2aab4c4: Navigation items in mobile sidebar now have aria label.
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @backstage/config@1.0.6
|
|
10
|
+
- @backstage/core-plugin-api@1.3.0
|
|
11
|
+
- @backstage/errors@1.1.4
|
|
12
|
+
- @backstage/theme@0.2.16
|
|
13
|
+
- @backstage/version-bridge@1.0.3
|
|
14
|
+
|
|
15
|
+
## 0.12.4-next.0
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- 910015f5b7: The Button component has been deprecated in favor of the LinkButton component
|
|
20
|
+
- 20840b36b4: Adds new type, TableOptions, extending Material Table Options.
|
|
21
|
+
- 85b04f659a: Internal refactor to not use deprecated `substr`
|
|
22
|
+
- Updated dependencies
|
|
23
|
+
- @backstage/config@1.0.6
|
|
24
|
+
- @backstage/core-plugin-api@1.3.0
|
|
25
|
+
- @backstage/errors@1.1.4
|
|
26
|
+
- @backstage/theme@0.2.16
|
|
27
|
+
- @backstage/version-bridge@1.0.3
|
|
28
|
+
|
|
3
29
|
## 0.12.3
|
|
4
30
|
|
|
5
31
|
### Patch Changes
|
|
@@ -7,9 +7,9 @@ import { useLocation } from 'react-router-dom';
|
|
|
7
7
|
import AutoSizer from 'react-virtualized-auto-sizer';
|
|
8
8
|
import { FixedSizeList } from 'react-window';
|
|
9
9
|
import ansiRegexMaker from 'ansi-regex';
|
|
10
|
-
import Typography from '@material-ui/core/Typography';
|
|
11
10
|
import startCase from 'lodash/startCase';
|
|
12
11
|
import TextField from '@material-ui/core/TextField';
|
|
12
|
+
import Typography from '@material-ui/core/Typography';
|
|
13
13
|
import ChevronLeftIcon from '@material-ui/icons/ChevronLeft';
|
|
14
14
|
import ChevronRight from '@material-ui/icons/ChevronRight';
|
|
15
15
|
import FilterList from '@material-ui/icons/FilterList';
|
|
@@ -258,17 +258,19 @@ function LogLine({
|
|
|
258
258
|
[line, searchText]
|
|
259
259
|
);
|
|
260
260
|
const elements = useMemo(
|
|
261
|
-
() => chunks.map(({ text, modifiers, highlight }, index) =>
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
261
|
+
() => chunks.map(({ text, modifiers, highlight }, index) => (
|
|
262
|
+
// eslint-disable-next-line react/forbid-elements
|
|
263
|
+
/* @__PURE__ */ React.createElement(
|
|
264
|
+
"span",
|
|
265
|
+
{
|
|
266
|
+
key: index,
|
|
267
|
+
className: classNames(
|
|
268
|
+
getModifierClasses(classes, modifiers),
|
|
269
|
+
highlight !== void 0 && (highlight === highlightResultIndex ? classes.textSelectedHighlight : classes.textHighlight)
|
|
270
|
+
)
|
|
271
|
+
},
|
|
272
|
+
text
|
|
273
|
+
)
|
|
272
274
|
)),
|
|
273
275
|
[chunks, highlightResultIndex, classes]
|
|
274
276
|
);
|
|
@@ -607,4 +609,4 @@ function RealLogViewer(props) {
|
|
|
607
609
|
}
|
|
608
610
|
|
|
609
611
|
export { RealLogViewer };
|
|
610
|
-
//# sourceMappingURL=RealLogViewer-
|
|
612
|
+
//# sourceMappingURL=RealLogViewer-38d8327e.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RealLogViewer-38d8327e.esm.js","sources":["../../src/components/LogViewer/AnsiProcessor.ts","../../src/components/LogViewer/LogLine.tsx","../../src/components/LogViewer/LogViewerControls.tsx","../../src/components/LogViewer/styles.ts","../../src/components/LogViewer/useLogViewerSearch.tsx","../../src/components/LogViewer/useLogViewerSelection.tsx","../../src/components/LogViewer/RealLogViewer.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 */\n\nimport ansiRegexMaker from 'ansi-regex';\n\nconst ansiRegex = ansiRegexMaker();\nconst newlineRegex = /\\n\\r?/g;\n\n// A mapping of how each escape code changes the modifiers\nconst codeModifiers = Object.fromEntries(\n Object.entries({\n 1: m => ({ ...m, bold: true }),\n 3: m => ({ ...m, italic: true }),\n 4: m => ({ ...m, underline: true }),\n 22: ({ bold: _, ...m }) => m,\n 23: ({ italic: _, ...m }) => m,\n 24: ({ underline: _, ...m }) => m,\n 30: m => ({ ...m, foreground: 'black' }),\n 31: m => ({ ...m, foreground: 'red' }),\n 32: m => ({ ...m, foreground: 'green' }),\n 33: m => ({ ...m, foreground: 'yellow' }),\n 34: m => ({ ...m, foreground: 'blue' }),\n 35: m => ({ ...m, foreground: 'magenta' }),\n 36: m => ({ ...m, foreground: 'cyan' }),\n 37: m => ({ ...m, foreground: 'white' }),\n 39: ({ foreground: _, ...m }) => m,\n 90: m => ({ ...m, foreground: 'grey' }),\n 40: m => ({ ...m, background: 'black' }),\n 41: m => ({ ...m, background: 'red' }),\n 42: m => ({ ...m, background: 'green' }),\n 43: m => ({ ...m, background: 'yellow' }),\n 44: m => ({ ...m, background: 'blue' }),\n 45: m => ({ ...m, background: 'magenta' }),\n 46: m => ({ ...m, background: 'cyan' }),\n 47: m => ({ ...m, background: 'white' }),\n 49: ({ background: _, ...m }) => m,\n } as Record<string, (m: ChunkModifiers) => ChunkModifiers>).map(\n ([code, modifier]) => [`\\x1b[${code}m`, modifier],\n ),\n);\n\nexport type AnsiColor =\n | 'black'\n | 'red'\n | 'green'\n | 'yellow'\n | 'blue'\n | 'magenta'\n | 'cyan'\n | 'white'\n | 'grey';\n\nexport interface ChunkModifiers {\n foreground?: AnsiColor;\n background?: AnsiColor;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n}\n\nexport interface AnsiChunk {\n text: string;\n modifiers: ChunkModifiers;\n}\n\nexport class AnsiLine {\n text: string;\n\n constructor(\n readonly lineNumber: number = 1,\n readonly chunks: AnsiChunk[] = [],\n ) {\n this.text = chunks\n .map(c => c.text)\n .join('')\n .toLocaleLowerCase('en-US');\n }\n\n lastChunk(): AnsiChunk | undefined {\n return this.chunks[this.chunks.length - 1];\n }\n\n replaceLastChunk(newChunks?: AnsiChunk[]) {\n if (newChunks) {\n this.chunks.splice(this.chunks.length - 1, 1, ...newChunks);\n this.text = this.chunks\n .map(c => c.text)\n .join('')\n .toLocaleLowerCase('en-US');\n }\n }\n}\n\nexport class AnsiProcessor {\n private text: string = '';\n private lines: AnsiLine[] = [];\n\n /**\n * Processes a chunk of text while keeping internal state that optimizes\n * subsequent processing that appends to the text.\n */\n process(text: string): AnsiLine[] {\n if (this.text === text) {\n return this.lines;\n }\n\n if (text.startsWith(this.text)) {\n const lastLineIndex = this.lines.length > 0 ? this.lines.length - 1 : 0;\n const lastLine = this.lines[lastLineIndex] ?? new AnsiLine();\n const lastChunk = lastLine.lastChunk();\n\n const newLines = this.processLines(\n (lastChunk?.text ?? '') + text.slice(this.text.length),\n lastChunk?.modifiers,\n lastLine?.lineNumber,\n );\n lastLine.replaceLastChunk(newLines[0]?.chunks);\n\n this.lines[lastLineIndex] = lastLine;\n this.lines.push(...newLines.slice(1));\n } else {\n this.lines = this.processLines(text);\n }\n this.text = text;\n\n return this.lines;\n }\n\n // Split a chunk of text up into lines and process each line individually\n private processLines = (\n text: string,\n modifiers: ChunkModifiers = {},\n startingLineNumber: number = 1,\n ): AnsiLine[] => {\n const lines: AnsiLine[] = [];\n\n let currentModifiers = modifiers;\n let currentLineNumber = startingLineNumber;\n\n let prevIndex = 0;\n newlineRegex.lastIndex = 0;\n for (;;) {\n const match = newlineRegex.exec(text);\n if (!match) {\n const chunks = this.processText(\n text.slice(prevIndex),\n currentModifiers,\n );\n lines.push(new AnsiLine(currentLineNumber, chunks));\n return lines;\n }\n\n const line = text.slice(prevIndex, match.index);\n prevIndex = match.index + match[0].length;\n\n const chunks = this.processText(line, currentModifiers);\n lines.push(new AnsiLine(currentLineNumber, chunks));\n\n // Modifiers that are active in the last chunk are carried over to the next line\n currentModifiers =\n chunks[chunks.length - 1].modifiers ?? currentModifiers;\n currentLineNumber += 1;\n }\n };\n\n // Processing of a one individual text chunk\n private processText = (\n fullText: string,\n modifiers: ChunkModifiers,\n ): AnsiChunk[] => {\n const chunks: AnsiChunk[] = [];\n\n let currentModifiers = modifiers;\n\n let prevIndex = 0;\n ansiRegex.lastIndex = 0;\n for (;;) {\n const match = ansiRegex.exec(fullText);\n if (!match) {\n chunks.push({\n text: fullText.slice(prevIndex),\n modifiers: currentModifiers,\n });\n return chunks;\n }\n\n const text = fullText.slice(prevIndex, match.index);\n chunks.push({ text, modifiers: currentModifiers });\n\n // For every escape code that we encounter we keep track of where the\n // next chunk of text starts, and what modifiers it has\n prevIndex = match.index + match[0].length;\n currentModifiers = this.processCode(match[0], currentModifiers);\n }\n };\n\n private processCode = (\n code: string,\n modifiers: ChunkModifiers,\n ): ChunkModifiers => {\n return codeModifiers[code]?.(modifiers) ?? modifiers;\n };\n}\n","/*\n * Copyright 2021 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 */\n\nimport React, { useMemo } from 'react';\nimport { AnsiChunk, AnsiLine, ChunkModifiers } from './AnsiProcessor';\nimport startCase from 'lodash/startCase';\nimport classnames from 'classnames';\nimport { useStyles } from './styles';\n\nexport function getModifierClasses(\n classes: ReturnType<typeof useStyles>,\n modifiers: ChunkModifiers,\n) {\n const classNames = new Array<string>();\n if (modifiers.bold) {\n classNames.push(classes.modifierBold);\n }\n if (modifiers.italic) {\n classNames.push(classes.modifierItalic);\n }\n if (modifiers.underline) {\n classNames.push(classes.modifierUnderline);\n }\n if (modifiers.foreground) {\n const key = `modifierForeground${startCase(\n modifiers.foreground,\n )}` as keyof typeof classes;\n classNames.push(classes[key]);\n }\n if (modifiers.background) {\n const key = `modifierBackground${startCase(\n modifiers.background,\n )}` as keyof typeof classes;\n classNames.push(classes[key]);\n }\n return classNames.length > 0 ? classNames.join(' ') : undefined;\n}\n\nexport function findSearchResults(text: string, searchText: string) {\n if (!searchText || !text.includes(searchText)) {\n return undefined;\n }\n const searchResults = new Array<{ start: number; end: number }>();\n let offset = 0;\n for (;;) {\n const start = text.indexOf(searchText, offset);\n if (start === -1) {\n break;\n }\n const end = start + searchText.length;\n searchResults.push({ start, end });\n offset = end;\n }\n return searchResults;\n}\n\nexport interface HighlightAnsiChunk extends AnsiChunk {\n highlight?: number;\n}\n\nexport function calculateHighlightedChunks(\n line: AnsiLine,\n searchText: string,\n): HighlightAnsiChunk[] {\n const results = findSearchResults(line.text, searchText);\n if (!results) {\n return line.chunks;\n }\n\n const chunks = new Array<HighlightAnsiChunk>();\n\n let lineOffset = 0;\n let resultIndex = 0;\n let result = results[resultIndex];\n for (const chunk of line.chunks) {\n const { text, modifiers } = chunk;\n if (!result || lineOffset + text.length < result.start) {\n chunks.push(chunk);\n lineOffset += text.length;\n continue;\n }\n\n let localOffset = 0;\n while (result) {\n const localStart = Math.max(result.start - lineOffset, 0);\n if (localStart > text.length) {\n break; // The next result is not in this chunk\n }\n\n const localEnd = Math.min(result.end - lineOffset, text.length);\n\n const hasTextBeforeResult = localStart > localOffset;\n if (hasTextBeforeResult) {\n chunks.push({ text: text.slice(localOffset, localStart), modifiers });\n }\n const hasResultText = localEnd > localStart;\n if (hasResultText) {\n chunks.push({\n modifiers,\n highlight: resultIndex,\n text: text.slice(localStart, localEnd),\n });\n }\n\n localOffset = localEnd;\n\n const foundCompleteResult = result.end - lineOffset === localEnd;\n if (foundCompleteResult) {\n resultIndex += 1;\n result = results[resultIndex];\n } else {\n break; // The rest of the result is in the following chunks\n }\n }\n\n const hasTextAfterResult = localOffset < text.length;\n if (hasTextAfterResult) {\n chunks.push({ text: text.slice(localOffset), modifiers });\n }\n\n lineOffset += text.length;\n }\n\n return chunks;\n}\n\nexport interface LogLineProps {\n line: AnsiLine;\n classes: ReturnType<typeof useStyles>;\n searchText: string;\n highlightResultIndex?: number;\n}\n\nexport function LogLine({\n line,\n classes,\n searchText,\n highlightResultIndex,\n}: LogLineProps) {\n const chunks = useMemo(\n () => calculateHighlightedChunks(line, searchText),\n [line, searchText],\n );\n\n const elements = useMemo(\n () =>\n chunks.map(({ text, modifiers, highlight }, index) => (\n // eslint-disable-next-line react/forbid-elements\n <span\n key={index}\n className={classnames(\n getModifierClasses(classes, modifiers),\n highlight !== undefined &&\n (highlight === highlightResultIndex\n ? classes.textSelectedHighlight\n : classes.textHighlight),\n )}\n >\n {text}\n </span>\n )),\n [chunks, highlightResultIndex, classes],\n );\n\n return <>{elements}</>;\n}\n","/*\n * Copyright 2021 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 */\n\nimport React from 'react';\nimport IconButton from '@material-ui/core/IconButton';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport { LogViewerSearch } from './useLogViewerSearch';\n\nexport interface LogViewerControlsProps extends LogViewerSearch {}\n\nexport function LogViewerControls(props: LogViewerControlsProps) {\n const { resultCount, resultIndexStep, toggleShouldFilter } = props;\n const resultIndex = props.resultIndex ?? 0;\n\n const handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n if (event.metaKey || event.ctrlKey || event.altKey) {\n toggleShouldFilter();\n } else {\n resultIndexStep(event.shiftKey);\n }\n }\n };\n\n return (\n <>\n {resultCount !== undefined && (\n <>\n <IconButton size=\"small\" onClick={() => resultIndexStep(true)}>\n <ChevronLeftIcon />\n </IconButton>\n <Typography>\n {Math.min(resultIndex + 1, resultCount)}/{resultCount}\n </Typography>\n <IconButton size=\"small\" onClick={() => resultIndexStep()}>\n <ChevronRightIcon />\n </IconButton>\n </>\n )}\n <TextField\n size=\"small\"\n variant=\"standard\"\n placeholder=\"Search\"\n value={props.searchInput}\n onKeyPress={handleKeyPress}\n onChange={e => props.setSearchInput(e.target.value)}\n />\n <IconButton size=\"small\" onClick={toggleShouldFilter}>\n {props.shouldFilter ? (\n <FilterListIcon color=\"primary\" />\n ) : (\n <FilterListIcon color=\"disabled\" />\n )}\n </IconButton>\n </>\n );\n}\n","/*\n * Copyright 2021 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 */\n\nimport { alpha, makeStyles } from '@material-ui/core/styles';\nimport * as colors from '@material-ui/core/colors';\n\nexport const HEADER_SIZE = 40;\n\n/** @public Class keys for overriding LogViewer styles */\nexport type LogViewerClassKey =\n | 'root'\n | 'header'\n | 'log'\n | 'line'\n | 'lineSelected'\n | 'lineCopyButton'\n | 'lineNumber'\n | 'textHighlight'\n | 'textSelectedHighlight'\n | 'modifierBold'\n | 'modifierItalic'\n | 'modifierUnderline'\n | 'modifierForegroundBlack'\n | 'modifierForegroundRed'\n | 'modifierForegroundGreen'\n | 'modifierForegroundYellow'\n | 'modifierForegroundBlue'\n | 'modifierForegroundMagenta'\n | 'modifierForegroundCyan'\n | 'modifierForegroundWhite'\n | 'modifierForegroundGrey'\n | 'modifierBackgroundBlack'\n | 'modifierBackgroundRed'\n | 'modifierBackgroundGreen'\n | 'modifierBackgroundYellow'\n | 'modifierBackgroundBlue'\n | 'modifierBackgroundMagenta'\n | 'modifierBackgroundCyan'\n | 'modifierBackgroundWhite'\n | 'modifierBackgroundGrey';\n\nexport const useStyles = makeStyles(\n theme => ({\n root: {\n background: theme.palette.background.paper,\n },\n header: {\n height: HEADER_SIZE,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n log: {\n fontFamily: '\"Monaco\", monospace',\n fontSize: theme.typography.pxToRem(12),\n },\n line: {\n position: 'relative',\n whiteSpace: 'pre',\n\n '&:hover': {\n background: theme.palette.action.hover,\n },\n },\n lineSelected: {\n background: theme.palette.action.selected,\n\n '&:hover': {\n background: theme.palette.action.selected,\n },\n },\n lineCopyButton: {\n position: 'absolute',\n paddingTop: 0,\n paddingBottom: 0,\n },\n lineNumber: {\n display: 'inline-block',\n textAlign: 'end',\n width: 60,\n marginRight: theme.spacing(1),\n cursor: 'pointer',\n },\n textHighlight: {\n background: alpha(theme.palette.info.main, 0.15),\n },\n textSelectedHighlight: {\n background: alpha(theme.palette.info.main, 0.4),\n },\n modifierBold: {\n fontWeight: theme.typography.fontWeightBold,\n },\n modifierItalic: {\n fontStyle: 'italic',\n },\n modifierUnderline: {\n textDecoration: 'underline',\n },\n modifierForegroundBlack: {\n color: colors.common.black,\n },\n modifierForegroundRed: {\n color: colors.red[500],\n },\n modifierForegroundGreen: {\n color: colors.green[500],\n },\n modifierForegroundYellow: {\n color: colors.yellow[500],\n },\n modifierForegroundBlue: {\n color: colors.blue[500],\n },\n modifierForegroundMagenta: {\n color: colors.purple[500],\n },\n modifierForegroundCyan: {\n color: colors.cyan[500],\n },\n modifierForegroundWhite: {\n color: colors.common.white,\n },\n modifierForegroundGrey: {\n color: colors.grey[500],\n },\n modifierBackgroundBlack: {\n background: colors.common.black,\n },\n modifierBackgroundRed: {\n background: colors.red[500],\n },\n modifierBackgroundGreen: {\n background: colors.green[500],\n },\n modifierBackgroundYellow: {\n background: colors.yellow[500],\n },\n modifierBackgroundBlue: {\n background: colors.blue[500],\n },\n modifierBackgroundMagenta: {\n background: colors.purple[500],\n },\n modifierBackgroundCyan: {\n background: colors.cyan[500],\n },\n modifierBackgroundWhite: {\n background: colors.common.white,\n },\n modifierBackgroundGrey: {\n background: colors.grey[500],\n },\n }),\n { name: 'BackstageLogViewer' },\n);\n","/*\n * Copyright 2021 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 */\n\nimport { useMemo, useState } from 'react';\nimport { useToggle } from '@react-hookz/web';\nimport { AnsiLine } from './AnsiProcessor';\n\nexport function applySearchFilter(lines: AnsiLine[], searchText: string) {\n if (!searchText) {\n return { lines };\n }\n\n const matchingLines = [];\n const searchResults = [];\n for (const line of lines) {\n if (line.text.includes(searchText)) {\n matchingLines.push(line);\n\n let offset = 0;\n let lineResultIndex = 0;\n for (;;) {\n const start = line.text.indexOf(searchText, offset);\n if (start === -1) {\n break;\n }\n searchResults.push({\n lineNumber: line.lineNumber,\n lineIndex: lineResultIndex++,\n });\n offset = start + searchText.length;\n }\n }\n }\n\n return {\n lines: matchingLines,\n results: searchResults,\n };\n}\n\nexport interface LogViewerSearch {\n lines: AnsiLine[];\n\n searchText: string;\n searchInput: string;\n setSearchInput: (searchInput: string) => void;\n\n shouldFilter: boolean;\n toggleShouldFilter: () => void;\n\n resultCount: number | undefined;\n resultIndex: number | undefined;\n resultIndexStep: (decrement?: boolean) => void;\n\n resultLine: number | undefined;\n resultLineIndex: number | undefined;\n}\n\nexport function useLogViewerSearch(lines: AnsiLine[]): LogViewerSearch {\n const [searchInput, setSearchInput] = useState('');\n const searchText = searchInput.toLocaleLowerCase('en-US');\n\n const [resultIndex, setResultIndex] = useState<number>(0);\n\n const [shouldFilter, toggleShouldFilter] = useToggle(false);\n\n const filter = useMemo(\n () => applySearchFilter(lines, searchText),\n [lines, searchText],\n );\n\n const searchResult = filter.results\n ? filter.results[Math.min(resultIndex, filter.results.length - 1)]\n : undefined;\n const resultCount = filter.results?.length;\n\n const resultIndexStep = (decrement?: boolean) => {\n if (decrement) {\n if (resultCount !== undefined) {\n const next = Math.min(resultIndex - 1, resultCount - 2);\n setResultIndex(next < 0 ? resultCount - 1 : next);\n }\n } else {\n if (resultCount !== undefined) {\n const next = resultIndex + 1;\n setResultIndex(next >= resultCount ? 0 : next);\n }\n }\n };\n\n return {\n lines: shouldFilter ? filter.lines : lines,\n searchText,\n searchInput,\n setSearchInput,\n shouldFilter,\n toggleShouldFilter,\n resultCount,\n resultIndex,\n resultIndexStep,\n resultLine: searchResult?.lineNumber,\n resultLineIndex: searchResult?.lineIndex,\n };\n}\n","/*\n * Copyright 2021 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 */\n\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useEffect, useState } from 'react';\nimport useCopyToClipboard from 'react-use/lib/useCopyToClipboard';\nimport { AnsiLine } from './AnsiProcessor';\n\nexport function useLogViewerSelection(lines: AnsiLine[]) {\n const errorApi = useApi(errorApiRef);\n const [sel, setSelection] = useState<{ start: number; end: number }>();\n const start = sel ? Math.min(sel.start, sel.end) : undefined;\n const end = sel ? Math.max(sel.start, sel.end) : undefined;\n\n const [{ error }, copyToClipboard] = useCopyToClipboard();\n\n useEffect(() => {\n if (error) {\n errorApi.post(error);\n }\n }, [error, errorApi]);\n\n return {\n shouldShowButton(line: number) {\n return start === line || end === line;\n },\n isSelected(line: number) {\n if (!sel) {\n return false;\n }\n return start! <= line && line <= end!;\n },\n setSelection(line: number, add: boolean) {\n if (add) {\n setSelection(s =>\n s ? { start: s.start, end: line } : { start: line, end: line },\n );\n } else {\n setSelection(s =>\n s?.start === line && s?.end === line\n ? undefined\n : { start: line, end: line },\n );\n }\n },\n copySelection() {\n if (sel) {\n const copyText = lines\n .slice(Math.min(sel.start, sel.end) - 1, Math.max(sel.start, sel.end))\n .map(l => l.chunks.map(c => c.text).join(''))\n .join('\\n');\n copyToClipboard(copyText);\n setSelection(undefined);\n }\n },\n };\n}\n","/*\n * Copyright 2021 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 Box from '@material-ui/core/Box';\nimport IconButton from '@material-ui/core/IconButton';\nimport CopyIcon from '@material-ui/icons/FileCopy';\nimport classnames from 'classnames';\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { FixedSizeList } from 'react-window';\n\nimport { AnsiProcessor } from './AnsiProcessor';\nimport { LogLine } from './LogLine';\nimport { LogViewerControls } from './LogViewerControls';\nimport { HEADER_SIZE, useStyles } from './styles';\nimport { useLogViewerSearch } from './useLogViewerSearch';\nimport { useLogViewerSelection } from './useLogViewerSelection';\n\nexport interface RealLogViewerProps {\n text: string;\n classes?: { root?: string };\n}\n\nexport function RealLogViewer(props: RealLogViewerProps) {\n const classes = useStyles({ classes: props.classes });\n const listRef = useRef<FixedSizeList | null>(null);\n\n // The processor keeps state that optimizes appending to the text\n const processor = useMemo(() => new AnsiProcessor(), []);\n const lines = processor.process(props.text);\n\n const search = useLogViewerSearch(lines);\n const selection = useLogViewerSelection(lines);\n const location = useLocation();\n\n useEffect(() => {\n if (search.resultLine !== undefined && listRef.current) {\n listRef.current.scrollToItem(search.resultLine - 1, 'center');\n }\n }, [search.resultLine]);\n\n useEffect(() => {\n if (location.hash) {\n // #line-6 -> 6\n const line = parseInt(location.hash.replace(/\\D/g, ''), 10);\n selection.setSelection(line, false);\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleSelectLine = (\n line: number,\n event: { shiftKey: boolean; preventDefault: () => void },\n ) => {\n selection.setSelection(line, event.shiftKey);\n };\n\n return (\n <AutoSizer>\n {({ height, width }) => (\n <Box style={{ width, height }} className={classes.root}>\n <Box className={classes.header}>\n <LogViewerControls {...search} />\n </Box>\n <FixedSizeList\n ref={listRef}\n className={classes.log}\n height={height - HEADER_SIZE}\n width={width}\n itemData={search.lines}\n itemSize={20}\n itemCount={search.lines.length}\n >\n {({ index, style, data }) => {\n const line = data[index];\n const { lineNumber } = line;\n return (\n <Box\n style={{ ...style }}\n className={classnames(classes.line, {\n [classes.lineSelected]: selection.isSelected(lineNumber),\n })}\n >\n {selection.shouldShowButton(lineNumber) && (\n <IconButton\n data-testid=\"copy-button\"\n size=\"small\"\n className={classes.lineCopyButton}\n onClick={() => selection.copySelection()}\n >\n <CopyIcon fontSize=\"inherit\" />\n </IconButton>\n )}\n <a\n role=\"row\"\n target=\"_self\"\n href={`#line-${lineNumber}`}\n className={classes.lineNumber}\n onClick={event => handleSelectLine(lineNumber, event)}\n onKeyPress={event => handleSelectLine(lineNumber, event)}\n >\n {lineNumber}\n </a>\n <LogLine\n line={line}\n classes={classes}\n searchText={search.searchText}\n highlightResultIndex={\n search.resultLine === lineNumber\n ? search.resultLineIndex\n : undefined\n }\n />\n </Box>\n );\n }}\n </FixedSizeList>\n </Box>\n )}\n </AutoSizer>\n );\n}\n"],"names":["chunks","classnames","ChevronRightIcon","FilterListIcon"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { LinearProgressProps } from '@material-ui/core/LinearProgress';
|
|
|
12
12
|
import { CardHeaderProps } from '@material-ui/core/CardHeader';
|
|
13
13
|
import { BackstagePalette, BackstageTheme } from '@backstage/theme';
|
|
14
14
|
import { TabProps as TabProps$1 } from '@material-ui/core/Tab';
|
|
15
|
-
import { Column, MaterialTableProps, Icons } from '@material-table/core';
|
|
15
|
+
import { Column, MaterialTableProps, Options as Options$1, Icons } from '@material-table/core';
|
|
16
16
|
import { SparklinesProps, SparklinesLineProps } from 'react-sparklines';
|
|
17
17
|
import { IconComponent, SignInPageProps, ApiRef, ProfileInfoApi, BackstageIdentityApi, SessionApi, IdentityApi, ProfileInfo, BackstageUserIdentity } from '@backstage/core-plugin-api';
|
|
18
18
|
import { ListItemTextProps } from '@material-ui/core/ListItemText';
|
|
@@ -106,23 +106,31 @@ declare type LinkProps = Omit<LinkProps$1, 'to'> & Omit<LinkProps$2, 'to'> & {
|
|
|
106
106
|
declare const Link: (props: LinkProps) => JSX.Element;
|
|
107
107
|
|
|
108
108
|
/**
|
|
109
|
-
* Properties for {@link
|
|
109
|
+
* Properties for {@link LinkButton}
|
|
110
110
|
*
|
|
111
111
|
* @public
|
|
112
112
|
* @remarks
|
|
113
113
|
*
|
|
114
114
|
* See {@link https://v4.mui.com/api/button/#props | Material-UI Button Props} for all properties
|
|
115
115
|
*/
|
|
116
|
-
declare type
|
|
116
|
+
declare type LinkButtonProps = ButtonProps$1 & Omit<LinkProps, 'variant' | 'color'>;
|
|
117
117
|
/**
|
|
118
118
|
* Thin wrapper on top of material-ui's {@link https://v4.mui.com/components/buttons/ | Button} component
|
|
119
119
|
*
|
|
120
120
|
* @public
|
|
121
121
|
* @remarks
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
*/
|
|
123
|
+
declare const LinkButton: (props: ButtonProps) => JSX.Element;
|
|
124
|
+
/**
|
|
125
|
+
* @public
|
|
126
|
+
* @deprecated use LinkButton instead
|
|
124
127
|
*/
|
|
125
128
|
declare const Button: (props: ButtonProps) => JSX.Element;
|
|
129
|
+
/**
|
|
130
|
+
* @public
|
|
131
|
+
* @deprecated use LinkButtonProps instead
|
|
132
|
+
*/
|
|
133
|
+
declare type ButtonProps = LinkButtonProps;
|
|
126
134
|
|
|
127
135
|
/**
|
|
128
136
|
* Properties for {@link CodeSnippet}
|
|
@@ -1117,6 +1125,8 @@ interface TableProps<T extends object = {}> extends MaterialTableProps<T> {
|
|
|
1117
1125
|
emptyContent?: ReactNode;
|
|
1118
1126
|
onStateChange?: (state: TableState) => any;
|
|
1119
1127
|
}
|
|
1128
|
+
interface TableOptions<T extends object = {}> extends Options$1<T> {
|
|
1129
|
+
}
|
|
1120
1130
|
/**
|
|
1121
1131
|
* @public
|
|
1122
1132
|
*/
|
|
@@ -2086,4 +2096,4 @@ declare type BackstageOverrides = Overrides & {
|
|
|
2086
2096
|
[Name in keyof BackstageComponentsNameToClassKey]?: Partial<StyleRules<BackstageComponentsNameToClassKey[Name]>>;
|
|
2087
2097
|
};
|
|
2088
2098
|
|
|
2089
|
-
export { AlertDisplay, AlertDisplayProps, Avatar, AvatarClassKey, AvatarProps, BackstageContentClassKey, BackstageOverrides, BoldHeaderClassKey, BottomLink, BottomLinkClassKey, BottomLinkProps, Breadcrumbs, BreadcrumbsClickableTextClassKey, BreadcrumbsStyledBoxClassKey, BrokenImageIcon, Button, ButtonProps, CardActionsTopRightClassKey, CardTab, CardTabClassKey, CatalogIcon, ChatIcon, ClosedDropdownClassKey, CodeSnippet, CodeSnippetProps, Content, ContentHeader, ContentHeaderClassKey, CopyTextButton, CopyTextButtonProps, CreateButton, CreateButtonProps, CustomProviderClassKey, DashboardIcon, DependencyGraph, DependencyGraphDefaultLabelClassKey, DependencyGraphDefaultNodeClassKey, DependencyGraphEdgeClassKey, DependencyGraphNodeClassKey, DependencyGraphProps, types_d as DependencyGraphTypes, DismissableBanner, DismissableBannerClassKey, DismissbleBannerClassKey, DocsIcon, EmailIcon, EmptyState, EmptyStateClassKey, EmptyStateImageClassKey, ErrorBoundary, ErrorBoundaryProps, ErrorPage, ErrorPageClassKey, ErrorPanel, ErrorPanelClassKey, ErrorPanelProps, FeatureCalloutCircleClassKey, FeatureCalloutCircular, FiltersContainerClassKey, Gauge, GaugeCard, GaugeCardClassKey, GaugeClassKey, GaugeProps, GaugePropsGetColor, GaugePropsGetColorOptions, GitHubIcon, GroupIcon, Header, HeaderActionMenu, HeaderActionMenuItem, HeaderActionMenuProps, HeaderClassKey, HeaderIconLinkRow, HeaderIconLinkRowClassKey, HeaderLabel, HeaderLabelClassKey, HeaderTabs, HeaderTabsClassKey, HelpIcon, HorizontalScrollGrid, HorizontalScrollGridClassKey, IconLinkVerticalClassKey, IconLinkVerticalProps, IdentityProviders, InfoCard, InfoCardClassKey, InfoCardVariants, IntroCard, ItemCard, ItemCardGrid, ItemCardGridClassKey, ItemCardGridProps, ItemCardHeader, ItemCardHeaderClassKey, ItemCardHeaderProps, Lifecycle, LifecycleClassKey, LinearGauge, Link, LinkProps, LogViewer, LogViewerClassKey, LogViewerProps, LoginRequestListItemClassKey, MarkdownContent, MarkdownContentClassKey, MetadataTableCellClassKey, MetadataTableListClassKey, MetadataTableListItemClassKey, MetadataTableTitleCellClassKey, MicDropClassKey, MissingAnnotationEmptyState, MissingAnnotationEmptyStateClassKey, MobileSidebar, MobileSidebarProps, OAuthRequestDialog, OAuthRequestDialogClassKey, OpenedDropdownClassKey, OverflowTooltip, OverflowTooltipClassKey, Page, PageClassKey, PageWithHeader, Progress, ProxiedSignInPage, ProxiedSignInPageProps, ResponseErrorPanel, ResponseErrorPanelClassKey, RoutedTabs, SIDEBAR_INTRO_LOCAL_STORAGE, SelectComponent as Select, SelectClassKey, SelectInputBaseClassKey, SelectItem, SelectedItems, Sidebar, SidebarClassKey, LegacySidebarContext as SidebarContext, SidebarContextType, SidebarDivider, SidebarDividerClassKey, SidebarExpandButton, SidebarGroup, SidebarGroupProps, SidebarIntro, SidebarIntroClassKey, SidebarItem, SidebarItemClassKey, SidebarOpenState, SidebarOpenStateProvider, SidebarOptions, SidebarPage, SidebarPageClassKey, SidebarPageProps, SidebarPinState, LegacySidebarPinStateContext as SidebarPinStateContext, SidebarPinStateContextType, SidebarPinStateProvider, SidebarProps, SidebarScrollWrapper, SidebarSearchField, SidebarSpace, SidebarSpaceClassKey, SidebarSpacer, SidebarSpacerClassKey, SidebarSubmenu, SidebarSubmenuItem, SidebarSubmenuItemDropdownItem, SidebarSubmenuItemProps, SidebarSubmenuProps, SignInPage, SignInPageClassKey, SignInProviderConfig, SimpleStepper, SimpleStepperFooterClassKey, SimpleStepperStep, SimpleStepperStepClassKey, StatusAborted, StatusClassKey, StatusError, StatusOK, StatusPending, StatusRunning, StatusWarning, StructuredMetadataTable, StructuredMetadataTableListClassKey, StructuredMetadataTableNestedListClassKey, SubmenuOptions, SubvalueCell, SubvalueCellClassKey, SupportButton, SupportButtonClassKey, SupportConfig, SupportItem, SupportItemLink, Tab, TabBarClassKey, TabClassKey, TabIconClassKey, TabbedCard, TabbedCardClassKey, TabbedLayout, Table, TableClassKey, TableColumn, TableFilter, TableFiltersClassKey, TableHeaderClassKey, TableProps, TableState, TableToolbarClassKey, Tabs, TabsClassKey, TrendLine, UserIcon, UserIdentity, WarningIcon, WarningPanel, WarningPanelClassKey, sidebarConfig, useContent, useQueryParamState, useSidebarOpenState, useSidebarPinState, useSupportConfig };
|
|
2099
|
+
export { AlertDisplay, AlertDisplayProps, Avatar, AvatarClassKey, AvatarProps, BackstageContentClassKey, BackstageOverrides, BoldHeaderClassKey, BottomLink, BottomLinkClassKey, BottomLinkProps, Breadcrumbs, BreadcrumbsClickableTextClassKey, BreadcrumbsStyledBoxClassKey, BrokenImageIcon, Button, ButtonProps, CardActionsTopRightClassKey, CardTab, CardTabClassKey, CatalogIcon, ChatIcon, ClosedDropdownClassKey, CodeSnippet, CodeSnippetProps, Content, ContentHeader, ContentHeaderClassKey, CopyTextButton, CopyTextButtonProps, CreateButton, CreateButtonProps, CustomProviderClassKey, DashboardIcon, DependencyGraph, DependencyGraphDefaultLabelClassKey, DependencyGraphDefaultNodeClassKey, DependencyGraphEdgeClassKey, DependencyGraphNodeClassKey, DependencyGraphProps, types_d as DependencyGraphTypes, DismissableBanner, DismissableBannerClassKey, DismissbleBannerClassKey, DocsIcon, EmailIcon, EmptyState, EmptyStateClassKey, EmptyStateImageClassKey, ErrorBoundary, ErrorBoundaryProps, ErrorPage, ErrorPageClassKey, ErrorPanel, ErrorPanelClassKey, ErrorPanelProps, FeatureCalloutCircleClassKey, FeatureCalloutCircular, FiltersContainerClassKey, Gauge, GaugeCard, GaugeCardClassKey, GaugeClassKey, GaugeProps, GaugePropsGetColor, GaugePropsGetColorOptions, GitHubIcon, GroupIcon, Header, HeaderActionMenu, HeaderActionMenuItem, HeaderActionMenuProps, HeaderClassKey, HeaderIconLinkRow, HeaderIconLinkRowClassKey, HeaderLabel, HeaderLabelClassKey, HeaderTabs, HeaderTabsClassKey, HelpIcon, HorizontalScrollGrid, HorizontalScrollGridClassKey, IconLinkVerticalClassKey, IconLinkVerticalProps, IdentityProviders, InfoCard, InfoCardClassKey, InfoCardVariants, IntroCard, ItemCard, ItemCardGrid, ItemCardGridClassKey, ItemCardGridProps, ItemCardHeader, ItemCardHeaderClassKey, ItemCardHeaderProps, Lifecycle, LifecycleClassKey, LinearGauge, Link, LinkButton, LinkButtonProps, LinkProps, LogViewer, LogViewerClassKey, LogViewerProps, LoginRequestListItemClassKey, MarkdownContent, MarkdownContentClassKey, MetadataTableCellClassKey, MetadataTableListClassKey, MetadataTableListItemClassKey, MetadataTableTitleCellClassKey, MicDropClassKey, MissingAnnotationEmptyState, MissingAnnotationEmptyStateClassKey, MobileSidebar, MobileSidebarProps, OAuthRequestDialog, OAuthRequestDialogClassKey, OpenedDropdownClassKey, OverflowTooltip, OverflowTooltipClassKey, Page, PageClassKey, PageWithHeader, Progress, ProxiedSignInPage, ProxiedSignInPageProps, ResponseErrorPanel, ResponseErrorPanelClassKey, RoutedTabs, SIDEBAR_INTRO_LOCAL_STORAGE, SelectComponent as Select, SelectClassKey, SelectInputBaseClassKey, SelectItem, SelectedItems, Sidebar, SidebarClassKey, LegacySidebarContext as SidebarContext, SidebarContextType, SidebarDivider, SidebarDividerClassKey, SidebarExpandButton, SidebarGroup, SidebarGroupProps, SidebarIntro, SidebarIntroClassKey, SidebarItem, SidebarItemClassKey, SidebarOpenState, SidebarOpenStateProvider, SidebarOptions, SidebarPage, SidebarPageClassKey, SidebarPageProps, SidebarPinState, LegacySidebarPinStateContext as SidebarPinStateContext, SidebarPinStateContextType, SidebarPinStateProvider, SidebarProps, SidebarScrollWrapper, SidebarSearchField, SidebarSpace, SidebarSpaceClassKey, SidebarSpacer, SidebarSpacerClassKey, SidebarSubmenu, SidebarSubmenuItem, SidebarSubmenuItemDropdownItem, SidebarSubmenuItemProps, SidebarSubmenuProps, SignInPage, SignInPageClassKey, SignInProviderConfig, SimpleStepper, SimpleStepperFooterClassKey, SimpleStepperStep, SimpleStepperStepClassKey, StatusAborted, StatusClassKey, StatusError, StatusOK, StatusPending, StatusRunning, StatusWarning, StructuredMetadataTable, StructuredMetadataTableListClassKey, StructuredMetadataTableNestedListClassKey, SubmenuOptions, SubvalueCell, SubvalueCellClassKey, SupportButton, SupportButtonClassKey, SupportConfig, SupportItem, SupportItemLink, Tab, TabBarClassKey, TabClassKey, TabIconClassKey, TabbedCard, TabbedCardClassKey, TabbedLayout, Table, TableClassKey, TableColumn, TableFilter, TableFiltersClassKey, TableHeaderClassKey, TableOptions, TableProps, TableState, TableToolbarClassKey, Tabs, TabsClassKey, TrendLine, UserIcon, UserIdentity, WarningIcon, WarningPanel, WarningPanelClassKey, sidebarConfig, useContent, useQueryParamState, useSidebarOpenState, useSidebarPinState, useSupportConfig };
|
package/dist/index.esm.js
CHANGED
|
@@ -196,13 +196,13 @@ function stringToColor(str) {
|
|
|
196
196
|
let color = "#";
|
|
197
197
|
for (let i = 0; i < 3; i++) {
|
|
198
198
|
const value = hash >> i * 8 & 255;
|
|
199
|
-
color += `00${value.toString(16)}`.
|
|
199
|
+
color += `00${value.toString(16)}`.slice(-2);
|
|
200
200
|
}
|
|
201
201
|
return color;
|
|
202
202
|
}
|
|
203
203
|
function extractInitials(value) {
|
|
204
204
|
var _a;
|
|
205
|
-
return (_a = value.match(/\b\w/g)) == null ? void 0 : _a.join("").
|
|
205
|
+
return (_a = value.match(/\b\w/g)) == null ? void 0 : _a.join("").slice(0, 2);
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
const useStyles$S = makeStyles(
|
|
@@ -362,7 +362,8 @@ const Link = React.forwardRef(
|
|
|
362
362
|
);
|
|
363
363
|
|
|
364
364
|
const LinkWrapper = React.forwardRef((props, ref) => /* @__PURE__ */ React.createElement(Link, { ref, ...props, color: "initial" }));
|
|
365
|
-
const
|
|
365
|
+
const LinkButton = React.forwardRef((props, ref) => /* @__PURE__ */ React.createElement(Button$1, { ref, component: LinkWrapper, ...props }));
|
|
366
|
+
const Button = LinkButton;
|
|
366
367
|
|
|
367
368
|
function CopyTextButton(props) {
|
|
368
369
|
const {
|
|
@@ -1887,7 +1888,7 @@ function Lifecycle(props) {
|
|
|
1887
1888
|
}
|
|
1888
1889
|
|
|
1889
1890
|
const RealLogViewer = lazy(
|
|
1890
|
-
() => import('./esm/RealLogViewer-
|
|
1891
|
+
() => import('./esm/RealLogViewer-38d8327e.esm.js').then((m) => ({ default: m.RealLogViewer }))
|
|
1891
1892
|
);
|
|
1892
1893
|
function LogViewer(props) {
|
|
1893
1894
|
const { Progress } = useApp().getComponents();
|
|
@@ -3515,6 +3516,7 @@ const MobileSidebarGroup = (props) => {
|
|
|
3515
3516
|
/* @__PURE__ */ React.createElement(
|
|
3516
3517
|
BottomNavigationAction,
|
|
3517
3518
|
{
|
|
3519
|
+
"aria-label": label,
|
|
3518
3520
|
label,
|
|
3519
3521
|
icon,
|
|
3520
3522
|
component: Link,
|
|
@@ -4496,11 +4498,13 @@ const SidebarItemWithSubmenu = ({
|
|
|
4496
4498
|
const SidebarItem = forwardRef((props, ref) => {
|
|
4497
4499
|
const [submenu] = useElementFilter(
|
|
4498
4500
|
props.children,
|
|
4499
|
-
(elements) =>
|
|
4500
|
-
|
|
4501
|
-
|
|
4502
|
-
|
|
4503
|
-
|
|
4501
|
+
(elements) => (
|
|
4502
|
+
// Directly comparing child.type with SidebarSubmenu will not work with in
|
|
4503
|
+
// combination with react-hot-loader
|
|
4504
|
+
//
|
|
4505
|
+
// https://github.com/gaearon/react-hot-loader/issues/304#issuecomment-456569720
|
|
4506
|
+
elements.getElements().filter((child) => child.type === sidebarSubmenuType)
|
|
4507
|
+
)
|
|
4504
4508
|
);
|
|
4505
4509
|
if (submenu) {
|
|
4506
4510
|
return /* @__PURE__ */ React.createElement(SidebarItemWithSubmenu, { ...props }, submenu);
|
|
@@ -4866,8 +4870,10 @@ function useSelectedSubRoute(subRoutes) {
|
|
|
4866
4870
|
element: children
|
|
4867
4871
|
}));
|
|
4868
4872
|
const sortedRoutes = routes.sort(
|
|
4869
|
-
(a, b) =>
|
|
4870
|
-
|
|
4873
|
+
(a, b) => (
|
|
4874
|
+
// remove "/*" symbols from path end before comparing
|
|
4875
|
+
b.path.replace(/\/\*$/, "").localeCompare(a.path.replace(/\/\*$/, ""))
|
|
4876
|
+
)
|
|
4871
4877
|
);
|
|
4872
4878
|
const element = (_a = useRoutes(sortedRoutes)) != null ? _a : subRoutes[0].children;
|
|
4873
4879
|
let currentRoute = (_b = params["*"]) != null ? _b : "";
|
|
@@ -6182,7 +6188,7 @@ class ProxiedSignInIdentity {
|
|
|
6182
6188
|
async getSessionAsync() {
|
|
6183
6189
|
if (this.state.type === "fetching") {
|
|
6184
6190
|
return this.state.promise;
|
|
6185
|
-
} else if (this.state.type === "active" && new Date() < this.state.expiresAt) {
|
|
6191
|
+
} else if (this.state.type === "active" && /* @__PURE__ */ new Date() < this.state.expiresAt) {
|
|
6186
6192
|
return this.state.session;
|
|
6187
6193
|
}
|
|
6188
6194
|
const previous = this.state.type === "active" ? this.state.session : void 0;
|
|
@@ -6951,5 +6957,5 @@ function CardTab(props) {
|
|
|
6951
6957
|
return /* @__PURE__ */ React.createElement(Tab, { disableRipple: true, classes, ...restProps });
|
|
6952
6958
|
}
|
|
6953
6959
|
|
|
6954
|
-
export { AlertDisplay, Avatar, BottomLink, Breadcrumbs, BrokenImageIcon, Button, CardTab, CatalogIcon, ChatIcon, CodeSnippet, Content, ContentHeader, CopyTextButton, CreateButton, DashboardIcon, DependencyGraph, types as DependencyGraphTypes, DismissableBanner, DocsIcon, EmailIcon, EmptyState, ErrorBoundary, ErrorPage, ErrorPanel, FeatureCalloutCircular, Gauge, GaugeCard, GitHubIcon, GroupIcon, Header, HeaderActionMenu, HeaderIconLinkRow, HeaderLabel, HeaderTabs, HelpIcon, HorizontalScrollGrid, InfoCard, IntroCard, ItemCard, ItemCardGrid, ItemCardHeader, Lifecycle, LinearGauge, Link, LogViewer, MarkdownContent, MissingAnnotationEmptyState, MobileSidebar, OAuthRequestDialog, OverflowTooltip, Page, PageWithHeader, Progress, ProxiedSignInPage, ResponseErrorPanel, RoutedTabs, SIDEBAR_INTRO_LOCAL_STORAGE, SelectComponent as Select, Sidebar, LegacySidebarContext as SidebarContext, SidebarDivider, SidebarExpandButton, SidebarGroup, SidebarIntro, SidebarItem, SidebarOpenStateProvider, SidebarPage, LegacySidebarPinStateContext as SidebarPinStateContext, SidebarPinStateProvider, SidebarScrollWrapper, SidebarSearchField, SidebarSpace, SidebarSpacer, SidebarSubmenu, SidebarSubmenuItem, SignInPage, SimpleStepper, SimpleStepperStep, StatusAborted, StatusError, StatusOK, StatusPending, StatusRunning, StatusWarning, StructuredMetadataTable, SubvalueCell, SupportButton, TabbedCard, TabbedLayout, Table, Tabs, TrendLine, UserIcon, UserIdentity, WarningIcon, WarningPanel, sidebarConfig, useContent, useQueryParamState, useSidebarOpenState, useSidebarPinState, useSupportConfig };
|
|
6960
|
+
export { AlertDisplay, Avatar, BottomLink, Breadcrumbs, BrokenImageIcon, Button, CardTab, CatalogIcon, ChatIcon, CodeSnippet, Content, ContentHeader, CopyTextButton, CreateButton, DashboardIcon, DependencyGraph, types as DependencyGraphTypes, DismissableBanner, DocsIcon, EmailIcon, EmptyState, ErrorBoundary, ErrorPage, ErrorPanel, FeatureCalloutCircular, Gauge, GaugeCard, GitHubIcon, GroupIcon, Header, HeaderActionMenu, HeaderIconLinkRow, HeaderLabel, HeaderTabs, HelpIcon, HorizontalScrollGrid, InfoCard, IntroCard, ItemCard, ItemCardGrid, ItemCardHeader, Lifecycle, LinearGauge, Link, LinkButton, LogViewer, MarkdownContent, MissingAnnotationEmptyState, MobileSidebar, OAuthRequestDialog, OverflowTooltip, Page, PageWithHeader, Progress, ProxiedSignInPage, ResponseErrorPanel, RoutedTabs, SIDEBAR_INTRO_LOCAL_STORAGE, SelectComponent as Select, Sidebar, LegacySidebarContext as SidebarContext, SidebarDivider, SidebarExpandButton, SidebarGroup, SidebarIntro, SidebarItem, SidebarOpenStateProvider, SidebarPage, LegacySidebarPinStateContext as SidebarPinStateContext, SidebarPinStateProvider, SidebarScrollWrapper, SidebarSearchField, SidebarSpace, SidebarSpacer, SidebarSubmenu, SidebarSubmenuItem, SignInPage, SimpleStepper, SimpleStepperStep, StatusAborted, StatusError, StatusOK, StatusPending, StatusRunning, StatusWarning, StructuredMetadataTable, SubvalueCell, SupportButton, TabbedCard, TabbedLayout, Table, Tabs, TrendLine, UserIcon, UserIdentity, WarningIcon, WarningPanel, sidebarConfig, useContent, useQueryParamState, useSidebarOpenState, useSidebarPinState, useSupportConfig };
|
|
6955
6961
|
//# sourceMappingURL=index.esm.js.map
|