@techdocs/cli 0.0.0-nightly-20260618032436 → 0.0.0-nightly-20260619032606
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 +4 -4
- package/dist/embedded-app/.config-schema.json +99 -99
- package/dist/embedded-app/index.html +1 -1
- package/dist/embedded-app/index.html.tmpl +1 -1
- package/dist/embedded-app/static/{123.c8595509.chunk.js → 123.5ec0a6b5.chunk.js} +2 -2
- package/dist/embedded-app/static/{123.c8595509.chunk.js.map → 123.5ec0a6b5.chunk.js.map} +1 -1
- package/dist/embedded-app/static/{1659.b8316f38.chunk.js → 1659.affd5fd0.chunk.js} +2 -2
- package/dist/embedded-app/static/{1659.b8316f38.chunk.js.map → 1659.affd5fd0.chunk.js.map} +1 -1
- package/dist/embedded-app/static/{4587.17bd2b12.chunk.js → 4587.7188ab43.chunk.js} +2 -2
- package/dist/embedded-app/static/{4587.17bd2b12.chunk.js.map → 4587.7188ab43.chunk.js.map} +1 -1
- package/dist/embedded-app/static/{7226.8c68c3d3.chunk.js → 7226.07a43ca6.chunk.js} +2 -2
- package/dist/embedded-app/static/7226.07a43ca6.chunk.js.map +1 -0
- package/dist/embedded-app/static/{main.fbc1b502.js → main.038fdca3.js} +2 -2
- package/dist/embedded-app/static/{main.fbc1b502.js.map → main.038fdca3.js.map} +1 -1
- package/dist/embedded-app/static/{runtime.8e6b30de.js → runtime.55ca2a98.js} +2 -2
- package/dist/embedded-app/static/{runtime.8e6b30de.js.map → runtime.55ca2a98.js.map} +1 -1
- package/dist/package.json.cjs.js +1 -1
- package/package.json +4 -4
- package/dist/embedded-app/static/7226.8c68c3d3.chunk.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# @techdocs/cli
|
|
2
2
|
|
|
3
|
-
## 0.0.0-nightly-
|
|
3
|
+
## 0.0.0-nightly-20260619032606
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
7
|
- Updated dependencies
|
|
8
|
-
- @backstage/backend-defaults@0.0.0-nightly-
|
|
9
|
-
- @backstage/plugin-techdocs-node@0.0.0-nightly-
|
|
8
|
+
- @backstage/backend-defaults@0.0.0-nightly-20260619032606
|
|
9
|
+
- @backstage/plugin-techdocs-node@0.0.0-nightly-20260619032606
|
|
10
|
+
- @backstage/config@1.3.8
|
|
10
11
|
- @backstage/catalog-model@1.9.0
|
|
11
12
|
- @backstage/cli-common@0.2.2
|
|
12
|
-
- @backstage/config@1.3.8
|
|
13
13
|
|
|
14
14
|
## 1.11.1
|
|
15
15
|
|
|
@@ -1471,105 +1471,6 @@
|
|
|
1471
1471
|
},
|
|
1472
1472
|
"packageName": "@backstage/plugin-auth-backend-module-guest-provider"
|
|
1473
1473
|
},
|
|
1474
|
-
{
|
|
1475
|
-
"path": "../backend-app-api/config.d.ts",
|
|
1476
|
-
"value": {
|
|
1477
|
-
"type": "object",
|
|
1478
|
-
"properties": {
|
|
1479
|
-
"backend": {
|
|
1480
|
-
"type": "object",
|
|
1481
|
-
"properties": {
|
|
1482
|
-
"packages": {
|
|
1483
|
-
"description": "Used by the feature discovery service",
|
|
1484
|
-
"anyOf": [
|
|
1485
|
-
{
|
|
1486
|
-
"type": "object",
|
|
1487
|
-
"properties": {
|
|
1488
|
-
"include": {
|
|
1489
|
-
"type": "array",
|
|
1490
|
-
"items": {
|
|
1491
|
-
"type": "string"
|
|
1492
|
-
}
|
|
1493
|
-
},
|
|
1494
|
-
"exclude": {
|
|
1495
|
-
"type": "array",
|
|
1496
|
-
"items": {
|
|
1497
|
-
"type": "string"
|
|
1498
|
-
}
|
|
1499
|
-
}
|
|
1500
|
-
}
|
|
1501
|
-
},
|
|
1502
|
-
{
|
|
1503
|
-
"const": "all",
|
|
1504
|
-
"type": "string"
|
|
1505
|
-
}
|
|
1506
|
-
]
|
|
1507
|
-
},
|
|
1508
|
-
"startup": {
|
|
1509
|
-
"type": "object",
|
|
1510
|
-
"properties": {
|
|
1511
|
-
"default": {
|
|
1512
|
-
"type": "object",
|
|
1513
|
-
"properties": {
|
|
1514
|
-
"onPluginBootFailure": {
|
|
1515
|
-
"description": "The default value for `onPluginBootFailure` if not specified for a particular plugin.\nThis defaults to 'abort', which means `onPluginBootFailure: continue` must be specified\nfor backend startup to continue on plugin boot failure. This can also be set to\n'continue', which flips the logic for individual plugins so that they must be set to\n`onPluginBootFailure: abort` to be required.",
|
|
1516
|
-
"enum": [
|
|
1517
|
-
"abort",
|
|
1518
|
-
"continue"
|
|
1519
|
-
],
|
|
1520
|
-
"type": "string"
|
|
1521
|
-
},
|
|
1522
|
-
"onPluginModuleBootFailure": {
|
|
1523
|
-
"description": "The default value for `onPluginModuleBootFailure` if not specified for a particular plugin module.\nThis defaults to 'abort', which means `onPluginModuleBootFailure: continue` must be specified\nfor backend startup to continue on plugin module boot failure. This can also be set to\n'continue', which flips the logic for individual plugin modules so that they must be set to\n`onPluginModuleBootFailure: abort` to be required.",
|
|
1524
|
-
"enum": [
|
|
1525
|
-
"abort",
|
|
1526
|
-
"continue"
|
|
1527
|
-
],
|
|
1528
|
-
"type": "string"
|
|
1529
|
-
}
|
|
1530
|
-
}
|
|
1531
|
-
},
|
|
1532
|
-
"plugins": {
|
|
1533
|
-
"type": "object",
|
|
1534
|
-
"additionalProperties": {
|
|
1535
|
-
"type": "object",
|
|
1536
|
-
"properties": {
|
|
1537
|
-
"onPluginBootFailure": {
|
|
1538
|
-
"description": "Used to control backend startup behavior when this plugin fails to boot up. Setting\nthis to `continue` allows the backend to continue starting up, even if this plugin\nfails. This can enable leaving a crashing plugin installed, but still permit backend\nstartup, which may help troubleshoot data-dependent issues. Plugin failures for plugins\nset to `abort` are fatal (this is the default unless overridden by the `default`\nsetting).",
|
|
1539
|
-
"enum": [
|
|
1540
|
-
"abort",
|
|
1541
|
-
"continue"
|
|
1542
|
-
],
|
|
1543
|
-
"type": "string"
|
|
1544
|
-
},
|
|
1545
|
-
"modules": {
|
|
1546
|
-
"type": "object",
|
|
1547
|
-
"additionalProperties": {
|
|
1548
|
-
"type": "object",
|
|
1549
|
-
"properties": {
|
|
1550
|
-
"onPluginModuleBootFailure": {
|
|
1551
|
-
"description": "Used to control backend startup behavior when this plugin module fails to boot up. Setting\nthis to `continue` allows the backend to continue starting up, even if this plugin\nmodule fails. This can enable leaving a crashing plugin installed, but still permit backend\nstartup, which may help troubleshoot data-dependent issues. Plugin module failures for plugin modules\nset to `abort` are fatal (this is the default unless overridden by the `default`\nsetting).",
|
|
1552
|
-
"enum": [
|
|
1553
|
-
"abort",
|
|
1554
|
-
"continue"
|
|
1555
|
-
],
|
|
1556
|
-
"type": "string"
|
|
1557
|
-
}
|
|
1558
|
-
}
|
|
1559
|
-
}
|
|
1560
|
-
}
|
|
1561
|
-
}
|
|
1562
|
-
}
|
|
1563
|
-
}
|
|
1564
|
-
}
|
|
1565
|
-
}
|
|
1566
|
-
}
|
|
1567
|
-
}
|
|
1568
|
-
},
|
|
1569
|
-
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
1570
|
-
},
|
|
1571
|
-
"packageName": "@backstage/backend-app-api"
|
|
1572
|
-
},
|
|
1573
1474
|
{
|
|
1574
1475
|
"path": "../backend-defaults/config.d.ts",
|
|
1575
1476
|
"value": {
|
|
@@ -3356,6 +3257,105 @@
|
|
|
3356
3257
|
},
|
|
3357
3258
|
"packageName": "@backstage/backend-defaults"
|
|
3358
3259
|
},
|
|
3260
|
+
{
|
|
3261
|
+
"path": "../backend-app-api/config.d.ts",
|
|
3262
|
+
"value": {
|
|
3263
|
+
"type": "object",
|
|
3264
|
+
"properties": {
|
|
3265
|
+
"backend": {
|
|
3266
|
+
"type": "object",
|
|
3267
|
+
"properties": {
|
|
3268
|
+
"packages": {
|
|
3269
|
+
"description": "Used by the feature discovery service",
|
|
3270
|
+
"anyOf": [
|
|
3271
|
+
{
|
|
3272
|
+
"type": "object",
|
|
3273
|
+
"properties": {
|
|
3274
|
+
"include": {
|
|
3275
|
+
"type": "array",
|
|
3276
|
+
"items": {
|
|
3277
|
+
"type": "string"
|
|
3278
|
+
}
|
|
3279
|
+
},
|
|
3280
|
+
"exclude": {
|
|
3281
|
+
"type": "array",
|
|
3282
|
+
"items": {
|
|
3283
|
+
"type": "string"
|
|
3284
|
+
}
|
|
3285
|
+
}
|
|
3286
|
+
}
|
|
3287
|
+
},
|
|
3288
|
+
{
|
|
3289
|
+
"const": "all",
|
|
3290
|
+
"type": "string"
|
|
3291
|
+
}
|
|
3292
|
+
]
|
|
3293
|
+
},
|
|
3294
|
+
"startup": {
|
|
3295
|
+
"type": "object",
|
|
3296
|
+
"properties": {
|
|
3297
|
+
"default": {
|
|
3298
|
+
"type": "object",
|
|
3299
|
+
"properties": {
|
|
3300
|
+
"onPluginBootFailure": {
|
|
3301
|
+
"description": "The default value for `onPluginBootFailure` if not specified for a particular plugin.\nThis defaults to 'abort', which means `onPluginBootFailure: continue` must be specified\nfor backend startup to continue on plugin boot failure. This can also be set to\n'continue', which flips the logic for individual plugins so that they must be set to\n`onPluginBootFailure: abort` to be required.",
|
|
3302
|
+
"enum": [
|
|
3303
|
+
"abort",
|
|
3304
|
+
"continue"
|
|
3305
|
+
],
|
|
3306
|
+
"type": "string"
|
|
3307
|
+
},
|
|
3308
|
+
"onPluginModuleBootFailure": {
|
|
3309
|
+
"description": "The default value for `onPluginModuleBootFailure` if not specified for a particular plugin module.\nThis defaults to 'abort', which means `onPluginModuleBootFailure: continue` must be specified\nfor backend startup to continue on plugin module boot failure. This can also be set to\n'continue', which flips the logic for individual plugin modules so that they must be set to\n`onPluginModuleBootFailure: abort` to be required.",
|
|
3310
|
+
"enum": [
|
|
3311
|
+
"abort",
|
|
3312
|
+
"continue"
|
|
3313
|
+
],
|
|
3314
|
+
"type": "string"
|
|
3315
|
+
}
|
|
3316
|
+
}
|
|
3317
|
+
},
|
|
3318
|
+
"plugins": {
|
|
3319
|
+
"type": "object",
|
|
3320
|
+
"additionalProperties": {
|
|
3321
|
+
"type": "object",
|
|
3322
|
+
"properties": {
|
|
3323
|
+
"onPluginBootFailure": {
|
|
3324
|
+
"description": "Used to control backend startup behavior when this plugin fails to boot up. Setting\nthis to `continue` allows the backend to continue starting up, even if this plugin\nfails. This can enable leaving a crashing plugin installed, but still permit backend\nstartup, which may help troubleshoot data-dependent issues. Plugin failures for plugins\nset to `abort` are fatal (this is the default unless overridden by the `default`\nsetting).",
|
|
3325
|
+
"enum": [
|
|
3326
|
+
"abort",
|
|
3327
|
+
"continue"
|
|
3328
|
+
],
|
|
3329
|
+
"type": "string"
|
|
3330
|
+
},
|
|
3331
|
+
"modules": {
|
|
3332
|
+
"type": "object",
|
|
3333
|
+
"additionalProperties": {
|
|
3334
|
+
"type": "object",
|
|
3335
|
+
"properties": {
|
|
3336
|
+
"onPluginModuleBootFailure": {
|
|
3337
|
+
"description": "Used to control backend startup behavior when this plugin module fails to boot up. Setting\nthis to `continue` allows the backend to continue starting up, even if this plugin\nmodule fails. This can enable leaving a crashing plugin installed, but still permit backend\nstartup, which may help troubleshoot data-dependent issues. Plugin module failures for plugin modules\nset to `abort` are fatal (this is the default unless overridden by the `default`\nsetting).",
|
|
3338
|
+
"enum": [
|
|
3339
|
+
"abort",
|
|
3340
|
+
"continue"
|
|
3341
|
+
],
|
|
3342
|
+
"type": "string"
|
|
3343
|
+
}
|
|
3344
|
+
}
|
|
3345
|
+
}
|
|
3346
|
+
}
|
|
3347
|
+
}
|
|
3348
|
+
}
|
|
3349
|
+
}
|
|
3350
|
+
}
|
|
3351
|
+
}
|
|
3352
|
+
}
|
|
3353
|
+
}
|
|
3354
|
+
},
|
|
3355
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
3356
|
+
},
|
|
3357
|
+
"packageName": "@backstage/backend-app-api"
|
|
3358
|
+
},
|
|
3359
3359
|
{
|
|
3360
3360
|
"path": "../../plugins/events-node/config.d.ts",
|
|
3361
3361
|
"value": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="color-scheme" content="light dark"/><meta name="description" content="Backstage is an open source framework for building developer portals"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><link rel="icon" href="/favicon.ico"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"/><title>Techdocs Preview App</title><meta name="backstage-app-mode" content="public"><script defer="defer" src="/static/runtime.
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="color-scheme" content="light dark"/><meta name="description" content="Backstage is an open source framework for building developer portals"/><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"/><link rel="icon" href="/favicon.ico"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"/><title>Techdocs Preview App</title><meta name="backstage-app-mode" content="public"><script defer="defer" src="/static/runtime.55ca2a98.js"></script><script defer="defer" src="/static/module-react-aria.e3e38de1.js"></script><script defer="defer" src="/static/module-material-ui.972bd852.js"></script><script defer="defer" src="/static/module-motion-dom.3c999f2a.js"></script><script defer="defer" src="/static/module-lodash.abe41c34.js"></script><script defer="defer" src="/static/module-zod.bc4245f8.js"></script><script defer="defer" src="/static/module-ajv.1cd135f7.js"></script><script defer="defer" src="/static/module-framer-motion.f34ff33a.js"></script><script defer="defer" src="/static/module-mui.9c07ad9e.js"></script><script defer="defer" src="/static/module-react-stately.97fc37eb.js"></script><script defer="defer" src="/static/module-react-aria-components.ab7cc6df.js"></script><script defer="defer" src="/static/module-micromark-core-commonmark.d049c8fc.js"></script><script defer="defer" src="/static/module-parse5.94980036.js"></script><script defer="defer" src="/static/module-react-dom.c631e87d.js"></script><script defer="defer" src="/static/module-react-hook-form.2803e955.js"></script><script defer="defer" src="/static/module-i18next.c154323c.js"></script><script defer="defer" src="/static/module-remixicon.0feb7353.js"></script><script defer="defer" src="/static/module-remix-run.0c80eb31.js"></script><script defer="defer" src="/static/vendor.5415689a.js"></script><script defer="defer" src="/static/main.038fdca3.js"></script><link href="/static/main.728cdf6e.css" rel="stylesheet"><script type="backstage.io/config">[
|
|
2
2
|
{
|
|
3
3
|
"context": "app-config.yaml",
|
|
4
4
|
"data": {
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
color="#5bbad5"
|
|
44
44
|
/>
|
|
45
45
|
<title><%= config.getString('app.title') %></title>
|
|
46
|
-
<meta name="backstage-app-mode" content="public"><meta name="backstage-public-path" content="<%= publicPath %>/"><script defer src="<%= publicPath %>/static/runtime.
|
|
46
|
+
<meta name="backstage-app-mode" content="public"><meta name="backstage-public-path" content="<%= publicPath %>/"><script defer src="<%= publicPath %>/static/runtime.55ca2a98.js"></script><script defer src="<%= publicPath %>/static/module-react-aria.e3e38de1.js"></script><script defer src="<%= publicPath %>/static/module-material-ui.972bd852.js"></script><script defer src="<%= publicPath %>/static/module-motion-dom.3c999f2a.js"></script><script defer src="<%= publicPath %>/static/module-lodash.abe41c34.js"></script><script defer src="<%= publicPath %>/static/module-zod.bc4245f8.js"></script><script defer src="<%= publicPath %>/static/module-ajv.1cd135f7.js"></script><script defer src="<%= publicPath %>/static/module-framer-motion.f34ff33a.js"></script><script defer src="<%= publicPath %>/static/module-mui.9c07ad9e.js"></script><script defer src="<%= publicPath %>/static/module-react-stately.97fc37eb.js"></script><script defer src="<%= publicPath %>/static/module-react-aria-components.ab7cc6df.js"></script><script defer src="<%= publicPath %>/static/module-micromark-core-commonmark.d049c8fc.js"></script><script defer src="<%= publicPath %>/static/module-parse5.94980036.js"></script><script defer src="<%= publicPath %>/static/module-react-dom.c631e87d.js"></script><script defer src="<%= publicPath %>/static/module-react-hook-form.2803e955.js"></script><script defer src="<%= publicPath %>/static/module-i18next.c154323c.js"></script><script defer src="<%= publicPath %>/static/module-remixicon.0feb7353.js"></script><script defer src="<%= publicPath %>/static/module-remix-run.0c80eb31.js"></script><script defer src="<%= publicPath %>/static/vendor.5415689a.js"></script><script defer src="<%= publicPath %>/static/main.038fdca3.js"></script><link href="<%= publicPath %>/static/main.728cdf6e.css" rel="stylesheet"></head>
|
|
47
47
|
<body>
|
|
48
48
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
49
49
|
<div id="root"></div>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["123"],{79894(a){a.exports=JSON.parse('{"name":"@backstage/plugin-catalog","version":"0.0.0-nightly-
|
|
2
|
-
//# sourceMappingURL=123.
|
|
1
|
+
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["123"],{79894(a){a.exports=JSON.parse('{"name":"@backstage/plugin-catalog","version":"0.0.0-nightly-20260619032606","description":"The Backstage plugin for browsing the Backstage catalog","backstage":{"role":"frontend-plugin","pluginId":"catalog","pluginPackages":["@backstage/plugin-catalog","@backstage/plugin-catalog-backend","@backstage/plugin-catalog-common","@backstage/plugin-catalog-node","@backstage/plugin-catalog-react"]},"publishConfig":{"access":"public"},"keywords":["backstage"],"homepage":"https://backstage.io","repository":{"type":"git","url":"https://github.com/backstage/backstage","directory":"plugins/catalog"},"license":"Apache-2.0","sideEffects":false,"exports":{".":"./src/index.ts","./alpha":"./src/alpha/index.ts","./package.json":"./package.json"},"main":"src/index.ts","types":"src/index.ts","typesVersions":{"*":{"alpha":["src/alpha/index.ts"],"package.json":["package.json"]}},"files":["dist","config.d.ts"],"scripts":{"build":"backstage-cli package build","clean":"backstage-cli package clean","lint":"backstage-cli package lint","prepack":"backstage-cli package prepack","postpack":"backstage-cli package postpack","start":"backstage-cli package start","test":"backstage-cli package test"},"dependencies":{"@backstage/catalog-client":"workspace:*","@backstage/catalog-model":"workspace:*","@backstage/core-compat-api":"workspace:*","@backstage/core-components":"workspace:*","@backstage/core-plugin-api":"workspace:*","@backstage/errors":"workspace:*","@backstage/frontend-plugin-api":"workspace:*","@backstage/integration-react":"workspace:*","@backstage/plugin-catalog-common":"workspace:*","@backstage/plugin-catalog-react":"workspace:*","@backstage/plugin-permission-react":"workspace:*","@backstage/plugin-scaffolder-common":"workspace:*","@backstage/plugin-search-common":"workspace:*","@backstage/plugin-search-react":"workspace:*","@backstage/plugin-techdocs-common":"workspace:*","@backstage/plugin-techdocs-react":"workspace:*","@backstage/types":"workspace:*","@backstage/ui":"workspace:*","@backstage/version-bridge":"workspace:*","@material-ui/core":"^4.12.2","@material-ui/icons":"^4.9.1","@material-ui/lab":"4.0.0-alpha.61","@mui/utils":"^5.14.15","@remixicon/react":"^4.6.0","classnames":"^2.3.1","csv-stringify":"^5.6.5","dataloader":"^2.0.0","lodash":"^4.17.21","pluralize":"^8.0.0","react-helmet":"6.1.0","react-use":"^17.2.4","zen-observable":"^0.10.0","zod":"^4.0.0"},"devDependencies":{"@backstage/cli":"workspace:*","@backstage/core-app-api":"workspace:*","@backstage/dev-utils":"workspace:*","@backstage/frontend-test-utils":"workspace:*","@backstage/plugin-permission-common":"workspace:*","@backstage/test-utils":"workspace:*","@testing-library/dom":"^10.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/react":"^16.0.0","@testing-library/user-event":"^14.0.0","@types/pluralize":"^0.0.33","@types/react":"^18.0.0","react":"^18.0.2","react-dom":"^18.0.2","react-router-dom":"^6.30.2","swr":"^2.2.5"},"peerDependencies":{"@types/react":"^17.0.0 || ^18.0.0","react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0","react-router-dom":"^6.30.2"},"peerDependenciesMeta":{"@types/react":{"optional":true}},"configSchema":"config.d.ts"}')}}]);
|
|
2
|
+
//# sourceMappingURL=123.5ec0a6b5.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static/123.
|
|
1
|
+
{"version":3,"file":"static/123.5ec0a6b5.chunk.js","sources":["webpack://techdocs-cli-embedded-app/json|/home/runner/work/publishing/publishing/plugins/catalog/package.json"],"sourcesContent":["module.exports = JSON.parse('{\"name\":\"@backstage/plugin-catalog\",\"version\":\"0.0.0-nightly-20260619032606\",\"description\":\"The Backstage plugin for browsing the Backstage catalog\",\"backstage\":{\"role\":\"frontend-plugin\",\"pluginId\":\"catalog\",\"pluginPackages\":[\"@backstage/plugin-catalog\",\"@backstage/plugin-catalog-backend\",\"@backstage/plugin-catalog-common\",\"@backstage/plugin-catalog-node\",\"@backstage/plugin-catalog-react\"]},\"publishConfig\":{\"access\":\"public\"},\"keywords\":[\"backstage\"],\"homepage\":\"https://backstage.io\",\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/backstage/backstage\",\"directory\":\"plugins/catalog\"},\"license\":\"Apache-2.0\",\"sideEffects\":false,\"exports\":{\".\":\"./src/index.ts\",\"./alpha\":\"./src/alpha/index.ts\",\"./package.json\":\"./package.json\"},\"main\":\"src/index.ts\",\"types\":\"src/index.ts\",\"typesVersions\":{\"*\":{\"alpha\":[\"src/alpha/index.ts\"],\"package.json\":[\"package.json\"]}},\"files\":[\"dist\",\"config.d.ts\"],\"scripts\":{\"build\":\"backstage-cli package build\",\"clean\":\"backstage-cli package clean\",\"lint\":\"backstage-cli package lint\",\"prepack\":\"backstage-cli package prepack\",\"postpack\":\"backstage-cli package postpack\",\"start\":\"backstage-cli package start\",\"test\":\"backstage-cli package test\"},\"dependencies\":{\"@backstage/catalog-client\":\"workspace:*\",\"@backstage/catalog-model\":\"workspace:*\",\"@backstage/core-compat-api\":\"workspace:*\",\"@backstage/core-components\":\"workspace:*\",\"@backstage/core-plugin-api\":\"workspace:*\",\"@backstage/errors\":\"workspace:*\",\"@backstage/frontend-plugin-api\":\"workspace:*\",\"@backstage/integration-react\":\"workspace:*\",\"@backstage/plugin-catalog-common\":\"workspace:*\",\"@backstage/plugin-catalog-react\":\"workspace:*\",\"@backstage/plugin-permission-react\":\"workspace:*\",\"@backstage/plugin-scaffolder-common\":\"workspace:*\",\"@backstage/plugin-search-common\":\"workspace:*\",\"@backstage/plugin-search-react\":\"workspace:*\",\"@backstage/plugin-techdocs-common\":\"workspace:*\",\"@backstage/plugin-techdocs-react\":\"workspace:*\",\"@backstage/types\":\"workspace:*\",\"@backstage/ui\":\"workspace:*\",\"@backstage/version-bridge\":\"workspace:*\",\"@material-ui/core\":\"^4.12.2\",\"@material-ui/icons\":\"^4.9.1\",\"@material-ui/lab\":\"4.0.0-alpha.61\",\"@mui/utils\":\"^5.14.15\",\"@remixicon/react\":\"^4.6.0\",\"classnames\":\"^2.3.1\",\"csv-stringify\":\"^5.6.5\",\"dataloader\":\"^2.0.0\",\"lodash\":\"^4.17.21\",\"pluralize\":\"^8.0.0\",\"react-helmet\":\"6.1.0\",\"react-use\":\"^17.2.4\",\"zen-observable\":\"^0.10.0\",\"zod\":\"^4.0.0\"},\"devDependencies\":{\"@backstage/cli\":\"workspace:*\",\"@backstage/core-app-api\":\"workspace:*\",\"@backstage/dev-utils\":\"workspace:*\",\"@backstage/frontend-test-utils\":\"workspace:*\",\"@backstage/plugin-permission-common\":\"workspace:*\",\"@backstage/test-utils\":\"workspace:*\",\"@testing-library/dom\":\"^10.0.0\",\"@testing-library/jest-dom\":\"^6.0.0\",\"@testing-library/react\":\"^16.0.0\",\"@testing-library/user-event\":\"^14.0.0\",\"@types/pluralize\":\"^0.0.33\",\"@types/react\":\"^18.0.0\",\"react\":\"^18.0.2\",\"react-dom\":\"^18.0.2\",\"react-router-dom\":\"^6.30.2\",\"swr\":\"^2.2.5\"},\"peerDependencies\":{\"@types/react\":\"^17.0.0 || ^18.0.0\",\"react\":\"^17.0.0 || ^18.0.0\",\"react-dom\":\"^17.0.0 || ^18.0.0\",\"react-router-dom\":\"^6.30.2\"},\"peerDependenciesMeta\":{\"@types/react\":{\"optional\":true}},\"configSchema\":\"config.d.ts\"}')"],"names":["JSON"],"mappings":"iIAAA,EAAO,OAAO,CAAGA,KAAK,KAAK,CAAC,imG"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["1659"],{23494(e){e.exports=JSON.parse('{"name":"@backstage/plugin-techdocs","version":"0.0.0-nightly-
|
|
2
|
-
//# sourceMappingURL=1659.
|
|
1
|
+
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["1659"],{23494(e){e.exports=JSON.parse('{"name":"@backstage/plugin-techdocs","version":"0.0.0-nightly-20260619032606","description":"The Backstage plugin that renders technical documentation for your components","backstage":{"role":"frontend-plugin","pluginId":"techdocs","pluginPackages":["@backstage/plugin-techdocs","@backstage/plugin-techdocs-backend","@backstage/plugin-techdocs-common","@backstage/plugin-techdocs-node","@backstage/plugin-techdocs-react"]},"publishConfig":{"access":"public"},"keywords":["backstage","techdocs"],"homepage":"https://backstage.io","repository":{"type":"git","url":"https://github.com/backstage/backstage","directory":"plugins/techdocs"},"license":"Apache-2.0","sideEffects":false,"exports":{".":"./src/index.ts","./alpha":"./src/alpha/index.tsx","./package.json":"./package.json"},"main":"src/index.ts","types":"src/index.ts","typesVersions":{"*":{"alpha":["src/alpha/index.tsx"],"package.json":["package.json"]}},"files":["dist","config.d.ts"],"scripts":{"build":"backstage-cli package build","clean":"backstage-cli package clean","lint":"backstage-cli package lint","prepack":"backstage-cli package prepack","postpack":"backstage-cli package postpack","start":"backstage-cli package start","test":"backstage-cli package test"},"dependencies":{"@backstage/catalog-client":"workspace:*","@backstage/catalog-model":"workspace:*","@backstage/config":"workspace:*","@backstage/core-components":"workspace:*","@backstage/core-plugin-api":"workspace:*","@backstage/errors":"workspace:*","@backstage/frontend-plugin-api":"workspace:*","@backstage/integration":"workspace:*","@backstage/integration-react":"workspace:*","@backstage/plugin-auth-react":"workspace:*","@backstage/plugin-catalog-react":"workspace:*","@backstage/plugin-search-common":"workspace:*","@backstage/plugin-search-react":"workspace:*","@backstage/plugin-techdocs-common":"workspace:*","@backstage/plugin-techdocs-react":"workspace:*","@backstage/theme":"workspace:*","@backstage/ui":"workspace:*","@material-ui/core":"^4.12.2","@material-ui/icons":"^4.9.1","@material-ui/lab":"4.0.0-alpha.61","@material-ui/styles":"^4.10.0","@microsoft/fetch-event-source":"^2.0.1","@remixicon/react":">=4.6.0 <4.9.0","dompurify":"^3.3.2","git-url-parse":"^15.0.0","lodash":"^4.17.21","react-helmet":"6.1.0","react-use":"^17.2.4","zod":"^4.0.0"},"devDependencies":{"@backstage/cli":"workspace:*","@backstage/core-app-api":"workspace:*","@backstage/dev-utils":"workspace:*","@backstage/plugin-catalog":"workspace:*","@backstage/plugin-techdocs-module-addons-contrib":"workspace:*","@backstage/test-utils":"workspace:*","@testing-library/dom":"^10.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/react":"^16.0.0","@testing-library/user-event":"^14.0.0","@types/dompurify":"^3.0.0","@types/react":"^18.0.0","react":"^18.0.2","react-dom":"^18.0.2","react-router-dom":"^6.30.2"},"peerDependencies":{"@types/react":"^17.0.0 || ^18.0.0","react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0","react-router-dom":"^6.30.2"},"peerDependenciesMeta":{"@types/react":{"optional":true}},"configSchema":"config.d.ts"}')}}]);
|
|
2
|
+
//# sourceMappingURL=1659.affd5fd0.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static/1659.
|
|
1
|
+
{"version":3,"file":"static/1659.affd5fd0.chunk.js","sources":["webpack://techdocs-cli-embedded-app/json|/home/runner/work/publishing/publishing/plugins/techdocs/package.json"],"sourcesContent":["module.exports = JSON.parse('{\"name\":\"@backstage/plugin-techdocs\",\"version\":\"0.0.0-nightly-20260619032606\",\"description\":\"The Backstage plugin that renders technical documentation for your components\",\"backstage\":{\"role\":\"frontend-plugin\",\"pluginId\":\"techdocs\",\"pluginPackages\":[\"@backstage/plugin-techdocs\",\"@backstage/plugin-techdocs-backend\",\"@backstage/plugin-techdocs-common\",\"@backstage/plugin-techdocs-node\",\"@backstage/plugin-techdocs-react\"]},\"publishConfig\":{\"access\":\"public\"},\"keywords\":[\"backstage\",\"techdocs\"],\"homepage\":\"https://backstage.io\",\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/backstage/backstage\",\"directory\":\"plugins/techdocs\"},\"license\":\"Apache-2.0\",\"sideEffects\":false,\"exports\":{\".\":\"./src/index.ts\",\"./alpha\":\"./src/alpha/index.tsx\",\"./package.json\":\"./package.json\"},\"main\":\"src/index.ts\",\"types\":\"src/index.ts\",\"typesVersions\":{\"*\":{\"alpha\":[\"src/alpha/index.tsx\"],\"package.json\":[\"package.json\"]}},\"files\":[\"dist\",\"config.d.ts\"],\"scripts\":{\"build\":\"backstage-cli package build\",\"clean\":\"backstage-cli package clean\",\"lint\":\"backstage-cli package lint\",\"prepack\":\"backstage-cli package prepack\",\"postpack\":\"backstage-cli package postpack\",\"start\":\"backstage-cli package start\",\"test\":\"backstage-cli package test\"},\"dependencies\":{\"@backstage/catalog-client\":\"workspace:*\",\"@backstage/catalog-model\":\"workspace:*\",\"@backstage/config\":\"workspace:*\",\"@backstage/core-components\":\"workspace:*\",\"@backstage/core-plugin-api\":\"workspace:*\",\"@backstage/errors\":\"workspace:*\",\"@backstage/frontend-plugin-api\":\"workspace:*\",\"@backstage/integration\":\"workspace:*\",\"@backstage/integration-react\":\"workspace:*\",\"@backstage/plugin-auth-react\":\"workspace:*\",\"@backstage/plugin-catalog-react\":\"workspace:*\",\"@backstage/plugin-search-common\":\"workspace:*\",\"@backstage/plugin-search-react\":\"workspace:*\",\"@backstage/plugin-techdocs-common\":\"workspace:*\",\"@backstage/plugin-techdocs-react\":\"workspace:*\",\"@backstage/theme\":\"workspace:*\",\"@backstage/ui\":\"workspace:*\",\"@material-ui/core\":\"^4.12.2\",\"@material-ui/icons\":\"^4.9.1\",\"@material-ui/lab\":\"4.0.0-alpha.61\",\"@material-ui/styles\":\"^4.10.0\",\"@microsoft/fetch-event-source\":\"^2.0.1\",\"@remixicon/react\":\">=4.6.0 <4.9.0\",\"dompurify\":\"^3.3.2\",\"git-url-parse\":\"^15.0.0\",\"lodash\":\"^4.17.21\",\"react-helmet\":\"6.1.0\",\"react-use\":\"^17.2.4\",\"zod\":\"^4.0.0\"},\"devDependencies\":{\"@backstage/cli\":\"workspace:*\",\"@backstage/core-app-api\":\"workspace:*\",\"@backstage/dev-utils\":\"workspace:*\",\"@backstage/plugin-catalog\":\"workspace:*\",\"@backstage/plugin-techdocs-module-addons-contrib\":\"workspace:*\",\"@backstage/test-utils\":\"workspace:*\",\"@testing-library/dom\":\"^10.0.0\",\"@testing-library/jest-dom\":\"^6.0.0\",\"@testing-library/react\":\"^16.0.0\",\"@testing-library/user-event\":\"^14.0.0\",\"@types/dompurify\":\"^3.0.0\",\"@types/react\":\"^18.0.0\",\"react\":\"^18.0.2\",\"react-dom\":\"^18.0.2\",\"react-router-dom\":\"^6.30.2\"},\"peerDependencies\":{\"@types/react\":\"^17.0.0 || ^18.0.0\",\"react\":\"^17.0.0 || ^18.0.0\",\"react-dom\":\"^17.0.0 || ^18.0.0\",\"react-router-dom\":\"^6.30.2\"},\"peerDependenciesMeta\":{\"@types/react\":{\"optional\":true}},\"configSchema\":\"config.d.ts\"}')"],"names":["JSON"],"mappings":"kIAAA,EAAO,OAAO,CAAGA,KAAK,KAAK,CAAC,ggG"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["4587"],{20534(e){e.exports=JSON.parse('{"name":"@backstage/plugin-app","version":"0.0.0-nightly-
|
|
2
|
-
//# sourceMappingURL=4587.
|
|
1
|
+
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["4587"],{20534(e){e.exports=JSON.parse('{"name":"@backstage/plugin-app","version":"0.0.0-nightly-20260619032606","backstage":{"role":"frontend-plugin","pluginId":"app","pluginPackages":["@backstage/plugin-app","@backstage/plugin-app-backend","@backstage/plugin-app-node","@backstage/plugin-app-react"]},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/backstage/backstage","directory":"plugins/app"},"license":"Apache-2.0","sideEffects":false,"exports":{".":"./src/index.ts","./alpha":"./src/alpha/index.ts","./package.json":"./package.json"},"main":"src/index.ts","types":"src/index.ts","typesVersions":{"*":{"alpha":["src/alpha/index.ts"],"package.json":["package.json"]}},"files":["dist"],"scripts":{"build":"backstage-cli package build","clean":"backstage-cli package clean","lint":"backstage-cli package lint","prepack":"backstage-cli package prepack","postpack":"backstage-cli package postpack","start":"backstage-cli package start","test":"backstage-cli package test"},"dependencies":{"@backstage/core-components":"workspace:*","@backstage/core-plugin-api":"workspace:*","@backstage/filter-predicates":"workspace:*","@backstage/frontend-plugin-api":"workspace:*","@backstage/integration-react":"workspace:*","@backstage/plugin-app-react":"workspace:*","@backstage/plugin-permission-react":"workspace:*","@backstage/theme":"workspace:*","@backstage/types":"workspace:*","@backstage/ui":"workspace:*","@backstage/version-bridge":"workspace:*","@material-ui/core":"^4.9.13","@material-ui/icons":"^4.9.1","@material-ui/lab":"^4.0.0-alpha.61","@react-hookz/web":"^24.0.0","@remixicon/react":">=4.6.0 <4.9.0","motion":"^12.0.0","react-aria":"~3.48.0","react-stately":"~3.46.0","react-use":"^17.2.4","zen-observable":"^0.10.0","zod":"^4.0.0"},"devDependencies":{"@backstage/cli":"workspace:*","@backstage/dev-utils":"workspace:*","@backstage/frontend-defaults":"workspace:*","@backstage/frontend-test-utils":"workspace:*","@backstage/test-utils":"workspace:*","@testing-library/jest-dom":"^6.0.0","@testing-library/react":"^16.0.0","@testing-library/user-event":"^14.0.0","@types/react":"^18.0.0","msw":"^1.0.0","react":"^18.0.2","react-dom":"^18.0.2","react-router-dom":"^6.30.2"},"peerDependencies":{"@types/react":"^17.0.0 || ^18.0.0","react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0","react-router-dom":"^6.30.2"},"peerDependenciesMeta":{"@types/react":{"optional":true}}}')}}]);
|
|
2
|
+
//# sourceMappingURL=4587.7188ab43.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static/4587.
|
|
1
|
+
{"version":3,"file":"static/4587.7188ab43.chunk.js","sources":["webpack://techdocs-cli-embedded-app/json|/home/runner/work/publishing/publishing/plugins/app/package.json"],"sourcesContent":["module.exports = JSON.parse('{\"name\":\"@backstage/plugin-app\",\"version\":\"0.0.0-nightly-20260619032606\",\"backstage\":{\"role\":\"frontend-plugin\",\"pluginId\":\"app\",\"pluginPackages\":[\"@backstage/plugin-app\",\"@backstage/plugin-app-backend\",\"@backstage/plugin-app-node\",\"@backstage/plugin-app-react\"]},\"publishConfig\":{\"access\":\"public\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/backstage/backstage\",\"directory\":\"plugins/app\"},\"license\":\"Apache-2.0\",\"sideEffects\":false,\"exports\":{\".\":\"./src/index.ts\",\"./alpha\":\"./src/alpha/index.ts\",\"./package.json\":\"./package.json\"},\"main\":\"src/index.ts\",\"types\":\"src/index.ts\",\"typesVersions\":{\"*\":{\"alpha\":[\"src/alpha/index.ts\"],\"package.json\":[\"package.json\"]}},\"files\":[\"dist\"],\"scripts\":{\"build\":\"backstage-cli package build\",\"clean\":\"backstage-cli package clean\",\"lint\":\"backstage-cli package lint\",\"prepack\":\"backstage-cli package prepack\",\"postpack\":\"backstage-cli package postpack\",\"start\":\"backstage-cli package start\",\"test\":\"backstage-cli package test\"},\"dependencies\":{\"@backstage/core-components\":\"workspace:*\",\"@backstage/core-plugin-api\":\"workspace:*\",\"@backstage/filter-predicates\":\"workspace:*\",\"@backstage/frontend-plugin-api\":\"workspace:*\",\"@backstage/integration-react\":\"workspace:*\",\"@backstage/plugin-app-react\":\"workspace:*\",\"@backstage/plugin-permission-react\":\"workspace:*\",\"@backstage/theme\":\"workspace:*\",\"@backstage/types\":\"workspace:*\",\"@backstage/ui\":\"workspace:*\",\"@backstage/version-bridge\":\"workspace:*\",\"@material-ui/core\":\"^4.9.13\",\"@material-ui/icons\":\"^4.9.1\",\"@material-ui/lab\":\"^4.0.0-alpha.61\",\"@react-hookz/web\":\"^24.0.0\",\"@remixicon/react\":\">=4.6.0 <4.9.0\",\"motion\":\"^12.0.0\",\"react-aria\":\"~3.48.0\",\"react-stately\":\"~3.46.0\",\"react-use\":\"^17.2.4\",\"zen-observable\":\"^0.10.0\",\"zod\":\"^4.0.0\"},\"devDependencies\":{\"@backstage/cli\":\"workspace:*\",\"@backstage/dev-utils\":\"workspace:*\",\"@backstage/frontend-defaults\":\"workspace:*\",\"@backstage/frontend-test-utils\":\"workspace:*\",\"@backstage/test-utils\":\"workspace:*\",\"@testing-library/jest-dom\":\"^6.0.0\",\"@testing-library/react\":\"^16.0.0\",\"@testing-library/user-event\":\"^14.0.0\",\"@types/react\":\"^18.0.0\",\"msw\":\"^1.0.0\",\"react\":\"^18.0.2\",\"react-dom\":\"^18.0.2\",\"react-router-dom\":\"^6.30.2\"},\"peerDependencies\":{\"@types/react\":\"^17.0.0 || ^18.0.0\",\"react\":\"^17.0.0 || ^18.0.0\",\"react-dom\":\"^17.0.0 || ^18.0.0\",\"react-router-dom\":\"^6.30.2\"},\"peerDependenciesMeta\":{\"@types/react\":{\"optional\":true}}}')"],"names":["JSON"],"mappings":"kIAAA,EAAO,OAAO,CAAGA,KAAK,KAAK,CAAC,u1E"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["7226"],{68817(e,a,t){t.d(a,{TechDocsCustomHome:()=>Z});var r=t(31085),n=t(14041),i=t(73466),s=t(58837),d=t(49185),l=t(58077),o=t(50509),c=t(48203),p=t(53320),m=t(59378),u=t(76272),g=t(74854),h=t(31314),x=t(90898),f=t(99255),j=t(81219),b=t(19735),k=t(77125),A=t(99703);let C=(0,s.A)(e=>(0,A.A)({root:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(22em, 1fr))",gridAutoRows:"1fr",gridGap:e.spacing(2)}}),{name:"BackstageItemCardGrid"});function v(e){let{children:a,...t}=e,n=C(t);return(0,r.jsx)(k.A,{className:n.root,...t,children:a})}var y=t(72501);let S=(0,s.A)(e=>(0,A.A)({root:{color:e.getPageTheme({themeId:"card"}).fontColor,padding:e.spacing(2,2,3),backgroundImage:e.getPageTheme({themeId:"card"}).backgroundImage,backgroundPosition:0,backgroundSize:"inherit"}}),{name:"BackstageItemCardHeader"});function P(e){let{title:a,subtitle:t,children:n}=e,i=S(e);return(0,r.jsxs)(k.A,{className:i.root,children:[t&&(0,r.jsx)(y.A,{variant:"subtitle2",component:"h3",children:t}),a&&(0,r.jsx)(y.A,{variant:"h6",component:"h4",children:a}),n]})}var T=t(45463),w=t(40703),B=t(59469),I=t(48653),
|
|
2
|
-
//# sourceMappingURL=7226.
|
|
1
|
+
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["7226"],{68817(e,a,t){t.d(a,{TechDocsCustomHome:()=>Z});var r=t(31085),n=t(14041),i=t(73466),s=t(58837),d=t(49185),l=t(58077),o=t(50509),c=t(48203),p=t(53320),m=t(59378),u=t(76272),g=t(74854),h=t(31314),x=t(90898),f=t(99255),j=t(81219),b=t(19735),k=t(77125),A=t(99703);let C=(0,s.A)(e=>(0,A.A)({root:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(22em, 1fr))",gridAutoRows:"1fr",gridGap:e.spacing(2)}}),{name:"BackstageItemCardGrid"});function v(e){let{children:a,...t}=e,n=C(t);return(0,r.jsx)(k.A,{className:n.root,...t,children:a})}var y=t(72501);let S=(0,s.A)(e=>(0,A.A)({root:{color:e.getPageTheme({themeId:"card"}).fontColor,padding:e.spacing(2,2,3),backgroundImage:e.getPageTheme({themeId:"card"}).backgroundImage,backgroundPosition:0,backgroundSize:"inherit"}}),{name:"BackstageItemCardHeader"});function P(e){let{title:a,subtitle:t,children:n}=e,i=S(e);return(0,r.jsxs)(k.A,{className:i.root,children:[t&&(0,r.jsx)(y.A,{variant:"subtitle2",component:"h3",children:t}),a&&(0,r.jsx)(y.A,{variant:"h6",component:"h4",children:a}),n]})}var T=t(45463),w=t(40703),B=t(59469),I=t(48653),U=t(57369),N=t(55489),W=t(89439),_=t(60603),D=t(87623);let V=(0,s.A)(e=>({linkSpacer:{paddingTop:e.spacing(.2)},readMoreLink:{paddingTop:e.spacing(.2)}}),{name:"BackstageInfoCardGrid"});var M=t(59821),G=t(47677),R=t(15179),E=t(45794),H=t(84391),L=t(87187),z=t(4809),O=t(38605),$=t(74953);let F=(0,s.A)(e=>({tabsWrapper:{gridArea:"pageSubheader",backgroundColor:e.palette.background.paper,paddingLeft:e.spacing(3),minWidth:0},defaultTab:{...e.typography.caption,padding:e.spacing(3,3),textTransform:"uppercase",fontWeight:e.typography.fontWeightBold,color:e.palette.text.secondary},selected:{color:e.palette.text.primary},tabRoot:{"&:hover":{backgroundColor:e.palette.background.default,color:e.palette.text.primary}}}),{name:"BackstageHeaderTabs"});function K(e){let{tabs:a,onChange:t,selectedIndex:i}=e,[s,d]=(0,n.useState)(i??0),l=F(),o=(0,n.useCallback)((e,a)=>{void 0===i&&d(a),t&&t(a)},[i,t]);return(0,n.useEffect)(()=>{void 0!==i&&d(i)},[i]),(0,r.jsx)(k.A,{className:l.tabsWrapper,children:(0,r.jsx)($.A,{indicatorColor:"primary",textColor:"inherit",variant:"scrollable",scrollButtons:"auto","aria-label":"tabs",onChange:o,value:s,children:a.map((e,a)=>(0,r.jsx)(O.A,{"data-testid":`header-tab-${a}`,label:e.label,value:a,className:l.defaultTab,classes:{selected:l.selected,root:l.tabRoot},...e.tabProps},e.id))})})}var Y=t(89595),q=t(64009),J=t(78931);let Q={DocsTable:h.o,DocsCardGrid:e=>{let{entities:a}=e,t=(0,j.S)(x.Oc),n=(0,o.gf)(b.U);return a?(0,r.jsx)(v,{"data-testid":"docs-explore",children:a?.length?a.map((e,a)=>(0,r.jsxs)(w.A,{children:[(0,r.jsx)(U.A,{children:(0,r.jsx)(P,{title:e.metadata.title??e.metadata.name})}),(0,r.jsx)(I.A,{children:e.metadata.description}),(0,r.jsx)(B.A,{children:(0,r.jsx)(T.z,{to:t({namespace:(0,f.V)(e.metadata.namespace??"default",n),kind:(0,f.V)(e.kind,n),name:(0,f.V)(e.metadata.name,n)}),color:"primary","data-testid":"read_docs",children:"Read Docs"})})]},a)):null}):null},TechDocsIndexPage:G.TechDocsIndexPage,InfoCardGrid:e=>{let{entities:a,linkContent:t,linkDestination:n}=e,s=V(),d=(0,j.S)(x.Oc),c=(0,o.gf)(b.U),p=(0,o.gf)(D.n),{value:m,loading:u}=(0,i.A)(async()=>new Map(await Promise.all(a?.map(async e=>{let a=await p.forEntity(e).promise;return[(0,l.U2)(e),a]})||[])));return u?(0,r.jsx)(N.k,{}):a&&a?.length?(0,r.jsx)(v,{"data-testid":"info-card-container",children:a.map(e=>(0,r.jsxs)(W.n,{"data-testid":e?.metadata?.title,title:m?.get((0,l.U2)(e))?.primaryTitle,children:[(0,r.jsx)("div",{children:e?.metadata?.description}),(0,r.jsx)("div",{className:s.linkSpacer}),(0,r.jsx)(_.N_,{to:(e=>{if(n){let a=n(e);if(a)return a}return d({namespace:(0,f.V)(e.metadata.namespace??"default",c),kind:(0,f.V)(e.kind,c),name:(0,f.V)(e.metadata.name,c)})})(e),className:s.readMoreLink,"data-testid":"read-docs-link",children:t||"Read Docs"})]},(0,l.U2)(e)))}):null}},X=({config:e,entities:a,index:t})=>{let u=(0,s.A)({panelContainer:{marginBottom:"2rem",...e.panelCSS?e.panelCSS:{}}})(),{loading:g,isOwnedEntity:h}=function(){let e=(0,o.gf)(c.K),{loading:a,value:t}=(0,i.A)(async()=>{let{ownershipEntityRefs:a}=await e.getBackstageIdentity();return a},[]);return{loading:a,isOwnedEntity:(0,n.useMemo)(()=>{let e=new Set(t??[]);return a=>{for(let t of(0,p.t)(a,d.vv).map(l.U2))if(e.has(t))return!0;return!1}},[t])}}(),x=Q[e.panelType],f=a.filter(a=>"ownedByUser"===e.filterPredicate?!g&&h(a):"function"==typeof e.filterPredicate&&e.filterPredicate(a)),{t:j}=(0,Y.i)(q.M),b=e.panelProps?.CustomHeader||(()=>(0,r.jsx)(R.d,{title:e.title,description:e.description,children:0===t?(0,r.jsx)(E.Y,{children:j("home.supportButton")}):null}));return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(b,{}),(0,r.jsx)("div",{className:u.panelContainer,children:(0,r.jsx)(m.B9,{children:(0,r.jsx)(x,{"data-testid":"techdocs-custom-panel",entities:f,...e.panelProps})})})]})},Z=e=>{let{tabsConfig:a,filter:t,CustomPageWrapper:s}=e,[d,l]=(0,n.useState)(0),c=(0,o.gf)(u.v),{t:p}=(0,Y.i)(q.M),{value:m,loading:h,error:x}=(0,i.A)(async()=>(await c.getEntities({filter:{...t,[`metadata.annotations.${J.As}`]:g.c},fields:["apiVersion","kind","metadata","relations","spec.owner","spec.type"]})).items.filter(e=>!!e.metadata.annotations?.[J.As])),f=a[d];return h?(0,r.jsx)(M.S,{CustomPageWrapper:s,children:(0,r.jsx)(H.U,{children:(0,r.jsx)(N.k,{})})}):x?(0,r.jsx)(M.S,{CustomPageWrapper:s,children:(0,r.jsx)(H.U,{children:(0,r.jsx)(L.B,{severity:"error",title:p("error.couldNotLoad"),children:(0,r.jsx)(z.z,{language:"text",text:x.toString()})})})}):(0,r.jsxs)(M.S,{CustomPageWrapper:s,children:[(0,r.jsx)(K,{selectedIndex:d,onChange:e=>l(e),tabs:a.map(({label:e},a)=>({id:a.toString(),label:e}))}),(0,r.jsx)(H.U,{"data-testid":"techdocs-content",children:f.panels.map((e,a)=>(0,r.jsx)(X,{config:e,entities:m||[],index:a},a))})]})}}}]);
|
|
2
|
+
//# sourceMappingURL=7226.07a43ca6.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/7226.07a43ca6.chunk.js","sources":["webpack://techdocs-cli-embedded-app/../core-components/src/layout/ItemCard/ItemCardGrid.tsx","webpack://techdocs-cli-embedded-app/../core-components/src/layout/ItemCard/ItemCardHeader.tsx","webpack://techdocs-cli-embedded-app/../../plugins/techdocs/src/home/components/Grids/InfoCardGrid.tsx","webpack://techdocs-cli-embedded-app/../core-components/src/layout/HeaderTabs/HeaderTabs.tsx","webpack://techdocs-cli-embedded-app/../../plugins/techdocs/src/home/components/TechDocsCustomHome.tsx","webpack://techdocs-cli-embedded-app/../../plugins/techdocs/src/home/components/Grids/DocsCardGrid.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/hooks/useEntityOwnership.ts"],"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 */\nimport Box from '@material-ui/core/Box';\nimport {\n createStyles,\n makeStyles,\n Theme,\n WithStyles,\n} from '@material-ui/core/styles';\nimport { ReactNode } from 'react';\n\n/** @public */\nexport type ItemCardGridClassKey = 'root';\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(22em, 1fr))',\n gridAutoRows: '1fr',\n gridGap: theme.spacing(2),\n },\n });\n\nconst useStyles = makeStyles(styles, { name: 'BackstageItemCardGrid' });\n\n/** @public */\nexport type ItemCardGridProps = Partial<WithStyles<typeof styles>> & {\n /**\n * The Card items of the grid.\n */\n children?: ReactNode;\n};\n\n/**\n * A default grid to use when arranging \"item cards\" - cards that let users\n * select among several options.\n *\n * @remarks\n * The immediate children are expected to be Material UI Card components.\n *\n * Styles for the grid can be overridden using the `classes` prop, e.g.:\n *\n * `<ItemCardGrid title=\"Hello\" classes={{ root: myClassName }} />`\n *\n * This can be useful for e.g. overriding gridTemplateColumns to adapt the\n * minimum size of the cells to fit the content better.\n *\n * @public\n */\nexport function ItemCardGrid(props: ItemCardGridProps) {\n const { children, ...otherProps } = props;\n const classes = useStyles(otherProps);\n return (\n <Box className={classes.root} {...otherProps}>\n {children}\n </Box>\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 Box from '@material-ui/core/Box';\nimport {\n createStyles,\n makeStyles,\n Theme,\n WithStyles,\n} from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { ReactNode } from 'react';\n\n/** @public */\nexport type ItemCardHeaderClassKey = 'root';\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n color: theme.getPageTheme({ themeId: 'card' }).fontColor,\n padding: theme.spacing(2, 2, 3),\n backgroundImage: theme.getPageTheme({ themeId: 'card' }).backgroundImage,\n backgroundPosition: 0,\n backgroundSize: 'inherit',\n },\n });\n\nconst useStyles = makeStyles(styles, { name: 'BackstageItemCardHeader' });\n\n/** @public */\nexport type ItemCardHeaderProps = Partial<WithStyles<typeof styles>> & {\n /**\n * A large title to show in the header, providing the main heading.\n *\n * Use this if you want to have the default styling and placement of a title.\n */\n title?: ReactNode;\n /**\n * A slightly smaller title to show in the header, providing additional\n * details.\n *\n * Use this if you want to have the default styling and placement of a\n * subtitle.\n */\n subtitle?: ReactNode;\n /**\n * Custom children to draw in the header.\n *\n * If the title and/or subtitle were specified, the children are drawn below\n * those.\n */\n children?: ReactNode;\n};\n\n/**\n * A simple card header, rendering a default look for \"item cards\" - cards that\n * are arranged in a grid for users to select among several options.\n *\n * @remarks\n * This component expects to be placed within a Material UI `<CardMedia>`.\n *\n * Styles for the header can be overridden using the `classes` prop, e.g.:\n *\n * `<ItemCardHeader title=\"Hello\" classes={{ root: myClassName }} />`\n *\n * @public\n */\nexport function ItemCardHeader(props: ItemCardHeaderProps) {\n const { title, subtitle, children } = props;\n const classes = useStyles(props);\n return (\n <Box className={classes.root}>\n {subtitle && (\n <Typography variant=\"subtitle2\" component=\"h3\">\n {subtitle}\n </Typography>\n )}\n {title && (\n <Typography variant=\"h6\" component=\"h4\">\n {title}\n </Typography>\n )}\n {children}\n </Box>\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 useAsync from 'react-use/esm/useAsync';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useApi, useRouteRef, configApiRef } from '@backstage/core-plugin-api';\nimport {\n ItemCardGrid,\n InfoCard,\n Link,\n Progress,\n} from '@backstage/core-components';\nimport {\n EntityRefPresentationSnapshot,\n entityPresentationApiRef,\n} from '@backstage/plugin-catalog-react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { rootDocsRouteRef } from '../../../routes';\nimport { toLowerMaybe } from '../../../helpers';\n\n/** @public */\nexport type InfoCardGridClassKey = 'linkSpacer' | 'readMoreLink';\n\nconst useStyles = makeStyles(\n theme => ({\n linkSpacer: {\n paddingTop: theme.spacing(0.2),\n },\n readMoreLink: {\n paddingTop: theme.spacing(0.2),\n },\n }),\n { name: 'BackstageInfoCardGrid' },\n);\n\n/**\n * Props for {@link InfoCardGrid}\n *\n * @public\n */\nexport type InfoCardGridProps = {\n entities: Entity[] | undefined;\n linkContent?: string | JSX.Element;\n linkDestination?: (entity: Entity) => string | undefined;\n};\n\n/**\n * Component which accepts a list of entities and renders a info card for each entity\n *\n * @public\n */\nexport const InfoCardGrid = (props: InfoCardGridProps) => {\n const { entities, linkContent, linkDestination } = props;\n const classes = useStyles();\n const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);\n const config = useApi(configApiRef);\n const linkRoute = (entity: Entity) => {\n if (linkDestination) {\n const destination = linkDestination(entity);\n if (destination) {\n return destination;\n }\n }\n return getRouteToReaderPageFor({\n namespace: toLowerMaybe(entity.metadata.namespace ?? 'default', config),\n kind: toLowerMaybe(entity.kind, config),\n name: toLowerMaybe(entity.metadata.name, config),\n });\n };\n const entityPresentationApi = useApi(entityPresentationApiRef);\n const { value: entityRefToPresentation, loading } = useAsync(async () => {\n return new Map<string, EntityRefPresentationSnapshot>(\n await Promise.all(\n entities?.map(async entity => {\n const presentation = await entityPresentationApi.forEntity(entity)\n .promise;\n return [stringifyEntityRef(entity), presentation] as [\n string,\n EntityRefPresentationSnapshot,\n ];\n }) || [],\n ),\n );\n });\n if (loading) return <Progress />;\n if (!entities || !entities?.length) return null;\n return (\n <ItemCardGrid data-testid=\"info-card-container\">\n {entities.map(entity => (\n <InfoCard\n key={stringifyEntityRef(entity)}\n data-testid={entity?.metadata?.title}\n title={\n entityRefToPresentation?.get(stringifyEntityRef(entity))\n ?.primaryTitle\n }\n >\n <div>{entity?.metadata?.description}</div>\n <div className={classes.linkSpacer} />\n <Link\n to={linkRoute(entity)}\n className={classes.readMoreLink}\n data-testid=\"read-docs-link\"\n >\n {linkContent || 'Read Docs'}\n </Link>\n </InfoCard>\n ))}\n </ItemCardGrid>\n );\n};\n","/*\n * Copyright 2020 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 { makeStyles } from '@material-ui/core/styles';\nimport TabUI, { TabProps } from '@material-ui/core/Tab';\nimport Tabs from '@material-ui/core/Tabs';\nimport {\n ElementType,\n ChangeEvent,\n useCallback,\n useEffect,\n useState,\n} from 'react';\n\n// TODO(blam): Remove this implementation when the Tabs are ready\n// This is just a temporary solution to implementing tabs for now\n\n/** @public */\nexport type HeaderTabsClassKey =\n | 'tabsWrapper'\n | 'defaultTab'\n | 'selected'\n | 'tabRoot';\n\nconst useStyles = makeStyles(\n theme => ({\n tabsWrapper: {\n gridArea: 'pageSubheader',\n backgroundColor: theme.palette.background.paper,\n paddingLeft: theme.spacing(3),\n minWidth: 0,\n },\n defaultTab: {\n ...theme.typography.caption,\n padding: theme.spacing(3, 3),\n textTransform: 'uppercase',\n fontWeight: theme.typography.fontWeightBold,\n color: theme.palette.text.secondary,\n },\n selected: {\n color: theme.palette.text.primary,\n },\n tabRoot: {\n '&:hover': {\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n },\n },\n }),\n { name: 'BackstageHeaderTabs' },\n);\n\nexport type Tab = {\n id: string;\n label: string;\n tabProps?: TabProps<ElementType, { component?: ElementType }>;\n};\n\ntype HeaderTabsProps = {\n tabs: Tab[];\n onChange?: (index: number) => void;\n selectedIndex?: number;\n};\n\n/**\n * Horizontal Tabs component\n *\n * @public\n *\n */\nexport function HeaderTabs(props: HeaderTabsProps) {\n const { tabs, onChange, selectedIndex } = props;\n const [selectedTab, setSelectedTab] = useState<number>(selectedIndex ?? 0);\n const styles = useStyles();\n\n const handleChange = useCallback(\n (_: ChangeEvent<{}>, index: number) => {\n if (selectedIndex === undefined) {\n setSelectedTab(index);\n }\n if (onChange) onChange(index);\n },\n [selectedIndex, onChange],\n );\n\n useEffect(() => {\n if (selectedIndex !== undefined) {\n setSelectedTab(selectedIndex);\n }\n }, [selectedIndex]);\n\n return (\n <Box className={styles.tabsWrapper}>\n <Tabs\n indicatorColor=\"primary\"\n textColor=\"inherit\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n aria-label=\"tabs\"\n onChange={handleChange}\n value={selectedTab}\n >\n {tabs.map((tab, index) => (\n <TabUI\n data-testid={`header-tab-${index}`}\n label={tab.label}\n key={tab.id}\n value={index}\n className={styles.defaultTab}\n classes={{ selected: styles.selected, root: styles.tabRoot }}\n {...tab.tabProps}\n />\n ))}\n </Tabs>\n </Box>\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 { FC, useState } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { CSSProperties } from '@material-ui/styles/withStyles';\nimport {\n CATALOG_FILTER_EXISTS,\n catalogApiRef,\n useEntityOwnership,\n EntityListProvider,\n} from '@backstage/plugin-catalog-react';\nimport { Entity } from '@backstage/catalog-model';\nimport { DocsTable, DocsTableRow } from './Tables';\nimport { DocsCardGrid, InfoCardGrid } from './Grids';\nimport { TechDocsPageWrapper } from './TechDocsPageWrapper';\nimport { TechDocsIndexPage } from './TechDocsIndexPage';\n\nimport {\n CodeSnippet,\n Content,\n HeaderTabs,\n Progress,\n WarningPanel,\n SupportButton,\n ContentHeader,\n TableOptions,\n} from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { techdocsTranslationRef } from '../../translation';\nimport { TECHDOCS_ANNOTATION } from '@backstage/plugin-techdocs-common';\nimport { EntityFilterQuery } from '@backstage/catalog-client';\n\nconst panels = {\n DocsTable: DocsTable,\n DocsCardGrid: DocsCardGrid,\n TechDocsIndexPage: TechDocsIndexPage,\n InfoCardGrid: InfoCardGrid,\n};\n\n/**\n * Available panel types\n *\n * @public\n */\nexport type PanelType =\n | 'DocsCardGrid'\n | 'DocsTable'\n | 'TechDocsIndexPage'\n | 'InfoCardGrid';\n\n/**\n * Type representing Panel props\n *\n * @public\n */\nexport interface PanelProps {\n options?: TableOptions<DocsTableRow>;\n linkContent?: string | JSX.Element;\n linkDestination?: (entity: Entity) => string | undefined;\n PageWrapper?: FC;\n CustomHeader?: FC;\n}\n\n/**\n * Type representing a TechDocsCustomHome panel.\n *\n * @public\n */\nexport interface PanelConfig {\n title: string;\n description: string;\n panelType: PanelType;\n panelCSS?: CSSProperties;\n filterPredicate: ((entity: Entity) => boolean) | string;\n panelProps?: PanelProps;\n}\n\n/**\n * Type representing a TechDocsCustomHome tab.\n *\n * @public\n */\nexport interface TabConfig {\n label: string;\n panels: PanelConfig[];\n}\n\n/**\n * Type representing a list of TechDocsCustomHome tabs.\n *\n * @public\n */\nexport type TabsConfig = TabConfig[];\n\n/**\n * Component which can be used to render entities in a custom way.\n *\n * @public\n */\nexport const CustomDocsPanel = ({\n config,\n entities,\n index,\n}: {\n config: PanelConfig;\n entities: Entity[];\n index: number;\n}) => {\n const useStyles = makeStyles({\n panelContainer: {\n marginBottom: '2rem',\n ...(config.panelCSS ? config.panelCSS : {}),\n },\n });\n const classes = useStyles();\n const { loading: loadingOwnership, isOwnedEntity } = useEntityOwnership();\n\n const Panel = panels[config.panelType];\n\n const shownEntities = entities.filter(entity => {\n if (config.filterPredicate === 'ownedByUser') {\n if (loadingOwnership) {\n return false;\n }\n return isOwnedEntity(entity);\n }\n\n return (\n typeof config.filterPredicate === 'function' &&\n config.filterPredicate(entity)\n );\n });\n\n const { t } = useTranslationRef(techdocsTranslationRef);\n const Header: FC =\n config.panelProps?.CustomHeader ||\n (() => (\n <ContentHeader title={config.title} description={config.description}>\n {index === 0 ? (\n <SupportButton>{t('home.supportButton')}</SupportButton>\n ) : null}\n </ContentHeader>\n ));\n\n return (\n <>\n <Header />\n <div className={classes.panelContainer}>\n <EntityListProvider>\n <Panel\n data-testid=\"techdocs-custom-panel\"\n entities={shownEntities}\n {...config.panelProps}\n />\n </EntityListProvider>\n </div>\n </>\n );\n};\n\n/**\n * Props for {@link TechDocsCustomHome}\n *\n * @public\n */\nexport type TechDocsCustomHomeProps = {\n tabsConfig: TabsConfig;\n filter?: EntityFilterQuery;\n CustomPageWrapper?: FC;\n};\n\nexport const TechDocsCustomHome = (props: TechDocsCustomHomeProps) => {\n const { tabsConfig, filter, CustomPageWrapper } = props;\n const [selectedTab, setSelectedTab] = useState<number>(0);\n const catalogApi = useApi(catalogApiRef);\n const { t } = useTranslationRef(techdocsTranslationRef);\n\n const {\n value: entities,\n loading,\n error,\n } = useAsync(async () => {\n const response = await catalogApi.getEntities({\n filter: {\n ...filter,\n [`metadata.annotations.${TECHDOCS_ANNOTATION}`]: CATALOG_FILTER_EXISTS,\n },\n fields: [\n 'apiVersion',\n 'kind',\n 'metadata',\n 'relations',\n 'spec.owner',\n 'spec.type',\n ],\n });\n return response.items.filter((entity: Entity) => {\n return !!entity.metadata.annotations?.[TECHDOCS_ANNOTATION];\n });\n });\n\n const currentTabConfig = tabsConfig[selectedTab];\n\n if (loading) {\n return (\n <TechDocsPageWrapper CustomPageWrapper={CustomPageWrapper}>\n <Content>\n <Progress />\n </Content>\n </TechDocsPageWrapper>\n );\n }\n\n if (error) {\n return (\n <TechDocsPageWrapper CustomPageWrapper={CustomPageWrapper}>\n <Content>\n <WarningPanel severity=\"error\" title={t('error.couldNotLoad')}>\n <CodeSnippet language=\"text\" text={error.toString()} />\n </WarningPanel>\n </Content>\n </TechDocsPageWrapper>\n );\n }\n\n return (\n <TechDocsPageWrapper CustomPageWrapper={CustomPageWrapper}>\n <HeaderTabs\n selectedIndex={selectedTab}\n onChange={index => setSelectedTab(index)}\n tabs={tabsConfig.map(({ label }, index) => ({\n id: index.toString(),\n label,\n }))}\n />\n <Content data-testid=\"techdocs-content\">\n {currentTabConfig.panels.map((config, index) => (\n <CustomDocsPanel\n key={index}\n config={config}\n entities={!!entities ? entities : []}\n index={index}\n />\n ))}\n </Content>\n </TechDocsPageWrapper>\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 { rootDocsRouteRef } from '../../../routes';\nimport { toLowerMaybe } from '../../../helpers';\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi, useRouteRef, configApiRef } from '@backstage/core-plugin-api';\nimport {\n LinkButton,\n ItemCardGrid,\n ItemCardHeader,\n} from '@backstage/core-components';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardMedia from '@material-ui/core/CardMedia';\n\n/**\n * Props for {@link DocsCardGrid}\n *\n * @public\n */\nexport type DocsCardGridProps = {\n entities: Entity[] | undefined;\n};\n\n/**\n * Component which accepts a list of entities and renders a item card for each entity\n *\n * @public\n */\nexport const DocsCardGrid = (props: DocsCardGridProps) => {\n const { entities } = props;\n const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);\n const config = useApi(configApiRef);\n if (!entities) return null;\n return (\n <ItemCardGrid data-testid=\"docs-explore\">\n {!entities?.length\n ? null\n : entities.map((entity, index: number) => (\n <Card key={index}>\n <CardMedia>\n <ItemCardHeader\n title={entity.metadata.title ?? entity.metadata.name}\n />\n </CardMedia>\n <CardContent>{entity.metadata.description}</CardContent>\n <CardActions>\n <LinkButton\n to={getRouteToReaderPageFor({\n namespace: toLowerMaybe(\n entity.metadata.namespace ?? 'default',\n config,\n ),\n kind: toLowerMaybe(entity.kind, config),\n name: toLowerMaybe(entity.metadata.name, config),\n })}\n color=\"primary\"\n data-testid=\"read_docs\"\n >\n Read Docs\n </LinkButton>\n </CardActions>\n </Card>\n ))}\n </ItemCardGrid>\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 {\n Entity,\n RELATION_OWNED_BY,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useMemo } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { getEntityRelations } from '../utils/getEntityRelations';\n\n/**\n * Returns a function that checks whether the currently signed-in user is an\n * owner of a given entity. When the hook is initially mounted, the loading\n * flag will be true and the results returned from the function will always be\n * false.\n *\n * @public\n *\n * @returns a function that checks if the signed in user owns an entity\n */\nexport function useEntityOwnership(): {\n loading: boolean;\n isOwnedEntity: (entity: Entity) => boolean;\n} {\n const identityApi = useApi(identityApiRef);\n\n // Trigger load only on mount\n const { loading, value: refs } = useAsync(\n async () => {\n const { ownershipEntityRefs } = await identityApi.getBackstageIdentity();\n return ownershipEntityRefs;\n },\n // load only on mount\n [],\n );\n\n const isOwnedEntity = useMemo(() => {\n const myOwnerRefs = new Set(refs ?? []);\n\n return (entity: Entity) => {\n const entityOwnerRefs = getEntityRelations(entity, RELATION_OWNED_BY).map(\n stringifyEntityRef,\n );\n for (const ref of entityOwnerRefs) {\n if (myOwnerRefs.has(ref)) {\n return true;\n }\n }\n return false;\n };\n }, [refs]);\n\n return { loading, isOwnedEntity };\n}\n"],"names":["useStyles","makeStyles","theme","createStyles","ItemCardGrid","props","children","otherProps","classes","Box","ItemCardHeader","title","subtitle","Typography","HeaderTabs","tabs","onChange","selectedIndex","selectedTab","setSelectedTab","useState","styles","handleChange","useCallback","_","index","undefined","useEffect","Tabs","tab","TabUI","panels","DocsTable","entities","getRouteToReaderPageFor","useRouteRef","rootDocsRouteRef","config","useApi","configApiRef","entity","Card","CardMedia","CardContent","CardActions","LinkButton","toLowerMaybe","TechDocsIndexPage","linkContent","linkDestination","entityPresentationApi","entityPresentationApiRef","entityRefToPresentation","loading","useAsync","Map","Promise","presentation","stringifyEntityRef","Progress","InfoCard","Link","linkRoute","destination","CustomDocsPanel","loadingOwnership","isOwnedEntity","useEntityOwnership","identityApi","identityApiRef","refs","ownershipEntityRefs","useMemo","myOwnerRefs","Set","ref","getEntityRelations","RELATION_OWNED_BY","Panel","shownEntities","t","useTranslationRef","techdocsTranslationRef","Header","ContentHeader","SupportButton","EntityListProvider","TechDocsCustomHome","tabsConfig","filter","CustomPageWrapper","catalogApi","catalogApiRef","error","response","TECHDOCS_ANNOTATION","CATALOG_FILTER_EXISTS","currentTabConfig","TechDocsPageWrapper","Content","WarningPanel","CodeSnippet","label"],"mappings":"6XAqCA,IAAMA,EAAYC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAVH,AAACC,GACdC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAa,CACX,KAAM,CACJ,QAAS,OACT,oBAAqB,uCACrB,aAAc,MACd,QAASD,EAAM,OAAO,CAAC,EACzB,CACF,GAEmC,CAAE,KAAM,uBAAwB,GA0B9D,SAASE,EAAaC,CAAwB,EACnD,GAAM,CAAEC,SAAAA,CAAQ,CAAE,GAAGC,EAAY,CAAGF,EAC9BG,EAAUR,EAAUO,GAC1B,MACE,UAACE,EAAAA,CAAGA,CAAAA,CAAC,UAAWD,EAAQ,IAAI,CAAG,GAAGD,CAAU,C,SACzCD,C,EAGP,C,eC/BA,IAAMN,EAAYC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAXH,AAACC,GACdC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAa,CACX,KAAM,CACJ,MAAOD,EAAM,YAAY,CAAC,CAAE,QAAS,MAAO,GAAG,SAAS,CACxD,QAASA,EAAM,OAAO,CAAC,EAAG,EAAG,GAC7B,gBAAiBA,EAAM,YAAY,CAAC,CAAE,QAAS,MAAO,GAAG,eAAe,CACxE,mBAAoB,EACpB,eAAgB,SAClB,CACF,GAEmC,CAAE,KAAM,yBAA0B,GAwChE,SAASQ,EAAeL,CAA0B,EACvD,GAAM,CAAEM,MAAAA,CAAK,CAAEC,SAAAA,CAAQ,CAAEN,SAAAA,CAAQ,CAAE,CAAGD,EAChCG,EAAUR,EAAUK,GAC1B,MACE,WAACI,EAAAA,CAAGA,CAAAA,CAAC,UAAWD,EAAQ,IAAI,C,UACzBI,GACC,UAACC,EAAAA,CAAUA,CAAAA,CAAC,QAAQ,YAAY,UAAU,K,SACvCD,C,GAGJD,GACC,UAACE,EAAAA,CAAUA,CAAAA,CAAC,QAAQ,KAAK,UAAU,K,SAChCF,C,GAGJL,E,EAGP,C,uGC9DA,IAAMN,EAAYC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAChBC,AAAAA,GAAU,EACR,WAAY,CACV,WAAYA,EAAM,OAAO,CAAC,GAC5B,EACA,aAAc,CACZ,WAAYA,EAAM,OAAO,CAAC,GAC5B,CACF,GACA,CAAE,KAAM,uBAAwB,G,sGCRlC,IAAMF,EAAYC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAChBC,AAAAA,GAAU,EACR,YAAa,CACX,SAAU,gBACV,gBAAiBA,EAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAC/C,YAAaA,EAAM,OAAO,CAAC,GAC3B,SAAU,CACZ,EACA,WAAY,CACV,GAAGA,EAAM,UAAU,CAAC,OAAO,CAC3B,QAASA,EAAM,OAAO,CAAC,EAAG,GAC1B,cAAe,YACf,WAAYA,EAAM,UAAU,CAAC,cAAc,CAC3C,MAAOA,EAAM,OAAO,CAAC,IAAI,CAAC,SAAS,AACrC,EACA,SAAU,CACR,MAAOA,EAAM,OAAO,CAAC,IAAI,CAAC,OAAO,AACnC,EACA,QAAS,CACP,UAAW,CACT,gBAAiBA,EAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CACjD,MAAOA,EAAM,OAAO,CAAC,IAAI,CAAC,OAAO,AACnC,CACF,CACF,GACA,CAAE,KAAM,qBAAsB,GAqBzB,SAASY,EAAWT,CAAsB,EAC/C,GAAM,CAAEU,KAAAA,CAAI,CAAEC,SAAAA,CAAQ,CAAEC,cAAAA,CAAa,CAAE,CAAGZ,EACpC,CAACa,EAAaC,EAAe,CAAGC,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAiBH,GAAiB,GAClEI,EAASrB,IAETsB,EAAeC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EACnB,CAACC,EAAoBC,KACfR,AAAkBS,SAAlBT,GACFE,EAAeM,GAEbT,GAAUA,EAASS,EACzB,EACA,CAACR,EAAeD,EAAS,EAS3B,MANAW,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,KACJV,AAAkBS,SAAlBT,GACFE,EAAeF,EAEnB,EAAG,CAACA,EAAc,EAGhB,UAACR,EAAAA,CAAGA,CAAAA,CAAC,UAAWY,EAAO,WAAW,C,SAChC,UAACO,EAAAA,CAAIA,CAAAA,CACH,eAAe,UACf,UAAU,UACV,QAAQ,aACR,cAAc,OACd,aAAW,OACX,SAAUN,EACV,MAAOJ,E,SAENH,EAAK,GAAG,CAAC,CAACc,EAAKJ,IACd,UAACK,EAAAA,CAAKA,CAAAA,CACJ,cAAa,CAAC,WAAW,EAAEL,EAAM,CAAC,CAClC,MAAOI,EAAI,KAAK,CAEhB,MAAOJ,EACP,UAAWJ,EAAO,UAAU,CAC5B,QAAS,CAAE,SAAUA,EAAO,QAAQ,CAAE,KAAMA,EAAO,OAAO,AAAC,EAC1D,GAAGQ,EAAI,QAAQ,A,EAJXA,EAAI,EAAE,E,IAUvB,C,qCCjFA,IAAME,EAAS,CACb,UAAWC,EAAAA,CAASA,CACpB,aCN0B,AAAC3B,IAC3B,GAAM,CAAE4B,SAAAA,CAAQ,CAAE,CAAG5B,EACf6B,EAA0BC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAYC,EAAAA,EAAgBA,EACtDC,EAASC,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAOC,EAAAA,CAAYA,SAClC,AAAKN,EAEH,UAAC7B,EAAYA,CAAC,cAAY,e,SACvB,AAAC6B,GAAU,OAERA,EAAS,GAAG,CAAC,CAACO,EAAQf,IACpB,WAACgB,EAAAA,CAAIA,CAAAA,C,UACH,UAACC,EAAAA,CAASA,CAAAA,C,SACR,UAAChC,EAAcA,CACb,MAAO8B,EAAO,QAAQ,CAAC,KAAK,EAAIA,EAAO,QAAQ,CAAC,IAAI,A,KAGxD,UAACG,EAAAA,CAAWA,CAAAA,C,SAAEH,EAAO,QAAQ,CAAC,WAAW,A,GACzC,UAACI,EAAAA,CAAWA,CAAAA,C,SACV,UAACC,EAAAA,CAAUA,CAAAA,CACT,GAAIX,EAAwB,CAC1B,UAAWY,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EACTN,EAAO,QAAQ,CAAC,SAAS,EAAI,UAC7BH,GAEF,KAAMS,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAaN,EAAO,IAAI,CAAEH,GAChC,KAAMS,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAaN,EAAO,QAAQ,CAAC,IAAI,CAAEH,EAC3C,GACA,MAAM,UACN,cAAY,Y,SACb,W,OAnBMZ,IAFb,I,GAJc,IAiCxB,ED9BE,kBAAmBsB,EAAAA,iBAAiBA,CACpC,aFY0B,AAAC1C,IAC3B,GAAM,CAAE4B,SAAAA,CAAQ,CAAEe,YAAAA,CAAW,CAAEC,gBAAAA,CAAe,CAAE,CAAG5C,EAC7CG,EAAUR,IACVkC,EAA0BC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAYC,EAAAA,EAAgBA,EACtDC,EAASC,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAOC,EAAAA,CAAYA,EAc5BW,EAAwBZ,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAOa,EAAAA,CAAwBA,EACvD,CAAE,MAAOC,CAAuB,CAAEC,QAAAA,CAAO,CAAE,CAAGC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAS,SACpD,IAAIC,IACT,MAAMC,QAAQ,GAAG,CACfvB,GAAU,IAAI,MAAMO,IAClB,IAAMiB,EAAe,MAAMP,EAAsB,SAAS,CAACV,GACxD,OAAO,CACV,MAAO,CAACkB,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAmBlB,GAASiB,EAAa,AAInD,IAAM,EAAE,WAId,AAAIJ,EAAgB,UAACM,EAAAA,CAAQA,CAAAA,CAAAA,GACzB,AAAC1B,GAAaA,GAAU,OAE1B,UAAC7B,EAAYA,CAAC,cAAY,sB,SACvB6B,EAAS,GAAG,CAACO,AAAAA,GACZ,WAACoB,EAAAA,CAAQA,CAAAA,CAEP,cAAapB,GAAQ,UAAU,MAC/B,MACEY,GAAyB,IAAIM,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAmBlB,KAC5C,a,UAGN,UAAC,O,SAAKA,GAAQ,UAAU,W,GACxB,UAAC,OAAI,UAAWhC,EAAQ,UAAU,A,GAClC,UAACqD,EAAAA,EAAIA,CAAAA,CACH,GAAIC,AA5CI,CAACtB,IACjB,GAAIS,EAAiB,CACnB,IAAMc,EAAcd,EAAgBT,GACpC,GAAIuB,EACF,OAAOA,CAEX,CACA,OAAO7B,EAAwB,CAC7B,UAAWY,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAaN,EAAO,QAAQ,CAAC,SAAS,EAAI,UAAWH,GAChE,KAAMS,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAaN,EAAO,IAAI,CAAEH,GAChC,KAAMS,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAaN,EAAO,QAAQ,CAAC,IAAI,CAAEH,EAC3C,EACF,GAgCwBG,GACd,UAAWhC,EAAQ,YAAY,CAC/B,cAAY,iB,SAEXwC,GAAe,W,KAdbU,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAmBlB,I,GALW,IAyB7C,CEtEA,EA8DawB,EAAkB,CAAC,CAC9B3B,OAAAA,CAAM,CACNJ,SAAAA,CAAQ,CACRR,MAAAA,CAAK,CAKN,IAOC,IAAMjB,EAAUR,AANEC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAW,CAC3B,eAAgB,CACd,aAAc,OACd,GAAIoC,EAAO,QAAQ,CAAGA,EAAO,QAAQ,CAAG,CAAC,CAAC,AAC5C,CACF,KAEM,CAAE,QAAS4B,CAAgB,CAAEC,cAAAA,CAAa,CAAE,CAAGC,AE/FhD,WAIL,IAAMC,EAAc9B,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAO+B,EAAAA,CAAcA,EAGnC,CAAEhB,QAAAA,CAAO,CAAE,MAAOiB,CAAI,CAAE,CAAGhB,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAC/B,UACE,GAAM,CAAEiB,oBAAAA,CAAmB,CAAE,CAAG,MAAMH,EAAY,oBAAoB,GACtE,OAAOG,CACT,EAEA,EAAE,EAmBJ,MAAO,CAAElB,QAAAA,EAASa,cAhBIM,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAQ,KAC5B,IAAMC,EAAc,IAAIC,IAAIJ,GAAQ,EAAE,EAEtC,OAAO,AAAC9B,IAIN,IAAK,IAAMmC,IAHaC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAmBpC,EAAQqC,EAAAA,EAAiBA,EAAE,GAAG,CACvEnB,EAAAA,EAAkBA,EAGlB,GAAIe,EAAY,GAAG,CAACE,GAClB,MAAO,GAGX,MAAO,EACT,CACF,EAAG,CAACL,EAAK,CAEuB,CAClC,IFgEQQ,EAAQ/C,CAAM,CAACM,EAAO,SAAS,CAAC,CAEhC0C,EAAgB9C,EAAS,MAAM,CAACO,AAAAA,GACpC,AAAIH,AAA2B,gBAA3BA,EAAO,eAAe,CACxB,CAAI4B,GAGGC,EAAc1B,GAIrB,AAAkC,YAAlC,OAAOH,EAAO,eAAe,EAC7BA,EAAO,eAAe,CAACG,IAIrB,CAAEwC,EAAAA,CAAC,CAAE,CAAGC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAkBC,EAAAA,CAAsBA,EAChDC,EACJ9C,EAAO,UAAU,EAAE,cACjB,KACA,UAAC+C,EAAAA,CAAaA,CAAAA,CAAC,MAAO/C,EAAO,KAAK,CAAE,YAAaA,EAAO,WAAW,C,SAChEZ,AAAU,IAAVA,EACC,UAAC4D,EAAAA,CAAaA,CAAAA,C,SAAEL,EAAE,qB,GAChB,I,IAIV,MACE,uB,UACE,UAACG,EAAAA,CAAAA,GACD,UAAC,OAAI,UAAW3E,EAAQ,cAAc,C,SACpC,UAAC8E,EAAAA,EAAkBA,CAAAA,C,SACjB,UAACR,EAAAA,CACC,cAAY,wBACZ,SAAUC,EACT,GAAG1C,EAAO,UAAU,A,SAMjC,EAaakD,EAAqB,AAAClF,IACjC,GAAM,CAAEmF,WAAAA,CAAU,CAAEC,OAAAA,CAAM,CAAEC,kBAAAA,CAAiB,CAAE,CAAGrF,EAC5C,CAACa,EAAaC,EAAe,CAAGC,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAiB,GACjDuE,EAAarD,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAOsD,EAAAA,CAAaA,EACjC,CAAEZ,EAAAA,CAAC,CAAE,CAAGC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAkBC,EAAAA,CAAsBA,EAEhD,CACJ,MAAOjD,CAAQ,CACfoB,QAAAA,CAAO,CACPwC,MAAAA,CAAK,CACN,CAAGvC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAS,SAeJwC,AAdU,OAAMH,EAAW,WAAW,CAAC,CAC5C,OAAQ,CACN,GAAGF,CAAM,CACT,CAAC,CAAC,qBAAqB,EAAEM,EAAAA,EAAmBA,CAAC,CAAC,CAAC,CAAEC,EAAAA,CAAqBA,AACxE,EACA,OAAQ,CACN,aACA,OACA,WACA,YACA,aACA,YACD,AACH,EAAC,EACe,KAAK,CAAC,MAAM,CAAC,AAACxD,GACrB,CAAC,CAACA,EAAO,QAAQ,CAAC,WAAW,EAAE,CAACuD,EAAAA,EAAmBA,CAAC,GAIzDE,EAAmBT,CAAU,CAACtE,EAAY,QAEhD,AAAImC,EAEA,UAAC6C,EAAAA,CAAmBA,CAAAA,CAAC,kBAAmBR,E,SACtC,UAACS,EAAAA,CAAOA,CAAAA,C,SACN,UAACxC,EAAAA,CAAQA,CAAAA,CAAAA,E,KAMbkC,EAEA,UAACK,EAAAA,CAAmBA,CAAAA,CAAC,kBAAmBR,E,SACtC,UAACS,EAAAA,CAAOA,CAAAA,C,SACN,UAACC,EAAAA,CAAYA,CAAAA,CAAC,SAAS,QAAQ,MAAOpB,EAAE,sB,SACtC,UAACqB,EAAAA,CAAWA,CAAAA,CAAC,SAAS,OAAO,KAAMR,EAAM,QAAQ,E,SAQzD,WAACK,EAAAA,CAAmBA,CAAAA,CAAC,kBAAmBR,E,UACtC,UAAC5E,EAAUA,CACT,cAAeI,EACf,SAAUO,AAAAA,GAASN,EAAeM,GAClC,KAAM+D,EAAW,GAAG,CAAC,CAAC,CAAEc,MAAAA,CAAK,CAAE,CAAE7E,IAAW,EAC1C,GAAIA,EAAM,QAAQ,GAClB6E,MAAAA,CACF,G,GAEF,UAACH,EAAAA,CAAOA,CAAAA,CAAC,cAAY,mB,SAClBF,EAAiB,MAAM,CAAC,GAAG,CAAC,CAAC5D,EAAQZ,IACpC,UAACuC,EAAAA,CAEC,OAAQ3B,EACR,SAAU,AAAEJ,GAAsB,EAAE,CACpC,MAAOR,C,EAHFA,G,KASjB,C"}
|