This is an automated email from the ASF dual-hosted git repository.
wu-sheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-horizon-ui.git
The following commit(s) were added to refs/heads/main by this push:
new be5beac feat: monorepo CI fixes + ui templates + layer term aliases +
dep bumps (#3)
be5beac is described below
commit be5beacadf3f7683ef534aa8c23d6746cd5b1537
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Tue May 12 13:58:27 2026 +0800
feat: monorepo CI fixes + ui templates + layer term aliases + dep bumps (#3)
---
.asf.yaml | 16 +++----
.github/workflows/ci.yaml | 44 +++++-------------
apps/ui/index.html | 16 +++++++
apps/ui/package.json | 4 +-
apps/ui/src/components/shell/AppSidebar.vue | 12 ++++-
apps/ui/src/components/shell/layers.ts | 72 +++++++++++++++++++++++++----
apps/ui/src/router/index.ts | 31 ++++++++-----
packages/design-tokens/src/tokens.css | 17 +++++++
packages/templates/src/index.ts | 5 +-
pnpm-lock.yaml | 51 ++++++++++++++------
10 files changed, 187 insertions(+), 81 deletions(-)
diff --git a/.asf.yaml b/.asf.yaml
index 824e1d5..8ddaeba 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -34,12 +34,10 @@ github:
merge: false
rebase: false
dependabot_updates: false
- protected_branches:
- main:
- required_status_checks:
- strict: true
- contexts:
- - Required
- required_pull_request_reviews:
- dismiss_stale_reviews: true
- required_approving_review_count: 1
+ # Branch protection and PR approval are intentionally OFF during pre-1.0
+ # single-author development to keep the iteration loop tight. The explicit
+ # `~` (YAML null) tells ASF infra to clear any previously-applied
+ # `protected_branches` config — omitting the key would leave prior
+ # protections in place. Re-add status-check + review gating before v1.0
+ # or when a second committer joins.
+ protected_branches: ~
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index d223e30..ab7b0f8 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -38,27 +38,11 @@ jobs:
- name: Check license header
uses: apache/skywalking-eyes@5b7ee1731d036b5aac68f8bd3fc9e6f98ada082e
- dependency-license:
- name: Dependency licenses
- runs-on: ubuntu-latest
- timeout-minutes: 20
- steps:
- - uses: actions/checkout@v6
- with:
- persist-credentials: false
- - uses: pnpm/action-setup@v4
- with:
- version: 10
- - uses: actions/setup-node@v4
- with:
- node-version: '20'
- cache: 'pnpm'
- - run: pnpm install --frozen-lockfile
- - name: Install license-eye
- run: |
- go install
github.com/apache/skywalking-eyes/cmd/license-eye@5b7ee1731d036b5aac68f8bd3fc9e6f98ada082e
- - name: Verify dependency licenses
- run: license-eye -v debug dependency resolve
+ # NOTE: `license-eye dependency resolve` is deferred to a release-only
+ # workflow. The tool invokes `npm ci` internally, which fails on pnpm
+ # workspaces (no package-lock.json). When we cut an Apache release we'll
+ # add a separate job that runs the resolver against a one-shot npm install
+ # of the production dep graph. For day-to-day CI, header-check is enough.
type-check:
name: Type-check (workspaces)
@@ -69,8 +53,6 @@ jobs:
with:
persist-credentials: false
- uses: pnpm/action-setup@v4
- with:
- version: 10
- uses: actions/setup-node@v4
with:
node-version: '20'
@@ -87,8 +69,6 @@ jobs:
with:
persist-credentials: false
- uses: pnpm/action-setup@v4
- with:
- version: 10
- uses: actions/setup-node@v4
with:
node-version: '20'
@@ -105,8 +85,6 @@ jobs:
with:
persist-credentials: false
- uses: pnpm/action-setup@v4
- with:
- version: 10
- uses: actions/setup-node@v4
with:
node-version: '20'
@@ -114,17 +92,19 @@ jobs:
- run: pnpm install --frozen-lockfile
- run: pnpm --filter @skywalking-horizon-ui/bff build
- sanity-check:
+ required:
+ # Status-check name pinned to "Required" so Apache branch protection
+ # (`.asf.yaml: protected_branches.main.required_status_checks.contexts:
+ # [Required]`) can gate on a single rolled-up signal.
if: always() && !cancelled()
- name: Sanity check results
- needs: [license-header, dependency-license, type-check, build-ui,
build-bff]
+ name: Required
+ needs: [license-header, type-check, build-ui, build-bff]
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- - name: Check results
+ - name: Check upstream jobs
run: |
[[ ${{ needs.license-header.result }} == 'success' ]] || exit 1
- [[ ${{ needs.dependency-license.result }} == 'success' ]] || exit 1
[[ ${{ needs.type-check.result }} == 'success' ]] || exit 1
[[ ${{ needs.build-ui.result }} == 'success' ]] || exit 1
[[ ${{ needs.build-bff.result }} == 'success' ]] || exit 1
diff --git a/apps/ui/index.html b/apps/ui/index.html
index 477bbad..e24fb19 100644
--- a/apps/ui/index.html
+++ b/apps/ui/index.html
@@ -1,4 +1,20 @@
<!doctype html>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
<html lang="en">
<head>
<meta charset="UTF-8" />
diff --git a/apps/ui/package.json b/apps/ui/package.json
index d012c50..0edc7a8 100644
--- a/apps/ui/package.json
+++ b/apps/ui/package.json
@@ -20,11 +20,11 @@
"@vueuse/core": "^11.2.0",
"d3": "^7.9.0",
"d3-flame-graph": "^4.1.3",
- "echarts": "^5.5.1",
+ "echarts": "^6.0.0",
"element-plus": "^2.8.7",
"graphql": "^16.9.0",
"graphql-request": "^7.1.2",
- "monaco-editor": "^0.52.0",
+ "monaco-editor": "^0.55.0",
"pinia": "^2.2.6",
"vue": "^3.5.13",
"vue-grid-layout": "^3.0.0-beta1",
diff --git a/apps/ui/src/components/shell/AppSidebar.vue
b/apps/ui/src/components/shell/AppSidebar.vue
index 7d09b33..bc2d198 100644
--- a/apps/ui/src/components/shell/AppSidebar.vue
+++ b/apps/ui/src/components/shell/AppSidebar.vue
@@ -20,7 +20,7 @@ import { RouterLink, useRoute, useRouter } from 'vue-router';
import Icon, { type IconName } from '@/components/icons/Icon.vue';
import logoSw from '@/assets/icons/logo-sw.svg?raw';
import { useAuthStore } from '@/stores/auth';
-import { LAYERS } from './layers';
+import { LAYERS, hasTopology } from './layers';
const auth = useAuthStore();
const router = useRouter();
@@ -174,13 +174,21 @@ const sections: NavSection[] = [
</RouterLink>
<RouterLink
- v-if="L.caps.topology"
+ v-if="hasTopology(L.caps)"
:to="`/layer/${L.key}/topology`"
class="sw-nav-item"
:class="{ 'is-active': isActive(`/layer/${L.key}/topology`) }"
>
<Icon name="topo" /><span>Topology</span>
</RouterLink>
+ <RouterLink
+ v-if="L.caps.endpointDependency"
+ :to="`/layer/${L.key}/dependency`"
+ class="sw-nav-item"
+ :class="{ 'is-active': isActive(`/layer/${L.key}/dependency`) }"
+ >
+ <Icon name="ep" /><span>{{ L.slots.endpointDependency ??
`${L.slots.endpoints ?? 'Endpoint'} dependency` }}</span>
+ </RouterLink>
<RouterLink
v-if="L.caps.dashboards"
:to="`/layer/${L.key}/dashboards`"
diff --git a/apps/ui/src/components/shell/layers.ts
b/apps/ui/src/components/shell/layers.ts
index 6556a34..9bc9f5a 100644
--- a/apps/ui/src/components/shell/layers.ts
+++ b/apps/ui/src/components/shell/layers.ts
@@ -18,21 +18,43 @@
// Phase 2 will replace this static stub with real getMenuItems / listLayers
// data + per-layer overrides from the BFF dashboard-template bundle. The
// shape is what the sidebar and router will consume regardless.
+//
+// Aliases (`slots.*`) are a GLOBAL term presenter — the same alias is used
+// in the sidebar, breadcrumbs, table headers, dashboard titles, drill-down
+// labels, etc. "Endpoint" → "API" (General), "API → API" (the resulting
+// endpoint-relation feature) → "API dependency".
+//
+// `caps` is a pickable feature set per layer. Setting `caps.services =
+// false` hides the services slot entirely (e.g. a layer with only a single
+// virtual service can disable `instances` and `endpoints` but keep
+// `services`).
+//
+// Term aliases AND cap toggles are both editable from the Phase 7 admin UI
+// (Layer config) and persisted in the BFF JSON store. The values below are
+// the shipped defaults for each known layer.
export interface LayerSlots {
- /** Renamed service-equivalent (functions / workloads / clusters / apps /
databases / …). */
+ /** Renamed service-equivalent (functions / workloads / clusters / apps /
databases / virtual service / …). */
services?: string;
/** Renamed instance-equivalent (versions / pods / brokers / sessions /
nodes / …). */
instances?: string;
- /** Renamed endpoint-equivalent (invocations / topics / pages / queries /
…). */
+ /** Renamed endpoint-equivalent — e.g. "API" for General, "Topics" for MQ,
"Pages" for Browser. */
endpoints?: string;
+ /** Label for the endpoint-to-endpoint dependency feature. Defaults to
`${endpoints} dependency`. */
+ endpointDependency?: string;
}
export interface LayerCaps {
/** Per-layer landing page with KPIs / constellation / health. */
overview?: boolean;
- /** Topology graph. */
- topology?: boolean;
+ /** Service map (service topology). */
+ serviceMap?: boolean;
+ /** Endpoint-to-endpoint dependency (a.k.a. "API dependency" when aliased).
*/
+ endpointDependency?: boolean;
+ /** Instance / pod / broker topology. */
+ instanceTopology?: boolean;
+ /** Process topology (eBPF / rover sourced). */
+ processTopology?: boolean;
/** Per-scope dashboards (Service / Instance / Endpoint / Glance). */
dashboards?: boolean;
/** Trace explorer (SkyWalking native or Zipkin sources). */
@@ -45,6 +67,11 @@ export interface LayerCaps {
events?: boolean;
}
+/** Convenience: `caps.serviceMap || caps.instanceTopology ||
caps.processTopology`. */
+export function hasTopology(caps: LayerCaps): boolean {
+ return Boolean(caps.serviceMap || caps.instanceTopology ||
caps.processTopology);
+}
+
export interface LayerDef {
key: string;
name: string;
@@ -62,8 +89,19 @@ export const LAYERS: readonly LayerDef[] = [
name: 'General Service',
color: 'var(--sw-accent)',
serviceCount: 84,
- slots: { services: 'Services', instances: 'Instances', endpoints:
'Endpoints' },
- caps: { overview: true, topology: true, dashboards: true, traces: true,
logs: true, profiling: true, events: true },
+ slots: { services: 'Services', instances: 'Instances', endpoints: 'API',
endpointDependency: 'API dependency' },
+ caps: {
+ overview: true,
+ serviceMap: true,
+ endpointDependency: true,
+ instanceTopology: true,
+ processTopology: true,
+ dashboards: true,
+ traces: true,
+ logs: true,
+ profiling: true,
+ events: true,
+ },
},
{
key: 'mesh',
@@ -71,7 +109,16 @@ export const LAYERS: readonly LayerDef[] = [
color: 'var(--sw-info)',
serviceCount: 22,
slots: { services: 'Services', instances: 'Sidecars', endpoints:
'Endpoints' },
- caps: { overview: true, topology: true, dashboards: true, traces: true,
logs: true, events: true },
+ caps: {
+ overview: true,
+ serviceMap: true,
+ endpointDependency: true,
+ instanceTopology: true,
+ dashboards: true,
+ traces: true,
+ logs: true,
+ events: true,
+ },
},
{
key: 'k8s',
@@ -79,7 +126,7 @@ export const LAYERS: readonly LayerDef[] = [
color: 'var(--sw-purple)',
serviceCount: 62,
slots: { services: 'Workloads', instances: 'Pods' },
- caps: { overview: true, topology: true, dashboards: true, events: true },
+ caps: { overview: true, serviceMap: true, instanceTopology: true,
dashboards: true, events: true },
},
{
key: 'rum',
@@ -111,7 +158,14 @@ export const LAYERS: readonly LayerDef[] = [
color: 'var(--sw-purple)',
serviceCount: 18,
slots: { services: 'Services', instances: 'Instances', endpoints:
'Endpoints' },
- caps: { overview: true, topology: true, dashboards: true, traces: true,
logs: true },
+ caps: {
+ overview: true,
+ serviceMap: true,
+ endpointDependency: true,
+ dashboards: true,
+ traces: true,
+ logs: true,
+ },
},
{
key: 'faas',
diff --git a/apps/ui/src/router/index.ts b/apps/ui/src/router/index.ts
index cfdde91..094512d 100644
--- a/apps/ui/src/router/index.ts
+++ b/apps/ui/src/router/index.ts
@@ -56,24 +56,31 @@ function layerSubRoutes(): RouteRecordRaw[] {
});
}
- const caps: { key: keyof NonNullable<ReturnType<typeof findLayer>>['caps'];
label: string; phase: string }[] = [
- { key: 'topology', label: 'Topology', phase: 'Phase 4' },
- { key: 'dashboards', label: 'Dashboards', phase: 'Phase 3' },
- { key: 'traces', label: 'Traces', phase: 'Phase 5' },
- { key: 'logs', label: 'Logs', phase: 'Phase 5' },
- { key: 'profiling', label: 'Profiling', phase: 'Phase 8' },
- { key: 'events', label: 'Events', phase: 'Phase 5' },
+ const layerFeatures: { path: string; label: string; phase: string;
capCheck?: (caps: NonNullable<ReturnType<typeof findLayer>>['caps']) => boolean
}[] = [
+ {
+ path: 'topology',
+ label: 'Topology',
+ phase: 'Phase 4',
+ capCheck: (c) => Boolean(c.serviceMap || c.instanceTopology ||
c.processTopology),
+ },
+ { path: 'dependency', label: 'API dependency', phase: 'Phase 4', capCheck:
(c) => Boolean(c.endpointDependency) },
+ { path: 'dashboards', label: 'Dashboards', phase: 'Phase 3', capCheck: (c)
=> Boolean(c.dashboards) },
+ { path: 'traces', label: 'Traces', phase: 'Phase 5', capCheck: (c) =>
Boolean(c.traces) },
+ { path: 'logs', label: 'Logs', phase: 'Phase 5', capCheck: (c) =>
Boolean(c.logs) },
+ { path: 'profiling', label: 'Profiling', phase: 'Phase 8', capCheck: (c)
=> Boolean(c.profiling) },
+ { path: 'events', label: 'Events', phase: 'Phase 5', capCheck: (c) =>
Boolean(c.events) },
];
- for (const c of caps) {
+ for (const f of layerFeatures) {
sub.push({
- path: `layer/:layerKey/${c.key}`,
+ path: `layer/:layerKey/${f.path}`,
component: placeholder,
props: (r) => {
const L = findLayer(String(r.params.layerKey));
+ const supported = L && (!f.capCheck || f.capCheck(L.caps));
return {
- title: L ? `${L.name} · ${c.label}` : `Layer · ${c.label}`,
- phase: c.phase,
- note: L && !L.caps[c.key] ? `${L.name} doesn't expose
${c.label.toLowerCase()}.` : undefined,
+ title: L ? `${L.name} · ${f.label}` : `Layer · ${f.label}`,
+ phase: f.phase,
+ note: L && !supported ? `${L.name} doesn't expose
${f.label.toLowerCase()}.` : undefined,
};
},
});
diff --git a/packages/design-tokens/src/tokens.css
b/packages/design-tokens/src/tokens.css
index ba39b03..27489a5 100644
--- a/packages/design-tokens/src/tokens.css
+++ b/packages/design-tokens/src/tokens.css
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/* SkyWalking NG — dark observability tokens */
:root {
--sw-bg-0: #0a0d12; /* page bg */
diff --git a/packages/templates/src/index.ts b/packages/templates/src/index.ts
index e14d187..a981002 100644
--- a/packages/templates/src/index.ts
+++ b/packages/templates/src/index.ts
@@ -15,5 +15,8 @@
* limitations under the License.
*/
-// Phase 2 will populate this with the ui-initialized-templates bundle.
+// Horizon-native template format will be designed against the new visual
+// spec, not carried forward from booster-ui / ui-initialized-templates.
+// The upstream bundle is kept locally under `docs/design/research/` as a
+// learning reference only — never imported at runtime.
export {};
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bd3d797..e0fd58b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -85,8 +85,8 @@ importers:
specifier: ^4.1.3
version: 4.1.3
echarts:
- specifier: ^5.5.1
- version: 5.6.0
+ specifier: ^6.0.0
+ version: 6.0.0
element-plus:
specifier: ^2.8.7
version: 2.14.0([email protected]([email protected]))
@@ -97,8 +97,8 @@ importers:
specifier: ^7.1.2
version: 7.4.0([email protected])
monaco-editor:
- specifier: ^0.52.0
- version: 0.52.2
+ specifier: ^0.55.0
+ version: 0.55.1
pinia:
specifier: ^2.2.6
version: 2.3.1([email protected])([email protected]([email protected]))
@@ -1401,6 +1401,9 @@ packages:
'@types/[email protected]':
resolution: {integrity:
sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==}
+ '@types/[email protected]':
+ resolution: {integrity:
sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
'@types/[email protected]':
resolution: {integrity:
sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
@@ -2083,6 +2086,9 @@ packages:
resolution: {integrity:
sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
+ [email protected]:
+ resolution: {integrity:
sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==}
+
[email protected]:
resolution: {integrity:
sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -2090,8 +2096,8 @@ packages:
[email protected]:
resolution: {integrity:
sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- [email protected]:
- resolution: {integrity:
sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==}
+ [email protected]:
+ resolution: {integrity:
sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==}
[email protected]:
resolution: {integrity:
sha512-e0GOtq/aTQhVdNyDU9e02+wz9oDDM+SIOQxWME2QRjzRX5yyLAuHDE+0aE8vHb9XRC8XD37eO2u57+F09JqFhw==}
@@ -2795,6 +2801,11 @@ packages:
[email protected]:
resolution: {integrity:
sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+ [email protected]:
+ resolution: {integrity:
sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==}
+ engines: {node: '>= 18'}
+ hasBin: true
+
[email protected]:
resolution: {integrity:
sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
@@ -2848,8 +2859,8 @@ packages:
[email protected]:
resolution: {integrity:
sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==}
- [email protected]:
- resolution: {integrity:
sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==}
+ [email protected]:
+ resolution: {integrity:
sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==}
[email protected]:
resolution: {integrity:
sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -3719,8 +3730,8 @@ packages:
[email protected]:
resolution: {integrity:
sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
- [email protected]:
- resolution: {integrity:
sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==}
+ [email protected]:
+ resolution: {integrity:
sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==}
snapshots:
@@ -4731,6 +4742,9 @@ snapshots:
dependencies:
undici-types: 6.21.0
+ '@types/[email protected]':
+ optional: true
+
'@types/[email protected]': {}
'@types/[email protected]': {}
@@ -5531,6 +5545,10 @@ snapshots:
[email protected]:
optional: true
+ [email protected]:
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
+
[email protected]:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -5539,10 +5557,10 @@ snapshots:
[email protected]: {}
- [email protected]:
+ [email protected]:
dependencies:
tslib: 2.3.0
- zrender: 5.6.1
+ zrender: 6.0.0
[email protected]:
dependencies:
@@ -6431,6 +6449,8 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ [email protected]: {}
+
[email protected]: {}
[email protected]: {}
@@ -6470,7 +6490,10 @@ snapshots:
[email protected]: {}
- [email protected]: {}
+ [email protected]:
+ dependencies:
+ dompurify: 3.2.7
+ marked: 14.0.0
[email protected]: {}
@@ -7410,6 +7433,6 @@ snapshots:
[email protected]: {}
- [email protected]:
+ [email protected]:
dependencies:
tslib: 2.3.0