- @if (feature.iconURL) {
-
![]()
+@if (data.title) {
+
+}
+
+@for (row of data.rows; track row) {
+
+ @for (feature of row.cells; track feature) {
+
+
+ @if (feature.title) {
+
+ @if (feature.iconURL) {
+
![]()
+ }
+
{{ feature.title }}
+
+
+
}
-
{{ feature.title }}
-
-
-
- }
- @if (feature.body) {
-
- }
- @if (feature.links?.length) {
-
- @for (link of feature.links; track link) {
-
{{ link.text }}
+ @if (feature.body) {
+
+ }
+ @if (feature.links?.length) {
+
}
- }
-
- @if (hasMediaIllustration(feature)) {
-
-
-
- }
- @if (hasShortCodeSnippet(feature)) {
-
-
{{ $any(feature.illustration).code }}
- @if (!feature.isIllustrationBlurred) {
-
+ @if (hasMediaIllustration(feature)) {
+
+
+
+ }
+ @if (hasShortCodeSnippet(feature)) {
+
+
+ @if (!feature.isIllustrationBlurred) {
+
+ }
+
+ }
+ @if (hasCodeSnippetIllustration(feature)) {
+
}
}
- @if (hasCodeSnippetIllustration(feature)) {
-
- }
}
diff --git a/main/src/framework/feature-grid/feature-grid.component.scss b/main/src/framework/feature-grid/feature-grid.component.scss
index f355f318b..1f485ac08 100644
--- a/main/src/framework/feature-grid/feature-grid.component.scss
+++ b/main/src/framework/feature-grid/feature-grid.component.scss
@@ -5,22 +5,64 @@
display: flex;
flex-flow: row wrap;
overflow: hidden;
- margin-top: 0;
+ margin-top: 28px;
padding: 0;
}
-.fg-grid-item,
-.fg-illustration-row {
- border: shapes.$border;
- border-width: 1px 0 0 1px;
- margin: -1px 0 0 -1px;
+td-heading-with-highlights {
+ margin-bottom: 28px;
+}
+
+.fg-grid-row {
+ display: flex;
+ flex-direction: row;
+ width: 100%;
+
+ // Add bottom border to all rows except the last one
+ &:not(:last-child) {
+ border-bottom: shapes.$border;
+ }
+
+ &.grid-row-size-1 .fg-grid-item {
+ flex-direction: row;
+
+ > * {
+ flex: 1;
+ }
+ }
+}
+
+.fg-grid-item, .fg-illustration-row {
+ flex: 1;
+ min-width: 0;
+}
+
+.fg-grid-item {
+ // Add right border to all cells except the last one in each row
+ &:not(:last-child) {
+ border-right: shapes.$border;
+ }
+}
+
+.fg-grid-item {
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+
+ @media (max-width: media.$max-width-tablet) {
+ gap: 16px;
+ }
+
+ @media (max-width: media.$max-width-mobile) {
+ gap: 12px;
+ }
}
-.fg-grid-item,
.fg-grid-item-text {
display: flex;
flex-direction: column;
gap: 24px;
+ flex: 1; // Allow text section to grow and push illustrations down
@media (max-width: media.$max-width-tablet) {
gap: 16px;
diff --git a/main/src/framework/feature-grid/feature-grid.component.ts b/main/src/framework/feature-grid/feature-grid.component.ts
index d6419d146..2d8dd256d 100644
--- a/main/src/framework/feature-grid/feature-grid.component.ts
+++ b/main/src/framework/feature-grid/feature-grid.component.ts
@@ -1,53 +1,38 @@
-import { isPlatformBrowser } from "@angular/common";
-import { AfterViewInit, ChangeDetectionStrategy, Component, HostBinding, Input, OnInit, inject, PLATFORM_ID } from "@angular/core";
+import { ChangeDetectionStrategy, Component, HostBinding, Input } from "@angular/core";
import { sanitiseHtmlID } from "typedb-web-common/lib";
import {
- CodeSnippet, CodeSnippetShort, FeatureGridCell, FeatureGridLayout, GraphVisualisation, Illustration,
+ CodeSnippet, CodeSnippetShort, FeatureGrid, FeatureGridCell, FeatureGridRow, GraphVisualisation, Illustration,
ImageIllustration, PolyglotSnippet, SplitPaneIllustration, TextLink, VideoEmbed,
} from "typedb-web-schema";
import { AspectRatioComponent } from "../aspect-ratio/aspect-ratio.component";
+import { SyntaxHighlightDirective } from "../code/syntax-highlight.directive";
import { IllustrationComponent } from "../illustration/illustration.component";
import { LinkDirective } from "../link/link.directive";
import { RichTextComponent } from "../text/rich-text.component";
import { TagChipsComponent } from "./tag-chips.component";
+import { HeadingWithHighlightsComponent } from "../text/text-with-highlights.component";
@Component({
selector: "td-feature-grid",
templateUrl: "./feature-grid.component.html",
styleUrls: ["./feature-grid.component.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
- imports: [TagChipsComponent, RichTextComponent, LinkDirective, AspectRatioComponent, IllustrationComponent]
+ imports: [TagChipsComponent, RichTextComponent, LinkDirective, AspectRatioComponent, IllustrationComponent, HeadingWithHighlightsComponent, SyntaxHighlightDirective]
})
-export class FeatureGridComponent implements OnInit, AfterViewInit {
- private readonly platformId = inject(PLATFORM_ID);
- @Input() layout!: FeatureGridLayout;
- @Input() featureRows!: FeatureGridCell[][];
+export class FeatureGridComponent {
+ @Input() data!: FeatureGrid;
@Input() illustration?: Illustration;
@Input() disableCardAppearance = false;
@Input({ required: true }) sectionId!: string;
- @HostBinding("class") get classes() {
- return {
- section: !this.disableCardAppearance,
- "narrow-section": !this.disableCardAppearance,
- ["fg-row-size-" + this.columnIndexes.length]: true,
- };
- }
-
- columnIndexes!: number[];
-
- ngOnInit() {
- this.columnIndexes = [...Array(this.featureRows[0].length).keys()];
- }
-
- ngAfterViewInit() {
- if (isPlatformBrowser(this.platformId)) {
- (window as any)["Prism"].highlightAll();
- }
- }
+ // @HostBinding("class") get classes() {
+ // return {
+ // section: !this.disableCardAppearance,
+ // };
+ // }
hasMediaIllustration(feature: FeatureGridCell) {
return (
diff --git a/main/src/framework/graph-visualisation/graph-visualisation.component.ts b/main/src/framework/graph-visualisation/graph-visualisation.component.ts
index 8a61d1f4f..1138d1156 100644
--- a/main/src/framework/graph-visualisation/graph-visualisation.component.ts
+++ b/main/src/framework/graph-visualisation/graph-visualisation.component.ts
@@ -15,7 +15,7 @@ import * as d3 from "d3-force";
import FontFaceObserver from "fontfaceobserver";
// pixi.js-legacy 7.x causes an issue where dragging stops at the edge of the visualisation, which is not a nice UX
// pixi.js (non-legacy) causes an issue where all text is blurred
-// import * as PIXI from "pixi.js-legacy";
+import * as PIXI from "pixi.js-legacy";
import { Subscription } from "rxjs";
import { GraphVisualisation } from "typedb-web-schema";
@@ -435,7 +435,7 @@ export function renderGraph(
.on("mouseupoutside", () => boundDragEnd(vertex.gfx))
.on("mousemove", () => boundDragMove(vertex.gfx));
vertex.gfx!.interactive = true;
- vertex.gfx!.buttonMode = true;
+ // vertex.gfx!.buttonMode = true;
app.stage.addChild(vertex.gfx! as any);
});
diff --git a/main/src/framework/illustration/illustration.component.html b/main/src/framework/illustration/illustration.component.html
index b4f4601e6..9aeaddb56 100644
--- a/main/src/framework/illustration/illustration.component.html
+++ b/main/src/framework/illustration/illustration.component.html
@@ -10,9 +10,9 @@
@if (polyglotSnippet) {
}
-
-
-
+@if (graphVisualisation && visible) {
+
+}
@if (splitPaneIllustration) {
}
diff --git a/main/src/framework/illustration/illustration.component.ts b/main/src/framework/illustration/illustration.component.ts
index 617660494..65f2a36ca 100644
--- a/main/src/framework/illustration/illustration.component.ts
+++ b/main/src/framework/illustration/illustration.component.ts
@@ -12,7 +12,7 @@ import { MediaQueryService } from "../../service/media-query.service";
import { AspectRatioComponent } from "../aspect-ratio/aspect-ratio.component";
import { CodeSnippetComponent } from "../code/code-snippet.component";
import { PolyglotSnippetComponent } from "../polyglot-snippet/polyglot-snippet.component";
-// import { GraphVisualisationComponent } from "../graph-visualisation/graph-visualisation.component";
+import { GraphVisualisationComponent } from "../graph-visualisation/graph-visualisation.component";
import { RichTextComponent } from "../text/rich-text.component";
@Component({
@@ -21,14 +21,14 @@ import { RichTextComponent } from "../text/rich-text.component";
styleUrls: ["illustration.component.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
- CodeSnippetComponent, PolyglotSnippetComponent, /*GraphVisualisationComponent,*/
+ CodeSnippetComponent, PolyglotSnippetComponent, GraphVisualisationComponent,
forwardRef(() => SplitPaneIllustrationComponent)
]
})
export class IllustrationComponent {
@Input() illustration!: Illustration;
// TODO: requiring the caller to set visible explicitly is counter-intuitive
- @Input() visible = false;
+ @Input() visible = true;
@Input() @HostBinding("class.il-blur") isBlurred = false;
@HostBinding("class.is-code-snippet")
diff --git a/main/src/framework/publication-panel/publication-panel.component.html b/main/src/framework/publication-panel/publication-panel.component.html
index fb0e7c42f..7775300b7 100644
--- a/main/src/framework/publication-panel/publication-panel.component.html
+++ b/main/src/framework/publication-panel/publication-panel.component.html
@@ -16,7 +16,7 @@
{{ item.title }}
}
@if (isFeatureGrid(item)) {
}
diff --git a/main/src/framework/text/rich-text.component.scss b/main/src/framework/text/rich-text.component.scss
index c32471a3d..7dfaa6f14 100644
--- a/main/src/framework/text/rich-text.component.scss
+++ b/main/src/framework/text/rich-text.component.scss
@@ -41,22 +41,11 @@
margin-top: -0.1em;
}
- h3 {
- font-size: var(--font-size-h4);
- line-height: var(--line-height-h4);
- }
-
- h4 {
- font-size: var(--font-size-h5);
- line-height: var(--line-height-h5);
- }
-
p, ul, ol {
margin: 1em 0 0;
}
- ul,
- ol {
+ ul, ol {
padding-inline-start: 2em;
}
diff --git a/main/src/page/features/features-page.component.html b/main/src/page/features/features-page.component.html
index bd9257134..871d44bda 100644
--- a/main/src/page/features/features-page.component.html
+++ b/main/src/page/features/features-page.component.html
@@ -1,19 +1,36 @@
-
- @if (page$ | async; as page) {
-
-
- @for (section of page.featureSections; track section; let idx = $index) {
-
- @for (featureGrid of section.featureGrids; let idx = $index; track idx) {
-
- }
- }
+@if (page$ | async; as page) {
+
+
+
+
+
+
+
+ @for (section of page.featureSections; track section; let idx = $index) {
+
+ @for (featureGrid of section.featureGrids; let idx = $index; track idx) {
+
+ }
+ }
+
+
+
- }
-
-
-
+
+
+}
diff --git a/main/src/page/features/features-page.component.scss b/main/src/page/features/features-page.component.scss
index e69de29bb..a0772888e 100644
--- a/main/src/page/features/features-page.component.scss
+++ b/main/src/page/features/features-page.component.scss
@@ -0,0 +1,96 @@
+@use "media";
+@use "shapes";
+
+.features-content-wrapper {
+ display: grid;
+ grid-template-columns: 200px 1fr;
+ gap: 48px;
+ width: var(--section-width);
+ max-width: var(--section-max-width);
+ margin: 0 auto;
+ padding: 0 var(--body-padding);
+ margin-top: var(--subsection-margin);
+ align-items: start;
+
+ @media (max-width: media.$max-width-tablet) {
+ grid-template-columns: 1fr;
+ gap: 24px;
+ }
+}
+
+.features-sidebar {
+ @media (max-width: media.$max-width-tablet) {
+ // No special styles needed
+ }
+}
+
+.features-toc {
+ position: sticky;
+ top: 100px;
+ padding: 0;
+ align-self: start;
+
+ @media (max-width: media.$max-width-tablet) {
+ position: static;
+ }
+
+ .toc-back-to-top {
+ margin: 0 0 16px 0;
+
+ a {
+ display: block;
+ padding: 8px 0;
+ padding-left: 12px;
+ color: var(--body-text-color);
+ text-decoration: none;
+ transition: color 0.2s ease;
+ border-left: 2px solid transparent;
+
+ &:hover {
+ color: var(--color-green);
+ }
+ }
+ }
+
+ ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ }
+
+ li {
+ margin: 0;
+ }
+
+ a {
+ display: block;
+ padding: 8px 0;
+ padding-left: 12px;
+ color: var(--body-text-color);
+ text-decoration: none;
+ transition: color 0.2s ease;
+ border-left: 2px solid transparent;
+
+ @media (max-width: media.$max-width-mobile) {
+ padding: 6px 0 6px 12px;
+ }
+
+ &:hover {
+ color: var(--color-green);
+ }
+
+ &.td-active {
+ color: var(--color-green);
+ border-left-color: var(--color-green);
+ }
+ }
+}
+
+.features-main-content {
+ flex: 1;
+ min-width: 0;
+}
+
+td-feature-grid + td-section-core {
+ margin-top: var(--section-margin);
+}
diff --git a/main/src/page/features/features-page.component.ts b/main/src/page/features/features-page.component.ts
index b28728768..206a45f57 100644
--- a/main/src/page/features/features-page.component.ts
+++ b/main/src/page/features/features-page.component.ts
@@ -2,13 +2,13 @@ import { AsyncPipe, Location } from "@angular/common";
import { ChangeDetectionStrategy, Component, inject } from "@angular/core";
import { of, tap } from "rxjs";
import { FeaturesPage, featuresPageSchemaName, Link, SanityDataset, SanityFeaturesPage } from "typedb-web-schema";
-import { BackToTopButtonComponent } from "../../framework/back-to-top/back-to-top-button.component";
import { ConclusionPanelComponent } from "../../framework/conclusion-panel/conclusion-panel.component";
import { FeatureGridComponent } from "../../framework/feature-grid/feature-grid.component";
import { IllustrationSectionComponent } from "../../framework/section/illustration/illustration-section.component";
import { SectionCoreComponent } from "../../framework/section/section-core.component";
+import { SmoothScrollDirective } from "../../framework/smooth-scroll/smooth-scroll.directive";
import { PageComponentBase } from "../page-component-base";
-import { FeaturesNavbarComponent, FeaturesNavbarItem } from "./features-navbar.component";
+import { FeaturesNavbarItem } from "./features-navbar.component";
@Component({
selector: "td-features-page",
@@ -17,7 +17,7 @@ import { FeaturesNavbarComponent, FeaturesNavbarItem } from "./features-navbar.c
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
FeatureGridComponent, ConclusionPanelComponent, AsyncPipe, SectionCoreComponent, IllustrationSectionComponent,
- FeaturesNavbarComponent, BackToTopButtonComponent,
+ SmoothScrollDirective,
],
})
export class FeaturesPageComponent extends PageComponentBase
{
diff --git a/main/src/styles/styles.scss b/main/src/styles/styles.scss
index 0a9d47ed2..ab8b457e1 100644
--- a/main/src/styles/styles.scss
+++ b/main/src/styles/styles.scss
@@ -348,11 +348,6 @@ table {
}
}
-td-feature-grid + td-feature-grid {
- display: block;
- border-top: 1px solid var(--content-border-color);
-}
-
mat-dialog-container {
h1 {
font-size: var(--font-size-h3);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9eb9091d8..dafef456b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -117,6 +117,9 @@ importers:
ngx-cookieconsent:
specifier: 4.0.2
version: 4.0.2(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.1)(zone.js@0.15.1))(rxjs@7.8.1))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.1)(zone.js@0.15.1))(cookieconsent@3.1.1)(rxjs@7.8.1)
+ pixi.js-legacy:
+ specifier: 7.4.3
+ version: 7.4.3(d1d99e8ae917814d844dec1222a79cec)
posthog-js:
specifier: 1.268.8
version: 1.268.8
@@ -2542,6 +2545,276 @@ packages:
resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
engines: {node: '>= 10.0.0'}
+ '@pixi/accessibility@7.4.3':
+ resolution: {integrity: sha512-tCr0yeWpMe0yucFvEPidy5a7gVJGpTjqGrDpSEBYT/kbScfUwcoX49RrckCCCiXDlyO4WRh9lVVuHXTvqRLIMg==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+ '@pixi/events': 7.4.3
+
+ '@pixi/app@7.4.3':
+ resolution: {integrity: sha512-opyWMuO0Ir8pf1DYUR++wAA6ZfNU+nIX2z95R2OD172HbcdhB4/HD7leLIIAny/LciEdMqlWEBhXK7N93YWbdg==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+
+ '@pixi/assets@7.4.3':
+ resolution: {integrity: sha512-StvjiJBSp/j9hHkGu8AFHNvwYUazXq64WhyhytztyDMRkg/l/cL7EcttY5T0qZNWlIpccdr60LUKrWDOuMpkiw==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/canvas-display@7.4.3':
+ resolution: {integrity: sha512-Y33a6DL2s6RFIPKfC1tCw8eimVnaQVrzhOUgSZ03jE5B2pC7FwcOIZ64sDi2VpVToXMl2f5EgkgtEXYkWjTYHg==}
+ peerDependencies:
+ '@pixi/display': 7.4.3
+
+ '@pixi/canvas-extract@7.4.3':
+ resolution: {integrity: sha512-sSpIf1C7nlEO22sW/bcVPZzUJyyh+4QcekhwzyYVbr1LVz0zk1WPOXu82MgiRxaHkyCfWdxes7drKQ2XHYk3eA==}
+ peerDependencies:
+ '@pixi/canvas-renderer': 7.4.3
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+ '@pixi/extract': 7.4.3
+
+ '@pixi/canvas-graphics@7.4.3':
+ resolution: {integrity: sha512-E3kizZDI6m8WZg1AeHryanEhVGqMVsu75NZIwWu6mWkjHqGqvj/vG17Ua0jl9ThSFfPc4Y/xI9eAewni12IG8A==}
+ peerDependencies:
+ '@pixi/canvas-display': 7.4.3
+ '@pixi/canvas-renderer': 7.4.3
+ '@pixi/core': 7.4.3
+ '@pixi/graphics': 7.4.3
+
+ '@pixi/canvas-mesh@7.4.3':
+ resolution: {integrity: sha512-0yBalm1bRIfozdbuOqRcCWYN4XxxsDLcBA0NjpPFQn8LKImUpYxPayGbraxfIu8kF+z5rFubk5JiAGZc5UHorw==}
+ peerDependencies:
+ '@pixi/canvas-display': 7.4.3
+ '@pixi/canvas-renderer': 7.4.3
+ '@pixi/core': 7.4.3
+ '@pixi/mesh': 7.4.3
+ '@pixi/mesh-extras': 7.4.3
+
+ '@pixi/canvas-particle-container@7.4.3':
+ resolution: {integrity: sha512-0gBIt2q8NtX9ZrHiY371AVM2Vmip1azQEy1ruOXq3b2PZgIaegZT7eAQ0997ljynheXWf3DBY/9Z6m3ejoV3jw==}
+ peerDependencies:
+ '@pixi/particle-container': 7.4.3
+
+ '@pixi/canvas-prepare@7.4.3':
+ resolution: {integrity: sha512-ATCvDO9sMpteZl4LvZkFlOjCAAwa2i756oXQBDWiAEF/WkkyZ4y2O3CX4w5oYg+9G+S8b1iEDfKLcWr4HHk9yA==}
+ peerDependencies:
+ '@pixi/canvas-renderer': 7.4.3
+ '@pixi/core': 7.4.3
+ '@pixi/prepare': 7.4.3
+
+ '@pixi/canvas-renderer@7.4.3':
+ resolution: {integrity: sha512-mZnx/tUaNlREh6Yn/z54g0NRvLEdlWIgA5qioeZbJA2HeG+zKEio7hUEOsNIu2o6xzliUoFGzFr7jaS+m7onfg==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/canvas-sprite-tiling@7.4.3':
+ resolution: {integrity: sha512-o8PVghNynaFr2bVcxFj1TB6BrnK27yHDLyHaBhw67cijl0Fjf1uSy5ywVTDCP9ihcK3vadY65tKhQNytuu7uFA==}
+ peerDependencies:
+ '@pixi/canvas-renderer': 7.4.3
+ '@pixi/canvas-sprite': 7.4.3
+ '@pixi/core': 7.4.3
+ '@pixi/sprite-tiling': 7.4.3
+
+ '@pixi/canvas-sprite@7.4.3':
+ resolution: {integrity: sha512-Qr17o6AgDihXJGg+lZr8HV5mhvWW46v/+15AY7TFQhJytPv32Y6tJMfojVWquOpzREczMqryun1K5vJpAuinQA==}
+ peerDependencies:
+ '@pixi/canvas-display': 7.4.3
+ '@pixi/canvas-renderer': 7.4.3
+ '@pixi/core': 7.4.3
+ '@pixi/sprite': 7.4.3
+
+ '@pixi/canvas-text@7.4.3':
+ resolution: {integrity: sha512-tbh4+k3Q0rEAhK42KvDhrEA6qSU1rFT4Y/Nj3kvK2QOqO6m+LwkbFPFnoSVRvN6jGJ+wA3RZG1LKS0kxAxoxTA==}
+ peerDependencies:
+ '@pixi/canvas-sprite': 7.4.3
+ '@pixi/sprite': 7.4.3
+ '@pixi/text': 7.4.3
+
+ '@pixi/color@7.4.3':
+ resolution: {integrity: sha512-a6R+bXKeXMDcRmjYQoBIK+v2EYqxSX49wcjAY579EYM/WrFKS98nSees6lqVUcLKrcQh2DT9srJHX7XMny3voQ==}
+
+ '@pixi/colord@2.9.6':
+ resolution: {integrity: sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==}
+
+ '@pixi/compressed-textures@7.4.3':
+ resolution: {integrity: sha512-uJ3CC+lNX4HIxs6IxEESO50/0A1KxSVm6CO9UlkXzTsNj9ynmdy5BkJ1dzii7LCdqGcHIXHO01yvKuUbJBBQtw==}
+ peerDependencies:
+ '@pixi/assets': 7.4.3
+ '@pixi/core': 7.4.3
+
+ '@pixi/constants@7.4.3':
+ resolution: {integrity: sha512-QGmwJUNQy/vVEHzL6VGQvnwawLZ1wceZMI8HwJAT4/I2uAzbBeFDdmCS8WsTpSWLZjF/DszDc1D8BFp4pVJ5UQ==}
+
+ '@pixi/core@7.4.3':
+ resolution: {integrity: sha512-5YDs11faWgVVTL8VZtLU05/Fl47vaP5Tnsbf+y/WRR0VSW3KhRRGTBU1J3Gdc2xEWbJhUK07KGP7eSZpvtPVgA==}
+
+ '@pixi/display@7.4.3':
+ resolution: {integrity: sha512-b5m2dAaoNAVdxz1oDaxl3XZ059NEOcNtGkxTOZ4EYCw/jcp9sZXkgSROHRzsGn4k+NugH7+9MP4Id2Z0kkdUhw==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/events@7.4.3':
+ resolution: {integrity: sha512-o3j/5Dxq6WDVS6eHfURB/cf/MP+NcsF/eC5PnbSHjXxJmDE7PoTVwLvxexm5uuvNRpFh/6/Fn0V8Vl4gV8sc8w==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+
+ '@pixi/extensions@7.4.3':
+ resolution: {integrity: sha512-FhoiYkHQEDYHUE7wXhqfsTRz6KxLXjuMbSiAwnLb9uG1vAgp6q6qd6HEsf4X30YaZbLFY8a4KY6hFZWjF+4Fdw==}
+
+ '@pixi/extract@7.4.3':
+ resolution: {integrity: sha512-HNvGNrEVaeVsbcnIO1MsHpjZbTwo9nIlaOEBzDGcL6JWwzuB1RnzUke7WUCndCUt91sGUdvPnvgCvy9/NNFg3w==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-alpha@7.4.3':
+ resolution: {integrity: sha512-YFdUB1I53USQb+9TEhS849dV2KZhbnNGIoBbOSThUJfXQc4pDguIFWMagVToAQYgmZ4C4AtYfVjaSEELrMcCdA==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-blur@7.4.3':
+ resolution: {integrity: sha512-ZFzS9L/whdRbs5A/EUgF3yQaBcxNarmbuwaMgrfnpQ84mRczkGByqDLGToadiufyals07ufTrXBGRle9lbtEDA==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-color-matrix@7.4.3':
+ resolution: {integrity: sha512-TNu0h20SrzjUWIb5v19dAp1vPpqtG0w2XF9kIHN91bMNaf3R1jzhpWG6TtaVO9eo1IolWcEJLw38jIohyC+KNw==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-displacement@7.4.3':
+ resolution: {integrity: sha512-ax+cFA2mEnKgqf9F8qInpv09GNWzjwnASLETpwPXzWBtlAlNCeHV2tCv3+SlMdEKUkwG9sA7AmjjjC2JBUyt+Q==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-fxaa@7.4.3':
+ resolution: {integrity: sha512-y9jhho5cCflhEsPtNqqsd+XJHsb+/ysht4rG/VHQ8Z6pScHYpbgiEpowryGq8uSMQQwx6zKNS2DPiXdiOHPZsg==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-noise@7.4.3':
+ resolution: {integrity: sha512-rwgSO3BKe1jW/P5CaOcfLKjfpl674aBEo/igi/3QLxA3ORhILNqWRsKkOwP8xF/ejI5NE4rMEkdv0LScbdGFhA==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/graphics@7.4.3':
+ resolution: {integrity: sha512-wWLivD8/URb8A7X4TqCZGG39C91IE+aOuWY/z9NCz5Z6WvA/VWnsc5fLTlO+ggjGHgKF0cSucCXZfUe1wm0AOQ==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+ '@pixi/sprite': 7.4.3
+
+ '@pixi/math@7.4.3':
+ resolution: {integrity: sha512-/uJOVhR2DOZ+zgdI6Bs/CwcXT4bNRKsS+TqX3ekRIxPCwaLra+Qdm7aDxT5cTToDzdxbKL5+rwiLu3Y1egILDw==}
+
+ '@pixi/mesh-extras@7.4.3':
+ resolution: {integrity: sha512-EqpxpVZoTObyupxMSzuUsCGmWPQioW84n9EO9Ajawkk/HYA+qKFZ5viKiEThIUBYgv4Apn/7c0U3Feg7Ez4uQQ==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/mesh': 7.4.3
+
+ '@pixi/mesh@7.4.3':
+ resolution: {integrity: sha512-CikqFPtKvU3Zj986/MSoC8X39CWv5CEpiEW/tYp47p4tgQNDSkNWYnDiNYgb+4VX6pNsBrgX4DALLdTR17SlSA==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+
+ '@pixi/mixin-cache-as-bitmap@7.4.3':
+ resolution: {integrity: sha512-NgvDdgSgd2tfcTSc+SWF12JJjVVz5ZrkSlhX0idSp/LSako82AiFJlD2xqH9GUsEcA6sqBBlnu7nrGkPTHQdhA==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+ '@pixi/sprite': 7.4.3
+
+ '@pixi/mixin-get-child-by-name@7.4.3':
+ resolution: {integrity: sha512-HLhDxHwafQT+CxbqQx9w9ivJIyAOg9JJ/6m4fNymVuDWeuMGcxDxBD7DukdUYIieT+RD/RlxdPEmq8YoromlFA==}
+ peerDependencies:
+ '@pixi/display': 7.4.3
+
+ '@pixi/mixin-get-global-position@7.4.3':
+ resolution: {integrity: sha512-k09kvkS379EypCIWgXMY7uiXtWk1BsaJyTYlV16Co0AsmNPdFd+wUozMx1xV6rxcGiWXsxr/1k9fbETuYkcXCQ==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+
+ '@pixi/particle-container@7.4.3':
+ resolution: {integrity: sha512-0DfJF5C0XTfuI2FsLYvMKCOtqWjXWGOWfA6m4l0W/Ke/qw5zKIOEhgjPLw4qNRtOhmEfkVKJUGp66Ap/ya2YzA==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+ '@pixi/sprite': 7.4.3
+
+ '@pixi/prepare@7.4.3':
+ resolution: {integrity: sha512-OjJHGKXPzwP5OLKxBnTBnKMOktHynLvO0TQPqTYgNtmGQzY109mypCqM4M+s/V+uYmBo/T+sXvBahj98q/f1tA==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+ '@pixi/graphics': 7.4.3
+ '@pixi/text': 7.4.3
+
+ '@pixi/runner@7.4.3':
+ resolution: {integrity: sha512-TJyfp7y23u5vvRAyYhVSa7ytq0PdKSvPLXu4G3meoFh1oxTLHH6g/RIzLuxUAThPG2z7ftthuW3qWq6dRV+dhw==}
+
+ '@pixi/settings@7.4.3':
+ resolution: {integrity: sha512-SmGK8smc0PxRB9nr0UJioEtE9hl4gvj9OedCvZx3bxBwA3omA5BmP3CyhQfN8XJ29+o2OUL01r3zAPVol4l4lA==}
+
+ '@pixi/sprite-animated@7.4.3':
+ resolution: {integrity: sha512-mw5YIec8KfO1Jv9qrDNvGoD7Dlmcgww5YlMtd+ARi7Zzo+6ziNw899LXtoaKX1+3BXdZbYNyJAx3C5r30NtwXA==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/sprite': 7.4.3
+
+ '@pixi/sprite-tiling@7.4.3':
+ resolution: {integrity: sha512-kUa9cEcMsGXSIZoXA7LhW4oo0eWa30w0KYd7mZ0bqalBMfOcvsGZMN701Lc5lpE8URw+8yu5bnyGLbrxhWBTuw==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+ '@pixi/sprite': 7.4.3
+
+ '@pixi/sprite@7.4.3':
+ resolution: {integrity: sha512-iNBrpOFF9nXDT6m2jcyYy6l/sRzklLDDck1eFHprHZwvNquY2nzRfh+RGBCecxhBcijiLJ3fsZN33fP0LDXkvw==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+
+ '@pixi/spritesheet@7.4.3':
+ resolution: {integrity: sha512-Ce4xZzUxUSKfiROUjjVCBYNLuCcDEWKJ822bSV9rkgVHItu3q04VnEww0DXO+9K0hKv4Ukjjk8aP6Pz0LgPm7A==}
+ peerDependencies:
+ '@pixi/assets': 7.4.3
+ '@pixi/core': 7.4.3
+
+ '@pixi/text-bitmap@7.4.3':
+ resolution: {integrity: sha512-TnBocJm7f5nMAYwYcsojc62uCrOYauAGH26o3pNrlqmHDRDQ7FzPOGvkYZGYFREbUycloLSRlYpSy0FB9ZdV4Q==}
+ peerDependencies:
+ '@pixi/assets': 7.4.3
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+ '@pixi/mesh': 7.4.3
+ '@pixi/text': 7.4.3
+
+ '@pixi/text-html@7.4.3':
+ resolution: {integrity: sha512-nm9K9gjSZAU8ETwQZBE3kMGNdO1IzyghxoRTcJCWKhekiGDpUQhopfNhqieNZ7reVJpvhpFQWjbyaHDehndUaQ==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3
+ '@pixi/sprite': 7.4.3
+ '@pixi/text': 7.4.3
+
+ '@pixi/text@7.4.3':
+ resolution: {integrity: sha512-IAF0iu04rPg3oiL0HZsEZI44fpJxq3UZ4xTmx8l1RyhhSXiElLvvSlSH57vt/BKMQZtCs+AqEit7yn8heK2+nQ==}
+ peerDependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/sprite': 7.4.3
+
+ '@pixi/ticker@7.4.3':
+ resolution: {integrity: sha512-tHsAD0iOUb6QSGGw+c8cyRBvxsq/NlfzIFBZLEHhWZ+Bx4a0MmXup6I/yJDGmyPCYE+ctCcAfY13wKAzdiVFgQ==}
+
+ '@pixi/utils@7.4.3':
+ resolution: {integrity: sha512-NO3Y9HAn2UKS1YdxffqsPp+kDpVm8XWvkZcS/E+rBzY9VTLnNOI7cawSRm+dacdET3a8Jad3aDKEDZ0HmAqAFA==}
+
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -3781,9 +4054,15 @@ packages:
'@types/connect@3.4.38':
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+ '@types/css-font-loading-module@0.0.12':
+ resolution: {integrity: sha512-x2tZZYkSxXqWvTDgveSynfjq/T2HyiZHXb00j/+gy19yp70PHCizM48XFdjBCWH7eHBD0R5i/pw9yMBP/BH5uA==}
+
'@types/d3-force@3.0.4':
resolution: {integrity: sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw==}
+ '@types/earcut@2.1.4':
+ resolution: {integrity: sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==}
+
'@types/estree@1.0.7':
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
@@ -4663,6 +4942,9 @@ packages:
duplexify@4.1.3:
resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==}
+ earcut@2.2.4:
+ resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==}
+
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
@@ -4801,6 +5083,9 @@ packages:
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
engines: {node: '>=6'}
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
@@ -5396,6 +5681,9 @@ packages:
resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
engines: {node: '>=16'}
+ ismobilejs@1.1.1:
+ resolution: {integrity: sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==}
+
isobject@3.0.1:
resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
engines: {node: '>=0.10.0'}
@@ -6190,6 +6478,12 @@ packages:
resolution: {integrity: sha512-9rPDIPsCwOivatEZGM8+apgM7AiTDLSnpwMmLaSmdm2PeND8bFJzZLZZxyrJjLH8Xx/MpKoVaKf+vZOWALNHbw==}
engines: {node: '>=20.x'}
+ pixi.js-legacy@7.4.3:
+ resolution: {integrity: sha512-vFw/CSk05C4eSOtELeXY8cizjoEx444MW4o7xdwcu6Rxw3UJioJXccp6Vkchvb46xVd+v51pVL6KDpcMAsGa+g==}
+
+ pixi.js@7.4.3:
+ resolution: {integrity: sha512-uIWdH0EI2dVgNoqN9aFaHCmR0V65OEhMkXs2sek3c/QP2ItV6UoM+ouX9esSv3ibo20F+J5D1XwnQhUZI6wqeQ==}
+
pkg-dir@3.0.0:
resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
engines: {node: '>=6'}
@@ -6314,6 +6608,9 @@ packages:
pumpify@1.5.1:
resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==}
+ punycode@1.4.1:
+ resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -7233,6 +7530,10 @@ packages:
url-parse@1.5.10:
resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
+ url@0.11.4:
+ resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==}
+ engines: {node: '>= 0.4'}
+
urlpattern-polyfill@10.1.0:
resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==}
@@ -10110,6 +10411,256 @@ snapshots:
'@parcel/watcher-win32-x64': 2.5.1
optional: true
+ '@pixi/accessibility@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/events@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/events': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+
+ '@pixi/app@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+
+ '@pixi/assets@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@types/css-font-loading-module': 0.0.12
+
+ '@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3))':
+ dependencies:
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+
+ '@pixi/canvas-extract@7.4.3(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/extract@7.4.3(@pixi/core@7.4.3))':
+ dependencies:
+ '@pixi/canvas-renderer': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/extract': 7.4.3(@pixi/core@7.4.3)
+
+ '@pixi/canvas-graphics@7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/graphics@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))':
+ dependencies:
+ '@pixi/canvas-display': 7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/canvas-renderer': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/core': 7.4.3
+ '@pixi/graphics': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+
+ '@pixi/canvas-mesh@7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/mesh-extras@7.4.3(@pixi/core@7.4.3)(@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/canvas-display': 7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/canvas-renderer': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/core': 7.4.3
+ '@pixi/mesh': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/mesh-extras': 7.4.3(@pixi/core@7.4.3)(@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+
+ '@pixi/canvas-particle-container@7.4.3(@pixi/particle-container@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))':
+ dependencies:
+ '@pixi/particle-container': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+
+ '@pixi/canvas-prepare@7.4.3(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/prepare@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/graphics@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))))':
+ dependencies:
+ '@pixi/canvas-renderer': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/core': 7.4.3
+ '@pixi/prepare': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/graphics@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))
+
+ '@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/canvas-sprite-tiling@7.4.3(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/canvas-sprite@7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/core@7.4.3)(@pixi/sprite-tiling@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))':
+ dependencies:
+ '@pixi/canvas-renderer': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/canvas-sprite': 7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/core': 7.4.3
+ '@pixi/sprite-tiling': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+
+ '@pixi/canvas-sprite@7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/canvas-display': 7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/canvas-renderer': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/core': 7.4.3
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+
+ '@pixi/canvas-text@7.4.3(@pixi/canvas-sprite@7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))':
+ dependencies:
+ '@pixi/canvas-sprite': 7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/text': 7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+
+ '@pixi/color@7.4.3':
+ dependencies:
+ '@pixi/colord': 2.9.6
+
+ '@pixi/colord@2.9.6': {}
+
+ '@pixi/compressed-textures@7.4.3(@pixi/assets@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/assets': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/core': 7.4.3
+
+ '@pixi/constants@7.4.3': {}
+
+ '@pixi/core@7.4.3':
+ dependencies:
+ '@pixi/color': 7.4.3
+ '@pixi/constants': 7.4.3
+ '@pixi/extensions': 7.4.3
+ '@pixi/math': 7.4.3
+ '@pixi/runner': 7.4.3
+ '@pixi/settings': 7.4.3
+ '@pixi/ticker': 7.4.3
+ '@pixi/utils': 7.4.3
+
+ '@pixi/display@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/events@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+
+ '@pixi/extensions@7.4.3': {}
+
+ '@pixi/extract@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-alpha@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-blur@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-color-matrix@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-displacement@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-fxaa@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/filter-noise@7.4.3(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/core': 7.4.3
+
+ '@pixi/graphics@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+
+ '@pixi/math@7.4.3': {}
+
+ '@pixi/mesh-extras@7.4.3(@pixi/core@7.4.3)(@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/mesh': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+
+ '@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+
+ '@pixi/mixin-cache-as-bitmap@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+
+ '@pixi/mixin-get-child-by-name@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3))':
+ dependencies:
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+
+ '@pixi/mixin-get-global-position@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+
+ '@pixi/particle-container@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+
+ '@pixi/prepare@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/graphics@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/graphics': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/text': 7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+
+ '@pixi/runner@7.4.3': {}
+
+ '@pixi/settings@7.4.3':
+ dependencies:
+ '@pixi/constants': 7.4.3
+ '@types/css-font-loading-module': 0.0.12
+ ismobilejs: 1.1.1
+
+ '@pixi/sprite-animated@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+
+ '@pixi/sprite-tiling@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+
+ '@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+
+ '@pixi/spritesheet@7.4.3(@pixi/assets@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)':
+ dependencies:
+ '@pixi/assets': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/core': 7.4.3
+
+ '@pixi/text-bitmap@7.4.3(@pixi/assets@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))':
+ dependencies:
+ '@pixi/assets': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/mesh': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/text': 7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+
+ '@pixi/text-html@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/text': 7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+
+ '@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))':
+ dependencies:
+ '@pixi/core': 7.4.3
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+
+ '@pixi/ticker@7.4.3':
+ dependencies:
+ '@pixi/extensions': 7.4.3
+ '@pixi/settings': 7.4.3
+ '@pixi/utils': 7.4.3
+
+ '@pixi/utils@7.4.3':
+ dependencies:
+ '@pixi/color': 7.4.3
+ '@pixi/constants': 7.4.3
+ '@pixi/settings': 7.4.3
+ '@types/earcut': 2.1.4
+ earcut: 2.2.4
+ eventemitter3: 4.0.7
+ url: 0.11.4
+
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -11715,8 +12266,12 @@ snapshots:
dependencies:
'@types/node': 18.19.123
+ '@types/css-font-loading-module@0.0.12': {}
+
'@types/d3-force@3.0.4': {}
+ '@types/earcut@2.1.4': {}
+
'@types/estree@1.0.7': {}
'@types/estree@1.0.8': {}
@@ -12643,6 +13198,8 @@ snapshots:
readable-stream: 3.6.2
stream-shift: 1.0.3
+ earcut@2.2.4: {}
+
eastasianwidth@0.2.0: {}
ee-first@1.1.1: {}
@@ -12818,6 +13375,8 @@ snapshots:
event-target-shim@5.0.1: {}
+ eventemitter3@4.0.7: {}
+
eventemitter3@5.0.1: {}
events@3.3.0: {}
@@ -13421,6 +13980,8 @@ snapshots:
isexe@3.1.1: {}
+ ismobilejs@1.1.1: {}
+
isobject@3.0.1: {}
isomorphic-dompurify@2.26.0:
@@ -14287,6 +14848,65 @@ snapshots:
optionalDependencies:
'@napi-rs/nice': 1.1.1
+ pixi.js-legacy@7.4.3(d1d99e8ae917814d844dec1222a79cec):
+ dependencies:
+ '@pixi/canvas-display': 7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/canvas-extract': 7.4.3(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/extract@7.4.3(@pixi/core@7.4.3))
+ '@pixi/canvas-graphics': 7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/graphics@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))
+ '@pixi/canvas-mesh': 7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/mesh-extras@7.4.3(@pixi/core@7.4.3)(@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/canvas-particle-container': 7.4.3(@pixi/particle-container@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))
+ '@pixi/canvas-prepare': 7.4.3(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/prepare@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/graphics@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))))
+ '@pixi/canvas-renderer': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/canvas-sprite': 7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/canvas-sprite-tiling': 7.4.3(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/canvas-sprite@7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/core@7.4.3)(@pixi/sprite-tiling@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))
+ '@pixi/canvas-text': 7.4.3(@pixi/canvas-sprite@7.4.3(@pixi/canvas-display@7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/canvas-renderer@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))
+ pixi.js: 7.4.3
+ transitivePeerDependencies:
+ - '@pixi/core'
+ - '@pixi/display'
+ - '@pixi/extract'
+ - '@pixi/graphics'
+ - '@pixi/mesh'
+ - '@pixi/mesh-extras'
+ - '@pixi/particle-container'
+ - '@pixi/prepare'
+ - '@pixi/sprite'
+ - '@pixi/sprite-tiling'
+ - '@pixi/text'
+
+ pixi.js@7.4.3:
+ dependencies:
+ '@pixi/accessibility': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/events@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/app': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/assets': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/compressed-textures': 7.4.3(@pixi/assets@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)
+ '@pixi/core': 7.4.3
+ '@pixi/display': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/events': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/extensions': 7.4.3
+ '@pixi/extract': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/filter-alpha': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/filter-blur': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/filter-color-matrix': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/filter-displacement': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/filter-fxaa': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/filter-noise': 7.4.3(@pixi/core@7.4.3)
+ '@pixi/graphics': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/mesh': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/mesh-extras': 7.4.3(@pixi/core@7.4.3)(@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/mixin-cache-as-bitmap': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/mixin-get-child-by-name': 7.4.3(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/mixin-get-global-position': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/particle-container': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/prepare': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/graphics@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))
+ '@pixi/sprite': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))
+ '@pixi/sprite-animated': 7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/sprite-tiling': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/spritesheet': 7.4.3(@pixi/assets@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)
+ '@pixi/text': 7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))
+ '@pixi/text-bitmap': 7.4.3(@pixi/assets@7.4.3(@pixi/core@7.4.3))(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/mesh@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))
+ '@pixi/text-html': 7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3)))(@pixi/text@7.4.3(@pixi/core@7.4.3)(@pixi/sprite@7.4.3(@pixi/core@7.4.3)(@pixi/display@7.4.3(@pixi/core@7.4.3))))
+
pkg-dir@3.0.0:
dependencies:
find-up: 3.0.0
@@ -14422,6 +15042,8 @@ snapshots:
inherits: 2.0.4
pump: 2.0.1
+ punycode@1.4.1: {}
+
punycode@2.3.1: {}
qs@6.13.0:
@@ -15615,6 +16237,11 @@ snapshots:
querystringify: 2.2.0
requires-port: 1.0.0
+ url@0.11.4:
+ dependencies:
+ punycode: 1.4.1
+ qs: 6.13.0
+
urlpattern-polyfill@10.1.0: {}
use-callback-ref@1.3.3(@types/react@18.3.23)(react@18.3.1):
diff --git a/sanity/sanity.config.ts b/sanity/sanity.config.ts
index 65add901d..72fb0f513 100644
--- a/sanity/sanity.config.ts
+++ b/sanity/sanity.config.ts
@@ -81,7 +81,7 @@ export default defineConfig({
s.documentTypeListItem(cloudProviderSchemaName).title("Provider & Region Info"),
singletonListItem(s, cloudAnnouncementSchemaName, { title: "Announcement", icon: ConfettiIcon }),
])),
- s.listItem().title("Learning Resources & Events").icon(BookIcon).child(s.list().title("Learning Resources & Events").items([
+ s.listItem().title("Blogs, Resources & Events").icon(BookIcon).child(s.list().title("Blogs, Resources & Events").items([
s.documentTypeListItem(fundamentalArticleSchemaName).title("Fundamentals"),
s.documentTypeListItem(applicationArticleSchemaName).title("Applications"),
s.documentTypeListItem(blogPostSchemaName).title("Blog Posts"),
@@ -90,9 +90,6 @@ export default defineConfig({
s.documentTypeListItem(liveEventSchemaName).title("Live Events"),
s.documentTypeListItem(genericResourceSchemaName).title("Generic Resources"),
])),
- s.listItem().title("Structure").icon(ComponentIcon).child(s.list().title("Structure").items([
- s.documentTypeListItem(featureGridSchemaName).title("Feature Grids"),
- ])),
s.listItem().title("Code Snippets").icon(CodeIcon).child(s.list().title("Code Snippets").items([
s.documentTypeListItem(codeSnippetSchemaName).title("Single Snippets"),
s.documentTypeListItem(polyglotSnippetSchemaName).title("Polyglot Snippets"),
@@ -105,6 +102,7 @@ export default defineConfig({
])),
s.documentTypeListItem(linkSchemaName).title("Links"),
s.listItem().title("Objects").icon(CubeIcon).child(s.list().title("Objects").items([
+ s.documentTypeListItem(featureGridSchemaName).title("Feature Grids"),
s.documentTypeListItem(personSchemaName).title("People"),
s.documentTypeListItem(organisationSchemaName).title("Organisations"),
s.documentTypeListItem(testimonialSchemaName).title("Testimonials"),
diff --git a/schema/AGENTS.md b/schema/AGENTS.md
new file mode 100644
index 000000000..b57c2c9de
--- /dev/null
+++ b/schema/AGENTS.md
@@ -0,0 +1,236 @@
+## Your role
+
+You are a principal-level TypeScript and React engineer who writes best-practice, high performance code. You are also an expert on structured content modelling.
+
+## Sanity Studio Schema Types
+
+### Content modelling
+
+Unless explicitly modelling web pages or app views, model content that describes what things are, not what they look like:
+
+- Good examples describe what things are: `status`, `tone`, `visibility`, `role`
+- Bad examples describe what things look like: `color`, `font-size`, `border-radius`
+
+### Basic schema types
+
+- ALWAYS use the `defineType`, `defineField`, and `defineArrayMember` helper functions
+- ALWAYS write schema types to their own files and export a named `const` that matches the filename
+- ONLY use a `name` attribute in fields unless the `title` needs to be something other than a title-case version of the `name`
+- ANY `string` field type with an `options.list` array with fewer than 5 options must use `options.layout: "radio"`
+- ANY `image` field must include `options.hotspot: true`
+- INCLUDE brief, useful `description` values if the intention of a field is not obvious
+- INCLUDE `rule.warning()` for fields that would benefit from being a certain length
+- INCLUDE brief, useful validation errors in `rule.required().error('')` that signal why the field must be correct before publishing is allowed
+- AVOID `boolean` fields, write a `string` field with an `options.list` configuration
+- ONLY use a single reference when there is no possibility that more than one value will be required: examples include `city`, `country`
+- ALWAYS use an array of references when there is any possibility more than one value will be required: examples include `authors`, `categories`
+- CONSIDER the order of fields, from most important and relevant first, to least often used last
+
+```ts
+// ./src/schemaTypes/lessonType.ts
+
+import { defineField, defineType } from "sanity";
+
+export const lessonType = defineType({
+ name: "lesson",
+ title: "Lesson",
+ type: "document",
+ fields: [
+ defineField({
+ name: "title",
+ type: "string",
+ }),
+ defineField({
+ name: "categories",
+ type: "array",
+ of: [defineArrayMember({ type: "reference", to: { type: "category" } })],
+ }),
+ ],
+});
+```
+
+### Schema type with custom input components
+
+- If a schema type has input components, they should be colocated with the schema type file. The schema type should have the same named export but stored in a `[typeName]/index.ts` file:
+
+```ts
+// ./src/schemaTypes/seoType/index.ts
+
+import { defineField, defineType } from "sanity";
+
+import seoInput from "./seoInput";
+
+export const seoType = defineType({
+ name: "seo",
+ title: "SEO",
+ type: "object",
+ components: { input: seoInput },
+ // ...
+});
+```
+
+### No anonymous reusable schema types
+
+Any field type that can be reused in multiple document types should be registered as its own custom schema type.
+
+```ts
+// ./src/schemaTypes/blockContentType.ts
+
+import { defineField, defineType } from "sanity";
+
+export const blockContentType = defineType({
+ name: "blockContent",
+ title: "Block content",
+ type: "array",
+ of: [defineField({ name: "block", type: "block" })],
+});
+```
+
+### Decorating schema types
+
+Every `document` and `object` schema type should:
+
+- Have an `icon` property from `@sanity/icons`
+- Have a customized `preview` property that shows rich contextual details about the document
+- Use `groups` when the schema type has more than a few fields to collate related fields and only show the most important group by default. These `groups` should use the icon property as well.
+- Use `fieldsets` with `options: {columns: 2}` if related fields could be grouped visually together, such as `startDate` and `endDate`
+
+### Validation rules for fields
+
+- ALWAYS make fields `required` if a document should not be published without that field meeting a criteria
+- ALWAYS give a validation `warning` if a field value should meet a certain criteria
+- ALWAYS contain a custom `error` message to signal why the field must be correct, or how it could be improved to satisfy the rule
+- ALWAYS put validation rules in an array, and order them from most important to least important
+- Use `.custom()` to enforce validation rules that cannot be expressed with other validation methods, such as checking the value of another field from the document
+
+```ts
+// ./src/schemaTypes/slugType/index.ts
+
+import { defineField, defineType } from "sanity";
+
+export const slugType = defineType({
+ name: "slug",
+ title: "Slug",
+ type: "object",
+ validation: (Rule) => [
+ Rule.custom((value, context) =>
+ value?.current && value?.current.length > 100
+ ? "Slug cannot be longer than 100 characters"
+ : true
+ ),
+ Rule.required().error("Required to generate a URL"),
+ ],
+ // ...
+});
+```
+
+### Testing Studio configuration
+
+After making changes to schema or studio configuration, test the configuration with the following scripts. Always run all three scripts after making changes.
+
+Add these scripts to `package.json` to test the Studio configuration:
+
+```json
+// package.json
+{
+ // existing configuration...
+ "scripts": {
+ // existing scripts...
+ "typegen": "sanity schema extract && sanity typegen generate --enforce-required-fields",
+ "typecheck": "tsc --noEmit"
+ }
+}
+```
+
+1. Ensure TypeScript can compile with `npm run typecheck`
+2. Ensure schema types are valid for export with `npm run typegen`
+3. Ensure the Studio can be built with `npm run build`
+
+## Writing Sanity content
+
+### Write using Sanity MCP Server
+
+- ALWAYS use the [Sanity MCP Server](https://mcp.sanity.io) if available use to query and create content
+
+### Write and import using Sanity CLI
+
+If you do not have the Sanity MCP server installed:
+
+- ONLY use the existing schema types registered in the Studio configuration
+- ALWAYS write content as an `.ndjson` file at the root of the project, where each line is a single JSON object representing a document
+- NEVER write scripts to write content, just write the `.ndjson` file
+- IMPORT `.ndjson` files using the CLI command `npx sanity dataset import `
+- NEVER include a `.` in the `_id` field of a document unless you need the document to be private
+- NEVER include image references if you do not know which image documents exist
+- ALWAYS if the full URL of an image or file is known, use it in the `_sanityAsset` field, for example:
+
+```JSON
+{"_type":"image","_sanityAsset":"image@https://{url-to-image}"}
+{"_type":"file","_sanityAsset":"file@https://{url-to-file}"}
+```
+
+## Writing GROQ queries
+
+- ALWAYS use `SCREAMING_SNAKE_CASE` for variable names, for example `POSTS_QUERY`
+- ALWAYS import the `defineQuery` function to wrap query strings from the `groq` or `next-sanity` package
+- ALWAYS write every required attribute in a projection when writing a query
+ -- DO NOT use the `...` operator to project all attributes
+- ALWAYS put each segment in a filter, and each attribute in a projection its own line
+- ALWAYS use parameters for variables in a query
+ -- DO NOT insert dynamic values using string interpolation
+
+```ts
+// ✅ Good GROQ query example
+import { defineQuery } from "groq";
+
+export const POST_QUERY = defineQuery(`*[
+ _type == "post"
+ && slug.current == $slug
+][0]{
+ _id,
+ title,
+ image,
+ author->{
+ _id,
+ name
+ }
+}`);
+```
+
+## TypeScript generation
+
+### For monorepos with a studio and a front-end
+
+- ALWAYS use a simple pnpm workspace configuration to place the studio in `apps/studio`
+
+```
+your-project/
+└── apps/
+ ├── studio/ -> Sanity Studio
+ └── web/ -> Front-end
+```
+
+- ALWAYS extract the schema to the web folder with `npx sanity@latest schema extract --path=..//sanity/extract.json`
+- ALWAYS generate types with `npx sanity@latest typegen generate` after every GROQ query change
+- ALWAYS create a TypeGen configuration file:
+
+```json
+// apps/studio/sanity-typegen.json
+{
+ "path": "./**/*.{ts,tsx,js,jsx}",
+ "schema": ".//sanity/extract.json",
+ "generates": ".//sanity/types.ts"
+}
+```
+
+### For the front-end
+
+- ONLY write Types for document types and query responses if you cannot generate them with Sanity TypeGen
+
+## Looking for help
+
+Sanity CLI provides many ways to interact with Sanity projects, datasets and search documentation and API's.
+
+- To understand Sanity product features search the documentation with `npx sanity docs search ""`
+- To see available OpenAPI endpoints for a project, run `npx sanity openapi list`
+- To see available CLI commands, run `npx sanity --help`
diff --git a/schema/CLAUDE.md b/schema/CLAUDE.md
new file mode 100644
index 000000000..43c994c2d
--- /dev/null
+++ b/schema/CLAUDE.md
@@ -0,0 +1 @@
+@AGENTS.md
diff --git a/schema/component/feature-grid.ts b/schema/component/feature-grid.ts
index 7336c70c8..073837cb4 100644
--- a/schema/component/feature-grid.ts
+++ b/schema/component/feature-grid.ts
@@ -6,7 +6,7 @@ import { Illustration, illustrationFieldOptional, illustrationFieldTargetTypes,
import { SanityImageRef } from "../image";
import { SanityTextLink, TextLink, textLinkSchemaName } from "../link";
import { SanityDataset, SanityReference } from "../sanity-core";
-import { BodyTextField, PortableText } from "../text";
+import { BodyTextField, ParagraphWithHighlights, PortableText, SanityTitleField } from "../text";
import { PropsOf } from "../util";
import { SanitySectionCore, SectionCore } from "./section";
@@ -14,14 +14,15 @@ export interface SanityFeatureGridSection extends SanitySectionCore {
featureGrids: SanityReference[];
}
-export type FeatureGridLayout = "textCodeBlocks" | "textBlocks" | "tabs";
+export interface SanityFeatureGridRow {
+ cells: SanityFeatureGridCell[];
+}
export interface SanityFeatureGrid extends SanityDocument {
name: string;
- featureGridLayout: FeatureGridLayout;
- features: SanityFeatureGridCell[];
+ title?: PortableText;
+ rows: SanityFeatureGridRow[];
illustration?: SanityReference;
- columnCount: number;
}
export interface SanityFeatureGridCell extends SanityVisibleToggle {
@@ -71,30 +72,40 @@ export class FeatureGridCell implements Partial {
}
}
+export class FeatureGridRow {
+ readonly cells: FeatureGridCell[];
+
+ constructor(props: PropsOf) {
+ this.cells = props.cells;
+ }
+
+ static fromSanity(data: SanityFeatureGridRow, db: SanityDataset) {
+ const visibleCells = data.cells.filter(cell => cell.isVisible);
+ return new FeatureGridRow({
+ cells: visibleCells.map(cell => FeatureGridCell.fromSanity(cell, db)),
+ });
+ }
+}
+
export class FeatureGrid { // not used in FeatureGridSection to flatten the structure, but used elsewhere
readonly name: string;
- readonly featureGridLayout: FeatureGridLayout;
- readonly features: FeatureGridCell[][];
+ readonly title?: ParagraphWithHighlights;
+ readonly rows: FeatureGridRow[];
readonly illustration?: Illustration;
constructor(props: PropsOf) {
this.name = props.name;
- this.featureGridLayout = props.featureGridLayout;
- this.features = props.features;
+ this.title = props.title;
+ this.rows = props.rows;
this.illustration = props.illustration;
}
static fromSanity(featureGrid: SanityFeatureGrid, db: SanityDataset) {
- const visibleFeatures = featureGrid.features.filter((x) => x.isVisible);
- const featureCells = [];
- for (let i = 0; i < visibleFeatures.length; i += featureGrid.columnCount) {
- const chunk = visibleFeatures.slice(i, i + featureGrid.columnCount).map((x) => FeatureGridCell.fromSanity(x, db));
- featureCells.push(chunk);
- }
+ const rows = featureGrid.rows.map(row => FeatureGridRow.fromSanity(row, db));
return new FeatureGrid({
name: featureGrid.name,
- featureGridLayout: featureGrid.featureGridLayout,
- features: featureCells,
+ title: featureGrid.title ? ParagraphWithHighlights.fromSanity(featureGrid.title) : undefined,
+ rows: rows,
illustration: featureGrid.illustration
? featureGridIllustrationFromSanity(db.resolveRef(featureGrid.illustration), db)
: undefined,
@@ -155,6 +166,34 @@ const featureGridCellSchema = defineType({
],
});
+export const featureGridRowSchemaName = `featureGridRow`;
+
+const featureGridRowSchema = defineType({
+ name: featureGridRowSchemaName,
+ title: "Feature Grid Row",
+ type: "object",
+ fields: [
+ defineField({
+ name: "cells",
+ title: "Cells",
+ type: "array",
+ of: [{ type: featureGridCellSchemaName }],
+ validation: (rule: ArrayRule) => rule.required().min(1),
+ }),
+ ],
+ preview: {
+ select: {
+ cells: "cells",
+ },
+ prepare({ cells }) {
+ const titles = cells?.map((cell: any) => cell.title || "Untitled").join(", ") || "No cells";
+ return {
+ title: titles,
+ };
+ },
+ },
+});
+
export const featureGridSchemaName = `featureGrid`;
const featureGridSchema = defineType({
@@ -164,35 +203,28 @@ const featureGridSchema = defineType({
icon: DashboardIcon,
fields: [
nameField,
- defineField({
- name: "layout",
- title: "Layout",
- type: "string",
- options: {
- layout: "dropdown",
- list: [
- { title: "Text Blocks", value: "textBlocks" },
- { title: "Text + Illustration Blocks", value: "textIllustrationBlocks" },
- ],
- },
- initialValue: "textBlocks",
- validation: requiredRule,
+ Object.assign({}, titleFieldWithHighlights, {
+ description: "Optional title for the feature grid. Text marked as 'bold' will be rendered in the highlight color",
}),
defineField({
- name: "columnCount",
- title: "Column Count",
- type: "number",
- initialValue: 3,
- }),
- defineField({
- name: "features",
- title: "Features",
+ name: "rows",
+ title: "Rows",
type: "array",
- of: [{ type: featureGridCellSchemaName }],
- validation: (rule: ArrayRule) => rule.required(),
+ of: [{ type: featureGridRowSchemaName }],
+ validation: (rule: ArrayRule) => rule.required().min(1),
}),
illustrationFieldOptional,
],
+ preview: {
+ select: {
+ name: "name",
+ },
+ prepare({ name }) {
+ return {
+ title: name || "Untitled Feature Grid",
+ };
+ },
+ },
});
export const featureGridSectionSchemaName = `featureGridSection`;
@@ -214,4 +246,4 @@ const featureGridSectionSchema = defineType({
],
});
-export const featureGridSchemas = [featureGridSchema, featureGridSectionSchema, featureGridCellSchema];
+export const featureGridSchemas = [featureGridSchema, featureGridSectionSchema, featureGridRowSchema, featureGridCellSchema];
diff --git a/schema/index.ts b/schema/index.ts
index b773ee1d3..e13e81f0c 100644
--- a/schema/index.ts
+++ b/schema/index.ts
@@ -41,7 +41,7 @@ export { codeSnippetSchemaName, polyglotSnippetSchemaName } from "./common-field
export { type SanityConclusionPanel, ConclusionPanel, ConclusionSection } from "./component/conclusion-panel";
export { ContentTextPanel, ContentTextTab } from "./component/content-text-panel";
export {
- FeatureGrid, type FeatureGridLayout, FeatureGridSection, FeatureGridCell, featureGridSchemaName,
+ FeatureGrid, FeatureGridSection, FeatureGridRow, FeatureGridCell, featureGridSchemaName,
} from "./component/feature-grid";
export { FeatureTable, featureTableSchemaName, type FeatureTableCell } from "./component/feature-table";
export { Integration, IntegrationsGridSection } from "./component/integrations-grid";