From 44c6c1d1ccb5b0c6be859186356e5d4fb0ad88d3 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 15 Oct 2025 23:57:58 +0900 Subject: [PATCH 01/15] docs: New alphaTex syntax intro --- docs/alphatex/introduction.mdx | 317 ++++++++++++++++++++++++++++++++- 1 file changed, 311 insertions(+), 6 deletions(-) diff --git a/docs/alphatex/introduction.mdx b/docs/alphatex/introduction.mdx index 53dd31c..36558ca 100644 --- a/docs/alphatex/introduction.mdx +++ b/docs/alphatex/introduction.mdx @@ -31,22 +31,327 @@ Here is an example score fully rendered using alphaTex. 12.2 14.3 12.3 15.2 :32 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} `} +## General Syntax -## General Song Structure +If you compare alphaTex to programming or scripting languages, you will find similar constructs. alphaTex (as the name implies) has borrowed +some aspects from LaTeX, a well known language for writing documents. As alphaTex evolved it came up with various own syntax constructs described here. + +When storing alphaTex to files, we recommend using the file extension `.atex`. + +### Comments + +Comments are supported in C-style comments via `// Single Line` and `/* Multi Line */`. You can use them anywhere within an alphaTex file +to further annotate your written document for structural or organizational purposes. + +### Strings + +Textual values are expressed as quoted strings similar to most programming languages. Both single and double quotes are supported. + +* `"Double Quoted String"` +* `'Single Quoted String'` + +Additionally following escape sequences are supported: + +* `\n` Newline +* `\r` Carriage Return +* `\t` Tab +* `\uXXXX` Unicode Character where XXXX is a 4 hex-digit number. +* `\\` A backslash +* `\'` or `\"` a quote character + +### Numbers + +alphaTex supports integer and decimal numbers. Decimal numbers are only allowed in some dedicated places to avoid overlaps with some other syntax constructs. + +Examples: + +* `10` +* `-10` +* `0.5` +* `-4.5` + +### Value Lists + +At various places value lists are used to describe items like time signatures or bend points. +Value lists should be wrapped with parenthesis `(values)` if there are multiple values. If there is only a single value, the parenthesis can be omitted. + +The individual values can be: + +* Integer numbers: `3`, `-10` +* Decimal Numbers: `3.3`, `-10.5` +* Strings: `"Hello"`, `'Hello'` +* Special identifiers: `true`, `hide`, `x` + + +Basic Examples + +* `( 1 2 3 )` A list of numbers +* `("Test" 3 hide)` A list of mixed type values + +Real examples + +* `\ts (3 4)` A 3/4 time signature (specified on bar level) +* `12.2 { b (0 4 0) }` A note bend describing a full note bend and release +* `\title ("Song Title" "Title: %TITLE%" left)` A song title shown as `Title: Song Title` left aligned. + +### Properties + +Properties are a list of key-valuelist pairs describing additional optional aspects of elements. +They are used to add effects to notes and beats, what notations should be visible in a staff and more. + +Properties are always wrapped into curly braces. A property starts with an identifier describing the property, optionally followed by its values as value list. + +Examples: +* `\track "Track Name" { color "#FF0000"}` +* `\staff {score}` +* `C4 {b (0 4) v txt "Bend with Vibrato"}` + +### Metadata Tags + +These are likely the most similar construct to LaTeX. Metadata are used to describe various elements within the data model. + +The main syntax of metadata tags is: `\tag values {properties}`. +Both the `values` and `{properties}` are optional from a syntax perspective. Depending on the `tag` values might be expected to be specified. -alphaTex has the following structure variations. Comments are supported in C-style comments via `// Single Line` and `/* Multi Line */`. +Examples: +* `\title "Song Title"` +* `\track "Track Name" {color '#FF0000'}` +* `\ts (3 4)` + +#### Metadata tag values + +Metadata tags might have one or multiple values. The exact values supported (required or optional) depend on the tag. +See [Value Lists](#ValueLists) above for more details. + +#### Metadata tag properties + +Metadata tags might have one or multiple properties. The exact values supported depend on the tag. +See [Properties](#Properties) above for more details. + +## General Song Structure + +An alphaTex file is simply a list of bars and every bar has metadata and contents. For organizational reasons we commend +that metadata tags describing the general song information are added to the start of the file, and external media synchronization points are +added on the end of the file: ```title=General File Structure /* Song Metadata */ +/* Song Contents */ +/* Sync Points */ +``` + +:::note +Before alphaTex 1.7 there was a need to separate the 3 sections with a dot `.`. This was improved in 1.7 and the separation dots should now be omitted. + +```title=Pre 1.7 General File Structure +/* Song Metadata */ . /* Song Contents */ . /* Sync Points */ ``` +::: + +### Bars + +Bars (aka. measures) are starting with an optional list of metadata tags followed by the beats contained +in the bar. See [Bar Metadata](./bar-metadata.mdx) for details on the tags which can be applied here. + +{` +\\clef G2 \\ks Cb C4 | \\ks A C4 +`} + +### Tracks, Staves and Voices + +A song might consist of multiple tracks and staves holding the song data. There are special metadata tags which mark the start +of such new structures. See [Tracks and Staves](./tracks-staves.mdx) for more details. + +{` +\\track "Track 1" + \\staff {score} // first staff + \\voice // first voice + C4 D4 E4 F4 | C4 D4 E4 F4 + \\voice // second voice + C5 D5 E5 F5 | C5 D5 E5 F5 + \\staff {tabs} // second staff + 3.5 5.5 7.5 8.5 | 3.5 5.5 7.5 8.5 +\\track "Track 2" + 1.2 3.2 5.2 6.2 +`} + + +You only need to specify these structural tags to start a new element. A first initial element is started implicitly. + +{` +// first track + // first staff + // first voice + C4 D4 E4 F4 | C4 D4 E4 F4 + \\voice // second voice + C5 D5 E5 F5 | C5 D5 E5 F5 + \\staff {tabs} // second staff + 3.5 5.5 7.5 8.5 | 3.5 5.5 7.5 8.5 +\\track "Track 2" + 1.2 3.2 5.2 6.2 +`} + +### Beats + +Beats group a number of notes played at the same time. The general parts of a beat are -The Song Metadata and Sync Points are optional but the dots are mandatory to separate the sections in case there is any content filled. +* `duration-change content duration effects multiplier` + +#### Duration change (optional) + +A duration change allows easy changing of the duration for all following beats. The syntax is: + +`:Duration` where `Duration` is a number describing the new duration: +* `:-4` a Quadruple Whole Note +* `:-2` a Double Note +* `:1` a Whole Note +* `:2` a Half Note +* `:4` a Quarter Note +* `:8` a 8th Note +* `:16` a 16th Note +* `:32` a 32th Note +* `:64` a 64th Note +* `:128` a 128th Note +* `:256` a 256th Note + +Optionally you can specify some properties afterwards the duration to specify tuplets. + +`:4 {tu 3 2}` + +See [Tuplet Ranges](./beat-effects.mdx#TupletRanges) for more details. + +#### Beat Content (required) + +The most crucial and part is to describe the contents of a beat which can be one of these options: + +* A rest +* Multiple notes played (grouped by parenthesis) +* A single note played + +A rest is simply indicated by specifying an `r`: + +{` +:4 r r r r +`} + +Multiple [Notes](#Notes) can be grouped with parenthesis `()`. Similar to the value lists, you can also just specify +one note and omit the parenthesis. + +{` +:4 + C4 // single note on beat + (C4 E4) // multiple notes with parenthesis +`} + +#### Beat Duration (optional) + +Another way of specifying beat duration is to append them after the beat content as `. duration`. +Historically the new duration is also remembered for the next beat. Tuplets specified as beat effects will not be remembered. +{` +C4 .4 +C4 .8 +C4 // .8 remembered +C4 .2 +`} + +#### Beat Effects (optional) + +Beat effects can be applied as properties after the beat. See [Beat Effects](./beat-effects.mdx) to learn about all available effects. + +{` +:4 + (C4 D4) { tp 8 } + C4 { f } + r.2 {txt "Pause here"} +`} + +#### Beat Multiplier (optional) + +This feature allows "repeating" the same beat multiple times by "multiplying" them. +Simply specify `* times` after the beat with `times` being the number of copies you want. + +{` +:4 + // 4 times the same A-chord + (0.1 2.2 2.3 2.4 0.5) * 4 +`} + +### Notes + +All previous elements are useless, if we cannot specify any notes to be played in the song. +Depending on the instrument played you can have one of 3 kinds of notes in your bars. +Mixing is not possible so be sure to specify all notes consistently: + +* Fretted and Stringed instruments like guitars have their notes as `fret.string` +* Percussion/Drums have their notes as articulation names. +* Other pitched instruments have their notes as note names. + +After each note the note effects can optionally be specified as properties: `note-value {note-properties}`. + +If you only have 1 note in the beat, you can specify both note and beat effects in the same property list. + +{` +:2 + // combined effects + 3.3 { + b (0 4) // note effect + txt "Bend" // beat effect + } + // separated effects + 3.3 + { b (0 4) } // note effect + { txt "Bend" } // beat effect +`} + +:::info +AlphaTab tries to detect which kind of staff you are writing based on the first note. +::: + +#### Fretted Notes + +If the current staff is a stringed instrument (`\tuning` or `\instrument` specified accordingly), +notes are expressed as the fret and string the note is played on. The final note height is calculated. + +{` +:1 + (12.1 {sib} 14.2 {sib b (0 4)}) + 12.1 { v } +`} + +#### Percussion / Drum Notes + +On percussion instruments, you specify the articulation which should be played as note. +The percussion can be a quoted string or an identifier (name without quotes). + +All details are described over at the [Percussion](./percussion.mdx) page. + +{` +\\instrument percussion +\\articulation defaults +:4 + (KickHit RideBell) + r + KickHit + KickHit +`} + +#### Pitched notes + +Pitched notes are expressed in a combined name containing: + +* The tone (`C`,`D`,`E`,`F`,`G`,`A`,`B`,`C`) +* The accidental (`#`, `b`, `bb`, `x`, `##`,..; see [Accidentals](./notes.mdx#accidentals) for details on accidental handling) +* The octave (a number) + +{` +C4 +C#4 +Ebb4 +Dx5 +`} -* Song Metadata: This section contains all information generally about the song like title. -* Song Contents: This section contains defines the whole song contents with all the tracks, staves, bars, beats, notes that alphaTab supports. Bars are separated by `|` symbols. -* Sync Points: alphaTab can be synchronized with external media like audio backing tracks or videos. To have the correct cursor display and highlighting, songs have to be synchronized. This section defines such markers. \ No newline at end of file From 4303886ee2e4e8f43c7d1b52585bb9ecc4d3db70 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Thu, 16 Oct 2025 02:16:25 +0900 Subject: [PATCH 02/15] docs: reorganize pages --- docs/alphatex/bar-metadata.mdx | 54 +++ .../{beat-effects.mdx => beat-properties.mdx} | 30 -- docs/alphatex/introduction.mdx | 4 + docs/alphatex/lyrics.mdx | 48 --- .../{note-effects.mdx => note-properties.mdx} | 0 docs/alphatex/notes.mdx | 19 - docs/alphatex/percussion.mdx | 209 ---------- .../{metadata.mdx => score-metadata.mdx} | 147 ++++++- docs/alphatex/staff-metadata.mdx | 364 ++++++++++++++++++ docs/alphatex/structural-metadata.mdx | 201 ++++++++++ docs/alphatex/stylesheet.mdx | 146 ------- docs/alphatex/sync-points.mdx | 34 -- docs/alphatex/tracks-staves.mdx | 158 -------- sidebars.ts | 14 +- 14 files changed, 772 insertions(+), 656 deletions(-) rename docs/alphatex/{beat-effects.mdx => beat-properties.mdx} (87%) delete mode 100644 docs/alphatex/lyrics.mdx rename docs/alphatex/{note-effects.mdx => note-properties.mdx} (100%) delete mode 100644 docs/alphatex/percussion.mdx rename docs/alphatex/{metadata.mdx => score-metadata.mdx} (61%) create mode 100644 docs/alphatex/staff-metadata.mdx create mode 100644 docs/alphatex/structural-metadata.mdx delete mode 100644 docs/alphatex/stylesheet.mdx delete mode 100644 docs/alphatex/sync-points.mdx delete mode 100644 docs/alphatex/tracks-staves.mdx diff --git a/docs/alphatex/bar-metadata.mdx b/docs/alphatex/bar-metadata.mdx index f0ad4e0..0e45724 100644 --- a/docs/alphatex/bar-metadata.mdx +++ b/docs/alphatex/bar-metadata.mdx @@ -286,3 +286,57 @@ alphaTab attempts to reuse lines on overlapping styles across bars. * `tick` + +### Bar Scale + +When using `systemsLayoutMode: 'UseModelLayout'` with page view layout the individual bars can be scaled relatively. this scale can be specified with `\scale Value` + +{` +\\track { defaultSystemsLayout 3 } + \\scale 0.25 :1 c4 | \\scale 0.5 c4 | \\scale 0.25 c4 | + \\scale 0.5 c4 | \\scale 2 c4 | \\scale 0.5 c4 | + c4 | c4 +`} + + +### Bar Width + +When using `systemsLayoutMode: 'UseModelLayout'` with the horizontal layout the individual bars can be scaled absolutely. this scale can be specified with `\width Value` + +{` +\\track + \\width 100 :1 c4 | \\width 300 c4 | \\width 350 c4 +`} + +### `\sync` + + +alphaTex support specifying sync points for the [synchronization with external media](/docs/guides/audio-video-sync). + +The related sync points are specified as flat list at the end of the song contents separated by a dot `.`. +As we consider it unlikely that authors write this information manually, we separated the sync points from the other song. +This way tools like our [Media Sync Editor](/docs/playground/) on the Playground can be used to synchronize songs and +the sync info can be copy-pasted after the main song. + +The supported formats of sync points are: + +* `\sync BarIndex Occurence MillisecondOffset` +* `\sync BarIndex Occurence MillisecondOffset RatioPosition` + +Where: + +* `BarIndex` is the numeric (0-based) index of the bar for which the sync point applies. +* `Occurence` is the numeric (0-based) index of bar repetitions. e.g. on Repeats or Jumps bars might be played multiple times. This value allows specifying points on subsequent plays of a bar. +* `MillisecondOffset` is the numeric timestamp in milliseconds in the external audio. +* `RatioPosition` is the relative offset within the bar at which the sync point is placed (0 if not provided). + +The `BarIndex`, `Occurence`, `RatioPosition` values define the absolute position within the music sheet. +The `MillisecondOffset` defines the absolute position within the external media. + +With this information known, alphaTab can synchronize the external media with the music sheet. + +The sample below uses an audio backing track with inconsistent tempos. The sync points correct the tempo differences and the cursor is placed correctly. + +import { AlphaTexSyncPointSample } from '@site/src/components/AlphaTexSyncPointSample'; + + \ No newline at end of file diff --git a/docs/alphatex/beat-effects.mdx b/docs/alphatex/beat-properties.mdx similarity index 87% rename from docs/alphatex/beat-effects.mdx rename to docs/alphatex/beat-properties.mdx index 9fcd397..954c9af 100644 --- a/docs/alphatex/beat-effects.mdx +++ b/docs/alphatex/beat-properties.mdx @@ -133,36 +133,6 @@ This will annotate the chord name above the beat. (0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} (0.1 0.2 1.3 2.4 2.5 0.6)*3 `} -

Chord Diagrams

- -A global metadata tag `\chord` can define the chord diagram for each chord. -The format is `\chord ChordName String1 String2 ...`. A value must be defined for all strings. `x` annotates that the string is not played. -Additionally there are 4 properties which adjust the chord details: - -* `FirstFret Number` - shifts the first fret shown in the diagram higher. -* `Barre Fret1 Fret2 ...` - defines on which frets a barré should be played (visually joins the dots to a bar). -* `ShowDiagram True/False` - enables/disables whether the chord diagram should be shown. -* `ShowName True/False` - enables/disables whether the chord name is shown above the diagram. - -{` -// Simple Chord -\\chord "C" 0 1 0 2 3 x -// With barré -\\chord{barre 1} "A#add9" 1 3 4 2 1 x -// First Fret higher -\\chord{firstfret 6 barre 6} "D#" 6 8 8 8 6 x -// Hide diagram -\\chord{showdiagram false} "E" 0 0 1 2 2 0 -// Hide name and multiple barre -\\chord{showname false barre 1 3} "Special" 3 3 3 1 1 1 -. -\\ts 2 4 -(0.1 1.2 0.3 2.4 3.5){ch "C"} (0.1 1.2 0.3 2.4 3.5) | -(1.1 3.2 5.3 3.4 1.5){ch "A#add9"} (1.1 3.2 5.3 3.4 1.5)| -(6.1 8.2 8.3 8.4 6.5){ch "D#"} (6.1 8.2 8.3 8.4 6.5) | -(0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} (0.1 0.2 1.3 2.4 2.5 0.6) | -(3.1 3.2 3.3 1.4 1.5 1.6){ch "Special"} (3.1 3.2 3.3 1.4 1.5 1.6) -`} ## Timer diff --git a/docs/alphatex/introduction.mdx b/docs/alphatex/introduction.mdx index 36558ca..5d645be 100644 --- a/docs/alphatex/introduction.mdx +++ b/docs/alphatex/introduction.mdx @@ -106,6 +106,8 @@ Examples: * `\staff {score}` * `C4 {b (0 4) v txt "Bend with Vibrato"}` +Property identifiers are case-insensitive. + ### Metadata Tags These are likely the most similar construct to LaTeX. Metadata are used to describe various elements within the data model. @@ -119,6 +121,8 @@ Examples: * `\track "Track Name" {color '#FF0000'}` * `\ts (3 4)` +Metadata tags identifiers are case-insensitive. + #### Metadata tag values Metadata tags might have one or multiple values. The exact values supported (required or optional) depend on the tag. diff --git a/docs/alphatex/lyrics.mdx b/docs/alphatex/lyrics.mdx deleted file mode 100644 index a2b6de2..0000000 --- a/docs/alphatex/lyrics.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Lyrics ---- - -The lyrics system of alphaTab is borrowed from Guitar Pro. For every track multiple "lines" of lyrics can be defined which can either start at the beginning or at a later bar. -The syllables of the procided lyrics are spread automatically across the beats of the track. Syllables are separated with spaces. -If multiple words/syllables should stay on the same beat the space can be replaced with a `+`. -Comments which should not be displayed can be put `[into brackets]`. - -To add lyrics to a track use the `\lyrics "Text"` or `\lyrics StartBar "Text"` metadata tag on track/staff level. - -Here some samples: - -import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; - -{` -\\title "With Lyrics" -\\instrument piano -. -\\lyrics "Do Re Mi Fa So La Ti" -C4 D4 E4 F4 | G4 A4 B4 r -`} - -{` -\\title "Combine Syllables (and empty beats)" -\\instrument piano -. -\\lyrics "Do+Do Mi+Mi" -C4 C4 E4 E4 -`} - -{` -\\title "Start Later" -\\instrument piano -. -\\lyrics 2 "Do Re Mi Fa So La Ti" -r r r r | r r r r | -C4 D4 E4 F4 | G4 A4 B4 r -`} - -{` -\\title "Comment" -\\subtitle "Useful when loading lyrics from a different source" -\\instrument piano -. -\\lyrics "[This is a comment]Do Re Mi Fa" -C4 D4 E4 F4 -`} \ No newline at end of file diff --git a/docs/alphatex/note-effects.mdx b/docs/alphatex/note-properties.mdx similarity index 100% rename from docs/alphatex/note-effects.mdx rename to docs/alphatex/note-properties.mdx diff --git a/docs/alphatex/notes.mdx b/docs/alphatex/notes.mdx index 75c5956..bcc6ea9 100644 --- a/docs/alphatex/notes.mdx +++ b/docs/alphatex/notes.mdx @@ -55,25 +55,6 @@ You can specify a multiplier after a beat to add the same beat multiple times to ## Multiple voices -alphaTab supports showing multiple independent voices within one bar, to write such notation in alphaTex the `\voice` syntax can be used to start a new voice. -Once a new voice starts, you again can define the notes starting from the first bar. alphaTab will try to consolidate inconsistencies in the number of bars across voices. - -{` -\\track "Piano" - \\staff{score} \\tuning piano \\instrument acousticgrandpiano - \\voice - c4 d4 e4 f4 | c4 d4 e4 f4 - \\voice - c3 d3 e3 f3 | c3 d3 e3 f3 - -\\track "Piano2" - \\staff{score} \\tuning piano \\instrument acousticgrandpiano - \\voice - c4 d4 e4 f4 | c4 d4 e4 f4 - \\voice - c3 d3 e3 f3 - -`} ## Accidentals diff --git a/docs/alphatex/percussion.mdx b/docs/alphatex/percussion.mdx deleted file mode 100644 index 875c5c2..0000000 --- a/docs/alphatex/percussion.mdx +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: Percussion -since: 1.4.0 ---- - -import { SinceBadge } from '@site/src/components/SinceBadge'; - - - -import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; - -Since alphaTab 1.4 you can also write percussion (drum) tracks in alphaTab. For this the `\instrument "percussion"` has to be set -for the track and then you can add notes via articulation names or numbers. - -{` -\\track "Drums" -\\instrument percussion -\\tempo 120 -\\clef neutral -\\articulation defaults -(KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit | -(KickHit HiHatOpen) KickHit KickHit KickHit (KickHit HiHatOpen) KickHit KickHit KickHit (KickHit SnareHit HiHatOpen) KickHit KickHit.32 KickHit KickHit.16 (KickHit HiHatOpen) KickHit KickHit KickHit | -(KickHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} (KickHit SnareHit HiHatOpen){tu 3} KickHit.16{tu 3} KickHit{tu 3} KickHit.8{tu 3} (KickHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} (KickHit SnareHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} -`} - -## Instrument Articulations - -alphaTab comes with a default set of instrument articulations derived from Guitar Pro 7. Each articulation has an internal number with which it can be referenced. -To make writing more human friendly you can define custom articulation names via `\articulation Name Number` - -{` -\\track "Drums" -\\instrument percussion -\\tempo 120 -\\clef neutral -// define the articulation here -\\articulation Kick 36 -// use it as note values -Kick.4 Kick.8 Kick.8 Kick.4 Kick.4 - -`} - -If you simply want to use all articulations you can specify `\articulation defaults` and the whole list of articulations with some default names will be provided. - -{` -\\track "Drums" -\\instrument percussion -\\tempo 120 -\\clef neutral -\\articulation defaults -\\ts 2 4 -("Kick (Hit)" "Hi-Hat (Open)") "Kick (Hit)" "Kick (Hit)" "Kick (Hit)" -(KickHit HiHatOpen) KickHit KickHit KickHit -`} - -## Articulation List - -To actually get started you need to know the list of built-in articulations. Refer to this list below and the example as reference: - -export const list = [ - ['Ride (choke)', 29], - ['Cymbal (hit)', 30], - ['Snare (side stick)', 31], - ['Snare (side stick) 2', 33], - ['Snare (hit)', 34], - ['Kick (hit)', 35], - ['Kick (hit) 2', 36], - ['Snare (side stick) 3', 37], - ['Snare (hit) 2', 38], - ['Hand Clap (hit)', 39], - ['Snare (hit) 3', 40], - ['Low Floor Tom (hit)', 41], - ['Hi-Hat (closed)', 42], - ['Very Low Tom (hit)', 43], - ['Pedal Hi-Hat (hit)', 44], - ['Low Tom (hit)', 45], - ['Hi-Hat (open)', 46], - ['Mid Tom (hit)', 47], - ['High Tom (hit)', 48], - ['Crash high (hit)', 49], - ['High Floor Tom (hit)', 50], - ['Ride (middle)', 51], - ['China (hit)', 52], - ['Ride (bell)', 53], - ['Tambourine (hit)', 54], - ['Splash (hit)', 55], - ['Cowbell medium (hit)', 56], - ['Crash medium (hit)', 57], - ['Vibraslap (hit)', 58], - ['Ride (edge)', 59], - ['Hand (hit)', 60], - ['Hand (hit)', 61], - ['Conga high (mute)', 62], - ['Conga high (hit)', 63], - ['Conga low (hit)', 64], - ['Timbale high (hit)', 65], - ['Timbale low (hit)', 66], - ['Agogo high (hit)', 67], - ['Agogo tow (hit)', 68], - ['Cabasa (hit)', 69], - ['Left Maraca (hit)', 70], - ['Whistle high (hit)', 71], - ['Whistle low (hit)', 72], - ['Guiro (hit)', 73], - ['Guiro (scrap-return)', 74], - ['Claves (hit)', 75], - ['Woodblock high (hit)', 76], - ['Woodblock low (hit)', 77], - ['Cuica (mute)', 78], - ['Cuica (open)', 79], - ['Triangle (rnute)', 80], - ['Triangle (hit)', 81], - ['Shaker (hit)', 82], - ['Tinkle Bell (hat)', 83], - ['Jingle Bell (hit)', 83], - ['Bell Tree (hit)', 84], - ['Castanets (hit)', 85], - ['Surdo (hit)', 86], - ['Surdo (mute)', 87], - ['Snare (rim shot)', 91], - ['Hi-Hat (half)', 92], - ['Ride (edge) 2', 93], - ['Ride (choke) 2', 94], - ['Splash (choke)', 95], - ['China (choke)', 96], - ['Crash high (choke)', 97], - ['Crash medium (choke)', 98], - ['Cowbell low (hit)', 99], - ['Cowbell low (tip)', 100], - ['Cowbell medium (tip)', 101], - ['Cowbell high (hit)', 102], - ['Cowbell high (tip)', 103], - ['Hand (mute)', 104], - ['Hand (slap)', 105], - ['Hand (mute) 2', 106], - ['Hand (slap) 2', 107], - ['Conga low (slap)', 108], - ['Conga low (mute)', 109], - ['Conga high (slap)', 110], - ['Tambourine (return)', 111], - ['Tambourine (roll)', 112], - ['Tambourine (hand)', 113], - ['Grancassa (hit)', 114], - ['Piatti (hat)', 115], - ['Piatti (hand)', 116], - ['Cabasa (return)', 117], - ['Left Maraca (return)', 118], - ['Right Maraca (hit)', 119], - ['Right Maraca (return)', 120], - ['Shaker (return)', 122], - ['Bell Tee (return)', 123], - ['Golpe (thumb)', 124], - ['Golpe (finger)', 125], - ['Ride (middle) 2', 126], - ['Ride (bell) 2', 127] -]; - -export function ArticulationTable({list}) { - return ( - - - - - - - - - - {list.map(i => ( - - - - - - ))} - -
NumberName LongName Short
{i[1]}{i[0]}{i[0].replace(/[^a-zA-Z0-9]/g, '')}
- ) -} - - - -export function articulationsToAlphaTex(){ - const lines = [ - '\\track "Drums"', - '\\instrument percussion', - '\\tempo 120', - '\\clef neutral', - '\\ts 2 4']; - - let line = ''; - for(let i = 0; i < list.length; i++) { - if( (i % 4) === 3) { - line += '|'; - lines.push(line); - line = ''; - } - - line += list[i][1] + ' '; - } - - line += '|'; - lines.push(line); - - return lines.filter(l => l !== '|').join('\n'); -} - - -{articulationsToAlphaTex()} \ No newline at end of file diff --git a/docs/alphatex/metadata.mdx b/docs/alphatex/score-metadata.mdx similarity index 61% rename from docs/alphatex/metadata.mdx rename to docs/alphatex/score-metadata.mdx index 52b4abf..f8bfe9c 100644 --- a/docs/alphatex/metadata.mdx +++ b/docs/alphatex/score-metadata.mdx @@ -30,8 +30,6 @@ Please refer to the [Tracks and Staves](/docs/alphatex/tracks-staves) or details // Track and Staff Settings (can be used after \\track and \\staff) // Instrument as General MIDI number or name \\instrument 30 - // Capo fret - \\capo 2 // String tuning starting at the most bottom string \\tuning e5 b4 g4 d4 a3 e3 // end of metadata @@ -238,4 +236,147 @@ For example, a standard guitar tuning is `\tuning E4 B3 G3 D3 A2 E2`. A 5 string For non-stringed instruments, the values `piano`, `none` or `voice` can be used depending on preference. -If `\instrument` is specified without `\tuning`, alphaTab will try to make a guess and apply the right default tuning. \ No newline at end of file +If `\instrument` is specified without `\tuning`, alphaTab will try to make a guess and apply the right default tuning. + +## Stylesheet + +There are various [stylesheet](/docs/reference/score) related options which can be specified in alphaTex. + +## Show/Hide Dynamics + +To configure on the stylesheet whether dynamics are shown use: `\showDynamics` and `\hideDynamics` + +{` +\\showDynamics +. +C4 D4 E4 F4 +`} + + +{` +\\hideDynamics +. +C4 D4 E4 F4 +`} + + +## Brackets and Braces + +To configure the mode how to show [brackets and braces](/docs/showcase/general.mdx#brackets-and-braces) use + +* `\bracketExtendMode NoBrackets` +* `\bracketExtendMode GroupStaves` +* `\bracketExtendMode GroupSimilarInstruments` + +The `\useSystemSignSeparator` option configures whether a system sign separator should be added + +{` +\\bracketextendmode GroupSimilarInstruments +\\useSystemSignSeparator +. +\\track "Piano1" + \\staff {score} + \\instrument piano + C4 D4 E4 F4 + \\staff {score} + \\clef f4 C3 D3 E3 F3 +\\track "Piano2" + \\staff {score} + \\instrument piano + C4 D4 E4 F4 +\\track "Flute 1" + \\staff { score } + \\instrument flute + C4 D4 E4 F4 +\\track "Flute 2" + \\staff { score } + \\instrument flute + \\clef f4 C3 D3 E3 F3 +\\track "Guitar 1" + \\staff { score tabs } + 0.3.4 2.3.4 5.3.4 7.3.4 +`} + +## System Sign Separator + +The `\useSystemSignSeparator` option configures whether a system sign separator should be added (in case multiple tracks are shown). + +{` +\\useSystemSignSeparator +\\defaultSystemsLayout 2 +. +\\track "T1" +:1 C4 | C4 | C4 +\\track "T2" +:1 C4 | C4 | C4 +`} + +## Show Tuning (per track) + +For every track it can be configured whether the tuning should be shown via the `hide` option on the tuning. + +{` +\\track \\staff \\tuning E4 B3 G3 D3 A2 E2 + 3.3.1 +\\track \\staff \\tuning D4 A3 F3 C3 G2 D2 + 3.3.1 +`} + +{` +\\track \\staff \\tuning E4 B3 G3 D3 A2 E2 hide + 3.3.1 +\\track \\staff \\tuning D4 A3 F3 C3 G2 D2 + 3.3.1 +`} + +## Track Names + +To configure the mode how to show [track names](/docs/showcase/general.mdx#track-names) use: + +* `\singleTrackTrackNamePolicy hidden`, `\singleTrackTrackNamePolicy firstSystem`, `singleTrackTrackNamePolicy allSystems` +* `\multiTrackTrackNamePolicy hidden`, `\multiTrackTrackNamePolicy firstSystem`, `multiTrackTrackNamePolicy allSystems` +* `\firstSystemTrackNameMode shortName`, `\firstSystemTrackNameMode fullName` +* `\otherSystemsTrackNameMode shortName`, `\otherSystemsTrackNameMode fullName` +* `\firstSystemTrackNameOrientation horizontal`, `\firstSystemTrackNameOrientation vertical` +* `\otherSystemsTrackNameOrientation horizontal`, `\otherSystemsTrackNameOrientation vertical` + +{` +\\singletracktracknamepolicy AllSystems +\\firstsystemtracknamemode fullname +\\othersystemstracknamemode shortname +\\firstsystemtracknameorientation horizontal +\\othersystemstracknameorientation vertical +. +\\track "Piano 1" "pno1" { defaultsystemslayout 3 } + \\staff {score} + C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | +`} + +## Multi-Bar Rests + +To configure whether [multibar rests](/docs/showcase/layouts.mdx#multi-bar-rests) should be enabled use: + +* `\multiBarRest` - On top level for configuring the use on multi-track renderings +* `\track { multiBarRest }` - On track level for single track renderings + +{` +\\title "Multi Track" +\\multiBarRest +. +\\track "Piano 1" "pno1" + \\staff {score} + C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 + +\\track "Piano 2" "pno1" + \\staff {score} + C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | r | +`} + +{` +\\title "Single Track" +. +\\track "Piano 1" "pno1" { multiBarRest } + \\staff {score} + C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 +`} + diff --git a/docs/alphatex/staff-metadata.mdx b/docs/alphatex/staff-metadata.mdx new file mode 100644 index 0000000..fdb6ec5 --- /dev/null +++ b/docs/alphatex/staff-metadata.mdx @@ -0,0 +1,364 @@ +--- +title: Staff metadata +--- + +This page describes all the metadata tags which affect the "staff" level of the data model. + +To avoid any unexpected side-effects, these values should be specified on the first bar. + +Some of these tags are simply historically metadata tags. They might become staff properties in future. + + +### `\tuning` + +The `\tuning` metadata defines the number of strings and their tuning for stringed (and fretted) instruments. + +The values are: + +* `Tuning Values` Either one of the following special identifiers or a repeated list of tuning values (same to pitched notes) describing the tuning of the respective string. + +Special identifiers: + +* `piano` - Indicates that this staff is NOT stringed, but a piano with pitched notes. +* `none` - Indicates that this staff is NOT stringed and has no tuning and uses pitched notes. +* `voice` - Indicates that this staff is NOT stringed, but a vocal voice with pitched notes. + +The available properties are: + +* `hide` - Hides the tuning from being displayed in the displayed tuning list. + +{` +\\track "Track 1" + \\staff {tabs} + \\tuning (A1 D2 A2 D3 G3 B3 E4) { hide } + 4.1 3.1 2.1 1.1 +\\track "Track 2" + \\tuning piano + C4 D4 E4 F4 +`} + +### `\chord` + +The `\chord` metadata allows to define contents of a chord, making up the "chord diagram" which can be shown. + +The values are: + +* `ChordName` The name of the chord (required, string) +* `FretList` A repeated list of either numbers or `x` describing which frets to play for each string. + +A value must be defined for all strings as defined by the tuning of the staff. Hence you should define the chords after the `\tuning`. +Defining `x` for a string, it means the string is not played. + +The properties are: +Additionally there are 4 properties which adjust the chord details: + +* `firstFret Number` - shifts the first fret shown in the diagram higher. +* `barre Fret1 Fret2 ...` - defines on which frets a barré should be played (visually joins the dots to a bar). +* `showDiagram true/false` - enables/disables whether the chord diagram should be shown. If no value is specified, its equal to `true` +* `showName true/false` - enables/disables whether the chord name is shown above the diagram. If no value is specified, its equal to `true` + +To "use" the defined chord the `ch chordName` beat property has to be applied. + +{` +// Simple Chord +\\chord ("C" 0 1 0 2 3 x) +// With barré +\\chord ("A#add9" 1 3 4 2 1 x) {barre 1} +// First Fret higher +\\chord ("D#" 6 8 8 8 6 x) {firstfret 6 barre 6} +// Hide diagram +\\chord ("E" 0 0 1 2 2 0) {showdiagram false} +// Hide name and multiple barre +\\chord ("Special" 3 3 3 1 1 1) {showname false barre 1 3} +. +\\ts 2 4 +(0.1 1.2 0.3 2.4 3.5){ch "C"} (0.1 1.2 0.3 2.4 3.5) | +(1.1 3.2 5.3 3.4 1.5){ch "A#add9"} (1.1 3.2 5.3 3.4 1.5)| +(6.1 8.2 8.3 8.4 6.5){ch "D#"} (6.1 8.2 8.3 8.4 6.5) | +(0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} (0.1 0.2 1.3 2.4 2.5 0.6) | +(3.1 3.2 3.3 1.4 1.5 1.6){ch "Special"} (3.1 3.2 3.3 1.4 1.5 1.6) +`} + +### `\capo` + +The `\capo` metadata allows to define on which fret a capo is placed. + +The values are: + +* `fret` The fret on which the capo is placed (required, number) + +There are no properties on this metadata. + +### `\bank` + +The `\bank` metadata allows to define which MIDI bank will be selected for the playback of this staff. + +The values are: + +* `bank` The MIDI bank value (required, number) + +There are no properties on this metadata. + +### `\lyrics` + +The `\lyrics` metadata allows to define the lyrics text for the whole staff. +The values are: + +* `startBar` The index of the bar where the lyrics start (optional, number) +* `lyrics` The lyrics text (required, string) + +There are no properties on this metadata. + +The lyrics system of alphaTab is borrowed from Guitar Pro. For every track multiple "lines" of lyrics can be defined which can either start at the beginning or at a later bar. +The syllables of the procided lyrics are spread automatically across the beats of the track. Syllables are separated with spaces. +If multiple words/syllables should stay on the same beat the space can be replaced with a `+`. +Comments which should not be displayed can be put `[into brackets]`. + +Here some samples: + +import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; + +{` +\\title "With Lyrics" +\\instrument piano +. +\\lyrics "Do Re Mi Fa So La Ti" +C4 D4 E4 F4 | G4 A4 B4 r +`} + +{` +\\title "Combine Syllables (and empty beats)" +\\instrument piano +. +\\lyrics "Do+Do Mi+Mi" +C4 C4 E4 E4 +`} + +{` +\\title "Start Later" +\\instrument piano +. +\\lyrics 2 "Do Re Mi Fa So La Ti" +r r r r | r r r r | +C4 D4 E4 F4 | G4 A4 B4 r +`} + +{` +\\title "Comment" +\\subtitle "Useful when loading lyrics from a different source" +\\instrument piano +. +\\lyrics "[This is a comment]Do Re Mi Fa" +C4 D4 E4 F4 +`} + +### `\articulation` + +The `\articulation` metadata defines the articulations used in percussion tracks. + +Since alphaTab 1.4 you can also write percussion (drum) tracks in alphaTab. For this the `\instrument "percussion"` has to be set +for the track and then you can add notes via articulation names or numbers. + +{` +\\track "Drums" +\\instrument percussion +\\tempo 120 +\\clef neutral +\\articulation defaults +(KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit | +(KickHit HiHatOpen) KickHit KickHit KickHit (KickHit HiHatOpen) KickHit KickHit KickHit (KickHit SnareHit HiHatOpen) KickHit KickHit.32 KickHit KickHit.16 (KickHit HiHatOpen) KickHit KickHit KickHit | +(KickHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} (KickHit SnareHit HiHatOpen){tu 3} KickHit.16{tu 3} KickHit{tu 3} KickHit.8{tu 3} (KickHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} (KickHit SnareHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} +`} + +A `\articulation defaults` tag marks the use of the default articulation names (as described below). +If the other values are specified, this tag defines an alias for the built-in articulation. + +The alias values are: + +* `name` The string (or identifier) used int he note values (required, string/identifier) +* `value` The numeric value of the built-in articulation. + +export const list = [ + ['Ride (choke)', 29], + ['Cymbal (hit)', 30], + ['Snare (side stick)', 31], + ['Snare (side stick) 2', 33], + ['Snare (hit)', 34], + ['Kick (hit)', 35], + ['Kick (hit) 2', 36], + ['Snare (side stick) 3', 37], + ['Snare (hit) 2', 38], + ['Hand Clap (hit)', 39], + ['Snare (hit) 3', 40], + ['Low Floor Tom (hit)', 41], + ['Hi-Hat (closed)', 42], + ['Very Low Tom (hit)', 43], + ['Pedal Hi-Hat (hit)', 44], + ['Low Tom (hit)', 45], + ['Hi-Hat (open)', 46], + ['Mid Tom (hit)', 47], + ['High Tom (hit)', 48], + ['Crash high (hit)', 49], + ['High Floor Tom (hit)', 50], + ['Ride (middle)', 51], + ['China (hit)', 52], + ['Ride (bell)', 53], + ['Tambourine (hit)', 54], + ['Splash (hit)', 55], + ['Cowbell medium (hit)', 56], + ['Crash medium (hit)', 57], + ['Vibraslap (hit)', 58], + ['Ride (edge)', 59], + ['Hand (hit)', 60], + ['Hand (hit)', 61], + ['Conga high (mute)', 62], + ['Conga high (hit)', 63], + ['Conga low (hit)', 64], + ['Timbale high (hit)', 65], + ['Timbale low (hit)', 66], + ['Agogo high (hit)', 67], + ['Agogo tow (hit)', 68], + ['Cabasa (hit)', 69], + ['Left Maraca (hit)', 70], + ['Whistle high (hit)', 71], + ['Whistle low (hit)', 72], + ['Guiro (hit)', 73], + ['Guiro (scrap-return)', 74], + ['Claves (hit)', 75], + ['Woodblock high (hit)', 76], + ['Woodblock low (hit)', 77], + ['Cuica (mute)', 78], + ['Cuica (open)', 79], + ['Triangle (rnute)', 80], + ['Triangle (hit)', 81], + ['Shaker (hit)', 82], + ['Tinkle Bell (hat)', 83], + ['Jingle Bell (hit)', 83], + ['Bell Tree (hit)', 84], + ['Castanets (hit)', 85], + ['Surdo (hit)', 86], + ['Surdo (mute)', 87], + ['Snare (rim shot)', 91], + ['Hi-Hat (half)', 92], + ['Ride (edge) 2', 93], + ['Ride (choke) 2', 94], + ['Splash (choke)', 95], + ['China (choke)', 96], + ['Crash high (choke)', 97], + ['Crash medium (choke)', 98], + ['Cowbell low (hit)', 99], + ['Cowbell low (tip)', 100], + ['Cowbell medium (tip)', 101], + ['Cowbell high (hit)', 102], + ['Cowbell high (tip)', 103], + ['Hand (mute)', 104], + ['Hand (slap)', 105], + ['Hand (mute) 2', 106], + ['Hand (slap) 2', 107], + ['Conga low (slap)', 108], + ['Conga low (mute)', 109], + ['Conga high (slap)', 110], + ['Tambourine (return)', 111], + ['Tambourine (roll)', 112], + ['Tambourine (hand)', 113], + ['Grancassa (hit)', 114], + ['Piatti (hat)', 115], + ['Piatti (hand)', 116], + ['Cabasa (return)', 117], + ['Left Maraca (return)', 118], + ['Right Maraca (hit)', 119], + ['Right Maraca (return)', 120], + ['Shaker (return)', 122], + ['Bell Tee (return)', 123], + ['Golpe (thumb)', 124], + ['Golpe (finger)', 125], + ['Ride (middle) 2', 126], + ['Ride (bell) 2', 127] +]; + +export function ArticulationTable({list}) { + return ( + + + + + + + + + + {list.map(i => ( + + + + + + ))} + +
NumberName LongName Short
{i[1]}{i[0]}{i[0].replace(/[^a-zA-Z0-9]/g, '')}
+ ) +} + + + +export function articulationsToAlphaTex(){ + const lines = [ + '\\track "Drums"', + '\\instrument percussion', + '\\tempo 120', + '\\clef neutral', + '\\ts 2 4']; + + let line = ''; + for(let i = 0; i < list.length; i++) { + if( (i % 4) === 3) { + line += '|'; + lines.push(line); + line = ''; + } + + line += list[i][1] + ' '; + } + + line += '|'; + lines.push(line); + + return lines.filter(l => l !== '|').join('\n'); +} + +{articulationsToAlphaTex()} + + +### `\displayTranspose` + +The `displayTranpose` metadata defines the number of semitones to transpose the notes in this staff with. This only affects the display of the notes, not their audio. + +It is typically used in sutations like for guitars where the standard notation is displayed 1 octave lower to fit better into the standard staff. + +The values are: + +* `semitones` The number of semitones the staff should be transposed. + +There are no properties on this metadata. + +{` +\\track \\staff \\instrument piano + \\displayTranspose -12 + C4.4 D4 E4 F4 | r.1 +`} + +### `\transpose` + +The `transpose` metadata defines the number of semitones to transpose the notes in this staff with. This affects the display and audio. + +The values are: + +* `semitones` The number of semitones the staff should be transposed. + +There are no properties on this metadata. + +{` +\\track \\staff \\instrument piano + \\transpose -12 + r.1 | C4.4 D4 E4 F4 +`} diff --git a/docs/alphatex/structural-metadata.mdx b/docs/alphatex/structural-metadata.mdx new file mode 100644 index 0000000..d6ef84a --- /dev/null +++ b/docs/alphatex/structural-metadata.mdx @@ -0,0 +1,201 @@ +--- +title: Tracks, Staves and Voices +--- + +import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; + +For some songs you might want to define that the song has multiple tracks, staves or voices. + +* Multiple tracks are used when multiple instruments are playing together in one song. +* Multiple staves are typically used to write grand staff piano notation (left hand/right hand) or + splitup voices for readability. +* Multiple voices are typically used to write notation where multiple independent timings and pitches are played. + This can be if multiple vocals are singing together (hence the name voices), or special playing techniques (playing a base rhythm and melody on the same instrument). + +In alphaTex new tracks, staves and voices are started with their respective metadata tags specified at the start of a bar: + +* `\track` +* `\staff` +* `\voice` + +alphaTab refers to these kind of metadata tags as "structural" tags as they define the general structure of the song. + +The initial track, staff or voice is implicitly started. Only on the "second" item you need to specify the tags. For clarity +it is encouraged to also specify the initial item if there are multiple tracks, staves or voices. + +## `\track` + +A new track can be started with the `\track` metadata. + +The track metadata has two values: +1. `track long name` (string, optional) +2. `track short name` (string, optional)` + +Both names are optional and the short name is the one displayed before the track starts. +The long name can be used e.g. in your custom UI. +If the short name is not specified, the first 10 characters of the long name are used as short name.
+ +{` +\\track "First Track" "frst" + 1.1 2.1 3.1 4.1 +\\track // new track + \\tuning A1 D2 A2 D3 G3 B3 E4 // tuning of new track (with 7 strings) + 4.1 3.1 2.1 1.1 | +`} + +Following properties are available on track level. + +### Track Color + +**Syntax:** `color colorCode` + +The data model holds information about the color of the track which might be used by user interfaces to visually differenciate them. +This data mainly originates from the Guitar Pro file format where colors are used to differenciate the tracks in the track picker and +some other visualizations. It does not have an impact on the color of the music notation but can be used in a custom UI. + +The `colorCode` is a string of [any supported color format](/docs/reference/settings/display/resources#colors) + +{` +\\track { color "#FF0000" } +1.1 2.1 3.1 4.1 +`} + +### System Layout + +**Syntax:** `systemsLayout (system1Bars system2Bars...)` +**Syntax:** `defaultSystemsLayout bars` + +The `systemsLayout` and `defaultSystemsLayout` allow configuring the system layout. The system layout, defines how many bars should be displayed per system (line) if enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). + +The system layout can be configured either on score or on track level via these two options. + +* `defaultSystemsLayout` - defines the number of bars to display unless specified differently. (default: 3) +* `systemsLayout` - defines the number of bars to display per system. (default: empty) + +{` +\\title "Single Track" +. +\\track { defaultSystemsLayout 3 systemsLayout 2 2 } + :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 +`} + +The `score` level options are used in case multiple tracks are displayed, otherwise the `track` level information is used. + +{` +\\title "Multi Track" +\\defaultSystemsLayout 2 +\\systemsLayout 1 1 +. +\\track { defaultSystemsLayout 1 systemsLayout 2 2 } + :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 +\\track { defaultSystemsLayout 4 systemsLayout 3 3 } + :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 +`} + +### Playback Information + +Following properties allow specifying details on the playback of the track. + +**Syntax:** `solo` - set the track to be played alone in the data model. (no values) +**Syntax:** `mute` - set the track to be muted (not played) in the data model. (no values) +**Syntax:** `volume value` - set the track volume, value can be a number in the range of 0-16 +**Syntax:** `volume balance` - set the track balance, value can be a number in the range of 0-16 (8 is centered) +**Syntax:** `instrument nameOrNumber` - set the midi instrument for this track. This can either be a General MIDI number or instrument name. + +## `\staff` + +A new staff can be started with the `\staff` metadata. + +The staff metadata has no values. + +The staff properties are described below. + +{` +\\track "Piano with Grand Staff" "pno." + \\staff{score} \\tuning piano \\instrument acousticgrandpiano + c4 d4 e4 f4 | + \\staff{score} \\tuning piano \\clef F4 + c2 c2 c2 c2 | +\\track "Guitar" + \\staff{tabs slash} \\capo 5 + 1.2 3.2 0.1 1.1 +`} + +The staff with the largest number of bars defines how long the overall song is. +There is no need to manually ensure that all staves have the correct number of bars. +AlphaTab will create missing empty bars automatically. + +{` +\\track "Piano with Grand Staff" "pno." + \\staff{score} \\tuning piano \\instrument acousticgrandpiano + c4 d4 e4 f4 | + \\staff{score} \\tuning piano \\clef F4 + c2 c2 c2 c2 | c2 c2 c2 c2 | c2 c2 c2 c2 | +\\track "Guitar" + \\staff{tabs} \\capo 5 + 1.2 3.2 0.1 1.1 | 1.2 3.2 0.1 1.1 +`} + +If no properties describing the visible notation are provided, the default is `score tabs`. + +### `score` - Standard notation + +The `score` staff property enables the display of standard notation. + +The values are: + +* `lines` - Defines the number of staff lines shown in the standard music notation (number, optional) + +{` +\\track + \\staff{score 3} + c4 d4 e4 f4 +`} + +### `tabs` + +The `tabs` staff property enables the display of guitar tablature (only if the contained notes are really containing stringed/fretted notes) + +This property has no values. + +### `slash` + +The `slash` staff property enables the display of slash notation. + +This property has no values. + +### `numbered` + +The `numbered` staff property enables the display of Jianpu / numbered notation. + +This property has no values. + +## `\voice` + +A new track can be started with the `\voice` metadata. + +The voice metadata has no values and no properties. + +Unlike the structure in the data model, alphaTex expects you to define all bars of a voice, then all the bars of the next voice. + +It structure is: `\voice /* Voice 1 Bar 1*/ | /* Voice 1 Bar 2*/ \voice /* Voice 2 Bar 1*/ | /* Voice21 Bar 2*/` +Once a new voice starts, you again can define the notes starting from the first bar. alphaTab will try to consolidate inconsistencies in the number of bars across voices. + +{` +\\track "Piano" + \\staff{score} \\tuning piano \\instrument acousticgrandpiano + \\voice + c4 d4 e4 f4 | c4 d4 e4 f4 + \\voice + c3 d3 e3 f3 | c3 d3 e3 f3 + +\\track "Piano2" + \\staff{score} \\tuning piano \\instrument acousticgrandpiano + \\voice + c4 d4 e4 f4 | c4 d4 e4 f4 + \\voice + c3 d3 e3 f3 + +`} + + diff --git a/docs/alphatex/stylesheet.mdx b/docs/alphatex/stylesheet.mdx deleted file mode 100644 index ed38a3d..0000000 --- a/docs/alphatex/stylesheet.mdx +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: Stylesheet ---- - -import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; - -There are various [stylesheet](/docs/reference/score) related options which can be specified in alphaTex. - -## Show/Hide Dynamics - -To configure on the stylesheet whether dynamics are shown use: `\showDynamics` and `\hideDynamics` - -{` -\\showDynamics -. -C4 D4 E4 F4 -`} - - -{` -\\hideDynamics -. -C4 D4 E4 F4 -`} - - -## Brackets and Braces - -To configure the mode how to show [brackets and braces](/docs/showcase/general.mdx#brackets-and-braces) use - -* `\bracketExtendMode NoBrackets` -* `\bracketExtendMode GroupStaves` -* `\bracketExtendMode GroupSimilarInstruments` - -The `\useSystemSignSeparator` option configures whether a system sign separator should be added - -{` -\\bracketextendmode GroupSimilarInstruments -\\useSystemSignSeparator -. -\\track "Piano1" - \\staff {score} - \\instrument piano - C4 D4 E4 F4 - \\staff {score} - \\clef f4 C3 D3 E3 F3 -\\track "Piano2" - \\staff {score} - \\instrument piano - C4 D4 E4 F4 -\\track "Flute 1" - \\staff { score } - \\instrument flute - C4 D4 E4 F4 -\\track "Flute 2" - \\staff { score } - \\instrument flute - \\clef f4 C3 D3 E3 F3 -\\track "Guitar 1" - \\staff { score tabs } - 0.3.4 2.3.4 5.3.4 7.3.4 -`} - -## System Sign Separator - -The `\useSystemSignSeparator` option configures whether a system sign separator should be added (in case multiple tracks are shown). - -{` -\\useSystemSignSeparator -\\defaultSystemsLayout 2 -. -\\track "T1" -:1 C4 | C4 | C4 -\\track "T2" -:1 C4 | C4 | C4 -`} - -## Show Tuning (per track) - -For every track it can be configured whether the tuning should be shown via the `hide` option on the tuning. - -{` -\\track \\staff \\tuning E4 B3 G3 D3 A2 E2 - 3.3.1 -\\track \\staff \\tuning D4 A3 F3 C3 G2 D2 - 3.3.1 -`} - -{` -\\track \\staff \\tuning E4 B3 G3 D3 A2 E2 hide - 3.3.1 -\\track \\staff \\tuning D4 A3 F3 C3 G2 D2 - 3.3.1 -`} - -## Track Names - -To configure the mode how to show [track names](/docs/showcase/general.mdx#track-names) use: - -* `\singleTrackTrackNamePolicy hidden`, `\singleTrackTrackNamePolicy firstSystem`, `singleTrackTrackNamePolicy allSystems` -* `\multiTrackTrackNamePolicy hidden`, `\multiTrackTrackNamePolicy firstSystem`, `multiTrackTrackNamePolicy allSystems` -* `\firstSystemTrackNameMode shortName`, `\firstSystemTrackNameMode fullName` -* `\otherSystemsTrackNameMode shortName`, `\otherSystemsTrackNameMode fullName` -* `\firstSystemTrackNameOrientation horizontal`, `\firstSystemTrackNameOrientation vertical` -* `\otherSystemsTrackNameOrientation horizontal`, `\otherSystemsTrackNameOrientation vertical` - -{` -\\singletracktracknamepolicy AllSystems -\\firstsystemtracknamemode fullname -\\othersystemstracknamemode shortname -\\firstsystemtracknameorientation horizontal -\\othersystemstracknameorientation vertical -. -\\track "Piano 1" "pno1" { defaultsystemslayout 3 } - \\staff {score} - C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | -`} - -## Multi-Bar Rests - -To configure whether [multibar rests](/docs/showcase/layouts.mdx#multi-bar-rests) should be enabled use: - -* `\multiBarRest` - On top level for configuring the use on multi-track renderings -* `\track { multiBarRest }` - On track level for single track renderings - -{` -\\title "Multi Track" -\\multiBarRest -. -\\track "Piano 1" "pno1" - \\staff {score} - C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 - -\\track "Piano 2" "pno1" - \\staff {score} - C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | r | -`} - -{` -\\title "Single Track" -. -\\track "Piano 1" "pno1" { multiBarRest } - \\staff {score} - C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 -`} - diff --git a/docs/alphatex/sync-points.mdx b/docs/alphatex/sync-points.mdx deleted file mode 100644 index 97a5bfe..0000000 --- a/docs/alphatex/sync-points.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Sync Points ---- - - -alphaTex support specifying sync points for the [synchronization with external media](/docs/guides/audio-video-sync). - -The related sync points are specified as flat list at the end of the song contents separated by a dot `.`. -As we consider it unlikely that authors write this information manually, we separated the sync points from the other song. -This way tools like our [Media Sync Editor](/docs/playground/) on the Playground can be used to synchronize songs and -the sync info can be copy-pasted after the main song. - -The supported formats of sync points are: - -* `\sync BarIndex Occurence MillisecondOffset` -* `\sync BarIndex Occurence MillisecondOffset RatioPosition` - -Where: - -* `BarIndex` is the numeric (0-based) index of the bar for which the sync point applies. -* `Occurence` is the numeric (0-based) index of bar repetitions. e.g. on Repeats or Jumps bars might be played multiple times. This value allows specifying points on subsequent plays of a bar. -* `MillisecondOffset` is the numeric timestamp in milliseconds in the external audio. -* `RatioPosition` is the relative offset within the bar at which the sync point is placed (0 if not provided). - -The `BarIndex`, `Occurence`, `RatioPosition` values define the absolute position within the music sheet. -The `MillisecondOffset` defines the absolute position within the external media. - -With this information known, alphaTab can synchronize the external media with the music sheet. - -The sample below uses an audio backing track with inconsistent tempos. The sync points correct the tempo differences and the cursor is placed correctly. - -import { AlphaTexSyncPointSample } from '@site/src/components/AlphaTexSyncPointSample'; - - \ No newline at end of file diff --git a/docs/alphatex/tracks-staves.mdx b/docs/alphatex/tracks-staves.mdx deleted file mode 100644 index 96e2c88..0000000 --- a/docs/alphatex/tracks-staves.mdx +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: Tracks and Staves ---- - -import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; - -For some songs you might want to define that the song has multiple tracks or staves. -Depending on your UI the user might then select which track to display and switch between them. -Staves configurations are useful to adjust the display of the individual tracks. -You can enable/disable certain notation to be shown and also add multiple staffs to a single track (e.g. for piano grand staff). - -## Tracks - -A new track can be started with the `\track "Track Long Name" "Track Short Name"` metadata. -Both names are optional and the short name is the one displayed before the track starts. -The long name can be used e.g. in your custom UI. -If the short name is not specified, the first 10 characters of the long name are used as short name.
-Be sure to finish the previous beat with a vertical bar `|` to start a new bar of a new track. - -{` -\\track "First Track" "frst" -1.1 2.1 3.1 4.1 | -\\track // new track -\\tuning A1 D2 A2 D3 G3 B3 E4 // tuning of new track (with 7 strings) -4.1 3.1 2.1 1.1 | -`} - -Additional track metadata can be specified in braces after the track information. - -### Track Color - -The data model holds information about the color of the track which might be used by user interfaces to visually differenciate them. - -The `color colorCode` can be used to define the color. Where colorCode can be [any supported color format](/docs/reference/settings/display/resources#colors) - -{` -\\track { color "#FF0000" } -1.1 2.1 3.1 4.1 -`} - -### System Layout - -The `systemsLayout` and `defaultSystemsLayout` allow configuring the system layout. See down below for details. - -### Playback Information - -* `solo` set the track to be played alone in the data model. -* `mute` set the track to be muted (not played) in the data model. -* `volume value` set the track volume, value can be 0-16 -* `balance value` set the track balance/pan, value can be 0-16 - -## Staves - -A new staff can be started with the `\staff` metadata. -In braces you can optionally define via the options `score` (for standard notation), `tab` (for guitar tablature), `slash` (for slash notation), `numbered` (for Jianpu / numbered notation) -whether the corresponding notation should be shown. -By default both notation systems are shown. - -{` -\\track "Piano with Grand Staff" "pno." - \\staff{score} \\tuning piano \\instrument acousticgrandpiano - c4 d4 e4 f4 | - \\staff{score} \\tuning piano \\clef F4 - c2 c2 c2 c2 | -\\track "Guitar" - \\staff{tabs} \\capo 5 - 1.2 3.2 0.1 1.1 -`} - -### Standard notation line count - -For the standard notation staff you can configure the number of lines shown by specifying the number after the keyword: - -{` -\\track - \\staff{score 3} - c4 d4 e4 f4 -`} - -## Hide Tuning - -To hide the tuning for a track add the `hide` keyword after the tuning. As of now tuning visibility is per-track not per-staff despite the tuning being on staff level. -It should be rather uncommon to have multiple different staves with different string tunings. - -{` -\\track "Track 1" - \\staff {tabs} - \\tuning A1 D2 A2 D3 G3 B3 E4 hide - 4.1 3.1 2.1 1.1 -`} - -## Automatic Bars - -The staff with the largest number of bars defines how long the overall song is. -There is no need to manually ensure that all staves have the correct number of bars. -AlphaTab will create missing empty bars automatically. - -{` -\\track "Piano with Grand Staff" "pno." - \\staff{score} \\tuning piano \\instrument acousticgrandpiano - c4 d4 e4 f4 | - \\staff{score} \\tuning piano \\clef F4 - c2 c2 c2 c2 | c2 c2 c2 c2 | c2 c2 c2 c2 | -\\track "Guitar" - \\staff{tabs} \\capo 5 - 1.2 3.2 0.1 1.1 | 1.2 3.2 0.1 1.1 -`} - -## System Layout - -The system layout, defines how many bars should be displayed per system (line). -The use of the system layout has to be enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). - -The system layout can be configured either on score or on track level via these two options. - -* `defaultSystemsLayout` - defines the number of bars to display unless specified differently. (default: 3) -* `systemsLayout` - defines the number of bars to display per system. (default: empty) - -The `score` level options are used in case multiple tracks are displayed, otherwise the `track` level information is used. - -{` -\\title "Single Track" -. -\\track { defaultSystemsLayout 3 systemsLayout 2 2 } - :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 -`} - -{` -\\title "Multi Track" -\\defaultSystemsLayout 2 -\\systemsLayout 1 1 -. -\\track { defaultSystemsLayout 1 systemsLayout 2 2 } - :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 -\\track { defaultSystemsLayout 4 systemsLayout 3 3 } - :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 -`} - -### Bar Scale - -When using `systemsLayoutMode: 'UseModelLayout'` with page view layout the individual bars can be scaled relatively. this scale can be specified with `\scale Value` - -{` -\\track { defaultSystemsLayout 3 } - \\scale 0.25 :1 c4 | \\scale 0.5 c4 | \\scale 0.25 c4 | - \\scale 0.5 c4 | \\scale 2 c4 | \\scale 0.5 c4 | - c4 | c4 -`} - - -### Bar Width - -When using `systemsLayoutMode: 'UseModelLayout'` with the horizontal layout the individual bars can be scaled absolutely. this scale can be specified with `\width Value` - -{` -\\track - \\width 100 :1 c4 | \\width 300 c4 | \\width 350 c4 -`} \ No newline at end of file diff --git a/sidebars.ts b/sidebars.ts index cb42a14..6d78829 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -143,16 +143,12 @@ const sidebars: SidebarsConfig = { alphaTex: { alphaTex: [ "alphatex/introduction", - "alphatex/metadata", - "alphatex/stylesheet", - "alphatex/notes", + "alphatex/structural-metadata", + "alphatex/score-metadata", + "alphatex/staff-metadata", "alphatex/bar-metadata", - "alphatex/tracks-staves", - "alphatex/beat-effects", - "alphatex/note-effects", - "alphatex/percussion", - "alphatex/lyrics", - "alphatex/sync-points", + "alphatex/beat-properties", + "alphatex/note-properties" ], }, showcase: [ From 417ca236f5ef731c24a7718ccb2a17dcfadb74d0 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Thu, 16 Oct 2025 14:05:58 +0900 Subject: [PATCH 03/15] docs: update on tags --- docs/alphatex/score-metadata.mdx | 353 ++++++-------------------- docs/alphatex/staff-metadata.mdx | 7 +- docs/alphatex/structural-metadata.mdx | 166 +++++++++++- docs/guides/formatting-templates.mdx | 11 + 4 files changed, 254 insertions(+), 283 deletions(-) diff --git a/docs/alphatex/score-metadata.mdx b/docs/alphatex/score-metadata.mdx index f8bfe9c..cfa958b 100644 --- a/docs/alphatex/score-metadata.mdx +++ b/docs/alphatex/score-metadata.mdx @@ -1,7 +1,13 @@ --- -title: Metadata +title: Score Metadata --- +This page lists all metadata tags which affect the overall song. + +It is recommended that these tags are specified at the very beginning of the file. + + + import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; import { SinceBadge } from '@site/src/components/SinceBadge'; @@ -13,234 +19,43 @@ of the metadata. Some of the metadata tags can also be specified when starting a new staff or track. Please refer to the [Tracks and Staves](/docs/alphatex/tracks-staves) or details on how to start new tracks and staves. -{` -// Song information (only at the beginning) - \\title "Song Title" - \\subtitle Subtitle - \\artist Artist - \\album 'My Album' - \\words Daniel - \\music alphaTab - \\copyright Daniel - \\instructions "This is an example.\\nWith instructions." - \\notices "Additional notes\\nEmbedded in the data model." - \\tab "Daniel" - // Tempo in BPM (label is optional) - \\tempo 200 "Tempo Label" -// Track and Staff Settings (can be used after \\track and \\staff) - // Instrument as General MIDI number or name - \\instrument 30 - // String tuning starting at the most bottom string - \\tuning e5 b4 g4 d4 a3 e3 -// end of metadata -. -`} +## Song Information -Strings can contain escape sequences: `\n`, `\r`, `\t`, `\\`, `\"`, `\'`. +There is a range of metadata tags which define the general information on the music piece like the title and artist. - its possible to also change the template and alignment of the song information -via `\tagname value template alignment`. +They have the following values: -The `template` is a string which can have following placeholders which are then replaced with the respective info of the song: +* `value` The exact value for the property (e.g. the song title) (required, string) +* `template` A template what text to display on the music sheet. (optional, string) +* `textAlign` The text alignment of the text to display on the music sheet. (optional, oneOf: `left`, `center`, `right`) -* `%TITLE%` -* `%SUBTITLE%` -* `%ARTIST%` -* `%ALBUM%` -* `%WORDS%` -* `%WORDSMUSIC%` -* `%MUSIC%` -* `%TABBER%` -* `%COPYRIGHT%` +See [Song Details Formatting](/docs/guides/formatting-templates) for more details on the template and text alignment. -The `alignment` is one of the following values: +Properties marked with a `*` have no `value` as they are rather computed values. -* `left` -* `center` -* `right` +* `\title` The title of the song +* `\subtitle`The subtitle of the song +* `\artist` The artist of the song +* `\album` The album of the song +* `\words` The author of the song lyrics +* `\music` The author of the music. +* `\wordsandmusic`* If words and music author are the same, they are combined into one element. +* `\copyright` The owner of the copyright of this song. +* `\copyright2`* The second copyright information. Typically used for a text like `All rights reserved`. Use the template to define the text. +* `\instructions` Additional textual instructions attached to the music sheet (not displayed). +* `\notices` General notices attached to the music sheet (not displayed). +* `\tab` The transcriber of the music sheet {` \\title "Song Title" "Title: %TITLE%" left \\artist Artist "Written by %ARTIST%" right -. `} -## Instrument -As indicated above, the instrument can be changed via the `\instrument` metadata. -Refer to the table below for all possible values and names. The list represents the General MIDI instrument list. -You can either leave out the spaces or put the names into quotes e.g. `AcousticBass` vs `"Acoustic Bass"`. - -export function GeneralMidiList() { - const items = [ - 'Acoustic Grand Piano', - 'Bright Grand Piano', - 'Electric Grand Piano', - 'Honky tonk Piano', - 'Electric Piano 1', - 'Electric Piano 2', - 'Harpsichord', - 'Clavinet', - 'Celesta', - 'Glockenspiel', - 'Musicbox', - 'Vibraphone', - 'Marimba', - 'Xylophone', - 'Tubularbells', - 'Dulcimer', - 'Drawbar Organ', - 'Percussive Organ', - 'Rock Organ', - 'Church Organ', - 'Reed Organ', - 'Accordion', - 'Harmonica', - 'Tango Accordion', - 'Acoustic Guitar Nylon', - 'Acoustic Guitar Steel', - 'Electric Guitar Jazz', - 'Electric Guitar Clean', - 'Electric Guitar Muted', - 'Overdriven Guitar', - 'Distortion Guitar', - 'Guitar Harmonics', - 'Acoustic Bass', - 'Electric Bass Finger', - 'Electric Bass Pick', - 'Fretless Bass', - 'Slap Bass 1', - 'Slap Bass 2', - 'Synth Bass 1', - 'Synth Bass 2', - 'Violin', - 'Viola', - 'Cello', - 'Contrabass', - 'Tremolo Strings', - 'Pizzicato Strings', - 'Orchestral Harp', - 'Timpani', - 'String Ensemble 1', - 'String Ensemble 2', - 'Synth Strings 1', - 'Synth Strings 2', - 'Choir Aahs', - 'Voice Oohs', - 'Synth Voice', - 'Orchestra Hit', - 'Trumpet', - 'Trombone', - 'Tuba', - 'Muted Trumpet', - 'French Horn', - 'Brass Section', - 'Synth Brass 1', - 'Synth Brass 2', - 'Soprano Sax', - 'Alto Sax', - 'Tenor Sax', - 'Baritone Sax', - 'Oboe', - 'English Horn', - 'Bassoon', - 'Clarinet', - 'Piccolo', - 'Flute', - 'Recorder', - 'Pan Flute', - 'Blown bottle', - 'Shakuhachi', - 'Whistle', - 'Ocarina', - 'Lead 1 Square', - 'Lead 2 Sawtooth', - 'Lead 3 Calliope', - 'Lead 4 Chiff', - 'Lead 5 Charang', - 'Lead 6 Voice', - 'Lead 7 Fifths', - 'Lead 8 Bass and Lead', - 'Pad 1 newage', - 'Pad 2 warm', - 'Pad 3 polysynth', - 'Pad 4 choir', - 'Pad 5 bowed', - 'Pad 6 metallic', - 'Pad 7 halo', - 'Pad 8 sweep', - 'Fx 1 rain', - 'Fx 2 soundtrack', - 'Fx 3 crystal', - 'Fx 4 atmosphere', - 'Fx 5 brightness', - 'Fx 6 goblins', - 'Fx 7 echoes', - 'Fx 8 scifi', - 'Sitar', - 'Banjo', - 'Shamisen', - 'Koto', - 'Kalimba', - 'Bag pipe', - 'Fiddle', - 'Shanai', - 'Tinkle Bell', - 'Agogo', - 'Steel Drums', - 'Woodblock', - 'Taiko Drum', - 'Melodic Tom', - 'Synth Drum', - 'Reverse Cymbal', - 'Guitar Fret Noise', - 'Breath Noise', - 'Seashore', - 'Bird Tweet', - 'Telephone Ring', - 'Helicopter', - 'Applause', - 'Gunshot' - ]; - return ( - - {items.map((x,i) => { - return ( - {i} - {x} - ); - })} - - ) -} - -
- - - - - - - - -
NumberName
-
- -## Tuning - -The tuning of the instrument is defined by the `\tuning` tag. For stringed instruments like the Guitar, -each tuning value defines one string. The format of the tuning value is `{note}{octave}`. -`{note}` is one value of the following values: C, C# or Db, D, D# or Eb, E, F, F# or Gb, G, G# or Ab, A, A# or Bb, B. -`{octave}` is a number defining the octave. - -For example, a standard guitar tuning is `\tuning E4 B3 G3 D3 A2 E2`. A 5 string bass would be `\tuning G2 D2 A1 E1 B0`. - -For non-stringed instruments, the values `piano`, `none` or `voice` can be used depending on preference. - -If `\instrument` is specified without `\tuning`, alphaTab will try to make a guess and apply the right default tuning. - -## Stylesheet - -There are various [stylesheet](/docs/reference/score) related options which can be specified in alphaTex. +## System Layout + +The `\defaultsystemslayout` and `\systemslayout` allow configuring the system layout for all tracks. +The system layout, defines how many bars should be displayed per system (line) if enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). +See [System Layout](./structural-metadata.mdx#system-layout) for more details. ## Show/Hide Dynamics @@ -259,6 +74,47 @@ C4 D4 E4 F4 C4 D4 E4 F4 `} +## System Sign Separator + +The `\useSystemSignSeparator` option configures whether a system sign separator should be added (in case multiple tracks are shown). + +{` +\\useSystemSignSeparator +\\defaultSystemsLayout 2 +. +\\track "T1" +:1 C4 | C4 | C4 +\\track "T2" +:1 C4 | C4 | C4 +`} + +## Multi-Bar Rests + +To configure whether [multibar rests](/docs/showcase/layouts.mdx#multi-bar-rests) should be enabled use: + +* `\multiBarRest` - On top level for configuring the use on multi-track renderings +* `\track { multiBarRest }` - On track level for single track renderings + +{` +\\title "Multi Track" +\\multiBarRest +. +\\track "Piano 1" "pno1" + \\staff {score} + C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 + +\\track "Piano 2" "pno1" + \\staff {score} + C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | r | +`} + +{` +\\title "Single Track" +. +\\track "Piano 1" "pno1" { multiBarRest } + \\staff {score} + C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 +`} ## Brackets and Braces @@ -297,38 +153,6 @@ The `\useSystemSignSeparator` option configures whether a system sign separator 0.3.4 2.3.4 5.3.4 7.3.4 `} -## System Sign Separator - -The `\useSystemSignSeparator` option configures whether a system sign separator should be added (in case multiple tracks are shown). - -{` -\\useSystemSignSeparator -\\defaultSystemsLayout 2 -. -\\track "T1" -:1 C4 | C4 | C4 -\\track "T2" -:1 C4 | C4 | C4 -`} - -## Show Tuning (per track) - -For every track it can be configured whether the tuning should be shown via the `hide` option on the tuning. - -{` -\\track \\staff \\tuning E4 B3 G3 D3 A2 E2 - 3.3.1 -\\track \\staff \\tuning D4 A3 F3 C3 G2 D2 - 3.3.1 -`} - -{` -\\track \\staff \\tuning E4 B3 G3 D3 A2 E2 hide - 3.3.1 -\\track \\staff \\tuning D4 A3 F3 C3 G2 D2 - 3.3.1 -`} - ## Track Names To configure the mode how to show [track names](/docs/showcase/general.mdx#track-names) use: @@ -350,33 +174,4 @@ To configure the mode how to show [track names](/docs/showcase/general.mdx#track \\track "Piano 1" "pno1" { defaultsystemslayout 3 } \\staff {score} C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | -`} - -## Multi-Bar Rests - -To configure whether [multibar rests](/docs/showcase/layouts.mdx#multi-bar-rests) should be enabled use: - -* `\multiBarRest` - On top level for configuring the use on multi-track renderings -* `\track { multiBarRest }` - On track level for single track renderings - -{` -\\title "Multi Track" -\\multiBarRest -. -\\track "Piano 1" "pno1" - \\staff {score} - C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 - -\\track "Piano 2" "pno1" - \\staff {score} - C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | r | -`} - -{` -\\title "Single Track" -. -\\track "Piano 1" "pno1" { multiBarRest } - \\staff {score} - C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 -`} - +`} \ No newline at end of file diff --git a/docs/alphatex/staff-metadata.mdx b/docs/alphatex/staff-metadata.mdx index fdb6ec5..aaff365 100644 --- a/docs/alphatex/staff-metadata.mdx +++ b/docs/alphatex/staff-metadata.mdx @@ -26,17 +26,20 @@ Special identifiers: The available properties are: * `hide` - Hides the tuning from being displayed in the displayed tuning list. +* `label "Label"` - Defines an additional textual label for the tuning. {` \\track "Track 1" \\staff {tabs} - \\tuning (A1 D2 A2 D3 G3 B3 E4) { hide } + \\tuning (A1 D2 A2 D3 G3 B3 E4) { hide label "Special Guitar Tuning" } 4.1 3.1 2.1 1.1 \\track "Track 2" \\tuning piano C4 D4 E4 F4 `} +If `instrument` is specified on the staff without a `\tuning`, alphaTab will try to make a guess and apply the right default tuning. + ### `\chord` The `\chord` metadata allows to define contents of a chord, making up the "chord diagram" which can be shown. @@ -99,6 +102,8 @@ The values are: There are no properties on this metadata. +### `\instrument` + ### `\lyrics` The `\lyrics` metadata allows to define the lyrics text for the whole staff. diff --git a/docs/alphatex/structural-metadata.mdx b/docs/alphatex/structural-metadata.mdx index d6ef84a..9ea8cbd 100644 --- a/docs/alphatex/structural-metadata.mdx +++ b/docs/alphatex/structural-metadata.mdx @@ -84,11 +84,11 @@ The `score` level options are used in case multiple tracks are displayed, otherw {` \\title "Multi Track" \\defaultSystemsLayout 2 -\\systemsLayout 1 1 +\\systemsLayout (1 1) . -\\track { defaultSystemsLayout 1 systemsLayout 2 2 } +\\track { defaultSystemsLayout 1 systemsLayout (2 2) } :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 -\\track { defaultSystemsLayout 4 systemsLayout 3 3 } +\\track { defaultSystemsLayout 4 systemsLayout (3 3) } :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 `} @@ -100,8 +100,168 @@ Following properties allow specifying details on the playback of the track. **Syntax:** `mute` - set the track to be muted (not played) in the data model. (no values) **Syntax:** `volume value` - set the track volume, value can be a number in the range of 0-16 **Syntax:** `volume balance` - set the track balance, value can be a number in the range of 0-16 (8 is centered) + +### Instrument + **Syntax:** `instrument nameOrNumber` - set the midi instrument for this track. This can either be a General MIDI number or instrument name. +Refer to the following list of names you can use. + +export function GeneralMidiList() { + const items = [ + 'Acoustic Grand Piano', + 'Bright Grand Piano', + 'Electric Grand Piano', + 'Honky tonk Piano', + 'Electric Piano 1', + 'Electric Piano 2', + 'Harpsichord', + 'Clavinet', + 'Celesta', + 'Glockenspiel', + 'Musicbox', + 'Vibraphone', + 'Marimba', + 'Xylophone', + 'Tubularbells', + 'Dulcimer', + 'Drawbar Organ', + 'Percussive Organ', + 'Rock Organ', + 'Church Organ', + 'Reed Organ', + 'Accordion', + 'Harmonica', + 'Tango Accordion', + 'Acoustic Guitar Nylon', + 'Acoustic Guitar Steel', + 'Electric Guitar Jazz', + 'Electric Guitar Clean', + 'Electric Guitar Muted', + 'Overdriven Guitar', + 'Distortion Guitar', + 'Guitar Harmonics', + 'Acoustic Bass', + 'Electric Bass Finger', + 'Electric Bass Pick', + 'Fretless Bass', + 'Slap Bass 1', + 'Slap Bass 2', + 'Synth Bass 1', + 'Synth Bass 2', + 'Violin', + 'Viola', + 'Cello', + 'Contrabass', + 'Tremolo Strings', + 'Pizzicato Strings', + 'Orchestral Harp', + 'Timpani', + 'String Ensemble 1', + 'String Ensemble 2', + 'Synth Strings 1', + 'Synth Strings 2', + 'Choir Aahs', + 'Voice Oohs', + 'Synth Voice', + 'Orchestra Hit', + 'Trumpet', + 'Trombone', + 'Tuba', + 'Muted Trumpet', + 'French Horn', + 'Brass Section', + 'Synth Brass 1', + 'Synth Brass 2', + 'Soprano Sax', + 'Alto Sax', + 'Tenor Sax', + 'Baritone Sax', + 'Oboe', + 'English Horn', + 'Bassoon', + 'Clarinet', + 'Piccolo', + 'Flute', + 'Recorder', + 'Pan Flute', + 'Blown bottle', + 'Shakuhachi', + 'Whistle', + 'Ocarina', + 'Lead 1 Square', + 'Lead 2 Sawtooth', + 'Lead 3 Calliope', + 'Lead 4 Chiff', + 'Lead 5 Charang', + 'Lead 6 Voice', + 'Lead 7 Fifths', + 'Lead 8 Bass and Lead', + 'Pad 1 newage', + 'Pad 2 warm', + 'Pad 3 polysynth', + 'Pad 4 choir', + 'Pad 5 bowed', + 'Pad 6 metallic', + 'Pad 7 halo', + 'Pad 8 sweep', + 'Fx 1 rain', + 'Fx 2 soundtrack', + 'Fx 3 crystal', + 'Fx 4 atmosphere', + 'Fx 5 brightness', + 'Fx 6 goblins', + 'Fx 7 echoes', + 'Fx 8 scifi', + 'Sitar', + 'Banjo', + 'Shamisen', + 'Koto', + 'Kalimba', + 'Bag pipe', + 'Fiddle', + 'Shanai', + 'Tinkle Bell', + 'Agogo', + 'Steel Drums', + 'Woodblock', + 'Taiko Drum', + 'Melodic Tom', + 'Synth Drum', + 'Reverse Cymbal', + 'Guitar Fret Noise', + 'Breath Noise', + 'Seashore', + 'Bird Tweet', + 'Telephone Ring', + 'Helicopter', + 'Applause', + 'Gunshot' + ]; + return ( + + {items.map((x,i) => { + return ( + {i} + {x} + ); + })} + + ) +} + +
+ + + + + + + + +
NumberName
+
+ ## `\staff` A new staff can be started with the `\staff` metadata. diff --git a/docs/guides/formatting-templates.mdx b/docs/guides/formatting-templates.mdx index b2731a2..b1f3849 100644 --- a/docs/guides/formatting-templates.mdx +++ b/docs/guides/formatting-templates.mdx @@ -36,3 +36,14 @@ The most important parts to know: * The [`colors`](/docs/reference/types/model/elementstyle/colors) on `alphaTab.model.ScoreStyle` is used to adjust the color of the header and footer elements (and others). * The [`alphaTab.model.ScoreSubElement`](/docs/reference/types/model/scoresubelement) defines the possible list of elements to be styled (not all are song info related) +The `template` is a string which can have following placeholders which are then replaced with the respective info of the song: + +* `%TITLE%` +* `%SUBTITLE%` +* `%ARTIST%` +* `%ALBUM%` +* `%WORDS%` +* `%WORDSMUSIC%` +* `%MUSIC%` +* `%TABBER%` +* `%COPYRIGHT%` From b3247ed111cc1fd5bc866d910d61b7fd62f303f7 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Fri, 17 Oct 2025 01:05:31 +0900 Subject: [PATCH 04/15] docs: score metadata --- docs/alphatex/document-structure.mdx | 275 ++++++++++++++ docs/alphatex/introduction.mdx | 329 ----------------- docs/alphatex/score-metadata.mdx | 496 ++++++++++++++++++++++---- docs/alphatex/structural-metadata.mdx | 402 +++++++++++++++++---- docs/alphatex/syntax.mdx | 104 ++++++ sidebars.ts | 2 + src/hooks.ts | 11 +- 7 files changed, 1138 insertions(+), 481 deletions(-) create mode 100644 docs/alphatex/document-structure.mdx create mode 100644 docs/alphatex/syntax.mdx diff --git a/docs/alphatex/document-structure.mdx b/docs/alphatex/document-structure.mdx new file mode 100644 index 0000000..977d740 --- /dev/null +++ b/docs/alphatex/document-structure.mdx @@ -0,0 +1,275 @@ +--- +title: Document Structure +--- + +import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; + +An alphaTex file is simply a list of bars and every bar has metadata and contents. For organizational reasons we commend +that metadata tags describing the general song information are added to the start of the file, and external media synchronization points are +added on the end of the file: + +```title=General File Structure +/* Song Metadata */ +/* Song Contents */ +/* Sync Points */ +``` + +:::note +Before alphaTex 1.7 the 3 sections needed to be separated by a `.` This was improved in 1.7 and the separation dots should now be omitted. + +```title=Pre 1.7 General File Structure +/* Song Metadata */ +. +/* Song Contents */ +. +/* Sync Points */ +``` +::: + +## Bars + +Bars (aka. measures) are starting with an optional list of metadata tags followed by the beats contained +in the bar. See [Bar Metadata](./bar-metadata.mdx) for details on the tags which can be applied here. + +A bar is completed by a pipe `|` symbol + +{` +// bar 1 metadata tags +\\clef G2 \\ks + // bar 1 contents + Cb C4 +| +// bar 2 metadata tags +\\ks A + // bar 2 contents + C4 +`} + +## Beats + +Beats group a number of notes played at the same time. The general parts of a beat are + +* `duration-change content duration effects multiplier` + + +{` +:4 + C4 + (C4 D4).8 + (C4 D4) { f } + C4.16 * 2 + C4.4 +`} + +### Duration change (optional) + +A duration change allows easy changing of the duration for all following beats. The syntax is: + +`:Duration` where `Duration` is a number describing the new duration: +* `:-4` a Quadruple Whole Note +* `:-2` a Double Note +* `:1` a Whole Note +* `:2` a Half Note +* `:4` a Quarter Note +* `:8` a 8th Note +* `:16` a 16th Note +* `:32` a 32th Note +* `:64` a 64th Note +* `:128` a 128th Note +* `:256` a 256th Note + +Optionally you can specify some properties afterwards the duration to specify tuplets. + +`:4 {tu 3 2}` + +See [Tuplet Ranges](./beat-properties.mdx#TupletRanges) for more details. + +{` +:16 // 16th notes from here + 3.3 + 4.3 + 5.3 + 6.3 +:4 { tu 3 } // quarter notes triplets + 3.3 + 4.3 + 5.3 +:8 + 3.3 * 3 +`} + +### Beat Content (required) + +The most crucial and part is to describe the contents of a beat which can be one of these options: + +* A rest +* Multiple notes played (grouped by parenthesis) +* A single note played + +A rest is simply indicated by specifying an `r`: + +{` +:4 r r r r +`} + +Multiple [Notes](#Notes) can be grouped with parenthesis `()`. Similar to the value lists, you can also just specify +one note and omit the parenthesis. + +{` +:4 + C4 // single note on beat + (C4 E4) // multiple notes with parenthesis +`} + +### Beat Duration (optional) + +Another way of specifying beat duration is to append them after the beat content as `. duration`. +Historically the new duration is also remembered for the next beat. Tuplets specified as beat effects will not be remembered. +{` +C4 .4 +C4 .8 +C4 // .8 remembered +C4 .2 +`} + +### Beat Effects (optional) + +Beat effects can be applied as properties after the beat. See [Beat Properties](./beat-properties.mdx) to learn about all available effects. + +{` +:4 + (C4 D4) { tp 8 } + C4 { f } + r.2 {txt "Pause here"} +`} + +### Beat Multiplier (optional) + +This feature allows repeating the same beat multiple times by "multiplying" them. +Simply specify `* times` after the beat with `times` being the number of copies you want. + +{` +:4 + // 4 times the same A-chord + (0.1 2.2 2.3 2.4 0.5) * 4 +`} + +## Notes + +Depending on the instrument played you can have one of 3 kinds of notes in your bars. +Mixing is not possible so be sure to specify all notes consistently: + +* Fretted and Stringed instruments like guitars have their notes as `fret.string` +* Percussion/Drums have their notes as articulation names. +* Other pitched instruments have their notes as note names. + +After each note the note effects can optionally be specified as properties: `note-value {note-properties}`. + +:::info +AlphaTab tries to detect which kind of staff you are writing based on the first note. +::: + +### Fretted Notes + +If the current staff is a stringed instrument (`\tuning` or `\instrument` specified accordingly), +notes are expressed as the fret and string the note is played on. The final note height is calculated. + +{` +:1 + (12.1 {sib} 14.2 {sib b (0 4)}) + 12.1 { v } +`} + +### Percussion / Drum Notes + +On percussion instruments, you specify the articulation which should be played as note. +The percussion can be a quoted string or an identifier (name without quotes). + +All details are described over at the [Percussion](./percussion.mdx) page. + +{` +\\instrument percussion +\\articulation defaults +:4 + (KickHit RideBell) + r + KickHit + KickHit +`} + +### Pitched notes + +Pitched notes are expressed in a combined name containing: + +* The tone (`C`,`D`,`E`,`F`,`G`,`A`,`B`,`C`) +* The accidental (`#`, `b`, `bb`, `x`, `##`,..; see [Accidentals](./notes.mdx#accidentals) for details on accidental handling) +* The octave (a number) + +{` +C4 +C#4 +Ebb4 +Dx5 +`} + +### Note Effects + +See [Note Properties](./note-properties.mdx) for a list of all supported effects for notes. + + +{` +:2 + 3.3 { b (0 4) } // note bend + ( + 3.3 { v } // Vibrato + 3.2 { sib } // slide into from below + ) +`} + +If you only have 1 note in the beat, you can specify both note and beat effects in the same property list. + +{` +:2 + // combined effects + 3.3 { + b (0 4) // note effect + txt "Bend" // beat effect + } + // separated effects + 3.3 + { b (0 4) } // note effect + { txt "Bend" } // beat effect +`} + +## Tracks, Staves and Voices + +A song might consist of multiple tracks and staves holding the song data. There are special metadata tags which mark the start +of such new structures. See [Structural Metadata](./structural-metadata.mdx) for more details. + +{` +\\track "Track 1" + \\staff {score} // first staff + \\voice // first voice + C4 D4 E4 F4 | C4 D4 E4 F4 + \\voice // second voice + C5 D5 E5 F5 | C5 D5 E5 F5 + \\staff {tabs} // second staff + 3.5 5.5 7.5 8.5 | 3.5 5.5 7.5 8.5 +\\track "Track 2" + 1.2 3.2 5.2 6.2 +`} + +You only need to specify these structural tags to start a new element. A first initial element is started implicitly. + +{` +// first track + // first staff + // first voice + C4 D4 E4 F4 | C4 D4 E4 F4 + \\voice // second voice + C5 D5 E5 F5 | C5 D5 E5 F5 + \\staff {tabs} // second staff + 3.5 5.5 7.5 8.5 | 3.5 5.5 7.5 8.5 +\\track "Track 2" + 1.2 3.2 5.2 6.2 +`} \ No newline at end of file diff --git a/docs/alphatex/introduction.mdx b/docs/alphatex/introduction.mdx index 5d645be..61bf817 100644 --- a/docs/alphatex/introduction.mdx +++ b/docs/alphatex/introduction.mdx @@ -30,332 +30,3 @@ Here is an example score fully rendered using alphaTex. 15.1.8 :16 14.1{tu 3} 15.1{tu 3} 14.1{tu 3} :8 17.2 15.1 14.1 :16 12.1{tu 3} 14.1{tu 3} 12.1{tu 3} :8 15.2 14.2 | 12.2 14.3 12.3 15.2 :32 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} 14.2{h} 15.2{h} `} - -## General Syntax - -If you compare alphaTex to programming or scripting languages, you will find similar constructs. alphaTex (as the name implies) has borrowed -some aspects from LaTeX, a well known language for writing documents. As alphaTex evolved it came up with various own syntax constructs described here. - -When storing alphaTex to files, we recommend using the file extension `.atex`. - -### Comments - -Comments are supported in C-style comments via `// Single Line` and `/* Multi Line */`. You can use them anywhere within an alphaTex file -to further annotate your written document for structural or organizational purposes. - -### Strings - -Textual values are expressed as quoted strings similar to most programming languages. Both single and double quotes are supported. - -* `"Double Quoted String"` -* `'Single Quoted String'` - -Additionally following escape sequences are supported: - -* `\n` Newline -* `\r` Carriage Return -* `\t` Tab -* `\uXXXX` Unicode Character where XXXX is a 4 hex-digit number. -* `\\` A backslash -* `\'` or `\"` a quote character - -### Numbers - -alphaTex supports integer and decimal numbers. Decimal numbers are only allowed in some dedicated places to avoid overlaps with some other syntax constructs. - -Examples: - -* `10` -* `-10` -* `0.5` -* `-4.5` - -### Value Lists - -At various places value lists are used to describe items like time signatures or bend points. -Value lists should be wrapped with parenthesis `(values)` if there are multiple values. If there is only a single value, the parenthesis can be omitted. - -The individual values can be: - -* Integer numbers: `3`, `-10` -* Decimal Numbers: `3.3`, `-10.5` -* Strings: `"Hello"`, `'Hello'` -* Special identifiers: `true`, `hide`, `x` - - -Basic Examples - -* `( 1 2 3 )` A list of numbers -* `("Test" 3 hide)` A list of mixed type values - -Real examples - -* `\ts (3 4)` A 3/4 time signature (specified on bar level) -* `12.2 { b (0 4 0) }` A note bend describing a full note bend and release -* `\title ("Song Title" "Title: %TITLE%" left)` A song title shown as `Title: Song Title` left aligned. - -### Properties - -Properties are a list of key-valuelist pairs describing additional optional aspects of elements. -They are used to add effects to notes and beats, what notations should be visible in a staff and more. - -Properties are always wrapped into curly braces. A property starts with an identifier describing the property, optionally followed by its values as value list. - -Examples: -* `\track "Track Name" { color "#FF0000"}` -* `\staff {score}` -* `C4 {b (0 4) v txt "Bend with Vibrato"}` - -Property identifiers are case-insensitive. - -### Metadata Tags - -These are likely the most similar construct to LaTeX. Metadata are used to describe various elements within the data model. - -The main syntax of metadata tags is: `\tag values {properties}`. -Both the `values` and `{properties}` are optional from a syntax perspective. Depending on the `tag` values might be expected to be specified. - -Examples: - -* `\title "Song Title"` -* `\track "Track Name" {color '#FF0000'}` -* `\ts (3 4)` - -Metadata tags identifiers are case-insensitive. - -#### Metadata tag values - -Metadata tags might have one or multiple values. The exact values supported (required or optional) depend on the tag. -See [Value Lists](#ValueLists) above for more details. - -#### Metadata tag properties - -Metadata tags might have one or multiple properties. The exact values supported depend on the tag. -See [Properties](#Properties) above for more details. - -## General Song Structure - -An alphaTex file is simply a list of bars and every bar has metadata and contents. For organizational reasons we commend -that metadata tags describing the general song information are added to the start of the file, and external media synchronization points are -added on the end of the file: - -```title=General File Structure -/* Song Metadata */ -/* Song Contents */ -/* Sync Points */ -``` - -:::note -Before alphaTex 1.7 there was a need to separate the 3 sections with a dot `.`. This was improved in 1.7 and the separation dots should now be omitted. - -```title=Pre 1.7 General File Structure -/* Song Metadata */ -. -/* Song Contents */ -. -/* Sync Points */ -``` -::: - -### Bars - -Bars (aka. measures) are starting with an optional list of metadata tags followed by the beats contained -in the bar. See [Bar Metadata](./bar-metadata.mdx) for details on the tags which can be applied here. - -{` -\\clef G2 \\ks Cb C4 | \\ks A C4 -`} - -### Tracks, Staves and Voices - -A song might consist of multiple tracks and staves holding the song data. There are special metadata tags which mark the start -of such new structures. See [Tracks and Staves](./tracks-staves.mdx) for more details. - -{` -\\track "Track 1" - \\staff {score} // first staff - \\voice // first voice - C4 D4 E4 F4 | C4 D4 E4 F4 - \\voice // second voice - C5 D5 E5 F5 | C5 D5 E5 F5 - \\staff {tabs} // second staff - 3.5 5.5 7.5 8.5 | 3.5 5.5 7.5 8.5 -\\track "Track 2" - 1.2 3.2 5.2 6.2 -`} - - -You only need to specify these structural tags to start a new element. A first initial element is started implicitly. - -{` -// first track - // first staff - // first voice - C4 D4 E4 F4 | C4 D4 E4 F4 - \\voice // second voice - C5 D5 E5 F5 | C5 D5 E5 F5 - \\staff {tabs} // second staff - 3.5 5.5 7.5 8.5 | 3.5 5.5 7.5 8.5 -\\track "Track 2" - 1.2 3.2 5.2 6.2 -`} - -### Beats - -Beats group a number of notes played at the same time. The general parts of a beat are - -* `duration-change content duration effects multiplier` - -#### Duration change (optional) - -A duration change allows easy changing of the duration for all following beats. The syntax is: - -`:Duration` where `Duration` is a number describing the new duration: -* `:-4` a Quadruple Whole Note -* `:-2` a Double Note -* `:1` a Whole Note -* `:2` a Half Note -* `:4` a Quarter Note -* `:8` a 8th Note -* `:16` a 16th Note -* `:32` a 32th Note -* `:64` a 64th Note -* `:128` a 128th Note -* `:256` a 256th Note - -Optionally you can specify some properties afterwards the duration to specify tuplets. - -`:4 {tu 3 2}` - -See [Tuplet Ranges](./beat-effects.mdx#TupletRanges) for more details. - -#### Beat Content (required) - -The most crucial and part is to describe the contents of a beat which can be one of these options: - -* A rest -* Multiple notes played (grouped by parenthesis) -* A single note played - -A rest is simply indicated by specifying an `r`: - -{` -:4 r r r r -`} - -Multiple [Notes](#Notes) can be grouped with parenthesis `()`. Similar to the value lists, you can also just specify -one note and omit the parenthesis. - -{` -:4 - C4 // single note on beat - (C4 E4) // multiple notes with parenthesis -`} - -#### Beat Duration (optional) - -Another way of specifying beat duration is to append them after the beat content as `. duration`. -Historically the new duration is also remembered for the next beat. Tuplets specified as beat effects will not be remembered. -{` -C4 .4 -C4 .8 -C4 // .8 remembered -C4 .2 -`} - -#### Beat Effects (optional) - -Beat effects can be applied as properties after the beat. See [Beat Effects](./beat-effects.mdx) to learn about all available effects. - -{` -:4 - (C4 D4) { tp 8 } - C4 { f } - r.2 {txt "Pause here"} -`} - -#### Beat Multiplier (optional) - -This feature allows "repeating" the same beat multiple times by "multiplying" them. -Simply specify `* times` after the beat with `times` being the number of copies you want. - -{` -:4 - // 4 times the same A-chord - (0.1 2.2 2.3 2.4 0.5) * 4 -`} - -### Notes - -All previous elements are useless, if we cannot specify any notes to be played in the song. -Depending on the instrument played you can have one of 3 kinds of notes in your bars. -Mixing is not possible so be sure to specify all notes consistently: - -* Fretted and Stringed instruments like guitars have their notes as `fret.string` -* Percussion/Drums have their notes as articulation names. -* Other pitched instruments have their notes as note names. - -After each note the note effects can optionally be specified as properties: `note-value {note-properties}`. - -If you only have 1 note in the beat, you can specify both note and beat effects in the same property list. - -{` -:2 - // combined effects - 3.3 { - b (0 4) // note effect - txt "Bend" // beat effect - } - // separated effects - 3.3 - { b (0 4) } // note effect - { txt "Bend" } // beat effect -`} - -:::info -AlphaTab tries to detect which kind of staff you are writing based on the first note. -::: - -#### Fretted Notes - -If the current staff is a stringed instrument (`\tuning` or `\instrument` specified accordingly), -notes are expressed as the fret and string the note is played on. The final note height is calculated. - -{` -:1 - (12.1 {sib} 14.2 {sib b (0 4)}) - 12.1 { v } -`} - -#### Percussion / Drum Notes - -On percussion instruments, you specify the articulation which should be played as note. -The percussion can be a quoted string or an identifier (name without quotes). - -All details are described over at the [Percussion](./percussion.mdx) page. - -{` -\\instrument percussion -\\articulation defaults -:4 - (KickHit RideBell) - r - KickHit - KickHit -`} - -#### Pitched notes - -Pitched notes are expressed in a combined name containing: - -* The tone (`C`,`D`,`E`,`F`,`G`,`A`,`B`,`C`) -* The accidental (`#`, `b`, `bb`, `x`, `##`,..; see [Accidentals](./notes.mdx#accidentals) for details on accidental handling) -* The octave (a number) - -{` -C4 -C#4 -Ebb4 -Dx5 -`} - diff --git a/docs/alphatex/score-metadata.mdx b/docs/alphatex/score-metadata.mdx index cfa958b..b3a0c3f 100644 --- a/docs/alphatex/score-metadata.mdx +++ b/docs/alphatex/score-metadata.mdx @@ -2,103 +2,404 @@ title: Score Metadata --- +import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; +import { SinceBadge } from '@site/src/components/SinceBadge'; + This page lists all metadata tags which affect the overall song. It is recommended that these tags are specified at the very beginning of the file. +## `\title` +```plain title="Tag Syntax" +\title value +\title (value template textAlign) +``` +**Description:** Sets the title of the song in the data model. -import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; -import { SinceBadge } from '@site/src/components/SinceBadge'; +**Values:** -Metadata is specified using `\tagname value` at the beginning of the score. -It can be used to specify global information like title, tempo or track tuning. -Metadata is optional, but if specified, it must be followed by a dot to indicate the end -of the metadata. +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The title of the song | `string` | yes | +| template | The text template used to render the title | `string` | no | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | -Some of the metadata tags can also be specified when starting a new staff or track. -Please refer to the [Tracks and Staves](/docs/alphatex/tracks-staves) or details on how to start new tracks and staves. +**Example** -## Song Information +{` +\\title ("Song Title" "Title: %TITLE%" left) +C4 +`} -There is a range of metadata tags which define the general information on the music piece like the title and artist. +## `\subtitle` -They have the following values: +```plain title="Tag Syntax" +\subtitle value +\subtitle (value template textAlign) +``` +**Description:** Sets the subtitle of the song in the data model. -* `value` The exact value for the property (e.g. the song title) (required, string) -* `template` A template what text to display on the music sheet. (optional, string) -* `textAlign` The text alignment of the text to display on the music sheet. (optional, oneOf: `left`, `center`, `right`) +**Values:** -See [Song Details Formatting](/docs/guides/formatting-templates) for more details on the template and text alignment. +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The subtitle of the song | `string` | yes | +| template | The text template used to render the subtitle | `string` | no | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | -Properties marked with a `*` have no `value` as they are rather computed values. +**Example** -* `\title` The title of the song -* `\subtitle`The subtitle of the song -* `\artist` The artist of the song -* `\album` The album of the song -* `\words` The author of the song lyrics -* `\music` The author of the music. -* `\wordsandmusic`* If words and music author are the same, they are combined into one element. -* `\copyright` The owner of the copyright of this song. -* `\copyright2`* The second copyright information. Typically used for a text like `All rights reserved`. Use the template to define the text. -* `\instructions` Additional textual instructions attached to the music sheet (not displayed). -* `\notices` General notices attached to the music sheet (not displayed). -* `\tab` The transcriber of the music sheet +{` +\\title ("Song Title" "Title: %TITLE%" left) +\\subtitle ("Subtitle" "[%SUBTITLE%]" left) +C4 +`} -{` -\\title "Song Title" "Title: %TITLE%" left -\\artist Artist "Written by %ARTIST%" right +## `\artist` + +```plain title="Tag Syntax" +\artist value +\artist (value template textAlign) +``` +**Description:** Sets the artist of the song in the data model. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The artist of the song | `string` | yes | +| template | The text template used to render the artist | `string` | no | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | + +**Example** + +{` +\\title ("Song Title" "Title: %TITLE%" left) +\\artist "alphaTab" +C4 +`} + +## `\album` + +```plain title="Tag Syntax" +\album value +\album (value template textAlign) +``` +**Description:** Sets the album of the song in the data model. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The album of the song | `string` | yes | +| template | The text template used to render the album | `string` | no | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | + +**Example** + +{` +\\title ("Song Title" "Title: %TITLE%" left) +\\album "alphaTab vol.1" +C4 +`} + +## `\words` + +```plain title="Tag Syntax" +\words value +\words (value template textAlign) +``` +**Description:** Sets the words/lyrics author of the song in the data model. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The words/lyrics author of the song | `string` | yes | +| template | The text template used to render the words/lyrics author | `string` | no | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | + +**Example** + +{` +\\words "CoderLine" +C4 +`} + +## `\music` + +```plain title="Tag Syntax" +\music value +\music (value template textAlign) +``` +**Description:** Sets the music author of the song in the data model. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The music author of the song | `string` | yes | +| template | The text template used to render the music author | `string` | no | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | + +**Example** + +{` +\\music "CoderLine and Contributors" +C4 +`} + +## `\wordsandmusic` + +```plain title="Tag Syntax" +\wordsAndMusic (template textAlign) +``` +**Description:** Sets the template and text align for the words and music (if they have the same value) +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| template | The text template used to render the item | `string` | yes | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | + +There is no own "value" for the wordsAndMusic meta as this display activates +if `\words` and `\music` have the same value which will be used. + +**Example** + +{` +\\words "CoderLine" +\\music "CoderLine" +\\wordsAndMusic ("Words & Music: %WORDS%") +C4 +`} + +## `\copyright` + +```plain title="Tag Syntax" +\copyright value +\copyright (value template textAlign) +``` +**Description:** Sets owner of the copyright of the song in the data model. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The owner of the copyright of the song | `string` | yes | +| template | The text template used to render the item | `string` | no | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | + +**Example** + +{` +\\copyright "CoderLine" +C4 `} -## System Layout +## `\copyright2` + +```plain title="Tag Syntax" +\copyright2 (template textAlign) +``` +**Description:** Sets the template and text align for the second copyright line. +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| template | The text template used to render the item | `string` | yes | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | + +There is no own "value" as it is typically used to just define a static text like "All rights reserved". The "template" can be used for defining the display. -The `\defaultsystemslayout` and `\systemslayout` allow configuring the system layout for all tracks. +**Example** + +{` +\\copyright "CoderLine" +\\copyright2 "All rights reserved" +C4 +`} + +## `\instructions` + +```plain title="Tag Syntax" +\instructions value +``` +**Description:** Sets the additional textual instructions attached to the music sheet (not displayed). + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The music author of the song | `string` | yes | + +**Example** + +{` +\\instructions "Practice this piece until you get it perfect." +C4 +`} + +## `\notices` + +```plain title="Tag Syntax" +\notices value +``` +**Description:** Sets the general notices attached to the music sheet (not displayed). + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The music author of the song | `string` | yes | + +**Example** + +{` +\\notices "I hope you appreciate this music sheet, it was a lot of effort to create!" +C4 +`} + +## `\tab` + +```plain title="Tag Syntax" +\tab value +\tab (value template textAlign) +``` +**Description:** Sets the transcriber of the music sheet in the data model. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The transcriber of the music sheet | `string` | yes | +| template | The text template used to render this item | `string` | no | +| textAlign | The text alignment of the text to display on the music sheet | `left`, `center` or `right` | no | + +**Example** + +{` +\\tab "Transcribed by me" +C4 +`} + +## `\systemsLayout` + +```plain title="Tag Syntax" +\systemsLayout (system1Bars system2Bars...) +``` +**Description:** Defines the number of bars to display per system when rendering multiple tracks. + +The `systemsLayout` and `defaultSystemsLayout` allow configuring the system layout. The system layout, defines how many bars should be displayed per system (line) if enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). -See [System Layout](./structural-metadata.mdx#system-layout) for more details. -## Show/Hide Dynamics +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| numberOfBars | Defines for every system (line) the number of bars it should contain | `number` (repeated) | yes | + +**Example** + +{` +\\systemsLayout (2 3 2) +\\track + :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 +\\track + :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 +`} + +## `\defaultSystemsLayout` + +```plain title="Tag Syntax" +\defaultSystemsLayout numberOfBars +``` +**Description:** Defines the default number of bars to display per system when rendering multiple tracks. + +The `systemsLayout` and `defaultSystemsLayout` allow configuring the system layout. +The system layout, defines how many bars should be displayed per system (line) if enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). -To configure on the stylesheet whether dynamics are shown use: `\showDynamics` and `\hideDynamics` +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| numberOfBars | Defines for every system (line) the number of bars it should contain | `number` | yes | + +**Example** + +{` +\\defaultSystemsLayout 2 +\\track + :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 +\\track + :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 +`} + +## `\showDynamics` and `\hideDynamics` + +```plain title="Tag Syntax" +\showDynamics +\hideDynamics +``` +**Description:** Enables or disables the display of dynamics. + +**Values:** + +None. + +**Example** {` \\showDynamics -. -C4 D4 E4 F4 + C4 {dy FFF} D4 + E4 {dy PP} F4 `} - {` \\hideDynamics -. -C4 D4 E4 F4 + C4 {dy FFF} D4 + E4 {dy PP} F4 `} -## System Sign Separator +## `\useSystemSignSeparator` + +```plain title="Tag Syntax" +\useSystemSignSeparator +``` +**Description:** Configures whether a system sign separator should be added (in case multiple tracks are shown) -The `\useSystemSignSeparator` option configures whether a system sign separator should be added (in case multiple tracks are shown). +**Values:** + +None. + +**Example** {` \\useSystemSignSeparator \\defaultSystemsLayout 2 -. \\track "T1" :1 C4 | C4 | C4 \\track "T2" :1 C4 | C4 | C4 `} -## Multi-Bar Rests +## `\multiBarRest` + +```plain title="Tag Syntax" +\multiBarRest +``` +**Description:** Enable the display of multibar rests in case multiple tracks are shown. -To configure whether [multibar rests](/docs/showcase/layouts.mdx#multi-bar-rests) should be enabled use: +**Values:** -* `\multiBarRest` - On top level for configuring the use on multi-track renderings -* `\track { multiBarRest }` - On track level for single track renderings +None. + +**Example** {` \\title "Multi Track" \\multiBarRest -. \\track "Piano 1" "pno1" \\staff {score} C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 @@ -108,28 +409,22 @@ To configure whether [multibar rests](/docs/showcase/layouts.mdx#multi-bar-rests C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | r | `} -{` -\\title "Single Track" -. -\\track "Piano 1" "pno1" { multiBarRest } - \\staff {score} - C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | C4 -`} +## `\bracketExtendMode` -## Brackets and Braces -To configure the mode how to show [brackets and braces](/docs/showcase/general.mdx#brackets-and-braces) use +```plain title="Tag Syntax" +\bracketExtendMode mode +``` +**Description:** Configure the mode how to show [brackets and braces](/docs/showcase/general.mdx#brackets-and-braces). -* `\bracketExtendMode NoBrackets` -* `\bracketExtendMode GroupStaves` -* `\bracketExtendMode GroupSimilarInstruments` +**Values:** -The `\useSystemSignSeparator` option configures whether a system sign separator should be added +| Name | Description | Type | Required | +|------|-------------|------|----------| +| mode | The mode to use | `noBrackets`, `groupStaves` or `groupSimilarInstruments` | yes | {` \\bracketextendmode GroupSimilarInstruments -\\useSystemSignSeparator -. \\track "Piano1" \\staff {score} \\instrument piano @@ -153,16 +448,73 @@ The `\useSystemSignSeparator` option configures whether a system sign separator 0.3.4 2.3.4 5.3.4 7.3.4 `} -## Track Names +## `\singleTrackTrackNamePolicy` and `\multiTrackTrackNamePolicy` + +```plain title="Tag Syntax" +\singleTrackTrackNamePolicy mode +\multiTrackTrackNamePolicy mode +``` +**Description:** Configures on which systems to show the [track names](/docs/showcase/general.mdx#track-names) + +As the name implies the tags configure how to behave if only a single, or multiple tracks are displayed. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| mode | The mode to use | `hidden`, `firstSystem` or `allSystems` | yes | + +**Example** + +{` +\\singletracktracknamepolicy AllSystems +\\track "Piano 1" "pno1" { defaultsystemslayout 3 } + C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | +`} + +## `\firstSystemTrackNameMode` and `\otherSystemsTrackNameMode` + +```plain title="Tag Syntax" +\firstSystemTrackNameMode mode +\otherSystemsTrackNameMode mode +``` +**Description:** Configures the text how to show as [track names](/docs/showcase/general.mdx#track-names) + +As the name implies the tags configure how to behave on the first or on subquent tracks. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| mode | The mode to use | `shortName` or `fullName` | yes | + +**Example** + +{` +\\singletracktracknamepolicy AllSystems +\\firstsystemtracknamemode fullname +\\othersystemstracknamemode shortname +\\track "Piano 1" "pno1" { defaultsystemslayout 3 } + C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | +`} + +## `\firstSystemTrackNameOrientation` and `\otherSystemsTrackNameOrientation` + +```plain title="Tag Syntax" +\firstSystemTrackNameOrientation orientation +\otherSystemsTrackNameOrientation orientation +``` +**Description:** Configures the orientation of the [track names](/docs/showcase/general.mdx#track-names) + +As the name implies the tags configure how to behave on the first or on subquent tracks. + +**Values:** -To configure the mode how to show [track names](/docs/showcase/general.mdx#track-names) use: +| Name | Description | Type | Required | +|------|-------------|------|----------| +| orientation | The orientation to use | `horizontal` or `vertical` | yes | -* `\singleTrackTrackNamePolicy hidden`, `\singleTrackTrackNamePolicy firstSystem`, `singleTrackTrackNamePolicy allSystems` -* `\multiTrackTrackNamePolicy hidden`, `\multiTrackTrackNamePolicy firstSystem`, `multiTrackTrackNamePolicy allSystems` -* `\firstSystemTrackNameMode shortName`, `\firstSystemTrackNameMode fullName` -* `\otherSystemsTrackNameMode shortName`, `\otherSystemsTrackNameMode fullName` -* `\firstSystemTrackNameOrientation horizontal`, `\firstSystemTrackNameOrientation vertical` -* `\otherSystemsTrackNameOrientation horizontal`, `\otherSystemsTrackNameOrientation vertical` +**Example** {` \\singletracktracknamepolicy AllSystems diff --git a/docs/alphatex/structural-metadata.mdx b/docs/alphatex/structural-metadata.mdx index 9ea8cbd..7c05675 100644 --- a/docs/alphatex/structural-metadata.mdx +++ b/docs/alphatex/structural-metadata.mdx @@ -1,5 +1,5 @@ --- -title: Tracks, Staves and Voices +title: Structural Metadata --- import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; @@ -25,87 +25,226 @@ it is encouraged to also specify the initial item if there are multiple tracks, ## `\track` -A new track can be started with the `\track` metadata. +```plain title="Tag Syntax" +\track +\track longName +\track (shortName longName) +``` +**Description:** Marks the start of a new track -The track metadata has two values: -1. `track long name` (string, optional) -2. `track short name` (string, optional)` +**Values:** -Both names are optional and the short name is the one displayed before the track starts. -The long name can be used e.g. in your custom UI. -If the short name is not specified, the first 10 characters of the long name are used as short name.
+| Name | Description | Type | Required | +|------|-------------|------|----------| +| longName | The long name of the track | `string` | no | +| shortName | The short name of the track | `string` | no | + +The displayed name depends on the configured [`Track Name Policy`](./score-metadata.mdx#track-names). +If the short name is not specified, the first 10 characters of the long name are used as short name. + +**Example** {` -\\track "First Track" "frst" - 1.1 2.1 3.1 4.1 -\\track // new track - \\tuning A1 D2 A2 D3 G3 B3 E4 // tuning of new track (with 7 strings) - 4.1 3.1 2.1 1.1 | +\\track "First Track" "frst" + C4 D4 E4 F4 +\\track + C5 D5 E5 F5 `} -Following properties are available on track level. +Following properties are available. ### Track Color -**Syntax:** `color colorCode` +```plain title="Syntax" +color colorCode +``` + +**Description:** The data model holds information about the color of the track which might be used by user interfaces to visually differenciate them. This data mainly originates from the Guitar Pro file format where colors are used to differenciate the tracks in the track picker and some other visualizations. It does not have an impact on the color of the music notation but can be used in a custom UI. -The `colorCode` is a string of [any supported color format](/docs/reference/settings/display/resources#colors) +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| colorCode | The `colorCode` in [any supported color format](/docs/reference/settings/display/resources#colors) | `string` | yes | + +**Example:** {` \\track { color "#FF0000" } 1.1 2.1 3.1 4.1 `} -### System Layout +### Systems Layout + +```plain title="Syntax" +systemsLayout (system1Bars system2Bars...) +``` + +**Description:** -**Syntax:** `systemsLayout (system1Bars system2Bars...)` -**Syntax:** `defaultSystemsLayout bars` +Defines the number of bars to display per system. -The `systemsLayout` and `defaultSystemsLayout` allow configuring the system layout. The system layout, defines how many bars should be displayed per system (line) if enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). +The `systemsLayout` and `defaultSystemsLayout` allow configuring the system layout. +The system layout, defines how many bars should be displayed per system (line) if enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). -The system layout can be configured either on score or on track level via these two options. +**Values:** -* `defaultSystemsLayout` - defines the number of bars to display unless specified differently. (default: 3) -* `systemsLayout` - defines the number of bars to display per system. (default: empty) +| Name | Description | Type | Required | +|------|-------------|------|----------| +| numberOfBars | Defines for every system (line) the number of bars it should contain | `number` (repeated) | yes | -{` +**Example:** + +{` \\title "Single Track" -. -\\track { defaultSystemsLayout 3 systemsLayout 2 2 } - :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 +\\track { systemsLayout (2 3 2) } + :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 `} -The `score` level options are used in case multiple tracks are displayed, otherwise the `track` level information is used. +### Default Systems Layout + +```plain title="Syntax" +defaultSystemsLayout numberOfBars` +``` + +**Description:** + +Defines the default number of bars to display per system. + +The `systemsLayout` and `defaultSystemsLayout` allow configuring the system layout. +The system layout, defines how many bars should be displayed per system (line) if enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). + +**Values:** -{` -\\title "Multi Track" -\\defaultSystemsLayout 2 -\\systemsLayout (1 1) +| Name | Description | Type | Required | +|------|-------------|------|----------| +| numberOfBars | Defines for every system (line) the number of bars it should contain | `number` | yes | + +**Example:** + +{` +\\title "Single Track" . -\\track { defaultSystemsLayout 1 systemsLayout (2 2) } - :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 -\\track { defaultSystemsLayout 4 systemsLayout (3 3) } - :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 | c4 +\\track { defaultSystemsLayout 2 } + :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 `} -### Playback Information +### Track solo -Following properties allow specifying details on the playback of the track. +```plain title="Syntax" +solo +``` -**Syntax:** `solo` - set the track to be played alone in the data model. (no values) -**Syntax:** `mute` - set the track to be muted (not played) in the data model. (no values) -**Syntax:** `volume value` - set the track volume, value can be a number in the range of 0-16 -**Syntax:** `volume balance` - set the track balance, value can be a number in the range of 0-16 (8 is centered) +**Description:** -### Instrument +Set the track to be played alone in the data model. -**Syntax:** `instrument nameOrNumber` - set the midi instrument for this track. This can either be a General MIDI number or instrument name. +**Values:** + +None. + +**Example:** + +{` +\\track { solo } +1.1 2.1 3.1 4.1 +\\track +10.1 11.1 12.1 13.1 +`} + +#### Track Mute + +```plain title="Syntax" +mute +``` + +**Description:** + +Set the track to be muted (not played) in the data model. + +**Values:** + +None. + +**Example:** + +{` +\\track +1.1 2.1 3.1 4.1 +\\track { mute } +10.1 11.1 12.1 13.1 +`} + +### Track volume + +```plain title="Syntax" +volume value +``` + +**Description:** + +Set the track volume in the data model. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The volume to set| `number` (0-16) | yes | + +**Example:** + +{` +\\track { volume 0 } +1.1 2.1 3.1 4.1 +\\track { volume 16 } +10.1 11.1 12.1 13.1 +`} + +### Track balance + +```plain title="Syntax" +balance value +``` + +**Description:** + +Set the track balance in the data model. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The balance to set| `number` (0-16; 8 is centered) | yes | + +**Example:** + +{` +\\track { volume 0 } +1.1 2.1 3.1 4.1 +\\track { volume 16 } +10.1 11.1 12.1 13.1 +`} + +### Track instrument + +```plain title="Syntax" +instrument value +``` + +**Description:** + +Set the midi instrument for this track. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The MIDI instrument to set | `number` (MIDI program number 0-127) or `string` (midi instrument name) | yes | -Refer to the following list of names you can use. export function GeneralMidiList() { const items = [ @@ -240,7 +379,7 @@ export function GeneralMidiList() { ]; return ( - {items.map((x,i) => { + {items.map((x, i) => { return ( {i} {x} @@ -250,6 +389,8 @@ export function GeneralMidiList() { ) } +Refer to the following list of names you can use. +
@@ -262,13 +403,59 @@ export function GeneralMidiList() {
+**Example:** + +{` +\\track { instrument 0 } +1.1 2.1 r r +\\track { instrument "Acoustic Steel Guitar" } +r r 12.1 13.1 +`} + +### Multibar rest display + +```plain title="Syntax" +multiBarRest +``` + +**Description:** + +Enables the display of multibar rests if this track is shown as standalone. + +**Values:** + +None + +**Example:** + +{` +\\track { multiBarRest } +C4*4 | r.1 | r.1 | r.1 | C4 * 4 +`} + +{` +\\track +C4*4 | r.1 | r.1 | r.1 | C4 * 4 +`} + ## `\staff` -A new staff can be started with the `\staff` metadata. +```plain title="Tag Syntax" +\staff +``` +**Description:** + +Marks the start of a new staff. + +The staff with the largest number of bars defines how long the overall song is. +There is no need to manually ensure that all staves have the correct number of bars. +AlphaTab will create missing empty bars automatically. + +**Values:** -The staff metadata has no values. +None. -The staff properties are described below. +**Example** {` \\track "Piano with Grand Staff" "pno." @@ -281,66 +468,124 @@ The staff properties are described below. 1.2 3.2 0.1 1.1 `} -The staff with the largest number of bars defines how long the overall song is. -There is no need to manually ensure that all staves have the correct number of bars. -AlphaTab will create missing empty bars automatically. +Following properties are available. + +If no properties describing the visible notation are provided, the default is `score tabs`. + +### Standard notation + +```plain title="Syntax" +score lineCount +``` + +**Description:** + +Enable the display of standard notation. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| lineCount | The number of staff lines | `number` | no (default: 5) | + +**Example:** {` -\\track "Piano with Grand Staff" "pno." - \\staff{score} \\tuning piano \\instrument acousticgrandpiano - c4 d4 e4 f4 | - \\staff{score} \\tuning piano \\clef F4 - c2 c2 c2 c2 | c2 c2 c2 c2 | c2 c2 c2 c2 | -\\track "Guitar" - \\staff{tabs} \\capo 5 - 1.2 3.2 0.1 1.1 | 1.2 3.2 0.1 1.1 +\\track + \\staff {score 3} + D4 D4 D4 D4 + \\staff {score} + C4 C4 C4 C4 `} -If no properties describing the visible notation are provided, the default is `score tabs`. +### Guitar Tabs + +```plain title="Syntax" +tabs +``` -### `score` - Standard notation +**Description:** -The `score` staff property enables the display of standard notation. +Enable the display of guitar tablature. -The values are: +Guitar tabs are only shown if the contained notes are stringed/fretted notes. -* `lines` - Defines the number of staff lines shown in the standard music notation (number, optional) +**Values:** + +None + +**Example:** {` \\track - \\staff{score 3} - c4 d4 e4 f4 + \\staff {tabs} + 3.3 4.3 5.3 5.5 `} -### `tabs` +### Slash notation + +```plain title="Syntax" +slash +``` -The `tabs` staff property enables the display of guitar tablature (only if the contained notes are really containing stringed/fretted notes) +**Description:** -This property has no values. +Enable the display of slash notation. -### `slash` +**Values:** -The `slash` staff property enables the display of slash notation. +None -This property has no values. +**Example:** -### `numbered` +{` +\\track + \\staff {tabs slash} + 3.3 4.3 5.3 5.5 +`} + +### Numbered notation (Jianpu) + +```plain title="Syntax" +numbered +``` + +**Description:** + +Enable the display of numbered notation (Jianpu). + +**Values:** -The `numbered` staff property enables the display of Jianpu / numbered notation. +None -This property has no values. +**Example:** + +{` +\\track + \\staff {score numbered} + C4 D4 E4 F4 +`} ## `\voice` -A new track can be started with the `\voice` metadata. +```plain title="Tag Syntax" +\voice +``` +**Description:** -The voice metadata has no values and no properties. +Marks the start of a new voice. Unlike the structure in the data model, alphaTex expects you to define all bars of a voice, then all the bars of the next voice. It structure is: `\voice /* Voice 1 Bar 1*/ | /* Voice 1 Bar 2*/ \voice /* Voice 2 Bar 1*/ | /* Voice21 Bar 2*/` Once a new voice starts, you again can define the notes starting from the first bar. alphaTab will try to consolidate inconsistencies in the number of bars across voices. +**Values:** + +None. + +**Example** + {` \\track "Piano" \\staff{score} \\tuning piano \\instrument acousticgrandpiano @@ -358,4 +603,5 @@ Once a new voice starts, you again can define the notes starting from the first `} +This metadata has no properties. diff --git a/docs/alphatex/syntax.mdx b/docs/alphatex/syntax.mdx new file mode 100644 index 0000000..3807fd9 --- /dev/null +++ b/docs/alphatex/syntax.mdx @@ -0,0 +1,104 @@ +--- +title: Language Syntax +--- + +If you compare alphaTex to programming or scripting languages, you will find similar constructs in this language. alphaTex (as the name implies) has borrowed +some aspects from LaTeX, a well known language for writing documents. As alphaTex evolved it came up with various own syntax constructs described here. + +When storing alphaTex to files, we recommend using the file extension `.atex`. + +## Comments + +Comments are supported in C-style comments via `// Single Line` and `/* Multi Line */`. You can use them anywhere within an alphaTex file +to further annotate your written document for structural or organizational purposes. + +## Strings + +Textual values are expressed as quoted strings similar to most programming languages. Both single and double quotes are supported. + +* `"Double Quoted String"` +* `'Single Quoted String'` + +Additionally following escape sequences are supported: + +* `\n` Newline +* `\r` Carriage Return +* `\t` Tab +* `\uXXXX` Unicode Character where XXXX is a 4 hex-digit number. +* `\\` A backslash +* `\'` or `\"` a quote character + +## Numbers + +alphaTex supports integer and decimal numbers. Decimal numbers are only allowed in some dedicated places to avoid overlaps with some other syntax constructs. + +Examples: + +* `10` +* `-10` +* `0.5` +* `-4.5` + +## Value Lists + +At various places value lists are used to describe items like time signatures or bend points. +Value lists should be wrapped with parenthesis `(values)` if there are multiple values. If there is only a single value, the parenthesis can be omitted. + +The individual values can be: + +* Integer numbers: `3`, `-10` +* Decimal Numbers: `3.3`, `-10.5` +* Strings: `"Hello"`, `'Hello'` +* Special identifiers: `true`, `hide`, `x` + + +Basic Examples + +* `( 1 2 3 )` A list of numbers +* `("Test" 3 hide)` A list of mixed type values + +Real examples + +* `\ts (3 4)` A 3/4 time signature (specified on bar level) +* `12.2 { b (0 4 0) }` A note bend describing a full note bend and release +* `\title ("Song Title" "Title: %TITLE%" left)` A song title shown as `Title: Song Title` left aligned. + +## Properties + +Properties are a list of key-valuelist pairs describing additional optional aspects of elements. +They are used to add effects to notes and beats, what notations should be visible in a staff and more. + +Properties are always wrapped into curly braces. A property starts with an identifier describing the property, optionally followed by its values as value list. + +Examples: +* `\track "Track Name" { color "#FF0000"}` +* `\staff {score}` +* `C4 {b (0 4) v txt "Bend with Vibrato"}` + +Property identifiers are case-insensitive. + +## Metadata Tags + +Metadata tags are the most similar construct to LaTeX. Metadata are used to describe various elements within the data model. + +The main syntax of metadata tags is: `\tag values {properties}`. +Both the `values` and `{properties}` are optional from a syntax perspective. Depending on the `tag` values might be expected to be specified. + +Examples: + +* `\title "Song Title"` +* `\track "Track Name" {color '#FF0000'}` +* `\ts (3 4)` + +Metadata tags identifiers are case-insensitive. + +### Metadata tag values + +Metadata tags might have one or multiple values. The exact values supported (required or optional) depend on the tag. +See [Value Lists](#ValueLists) above for more details. + +### Metadata tag properties + +Metadata tags might have one or multiple properties. The exact values supported depend on the tag. +See [Properties](#Properties) above for more details. + diff --git a/sidebars.ts b/sidebars.ts index 6d78829..d160d2c 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -143,6 +143,8 @@ const sidebars: SidebarsConfig = { alphaTex: { alphaTex: [ "alphatex/introduction", + "alphatex/syntax", + "alphatex/document-structure", "alphatex/structural-metadata", "alphatex/score-metadata", "alphatex/staff-metadata", diff --git a/src/hooks.ts b/src/hooks.ts index d5d9ee2..9286683 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -11,6 +11,15 @@ export function useAlphaTab( const [api, setApi] = useState(); const element = React.createRef(); + // for easier testing and troubleshooting + useEffect(()=>{ + const e = element.current as any; + e.at = api; + return ()=>{ + e.at = undefined; + } + }, [api, element.current]) + useEffect( () => { const container = element.current; @@ -33,8 +42,6 @@ export function useAlphaTab( [] ); - useEffect(() => { }); - return [api, element]; } From 7daae2f5ef1bfab039b9cf29763f61ee22285301 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Fri, 17 Oct 2025 13:37:42 +0900 Subject: [PATCH 05/15] docs: staff metadata --- docs/alphatex/staff-metadata.mdx | 358 +++++++++++++++++++------- docs/alphatex/structural-metadata.mdx | 24 ++ 2 files changed, 290 insertions(+), 92 deletions(-) diff --git a/docs/alphatex/staff-metadata.mdx b/docs/alphatex/staff-metadata.mdx index aaff365..e9d25a1 100644 --- a/docs/alphatex/staff-metadata.mdx +++ b/docs/alphatex/staff-metadata.mdx @@ -2,31 +2,35 @@ title: Staff metadata --- +import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; +import { SinceBadge } from '@site/src/components/SinceBadge'; + This page describes all the metadata tags which affect the "staff" level of the data model. To avoid any unexpected side-effects, these values should be specified on the first bar. Some of these tags are simply historically metadata tags. They might become staff properties in future. +## `\tuning` -### `\tuning` - -The `\tuning` metadata defines the number of strings and their tuning for stringed (and fretted) instruments. - -The values are: +```plain title="Tag Syntax" +\tuning (strings) { label "Label" hide } +\tuning `piano` +\tuning `none` +\tuning `voice` +``` +**Description:** Defines the number of strings and their tuning for stringed (and fretted) instruments. -* `Tuning Values` Either one of the following special identifiers or a repeated list of tuning values (same to pitched notes) describing the tuning of the respective string. +**Values:** -Special identifiers: +| Name | Description | Type | Required | +|------|-------------|------|----------| +| strings | The tuning values as [pitched notes](./document-structure.mdx#pitched-notes)) | `identifier` list | yes | +| `piano` | Indicates that this staff is NOT stringed, but a piano with pitched notes. | `identifier` | yes | +| `none` | Indicates that this staff is NOT stringed and has no tuning and uses pitched notes. | `identifier` | yes | +| `voice` | Indicates that this staff is NOT stringed, but a vocal voice with pitched notes. | `identifier` | yes | -* `piano` - Indicates that this staff is NOT stringed, but a piano with pitched notes. -* `none` - Indicates that this staff is NOT stringed and has no tuning and uses pitched notes. -* `voice` - Indicates that this staff is NOT stringed, but a vocal voice with pitched notes. - -The available properties are: - -* `hide` - Hides the tuning from being displayed in the displayed tuning list. -* `label "Label"` - Defines an additional textual label for the tuning. +**Example** {` \\track "Track 1" @@ -38,90 +42,223 @@ The available properties are: C4 D4 E4 F4 `} -If `instrument` is specified on the staff without a `\tuning`, alphaTab will try to make a guess and apply the right default tuning. +The following properties are supported on this metadata. + +### Hide Tuning -### `\chord` +```plain title="Syntax" +hide +``` -The `\chord` metadata allows to define contents of a chord, making up the "chord diagram" which can be shown. +**Description:** Hides the tuning from being displayed above the first staff. + +**Values:** + +None + +**Example:** + +{` +\\track + \\staff {tabs} + \\tuning (E4 B3 G3 D3 A2 D2) + 4.1 3.1 2.1 1.1 +\\track + \\staff {tabs} + \\tuning (F2 C2 G1 D1) { hide} + 4.1 3.1 2.1 1.1 +`} -The values are: +### Tuning Label -* `ChordName` The name of the chord (required, string) -* `FretList` A repeated list of either numbers or `x` describing which frets to play for each string. +```plain title="Syntax" +label text +``` -A value must be defined for all strings as defined by the tuning of the staff. Hence you should define the chords after the `\tuning`. -Defining `x` for a string, it means the string is not played. +**Description:** Defines the textual label for the tuning. -The properties are: -Additionally there are 4 properties which adjust the chord details: +**Values:** -* `firstFret Number` - shifts the first fret shown in the diagram higher. -* `barre Fret1 Fret2 ...` - defines on which frets a barré should be played (visually joins the dots to a bar). -* `showDiagram true/false` - enables/disables whether the chord diagram should be shown. If no value is specified, its equal to `true` -* `showName true/false` - enables/disables whether the chord name is shown above the diagram. If no value is specified, its equal to `true` +| Name | Description | Type | Required | +|------|-------------|------|----------| +| text | The label to set | `string` | yes | -To "use" the defined chord the `ch chordName` beat property has to be applied. +**Example:** + +{` +\\track + \\staff {tabs} + \\tuning (E4 B3 G3 D3 A2 D2) { label "Dropped D Tuning" } + 4.1 3.1 2.1 1.1 +`} + +## `\chord` + +```plain title="Tag Syntax" +\chord (name strings) +``` +**Description:** Defines a new chord for a chord diagram display defining how to play it. + +To avoid inconsistencies with tunings, chords should be defined after the tuning is set. + +To "use" the defined chord the `ch chordName` beat property has to be applied. The notes for the +chord still have to be specified separately, the definition in this metadata is purely for the chord diagram. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| name | The name of the chord | `string` or `identifier` | yes | +| strings | For every string of the staff tuning, the fret to be played or `x` for strings not played. | `identifier` or `number` list | yes | + +**Example** {` -// Simple Chord \\chord ("C" 0 1 0 2 3 x) -// With barré -\\chord ("A#add9" 1 3 4 2 1 x) {barre 1} -// First Fret higher +\\ts 2 4 +(0.1 1.2 0.3 2.4 3.5){ch "C"} (0.1 1.2 0.3 2.4 3.5) +`} + +The following properties are supported on this metadata. + +### First fret + +```plain title="Syntax" +firstfret fret +``` + +**Description:** Shifts the first fret shown in the diagram higher + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| fret | The index of the first fret | `number` | yes | + +**Example:** + +{` +\\chord ("D#" 6 8 8 8 6 x) {firstfret 6} +. +(6.1 8.2 8.3 8.4 6.5){ch "D#"} +`} + +### Barre frets + +```plain title="Syntax" +barre fret +barre (fret1 fret2...) +``` + +**Description:** Defines on which frets a barré should be played (visually joins the dots to a bar). + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| frets | The frets on which a barré should be played | `number` list | yes | + +**Example:** + +{` \\chord ("D#" 6 8 8 8 6 x) {firstfret 6 barre 6} -// Hide diagram +\\chord ("Special" 3 3 3 1 1 1) {showname false barre (1 3)} +. +(6.1 8.2 8.3 8.4 6.5){ch "D#"} +(3.1 3.2 3.3 1.4 1.5 1.6){ch "Special"} +`} + +### Show/Hide diagram + +```plain title="Syntax" +showDiagram visibility +``` + +**Description:** Enables/Disables whether the chord diagram should be shown. +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| visibility | The visibility of the diagram | `number` (0/1) or `boolean` (false/true) | No (default: true) | + +**Example:** + +{` \\chord ("E" 0 0 1 2 2 0) {showdiagram false} -// Hide name and multiple barre -\\chord ("Special" 3 3 3 1 1 1) {showname false barre 1 3} . -\\ts 2 4 -(0.1 1.2 0.3 2.4 3.5){ch "C"} (0.1 1.2 0.3 2.4 3.5) | -(1.1 3.2 5.3 3.4 1.5){ch "A#add9"} (1.1 3.2 5.3 3.4 1.5)| -(6.1 8.2 8.3 8.4 6.5){ch "D#"} (6.1 8.2 8.3 8.4 6.5) | -(0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} (0.1 0.2 1.3 2.4 2.5 0.6) | -(3.1 3.2 3.3 1.4 1.5 1.6){ch "Special"} (3.1 3.2 3.3 1.4 1.5 1.6) +(0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} `} -### `\capo` +### Show/Hide name -The `\capo` metadata allows to define on which fret a capo is placed. -The values are: +```plain title="Syntax" +showName visibility +``` -* `fret` The fret on which the capo is placed (required, number) +**Description:** Enables/Disables whether the chord name should be shown. +**Values:** -There are no properties on this metadata. +| Name | Description | Type | Required | +|------|-------------|------|----------| +| visibility | The visibility of the diagram | `number` (0/1) or `boolean` (false/true) | No (default: true) | -### `\bank` +**Example:** -The `\bank` metadata allows to define which MIDI bank will be selected for the playback of this staff. +{` +// Hide name and multiple barre +\\chord ("Special" 3 3 3 1 1 1) {showname false} +. +(3.1 3.2 3.3 1.4 1.5 1.6){ch "Special"} +`} -The values are: +## `\capo` -* `bank` The MIDI bank value (required, number) +```plain title="Syntax" +\capo fret +``` -There are no properties on this metadata. +**Description:** Defines the fret on which a capo should be placed. -### `\instrument` +**Values:** -### `\lyrics` +| Name | Description | Type | Required | +|------|-------------|------|----------| +| fret | The fret on which a capo is placed | `number` | yes | -The `\lyrics` metadata allows to define the lyrics text for the whole staff. -The values are: +**Example:** -* `startBar` The index of the bar where the lyrics start (optional, number) -* `lyrics` The lyrics text (required, string) +{` +\\track "Guitar" + \\staff{tabs} + \\capo 5 + 1.2 3.2 0.1 1.1 +`} There are no properties on this metadata. +## `\lyrics` + +```plain title="Syntax" +\lyrics startBar lyrics +\lyrics lyrics +``` + +**Description:** Define the lyrics shown on the beats of the staff. + The lyrics system of alphaTab is borrowed from Guitar Pro. For every track multiple "lines" of lyrics can be defined which can either start at the beginning or at a later bar. The syllables of the procided lyrics are spread automatically across the beats of the track. Syllables are separated with spaces. If multiple words/syllables should stay on the same beat the space can be replaced with a `+`. Comments which should not be displayed can be put `[into brackets]`. -Here some samples: +**Values:** -import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; +| Name | Description | Type | Required | +|------|-------------|------|----------| +| startBar | The first bar on which the notes should be applied | `number` | no | +| lyrics | The lyrics text to apply to the beats | `string` | yes | + +**Example:** {` \\title "With Lyrics" @@ -157,31 +294,29 @@ C4 D4 E4 F4 | G4 A4 B4 r C4 D4 E4 F4 `} -### `\articulation` +### `\articulation` -The `\articulation` metadata defines the articulations used in percussion tracks. + -Since alphaTab 1.4 you can also write percussion (drum) tracks in alphaTab. For this the `\instrument "percussion"` has to be set -for the track and then you can add notes via articulation names or numbers. +```plain title="Syntax" +\articulation defaults +\articulation name value +``` -{` -\\track "Drums" -\\instrument percussion -\\tempo 120 -\\clef neutral -\\articulation defaults -(KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit | -(KickHit HiHatOpen) KickHit KickHit KickHit (KickHit HiHatOpen) KickHit KickHit KickHit (KickHit SnareHit HiHatOpen) KickHit KickHit.32 KickHit KickHit.16 (KickHit HiHatOpen) KickHit KickHit KickHit | -(KickHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} (KickHit SnareHit HiHatOpen){tu 3} KickHit.16{tu 3} KickHit{tu 3} KickHit.8{tu 3} (KickHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} (KickHit SnareHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} -`} +**Description:** Defines the articulations available to write percussion and drum tabs. -A `\articulation defaults` tag marks the use of the default articulation names (as described below). -If the other values are specified, this tag defines an alias for the built-in articulation. +Currently alphaTex does not defining completely custom articulations (note heads, staff line, technical symbols etc.). -The alias values are: +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| defaults | Registers all standard articulation names | `identifier` | yes (unless name/value syntax is used) | +| name | The string (or identifier) used in the note values | `string` or `identifier` | yes | +| value | The numeric value of the built-in articulation | `identifier` | yes | + +**Built-in articulations:** -* `name` The string (or identifier) used int he note values (required, string/identifier) -* `value` The numeric value of the built-in articulation. export const list = [ ['Ride (choke)', 29], @@ -306,6 +441,20 @@ export function ArticulationTable({list}) { +**Example:** + +{` +\\track "Drums" +\\instrument percussion +\\tempo 120 +\\clef neutral +\\articulation defaults +(KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit (KickHit RideBell).16 r KickHit KickHit | +(KickHit HiHatOpen) KickHit KickHit KickHit (KickHit HiHatOpen) KickHit KickHit KickHit (KickHit SnareHit HiHatOpen) KickHit KickHit.32 KickHit KickHit.16 (KickHit HiHatOpen) KickHit KickHit KickHit | +(KickHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} (KickHit SnareHit HiHatOpen){tu 3} KickHit.16{tu 3} KickHit{tu 3} KickHit.8{tu 3} (KickHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} (KickHit SnareHit HiHatOpen).8{tu 3} KickHit{tu 3} KickHit{tu 3} +`} + + export function articulationsToAlphaTex(){ const lines = [ '\\track "Drums"', @@ -333,18 +482,30 @@ export function articulationsToAlphaTex(){ {articulationsToAlphaTex()} +There are no properties on this metadata. + +## `\displayTranspose` -### `\displayTranspose` +```plain title="Syntax" +\displayTranspose semitones +``` -The `displayTranpose` metadata defines the number of semitones to transpose the notes in this staff with. This only affects the display of the notes, not their audio. +**Description:** Defines the number of semitones by which the standard notation should be transposed. -It is typically used in sutations like for guitars where the standard notation is displayed 1 octave lower to fit better into the standard staff. +This only affects the display of the notes, not their audio. -The values are: +It is typically used in situations like for guitars where the standard notation is displayed 1 octave lower to fit better into the standard staff. -* `semitones` The number of semitones the staff should be transposed. +It is a common practice to show a standard clef on guitar notes even though they are transposed by 1 octave to better fit into the +standard staff lines. -There are no properties on this metadata. +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| semitones | The number of semitones by which the notes should be transposed | `number` | yes | + +**Example:** {` \\track \\staff \\instrument piano @@ -352,18 +513,31 @@ There are no properties on this metadata. C4.4 D4 E4 F4 | r.1 `} -### `\transpose` +There are no properties on this metadata. -The `transpose` metadata defines the number of semitones to transpose the notes in this staff with. This affects the display and audio. +## `\transpose` -The values are: -* `semitones` The number of semitones the staff should be transposed. +```plain title="Syntax" +\transpose semitones +``` -There are no properties on this metadata. +**Description:** Defines the number of semitones by which the standard notation should be transposed. + +This affects the display and audio. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| semitones | The number of semitones by which the notes should be transposed | `number` | yes | + +**Example:** {` \\track \\staff \\instrument piano \\transpose -12 - r.1 | C4.4 D4 E4 F4 + C4.4 D4 E4 F4 | r.1 `} + +There are no properties on this metadata. diff --git a/docs/alphatex/structural-metadata.mdx b/docs/alphatex/structural-metadata.mdx index 7c05675..83b2def 100644 --- a/docs/alphatex/structural-metadata.mdx +++ b/docs/alphatex/structural-metadata.mdx @@ -412,6 +412,30 @@ Refer to the following list of names you can use. r r 12.1 13.1 `}
+### Track bank + +```plain title="Syntax" +bank value +``` + +**Description:** + +Set the MIDI bank to select when playing this track. +The loaded soundfont needs to have this bank defined, otherwise +there might be no audio. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The midi bank to set| `number`| yes | + +**Example:** + +{` +\\track { instrument 25 bank 2 } +`} + ### Multibar rest display ```plain title="Syntax" From 7a98af01adccc6487989280fe0591c428d648d1e Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sat, 18 Oct 2025 21:23:34 +0900 Subject: [PATCH 06/15] docs: bar metadata --- docs/alphatex/bar-metadata.mdx | 524 ++++++++++++++++++++------ docs/alphatex/staff-metadata.mdx | 4 +- docs/alphatex/structural-metadata.mdx | 5 +- 3 files changed, 412 insertions(+), 121 deletions(-) diff --git a/docs/alphatex/bar-metadata.mdx b/docs/alphatex/bar-metadata.mdx index 0e45724..a11c96a 100644 --- a/docs/alphatex/bar-metadata.mdx +++ b/docs/alphatex/bar-metadata.mdx @@ -9,132 +9,310 @@ clefs, key signatures repeats etc. They follow the format `\tag value value` just like the score metadata. Be sure not to mix the score metadata and the bar metadata of the first bar. -## Time Signatures +## `\ts` -Time signatures have the format `\ts Numerator Denominator` or `\ts common` +```plain title="Syntax" +\ts common +\ts (numerator denominator) +``` -{` +**Description:** Defines the time signature for this and subsequent bars. + +AlphaTab does not yet support polytempo notation where instruments might use different time signatures. +Therefore be sure to only specify the timesignatures once as part of the first track/staff or ensure +they are consistent across the whole document. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| common | Specifies a common (4/4) time signature using the special C symbol | `identifier` | yes | +| numerator | The time signature numerator | `number` | yes | +| numerator | The time signature denominator | `number` | yes | + +**Example:** + +{` \\ts 3 4 | \\ts 4 4 | \\ts 6 8 | \\ts common `} +There are no properties on this metadata. -## Repeats +## `\ro` -Repeats can be started with `\ro` and -be closed with `\rc Count`. Count specifies how many times -the bar range is repeated. +```plain title="Syntax" +\ro +``` -{` +**Description:** Marks the start of a repeat. + +**Values:** + +None. + +**Example:** + +{` +\\ro 1.3 2.3 3.3 4.3 | 5.3 6.3 7.3 8.3 | \\rc 2 1.3 2.3 3.3 4.3 | +\\ro \\rc 3 1.3 2.3 3.3 4.3 +`} + +There are no properties on this metadata. + +## `\rc` + +```plain title="Syntax" +\rc repeats +``` + +**Description:** Marks the end of a repeat. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| repeats | The number of repeats which should be played | `number` | yes | + +**Example:** + +{` \\ro 1.3 2.3 3.3 4.3 | 5.3 6.3 7.3 8.3 | \\rc 2 1.3 2.3 3.3 4.3 | \\ro \\rc 3 1.3 2.3 3.3 4.3 `} -### Alternate Endings +There are no properties on this metadata. + +## `\ae` + +```plain title="Syntax" +\ae ending +\ae (ending ending...) +``` + +**Description:** Specifies on which repeats a bar should be played (to build alternate endings). + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| ending | The repeats on which the bar should be played | `number` list | yes | -Alternate endings in a repeat range are specified with a list of numbers: -`\ae (Repetition Repetition...)` or just `\ae Repetition` if only one number. -Each "Repetition" number specifies in which repetition that ending bar should be played. +**Example:** {` \\ro 1.3 2.3 3.3 4.3 | \\ae (1 2 3) 5.3 6.3 7.3 8.3 | \\ae 4 \\rc 4 5.3 8.3 7.3 6.3 `} -## Key Signatures +There are no properties on this metadata. + +## `\ks` + +```plain title="Syntax" +\ks key +``` + +**Description:** Specifies the key signature for this and subsequent bars. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| key | The key signature | `identifier` | yes | -The key signature can be specified with `\ks Value`. For major keys, the value is one of `Cb, Gb, Db, Ab, Eb, Bb, F, C, G, D, A, E, B, F#, C#`. Their equivalent minor scale can also be used, so `Bminor` is the same as `D` etc. A major scale can also be explicitly written out, like `Dmajor`. +**Example:** + {` \\ks Cb | \\ks C | \\ks C# | \\ks Aminor | \\ks Dmajor | \\ks Bminor `} -The type of key signatures (major or minor) is derived from the used name. +There are no properties on this metadata. + +## `\clef` + +```plain title="Syntax" +\clef clef +``` -## Clef +**Description:** Changes the clef for this and subsequent bars. -To change the clef simply specify `\clef Clef` where Clef is one of the following -values: `G2, Treble, F4, Bass, C3, Tenor, C4, Alto, N, Neutral` +**Values:** -To add ottavia to the clef add `\ottava Ottava` where Ottava is one of the following -values: `15ma`, `8va`, `regular`, `8vb`, `15mb`. +| Name | Description | Type | Required | +|------|-------------|------|----------| +| clef | The clef | `identifier` | yes | -Clefs are remembered across bars unless explicitly changed. +Following clefs are supported: `G2, Treble, F4, Bass, C3, Tenor, C4, Alto, N, Neutral` + +**Example:** {` \\clef G2 | \\clef F4 | \\clef C3 | \\clef C4 | \\clef N | \\clef Treble | \\clef Bass | \\clef Tenor | \\clef Alto | \\clef Neutral | +`} + +## `\ottava` + +```plain title="Syntax" +\ottava ottava +``` + +**Description:** Changes the clef ottave for this and subsequent bars. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| ottava | The clef ottava | `identifier` | yes | + +Following ottavia are supported: `15ma`, `8va`, `regular`, `8vb`, `15mb` + +**Example:** + +{` \\clef F4 \\ottava 15ma | | \\ottava regular | | \\clef C3 \\ottava 8vb | | `} +There are no properties on this metadata. + +## `\tempo` -## Tempo +```plain title="Syntax" +\tempo tempo +\tempo (tempo label position hide) +``` -To change the tempo of the score you can specify `\tempo BPM`. +**Description:** Adds a tempo change to the bar. + +A bar can have multiple tempo changes. They can either be relatively positioned using this metadata tag or +applied via the `tempo` property as beat effect. + +Tempo changes affect the whole song and not only an individual track. +To avoid unexpected side effects, we recomment to specify the tempo changes only once on the first track/staff. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| tempo | The new tempo in BPM | `number` | yes | +| label | A textual label for the tempo | `number` | no | +| position | A relative (ratio) position where within the bar the tempo change should happen | `number` (float, 0-1) | no | +| hide | If specified the tempo change is not visually shown | no | + +**Example:** {` -// score meta also supports \\tempo, therefore we skip the score meta with a dot -. -// change tempo in bars -\\tempo 30 1.3 2.3 3.3 4.3 | -\\tempo 80 1.3 2.3 3.3 4.3 +\\tempo 30 + C4 D4 E4 F4 | +\\tempo (120 "Moderate") +\\tempo (60 "" 0.5 hide) + C4 D4 E4 F4 | `} -## Triplet Feel +There are no properties on this metadata. + +## `\tf` + +```plain title="Syntax" +\tf tripletFeel +``` + +**Description:** Changes the triplet feel (aka. swing) play style. + +**Values:** -To change the triplet feel of a bar, specify `\tf TripletFeel`, where `TripletFeel` is one of the following values: +| Name | Description | Type | Required | +|------|-------------|------|----------| +| tripletFeel | The triplet feel style | `identifier` | yes | | TripletFeel | Possible values | |-------------------|-----------------------| -| No Triplet Feel | none, no, 0 | -| Triplet 16th | triplet-16th, t16, 1 | -| Triplet 8th | triplet-8th, t8, 2 | -| Dotted 16th | dotted-16th, d16, 3 | -| Dotted 8th | dotted-8th, d8, 4 | -| Scottish 16th | scottish-16th, s16, 5 | -| Scottish 8th | scottish-8th, s8, 6 | +| No Triplet Feel | none | +| Triplet 16th | triplet16th | +| Triplet 8th | triplet8th | +| Dotted 16th | dotted16th | +| Dotted 8th | dotted8th | +| Scottish 16th | scottish16th | +| Scottish 8th | scottish8th | -{` +**Example:** + +{` \\tf none 3.3*4 | -\\tf triplet-16th 3.3*4 | \\tf triplet-8th 3.3*4 | -\\tf dotted-16th 3.3*4 | \\tf dotted-8th 3.3*4 | -\\tf scottish-16th 3.3*4 | \\tf scottish-8th 3.3*4 | -\\tf no 1.1*4 | -\\tf t16 1.1*4 | \\tf t8 1.1*4 | -\\tf d16 1.1*4 | \\tf d8 1.1*4 | -\\tf s16 1.1*4 | \\tf s8 1.1*4 +\\tf triplet16th 3.3*4 | \\tf triplet8th 3.3*4 | +\\tf dotted16th 3.3*4 | \\tf dotted8th 3.3*4 | +\\tf scottish16th 3.3*4 | \\tf scottish8th 3.3*4 | `} -## Anacrusis +There are no properties on this metadata. + +## `\ac` + +```plain title="Syntax" +\ac +``` + +**Description:** Marks the bar as an anacrusis (pick-up) bar. By default bars follow a strict timing defined by the time signature and tempo. Anacrusis (aka. pickup bars) do not follow this rule. -The length of those bars is defined by the actual beats/notes in the bar. Bars can be flagged as anacrusis bars via the `\ac` bar meta. +The length of those bars is defined by the actual beats/notes in the bar. + +**Values:** + +None + +**Example:** {` \\ks D \\ts 24 16 \\ac r.16 6.3 7.3 9.3 7.3 6.3 | r.16 5.4 7.4 9.4 7.4 5.4 6.3.4{d} 9.6.16 10.6 12.6 10.6 9.6 14.6.4{d} r.16 `} -## Sections +There are no properties on this metadata. + +## `\section` + +```plain title="Syntax" +\section marker text +\section text +``` -To split your song into individual sections (e.g. intro, chorus, solo etc.) -you can mark a bar as a section start by using `\section` followed by the section name. -If you want to also specify a marker beside the text, use the format `\section Marker Text`. +**Description:** Starts a new section within the song (intro, outro,..) + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| marker | The marker for the section, typically a single letter | `string` | no | +| text | The text/description of the new section | `string` | yes | + +**Example:** {` -\\section Intro // simple section +\\section "Intro" // simple section 1.1 1.1 1.1 1.1 | 1.1 1.1 1.1 1.1 | -\\section "Chorus 01" // with spaces in name -1.1 1.1 1.1 1.1 | \\section S Solo // with marker and section name differently 1.1 1.1 1.1 1.1 `} -## Directions +There are no properties on this metadata. + +## `\jump` + +```plain title="Syntax" +\jump direction +``` -To specify play directions (jumps and jump targets) use the `\jump` metadata followed by the respective instruction. -The names should be self explaining if you're familiar with this notation: +**Description:** Adds a direction/jump instruction to the bar. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| direction | The direction to add | `identifier` | yes | **Jump Targets** @@ -164,6 +342,8 @@ The names should be self explaining if you're familiar with this notation: * `DaCoda` * `DaDoubleCoda` +**Example:** + {` . \\ro \\rc 2 3.3*4 | @@ -179,9 +359,21 @@ The names should be self explaining if you're familiar with this notation: 3.3*4 `} -## Free Time +There are no properties on this metadata. + +## `\ft` -To mark bars as free time bars, add the `\ft` tag to it. +```plain title="Syntax" +\ft +``` + +**Description:** Marks the bar as a free-time bar where players are free to vary the playback. + +**Values:** + +None + +**Example:** {` . @@ -192,54 +384,73 @@ C4*2 | C4*2 | `} +There are no properties on this metadata. -## Transpose - -This metadata affects the whole staff, its recommended to specify this only on the first bar of a staff not later. +## `\simile` -* `displayTranspose semitones` - Defines the number of semitones to transpose the notes in this staff with. This only affects the display of the notes, not their audio. -* `transpose semitones` - Defines the number of semitones to transpose the notes in this staff with. This affects the display and audio. +```plain title="Syntax" +\simile mark +``` -{` -\\track \\staff \\instrument piano - \\displayTranspose -12 - C4.4 D4 E4 F4 | r.1 -\\track \\staff \\instrument piano - \\transpose -12 - r.1 | C4.4 D4 E4 F4 -`} - -## Double Bar - -To mark a bar as double bar add `\db` - -{` -\\db 3.3 3.3 3.3 3.3 | 1.1 2.1 3.1 4.1 -`} +**Description:** Adds a simile mark to the bar indicating that the content of the last, or previous two bars should be repeated. -## Simile Marks +**Values:** -To apply simile marks use the `\simile type` where type is: +| Name | Description | Type | Required | +|------|-------------|------|----------| +| mark | The mark to add | `identifier` | yes | * `none` - No simile mark is applied * `simple` - A simple simile mark. The previous bar is repeated. * `firstofdouble` - A double simile mark. This value is assigned to the first bar of the 2 repeat bars. * `secondofdouble` - A double simile mark. This value is assigned to the second bar of the 2 repeat bars. +**Example:** + {` 3.3*4 | \\simile simple | 3.3*4 | 4.3*4 | \\simile firstofdouble | \\simile secondofdouble `} -## Bar Lines +There are no properties on this metadata. + +## `\barlineLeft` and `\barlineRight` + +```plain title="Syntax" +\barlineLeft style +\barlineRight style +``` + +**Description:** Adjusts the lines which will be shown left and right on the bar. For some special notation needs, the default bar line can be adjusted on every bar. The bar line styles are aligned with the ones from [MusicXML](https://www.w3.org/2021/06/musicxml40/musicxml-reference/data-types/bar-style/). -* `\barlineLeft` adjusts the left bar line -* `\barlineRight` adjusts the right bar line - alphaTab attempts to reuse lines on overlapping styles across bars. +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| style | The line style to use | `identifier` | yes | + +Available styles: + +* `automatic` - Bar lines are determined automatically based on details like repeats and free time (default). +* `dashed` +* `dotted` +* `heavy` +* `heavyheavy` +* `heavylight` +* `lightheavy` +* `lightlight` +* `none` +* `regular` +* `short` +* `tick` + + +**Example:** + {` \\instrument piano . @@ -272,24 +483,23 @@ alphaTab attempts to reuse lines on overlapping styles across bars. \\barlineright tick | `} -* `automatic` - Bar lines are determined automatically based on details like repeats and free time (default). -* `dashed` -* `dotted` -* `heavy` -* `heavyheavy` -* `heavylight` -* `lightheavy` -* `lightlight` -* `none` -* `regular` -* `short` -* `tick` +There are no properties on this metadata. + +## `\scale` + +```plain title="Syntax" +\scale scale +``` +**Description:** Adjusts the relative scale of the bar when using `systemsLayoutMode: 'UseModelLayout'` with the page layout. +**Values:** -### Bar Scale +| Name | Description | Type | Required | +|------|-------------|------|----------| +| scale | The scale of the bar within the system | `number` (float) | yes | -When using `systemsLayoutMode: 'UseModelLayout'` with page view layout the individual bars can be scaled relatively. this scale can be specified with `\scale Value` +**Example:** {` \\track { defaultSystemsLayout 3 } @@ -298,45 +508,123 @@ When using `systemsLayoutMode: 'UseModelLayout'` with page view layout the indiv c4 | c4 `} +There are no properties on this metadata. + +## `\width` + +```plain title="Syntax" +\width width +``` -### Bar Width +**Description:** Adjusts the absolute of the bar when using `systemsLayoutMode: 'UseModelLayout'` with the horizontal layout. -When using `systemsLayoutMode: 'UseModelLayout'` with the horizontal layout the individual bars can be scaled absolutely. this scale can be specified with `\width Value` +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| width | The absolute width of the bar | `number` | yes | + +**Example:** {` \\track \\width 100 :1 c4 | \\width 300 c4 | \\width 350 c4 `} + +There are no properties on this metadata. + ### `\sync` +```plain title="Syntax" +\sync (barIndex occurence millisecondOffset ratioPosition) +``` + +**Description:** Adds a new sync point for synchronizing the music sheet with an external media source like a backing track or video player. alphaTex support specifying sync points for the [synchronization with external media](/docs/guides/audio-video-sync). -The related sync points are specified as flat list at the end of the song contents separated by a dot `.`. -As we consider it unlikely that authors write this information manually, we separated the sync points from the other song. -This way tools like our [Media Sync Editor](/docs/playground/) on the Playground can be used to synchronize songs and -the sync info can be copy-pasted after the main song. +It is recommended to add the sync points at the very end of the song but it is also possible +to define them inbetween. -The supported formats of sync points are: +The `barIndex`, `occurence`, `ratioPosition` values define the absolute position within the music sheet. +The `millisecondOffset` defines the absolute position within the external media. -* `\sync BarIndex Occurence MillisecondOffset` -* `\sync BarIndex Occurence MillisecondOffset RatioPosition` +With this information known, alphaTab can synchronize the external media with the music sheet. -Where: -* `BarIndex` is the numeric (0-based) index of the bar for which the sync point applies. -* `Occurence` is the numeric (0-based) index of bar repetitions. e.g. on Repeats or Jumps bars might be played multiple times. This value allows specifying points on subsequent plays of a bar. -* `MillisecondOffset` is the numeric timestamp in milliseconds in the external audio. -* `RatioPosition` is the relative offset within the bar at which the sync point is placed (0 if not provided). +**Values:** -The `BarIndex`, `Occurence`, `RatioPosition` values define the absolute position within the music sheet. -The `MillisecondOffset` defines the absolute position within the external media. +| Name | Description | Type | Required | +|------|-------------|------|----------| +| barIndex | The index of the bar being synced | `number` | yes | +| occurence | The occurence of the bar for which this sync point applies (on repeats) | `number` | yes | +| millisecondOffset | The absolute millisecond offset within the external media | `number` | yes | +| ratioPosition | The relative position within the bar where the synchronization happens | `number` | no | -With this information known, alphaTab can synchronize the external media with the music sheet. +**Example:** The sample below uses an audio backing track with inconsistent tempos. The sync points correct the tempo differences and the cursor is placed correctly. import { AlphaTexSyncPointSample } from '@site/src/components/AlphaTexSyncPointSample'; - \ No newline at end of file + + +## `\accidentals` + +```plain title="Syntax" +\accidentals mode +``` + +**Description:** Changes the mode how alphaTab should treat accidentals when writing pitched notes. + +alphaTab can use the accidentals as specified in alphaTex, or apply accidentals automatically based on the note pitch. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| mode | The mode which should be active | `auto` or `explicit` | yes | + +**Example:** + +{` +\\accidentals explicit + C#4 C4 Eb4 Ax4 | +\\accidentals auto + C#4 C4 Eb4 Ax4 | +`} + +There are no properties on this metadata. + +## `\spd`, `\spu` and `\sph` + +```plain title="Syntax" +\spd position +\sph position +\spu position +``` + +**Description:** Specifies how the sustain petal should be pressed down (`spd`), held (`sph`) or lifted up (`spu`). + +This tag allows specifying the sustain pedal relative to the bar. +The sustain pedal can also be applied via [beat properties](./beat-properties.mdx#sustain-pedals). + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| position | The relative position within the bar for the marker | `number` (float, 0-1) | yes | + +**Example:** + +{` +\\spd 0 +\\spu 0.25 +\\spd 0.5 +\\sph 0.75 +\\spu 1 +:8 C4 * 8 +`} + +There are no properties on this metadata. \ No newline at end of file diff --git a/docs/alphatex/staff-metadata.mdx b/docs/alphatex/staff-metadata.mdx index e9d25a1..85e038a 100644 --- a/docs/alphatex/staff-metadata.mdx +++ b/docs/alphatex/staff-metadata.mdx @@ -439,7 +439,9 @@ export function ArticulationTable({list}) { ) } - +
+ +
**Example:** diff --git a/docs/alphatex/structural-metadata.mdx b/docs/alphatex/structural-metadata.mdx index 83b2def..076689a 100644 --- a/docs/alphatex/structural-metadata.mdx +++ b/docs/alphatex/structural-metadata.mdx @@ -81,7 +81,7 @@ some other visualizations. It does not have an impact on the color of the music ### Systems Layout ```plain title="Syntax" -systemsLayout (system1Bars system2Bars...) +systemsLayout (numberOfBars numberOfBars...) ``` **Description:** @@ -407,8 +407,9 @@ Refer to the following list of names you can use. {` \\track { instrument 0 } -1.1 2.1 r r +C4 C5 r r \\track { instrument "Acoustic Steel Guitar" } +\\tuning (E4 B3 G3 D3 A2 E2) r r 12.1 13.1 `} From 315a11f8f80db90b821807d7b6a98915399937cb Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sat, 18 Oct 2025 21:24:06 +0900 Subject: [PATCH 07/15] chore: generate empty ref docs --- package.json | 3 ++- scripts/generate-alphatabdoc.mts | 6 ++++-- scripts/generate-api.mts | 14 ++++++++++++++ scripts/generate-common.mts | 4 ++++ scripts/generate-settings.mts | 4 ++++ scripts/generate-typedocs.mts | 20 ++++++++++++++++++++ scripts/typeschema.mts | 1 + scripts/util.mts | 12 +++++++++++- 8 files changed, 60 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 46db5c6..454aeeb 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", "typecheck": "tsc", - "generate-alphatabdoc": "tsx scripts/generate-alphatabdoc.mts" + "generate-alphatabdoc": "tsx scripts/generate-alphatabdoc.mts", + "generate-alphatabdoc-empty": "tsx scripts/generate-alphatabdoc.mts --empty" }, "dependencies": { "@coderline/alphatab": "^1.7.0-alpha.1515", diff --git a/scripts/generate-alphatabdoc.mts b/scripts/generate-alphatabdoc.mts index 40460b0..9c548aa 100644 --- a/scripts/generate-alphatabdoc.mts +++ b/scripts/generate-alphatabdoc.mts @@ -32,6 +32,7 @@ const context: GenerateContext = { flatExports: new Map(), nameToExportName: new Map(), settings: null!, + emptyFiles: false }; function walkModuleDeclaration( @@ -150,8 +151,9 @@ for (const { d, identifier } of exports) { context.settings = context.flatExports.get( "alphaTab.Settings" ) as ts.ClassDeclaration; + +context.emptyFiles = process.argv.includes("--empty"); + await generateSettings(context); await generateTypeDocs(context); await generateApiDocs(context); - -// TODO: run prettier on MDX files \ No newline at end of file diff --git a/scripts/generate-api.mts b/scripts/generate-api.mts index b31dcba..cfdaf93 100644 --- a/scripts/generate-api.mts +++ b/scripts/generate-api.mts @@ -130,6 +130,9 @@ async function writeFrontMatter( await fileStream.write("---\n"); + if(context.emptyFiles) { + return; + } await writeCommonImports(fileStream); if (since) { @@ -157,6 +160,10 @@ async function writePropertyPage( await writeFrontMatter(context, fileStream, memberName, member, "property"); + if(context.emptyFiles){ + return; + } + await fileStream.write( "import { PropertyDescription } from '@site/src/components/PropertyDescription';\n\n" ); @@ -180,6 +187,9 @@ async function writeEventPage( await using fileStream = await openFileStream(filePath); await writeFrontMatter(context, fileStream, memberName, member, "event"); + if(context.emptyFiles){ + return; + } await writeEventDetails(context, fileStream, member); } @@ -195,5 +205,9 @@ async function writeMethodPage( await using fileStream = await openFileStream(filePath); await writeFrontMatter(context, fileStream, memberName, member, "method"); + if(context.emptyFiles){ + return; + } + await writeMethodDetails(context, fileStream, member); } diff --git a/scripts/generate-common.mts b/scripts/generate-common.mts index 82b96a0..b73627f 100644 --- a/scripts/generate-common.mts +++ b/scripts/generate-common.mts @@ -1019,6 +1019,10 @@ function shouldGenerateMember( // e.g. constructors return false; } + if (ts.isComputedPropertyName(m.name)) { + // e.g. [Symbol.iterator] + return false; + } // private if ( diff --git a/scripts/generate-settings.mts b/scripts/generate-settings.mts index a32a247..c904f8f 100644 --- a/scripts/generate-settings.mts +++ b/scripts/generate-settings.mts @@ -90,6 +90,10 @@ export async function generateSettings(context: GenerateContext) { await fileStream.write("---\n"); + if (context.emptyFiles) { + continue; + } + await writeCommonImports(fileStream); await fileStream.write( diff --git a/scripts/generate-typedocs.mts b/scripts/generate-typedocs.mts index 6887e50..e629655 100644 --- a/scripts/generate-typedocs.mts +++ b/scripts/generate-typedocs.mts @@ -45,6 +45,10 @@ export async function generateTypeDocs(context: GenerateContext) { await fileStream.write(`title: ${exportedName}\n`); await fileStream.write("---\n"); + if(context.emptyFiles){ + fileStream.suspend = true; + } + await writeCommonImports(fileStream); await fileStream.write( @@ -436,6 +440,10 @@ async function writeFrontMatter( await fileStream.write("---\n"); + if(context.emptyFiles){ + return; + } + await writeCommonImports(fileStream); if (since) { @@ -462,6 +470,10 @@ async function writePropertyPage( await using fileStream = await openFileStream(filePath); await writeFrontMatter(context, fileStream, memberName, member, "property"); + if(context.emptyFiles){ + return; + } + await writePropertyDetails(context, fileStream, member); } @@ -479,6 +491,10 @@ async function writeEventPage( await using fileStream = await openFileStream(filePath); await writeFrontMatter(context, fileStream, memberName, member, "event"); + if(context.emptyFiles){ + return; + } + await writeEventDetails(context, fileStream, member); } @@ -493,6 +509,10 @@ async function writeMethodPage( await using fileStream = await openFileStream(filePath); await writeFrontMatter(context, fileStream, memberName, member, "method"); + if(context.emptyFiles){ + return; + } + await writeMethodDetails(context, fileStream, member); } diff --git a/scripts/typeschema.mts b/scripts/typeschema.mts index fb28bf4..62ea34f 100644 --- a/scripts/typeschema.mts +++ b/scripts/typeschema.mts @@ -8,6 +8,7 @@ export const repositoryRoot = path.resolve( ); export type GenerateContext = { + emptyFiles: boolean; checker: ts.TypeChecker; settings: ts.ClassDeclaration; dts: string; diff --git a/scripts/util.mts b/scripts/util.mts index 616ef6f..ad2763b 100644 --- a/scripts/util.mts +++ b/scripts/util.mts @@ -1,6 +1,7 @@ import fs from "fs"; export interface FileStream extends AsyncDisposable { + suspend: boolean; readonly path: string; write(s: string): Promise; writeLine(s?: string): Promise; @@ -8,9 +9,12 @@ export interface FileStream extends AsyncDisposable { export async function openFileStream(path: string): Promise { const fileStream = await fs.promises.open(path, "w"); + let _suspended = false; const write = async (s: string) => { - await fileStream.write(s); + if(!_suspended) { + await fileStream.write(s); + } }; const writeLine = (s?: string) => { if (s) { @@ -28,6 +32,12 @@ export async function openFileStream(path: string): Promise { write, writeLine, [Symbol.asyncDispose]: asyncDispose, + get suspend() { + return _suspended + }, + set suspend(v:boolean){ + _suspended = v; + } }; } From 6a4d36b4052fe563f9c1984a2c918f8fe92d7bf8 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 19 Oct 2025 13:29:05 +0900 Subject: [PATCH 08/15] feat: dark mode --- docusaurus.config.ts | 2 +- .../AlphaTabFull/styles.module.scss | 68 +++++++++++++++--- src/css/custom.scss | 72 +++++++++++++------ src/environment.ts | 32 ++++++++- src/hooks.ts | 15 +++- 5 files changed, 153 insertions(+), 36 deletions(-) diff --git a/docusaurus.config.ts b/docusaurus.config.ts index ffbff68..412c6d9 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -292,7 +292,7 @@ const config: Config = { additionalLanguages: ["csharp", "diff", "kotlin", "groovy"], }, colorMode: { - disableSwitch: true, + defaultMode: 'light' }, } satisfies Preset.ThemeConfig, diff --git a/src/components/AlphaTabFull/styles.module.scss b/src/components/AlphaTabFull/styles.module.scss index 3efc986..a8be61d 100644 --- a/src/components/AlphaTabFull/styles.module.scss +++ b/src/components/AlphaTabFull/styles.module.scss @@ -34,6 +34,16 @@ margin-top: -2rem; } +[data-theme="light"] .at-wrap { + border: 1px solid rgba(0, 0, 0, 0.12); + background: #fff; +} + +[data-theme="dark"] .at-wrap { + border: 1px solid rgba(255, 255, 255, 0.12); + background: #1b1b1d; +} + .at-content { flex: 1 1 auto; overflow: hidden; @@ -49,16 +59,24 @@ color: #fff; } .at-logo { - background: #f7f7f7; height: 40px; display: flex; align-items: center; padding: 8px 4px; margin-right: 0 !important; - color: #8a8b8c; font-size: 14px; } +[data-theme="light"] .at-logo { + background: #f7f7f7; + color: #8a8b8c; +} + +[data-theme="dark"] .at-logo { + background: rgb(8,8,8); + color: rgb(117, 116, 115); +} + .at-logo img { height: 28px; } @@ -75,10 +93,21 @@ bottom: 0; overflow: hidden; border-right: 1px solid rgba(0, 0, 0, 0.12); +} + + +[data-theme="light"] .at-sidebar { + border-right-color: rgba(0, 0, 0, 0.12); background: #f7f7f7; color: #000; } +[data-theme="dark"] .at-sidebar { + border-right-color: rgba(255, 255, 255, 0.12); + background: rgb(8,8,8); + color: #fff; +} + .at-sidebar:hover { max-width: 400px; transition: max-width 0.2s; @@ -110,10 +139,15 @@ cursor: pointer; } -.at-track:hover { - background: rgba(0, 0, 0, 0.1); +[data-theme="light"] .at-track:hover { + background: rgba(0, 0, 0, 0.1); +} + +[data-theme="dark"] .at-track:hover { + background: rgba(255,255,255, 0.1); } + .at-track > .at-track-icon { grid-area: icon; font-size: 32px; @@ -130,8 +164,12 @@ opacity: 0.8; } -.at-track.active { - background: rgba(0, 0, 0, 0.03); +[data-theme="light"] .at-track.active { + background: rgba(0, 0, 0, 0.03); +} + +[data-theme="dark"] .at-track.active { + background: rgba(255,255,255, 0.03); } .at-track.active > .at-track-icon { @@ -194,18 +232,32 @@ input[type="range"]::-moz-range-thumb { bottom: 0; z-index: 1010; backdrop-filter: blur(3px); - background: rgba(0, 0, 0, 0.5); justify-content: center; align-items: flex-start; } +[data-theme="light"] .at-overlay { + background: rgba(0, 0, 0, 0.5); +} + +[data-theme="dark"] .at-overlay { + background: rgba(255,255,255, 0.5); +} + .at-overlay-content { margin-top: 20px; background: #fff; - box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.3); padding: 10px; } +[data-theme="light"] .at-overlay-content { + box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.3); +} + +[data-theme="dark"] .at-overlay-content { + box-shadow: 0px 5px 10px 0px rgba(255, 255, 255, 0.3); +} + .at-overlay-content > .spinner-border { color: #4972a1; } diff --git a/src/css/custom.scss b/src/css/custom.scss index dc960f7..ba7fe24 100644 --- a/src/css/custom.scss +++ b/src/css/custom.scss @@ -45,13 +45,13 @@ /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme="dark"] { - --ifm-color-primary: #70acf0; - --ifm-color-primary-dark: #509aed; - --ifm-color-primary-darker: #4090eb; - --ifm-color-primary-darkest: #1775df; - --ifm-color-primary-light: #90bef3; - --ifm-color-primary-lighter: #a0c8f5; - --ifm-color-primary-lightest: #d0e3fa; + --ifm-color-primary: #426d9d; + --ifm-color-primary-dark: #3b628d; + --ifm-color-primary-darker: #385d85; + --ifm-color-primary-darkest: #2e4c6e; + --ifm-color-primary-light: #4978ad; + --ifm-color-primary-lighter: #4c7db4; + --ifm-color-primary-lightest: #648ebe; } .docusaurus-highlight-code-line { @@ -119,26 +119,52 @@ li.types-item .menu__link { } /* Styles for player */ -:global(.at-cursor-bar) { - /* Defines the color of the bar background when a bar is played */ - background: rgba(255, 242, 0, 0.25); -} +[data-theme="dark"] { + .at-cursor-bar { + /* Defines the color of the bar background when a bar is played */ + background: rgba(66, 109, 157, 0.2); + } -:global(.at-selection div) { - /* Defines the color of the selection background */ - background: rgba(64, 64, 255, 0.1); -} + .at-selection div { + /* Defines the color of the selection background */ + background: rgba(64, 64, 255, 0.1); + } + + .at-cursor-beat { + /* Defines the beat cursor */ + background: rgba(61, 142, 234, 0.75); + width: 3px; + } -:global(.at-cursor-beat) { - /* Defines the beat cursor */ - background: rgba(64, 64, 255, 0.75); - width: 3px; + .at-highlight * { + /* Defines the color of the music symbols when they are being played (svg) */ + fill: #0078ff; + stroke: #0078ff; + } } -:global(.at-highlight) * { - /* Defines the color of the music symbols when they are being played (svg) */ - fill: #0078ff; - stroke: #0078ff; +[data-theme="light"] { + .at-cursor-bar { + /* Defines the color of the bar background when a bar is played */ + background: rgba(255, 242, 0, 0.25); + } + + .at-selection div { + /* Defines the color of the selection background */ + background: rgba(64, 64, 255, 0.1); + } + + .at-cursor-beat { + /* Defines the beat cursor */ + background: rgba(64, 64, 255, 0.75); + width: 3px; + } + + .at-highlight * { + /* Defines the color of the music symbols when they are being played (svg) */ + fill: #0078ff; + stroke: #0078ff; + } } @import "react-tooltip/dist/react-tooltip.css"; diff --git a/src/environment.ts b/src/environment.ts index e44e11e..f237e98 100644 --- a/src/environment.ts +++ b/src/environment.ts @@ -1,7 +1,27 @@ import * as alphaTab from "@coderline/alphatab"; +import type { ColorMode } from '@docusaurus/theme-common'; -export default { - setAlphaTabDefaults(settings: alphaTab.Settings) { +const defaultColors = (new alphaTab.Settings()).display.resources; + +function setAlphaTabColors(settings: alphaTab.Settings, colorMode: ColorMode) { + if (colorMode === 'dark') { + settings.display.resources.staffLineColor = alphaTab.model.Color.fromJson('rgb(90, 90, 90)')!; + settings.display.resources.barSeparatorColor = alphaTab.model.Color.fromJson('rgb(221, 221, 238)')!; + settings.display.resources.barNumberColor = alphaTab.model.Color.fromJson('rgb(225, 50, 56)')!; + settings.display.resources.mainGlyphColor = alphaTab.model.Color.fromJson('rgb(255,255,255)')!; + settings.display.resources.secondaryGlyphColor = alphaTab.model.Color.fromJson('rgba(255,255,255,0.4)')!; + settings.display.resources.scoreInfoColor = alphaTab.model.Color.fromJson('rgb(255,255,255)')!; + } else { + settings.display.resources.staffLineColor = defaultColors.staffLineColor; + settings.display.resources.barSeparatorColor =defaultColors.barSeparatorColor; + settings.display.resources.barNumberColor = defaultColors.barNumberColor; + settings.display.resources.mainGlyphColor = defaultColors.mainGlyphColor; + settings.display.resources.secondaryGlyphColor = defaultColors.secondaryGlyphColor; + settings.display.resources.scoreInfoColor = defaultColors.scoreInfoColor; + } +} + + function setAlphaTabDefaults(settings: alphaTab.Settings, colorMode: ColorMode) { settings.core.fontDirectory = "/font/"; settings.player.soundFont = "/soundfont/sonivox.sf3"; settings.player.scrollMode = alphaTab.ScrollMode.Off; @@ -15,6 +35,8 @@ export default { } }) } + + setAlphaTabColors(settings, colorMode); settings.display.resources.copyrightFont.families = ["Noto Sans"]; settings.display.resources.titleFont.families = ["Noto Serif"]; @@ -32,5 +54,9 @@ export default { settings.display.resources.directionsFont.families = ["Noto Serif"]; settings.display.resources.numberedNotationFont.families = ["Noto Sans"]; settings.display.resources.numberedNotationGraceFont.families = ["Noto Sans"]; - }, +} + +export default { + setAlphaTabColors, + setAlphaTabDefaults }; diff --git a/src/hooks.ts b/src/hooks.ts index 9286683..19f401b 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -1,6 +1,7 @@ import React, { type DependencyList, type EffectCallback, useEffect, useRef, useState } from "react"; import * as alphaTab from "@coderline/alphatab"; import environment from "./environment"; +import {useColorMode} from '@docusaurus/theme-common'; export function useAlphaTab( settingsInit: (settings: alphaTab.Settings) => void, @@ -11,6 +12,18 @@ export function useAlphaTab( const [api, setApi] = useState(); const element = React.createRef(); + const { colorMode } = useColorMode(); + + useEffect(()=>{ + if(api) { + environment.setAlphaTabColors(api.settings, colorMode); + api.updateSettings(); + if(api.score) { + api.render(); + } + } + }, [api, colorMode]); + // for easier testing and troubleshooting useEffect(()=>{ const e = element.current as any; @@ -28,7 +41,7 @@ export function useAlphaTab( } const settings = new alphaTab.Settings(); - environment.setAlphaTabDefaults(settings); + environment.setAlphaTabDefaults(settings, colorMode); settingsInit(settings); const newApi = new alphaTab.AlphaTabApi(container, settings); From aff07d43275033cc1015ab557fe4766e92a0b208 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sun, 19 Oct 2025 13:29:24 +0900 Subject: [PATCH 09/15] docs: layout consistency --- docs/alphatex/bar-metadata.mdx | 14 +-- docs/alphatex/score-metadata.mdx | 57 +++++++++--- docs/alphatex/staff-metadata.mdx | 24 +++-- docs/alphatex/structural-metadata.mdx | 121 ++++++++------------------ 4 files changed, 99 insertions(+), 117 deletions(-) diff --git a/docs/alphatex/bar-metadata.mdx b/docs/alphatex/bar-metadata.mdx index a11c96a..a15b786 100644 --- a/docs/alphatex/bar-metadata.mdx +++ b/docs/alphatex/bar-metadata.mdx @@ -46,9 +46,7 @@ There are no properties on this metadata. **Description:** Marks the start of a repeat. -**Values:** - -None. +**Values:** None **Example:** @@ -201,7 +199,7 @@ To avoid unexpected side effects, we recomment to specify the tempo changes only | tempo | The new tempo in BPM | `number` | yes | | label | A textual label for the tempo | `number` | no | | position | A relative (ratio) position where within the bar the tempo change should happen | `number` (float, 0-1) | no | -| hide | If specified the tempo change is not visually shown | no | +| hide | If specified the tempo change is not visually shown | `identifier` | no | **Example:** @@ -261,9 +259,7 @@ There are no properties on this metadata. By default bars follow a strict timing defined by the time signature and tempo. Anacrusis (aka. pickup bars) do not follow this rule. The length of those bars is defined by the actual beats/notes in the bar. -**Values:** - -None +**Values:** None **Example:** @@ -369,9 +365,7 @@ There are no properties on this metadata. **Description:** Marks the bar as a free-time bar where players are free to vary the playback. -**Values:** - -None +**Values:** None **Example:** diff --git a/docs/alphatex/score-metadata.mdx b/docs/alphatex/score-metadata.mdx index b3a0c3f..6e1bfa1 100644 --- a/docs/alphatex/score-metadata.mdx +++ b/docs/alphatex/score-metadata.mdx @@ -32,6 +32,8 @@ It is recommended that these tags are specified at the very beginning of the fil C4 `}
+There are no properties on this metadata. + ## `\subtitle` ```plain title="Tag Syntax" @@ -56,6 +58,8 @@ C4 C4 `}
+There are no properties on this metadata. + ## `\artist` ```plain title="Tag Syntax" @@ -80,6 +84,8 @@ C4 C4 `}
+There are no properties on this metadata. + ## `\album` ```plain title="Tag Syntax" @@ -104,6 +110,8 @@ C4 C4 `}
+There are no properties on this metadata. + ## `\words` ```plain title="Tag Syntax" @@ -127,6 +135,8 @@ C4 C4 `}
+There are no properties on this metadata. + ## `\music` ```plain title="Tag Syntax" @@ -150,6 +160,8 @@ C4 C4 `}
+There are no properties on this metadata. + ## `\wordsandmusic` ```plain title="Tag Syntax" @@ -175,6 +187,8 @@ if `\words` and `\music` have the same value which will be used. C4 `} +There are no properties on this metadata. + ## `\copyright` ```plain title="Tag Syntax" @@ -198,6 +212,8 @@ C4 C4 `} +There are no properties on this metadata. + ## `\copyright2` ```plain title="Tag Syntax" @@ -221,6 +237,8 @@ There is no own "value" as it is typically used to just define a static text lik C4 `} +There are no properties on this metadata. + ## `\instructions` ```plain title="Tag Syntax" @@ -241,6 +259,8 @@ C4 C4 `} +There are no properties on this metadata. + ## `\notices` ```plain title="Tag Syntax" @@ -261,6 +281,8 @@ C4 C4 `} +There are no properties on this metadata. + ## `\tab` ```plain title="Tag Syntax" @@ -284,6 +306,8 @@ C4 C4 `} +There are no properties on this metadata. + ## `\systemsLayout` ```plain title="Tag Syntax" @@ -310,6 +334,8 @@ The system layout, defines how many bars should be displayed per system (line) i :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 `} +There are no properties on this metadata. + ## `\defaultSystemsLayout` ```plain title="Tag Syntax" @@ -336,6 +362,8 @@ The system layout, defines how many bars should be displayed per system (line) i :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 `} +There are no properties on this metadata. + ## `\showDynamics` and `\hideDynamics` ```plain title="Tag Syntax" @@ -344,9 +372,7 @@ The system layout, defines how many bars should be displayed per system (line) i ``` **Description:** Enables or disables the display of dynamics. -**Values:** - -None. +**Values:** None **Example** @@ -362,6 +388,8 @@ None. E4 {dy PP} F4 `} +There are no properties on this metadata. + ## `\useSystemSignSeparator` ```plain title="Tag Syntax" @@ -369,9 +397,7 @@ None. ``` **Description:** Configures whether a system sign separator should be added (in case multiple tracks are shown) -**Values:** - -None. +**Values:** None **Example** @@ -384,6 +410,8 @@ None. :1 C4 | C4 | C4 `} +There are no properties on this metadata. + ## `\multiBarRest` ```plain title="Tag Syntax" @@ -391,9 +419,7 @@ None. ``` **Description:** Enable the display of multibar rests in case multiple tracks are shown. -**Values:** - -None. +**Values:** None **Example** @@ -409,8 +435,9 @@ None. C4 D4 E4 F4 | r | r | C4 D4 E4 F4 | r | r | r | r | `} -## `\bracketExtendMode` +There are no properties on this metadata. +## `\bracketExtendMode` ```plain title="Tag Syntax" \bracketExtendMode mode @@ -448,6 +475,8 @@ None. 0.3.4 2.3.4 5.3.4 7.3.4 `} +There are no properties on this metadata. + ## `\singleTrackTrackNamePolicy` and `\multiTrackTrackNamePolicy` ```plain title="Tag Syntax" @@ -472,6 +501,8 @@ As the name implies the tags configure how to behave if only a single, or multip C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | `} +There are no properties on this metadata. + ## `\firstSystemTrackNameMode` and `\otherSystemsTrackNameMode` ```plain title="Tag Syntax" @@ -498,6 +529,8 @@ As the name implies the tags configure how to behave on the first or on subquent C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | `} +There are no properties on this metadata. + ## `\firstSystemTrackNameOrientation` and `\otherSystemsTrackNameOrientation` ```plain title="Tag Syntax" @@ -526,4 +559,6 @@ As the name implies the tags configure how to behave on the first or on subquent \\track "Piano 1" "pno1" { defaultsystemslayout 3 } \\staff {score} C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | C4 D4 E4 F4 | -`} \ No newline at end of file +`} + +There are no properties on this metadata. \ No newline at end of file diff --git a/docs/alphatex/staff-metadata.mdx b/docs/alphatex/staff-metadata.mdx index 85e038a..7a7b25d 100644 --- a/docs/alphatex/staff-metadata.mdx +++ b/docs/alphatex/staff-metadata.mdx @@ -44,7 +44,7 @@ Some of these tags are simply historically metadata tags. They might become staf The following properties are supported on this metadata. -### Hide Tuning +### `hide` ```plain title="Syntax" hide @@ -52,9 +52,7 @@ hide **Description:** Hides the tuning from being displayed above the first staff. -**Values:** - -None +**Values:** None **Example:** @@ -69,7 +67,7 @@ None 4.1 3.1 2.1 1.1 `} -### Tuning Label +### `label` ```plain title="Syntax" label text @@ -97,6 +95,7 @@ label text ```plain title="Tag Syntax" \chord (name strings) ``` + **Description:** Defines a new chord for a chord diagram display defining how to play it. To avoid inconsistencies with tunings, chords should be defined after the tuning is set. @@ -121,7 +120,7 @@ chord still have to be specified separately, the definition in this metadata is The following properties are supported on this metadata. -### First fret +### `firstfret` ```plain title="Syntax" firstfret fret @@ -143,7 +142,7 @@ firstfret fret (6.1 8.2 8.3 8.4 6.5){ch "D#"} `} -### Barre frets +### `barre` ```plain title="Syntax" barre fret @@ -168,13 +167,14 @@ barre (fret1 fret2...) (3.1 3.2 3.3 1.4 1.5 1.6){ch "Special"} `} -### Show/Hide diagram +### `showDiagram` ```plain title="Syntax" showDiagram visibility ``` -**Description:** Enables/Disables whether the chord diagram should be shown. +**Description:** Enables/Disables whether the chord diagram should be shown. + **Values:** | Name | Description | Type | Required | @@ -189,14 +189,14 @@ showDiagram visibility (0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} `} -### Show/Hide name - +### `showName` ```plain title="Syntax" showName visibility ``` **Description:** Enables/Disables whether the chord name should be shown. + **Values:** | Name | Description | Type | Required | @@ -317,7 +317,6 @@ Currently alphaTex does not defining completely custom articulations (note heads **Built-in articulations:** - export const list = [ ['Ride (choke)', 29], ['Cymbal (hit)', 30], @@ -519,7 +518,6 @@ There are no properties on this metadata. ## `\transpose` - ```plain title="Syntax" \transpose semitones ``` diff --git a/docs/alphatex/structural-metadata.mdx b/docs/alphatex/structural-metadata.mdx index 076689a..d1d3b4f 100644 --- a/docs/alphatex/structural-metadata.mdx +++ b/docs/alphatex/structural-metadata.mdx @@ -53,7 +53,7 @@ If the short name is not specified, the first 10 characters of the long name are Following properties are available. -### Track Color +### `color` ```plain title="Syntax" color colorCode @@ -78,15 +78,13 @@ some other visualizations. It does not have an impact on the color of the music 1.1 2.1 3.1 4.1 `} -### Systems Layout +### `systemsLayout` ```plain title="Syntax" systemsLayout (numberOfBars numberOfBars...) ``` -**Description:** - -Defines the number of bars to display per system. +**Description:** Defines the number of bars to display per system. The `systemsLayout` and `defaultSystemsLayout` allow configuring the system layout. The system layout, defines how many bars should be displayed per system (line) if enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). @@ -105,15 +103,13 @@ The system layout, defines how many bars should be displayed per system (line) i :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 `} -### Default Systems Layout +### `defaultSystemsLayout` ```plain title="Syntax" defaultSystemsLayout numberOfBars` ``` -**Description:** - -Defines the default number of bars to display per system. +**Description:** Defines the default number of bars to display per system. The `systemsLayout` and `defaultSystemsLayout` allow configuring the system layout. The system layout, defines how many bars should be displayed per system (line) if enabled via [`systemsLayoutMode`](/docs/reference/settings/display/systemslayoutmode). @@ -133,19 +129,15 @@ The system layout, defines how many bars should be displayed per system (line) i :1 c4 | c4 | c4 | c4 | c4 | c4 | c4 `} -### Track solo +### `solo` ```plain title="Syntax" solo ``` -**Description:** +**Description:** Set the track to be played alone in the data model. -Set the track to be played alone in the data model. - -**Values:** - -None. +**Values:** None **Example:** @@ -156,19 +148,15 @@ None. 10.1 11.1 12.1 13.1 `} -#### Track Mute +#### `mute` ```plain title="Syntax" mute ``` -**Description:** - -Set the track to be muted (not played) in the data model. - -**Values:** +**Description:** Set the track to be muted (not played) in the data model. -None. +**Values:** None **Example:** @@ -179,15 +167,13 @@ None. 10.1 11.1 12.1 13.1 `} -### Track volume +### `volume` ```plain title="Syntax" volume value ``` -**Description:** - -Set the track volume in the data model. +**Description:** Set the track volume in the data model. **Values:** @@ -204,15 +190,13 @@ Set the track volume in the data model. 10.1 11.1 12.1 13.1 `} -### Track balance +### `balance` ```plain title="Syntax" balance value ``` -**Description:** - -Set the track balance in the data model. +**Description:** Set the track balance in the data model. **Values:** @@ -229,15 +213,13 @@ Set the track balance in the data model. 10.1 11.1 12.1 13.1 `} -### Track instrument +### `instrument` ```plain title="Syntax" instrument value ``` -**Description:** - -Set the midi instrument for this track. +**Description:** Set the midi instrument for this track. **Values:** @@ -413,17 +395,15 @@ C4 C5 r r r r 12.1 13.1 `} -### Track bank +### `bank` ```plain title="Syntax" bank value ``` -**Description:** +**Description:** Set the MIDI bank to select when playing this track. -Set the MIDI bank to select when playing this track. -The loaded soundfont needs to have this bank defined, otherwise -there might be no audio. +The loaded soundfont needs to have this bank defined, otherwise there might be no audio. **Values:** @@ -437,19 +417,15 @@ there might be no audio. \\track { instrument 25 bank 2 } `} -### Multibar rest display +### `multiBarRest` ```plain title="Syntax" multiBarRest ``` -**Description:** - -Enables the display of multibar rests if this track is shown as standalone. - -**Values:** +**Description:** Enables the display of multibar rests if this track is shown as standalone. -None +**Values:** None **Example:** @@ -468,17 +444,13 @@ C4*4 | r.1 | r.1 | r.1 | C4 * 4 ```plain title="Tag Syntax" \staff ``` -**Description:** - -Marks the start of a new staff. +**Description:** Marks the start of a new staff. The staff with the largest number of bars defines how long the overall song is. There is no need to manually ensure that all staves have the correct number of bars. AlphaTab will create missing empty bars automatically. -**Values:** - -None. +**Values:** None **Example** @@ -497,15 +469,13 @@ Following properties are available. If no properties describing the visible notation are provided, the default is `score tabs`. -### Standard notation +### `score` ```plain title="Syntax" score lineCount ``` -**Description:** - -Enable the display of standard notation. +**Description:** Enable the display of standard notation. **Values:** @@ -523,21 +493,17 @@ Enable the display of standard notation. C4 C4 C4 C4 `} -### Guitar Tabs +### `tabs` ```plain title="Syntax" tabs ``` -**Description:** - -Enable the display of guitar tablature. +**Description:** Enable the display of guitar tablature. Guitar tabs are only shown if the contained notes are stringed/fretted notes. -**Values:** - -None +**Values:** None **Example:** @@ -547,7 +513,7 @@ None 3.3 4.3 5.3 5.5 `} -### Slash notation +### `slash` ```plain title="Syntax" slash @@ -557,9 +523,7 @@ slash Enable the display of slash notation. -**Values:** - -None +**Values:** None **Example:** @@ -569,19 +533,15 @@ None 3.3 4.3 5.3 5.5 `} -### Numbered notation (Jianpu) +### `numbered` ```plain title="Syntax" numbered ``` -**Description:** - -Enable the display of numbered notation (Jianpu). - -**Values:** +**Description:** Enable the display of numbered notation (Jianpu). -None +**Values:** None **Example:** @@ -596,18 +556,14 @@ None ```plain title="Tag Syntax" \voice ``` -**Description:** - -Marks the start of a new voice. +**Description:** Marks the start of a new voice. Unlike the structure in the data model, alphaTex expects you to define all bars of a voice, then all the bars of the next voice. It structure is: `\voice /* Voice 1 Bar 1*/ | /* Voice 1 Bar 2*/ \voice /* Voice 2 Bar 1*/ | /* Voice21 Bar 2*/` Once a new voice starts, you again can define the notes starting from the first bar. alphaTab will try to consolidate inconsistencies in the number of bars across voices. -**Values:** - -None. +**Values:** None **Example** @@ -628,5 +584,4 @@ None. `} -This metadata has no properties. - +There are no properties on this metadata. \ No newline at end of file From 3af418eae63cf2e193e015c3dceb31a6c6f2dc58 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 22 Oct 2025 16:21:37 +0900 Subject: [PATCH 10/15] docs: beat properties --- docs/alphatex/beat-properties.mdx | 973 ++++++++++++++++++++++++------ 1 file changed, 787 insertions(+), 186 deletions(-) diff --git a/docs/alphatex/beat-properties.mdx b/docs/alphatex/beat-properties.mdx index 954c9af..73bb84f 100644 --- a/docs/alphatex/beat-properties.mdx +++ b/docs/alphatex/beat-properties.mdx @@ -1,147 +1,361 @@ --- -title: Beat Effects +title: Beat Properties --- import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; -There are various effects that can be applied to a beat. All beat -effects are specified in braces after the beat: `Beat{Effects}`. -Multiple effects are simply separated by spaces, like `3.3{f v}`. - -## Simple Effects - -Please find the list of supported effects in the example below. - -{` -// fade in, fade out and volume swell -3.3{f} 3.3{fo} 3.3{vs} | -// vibrato (slight and wide) -3.3{v} 3.3{vw} | -// tap -3.3{tt} -// slap -3.3{s} -// pop -3.3{p} -| -// dotted -3.3{d} -// double dotted -3.3{dd} -// pick stroke (su => up, sd => down) -3.3{su} -3.3{sd} -| -// grace (on beat) -3.3{gr ob} -3.3 -// grace (before beat) -3.3{gr} -3.3 -| -// Tuplets (supported variants: 3, 5, 6, 7, 9, 10, 11, 12 or custom) -3.3{tu 3} 3.3{tu 3} 3.3{tu 3} | -3.3{tu 5} 3.3{tu 5} 3.3{tu 5} 3.3{tu 5} 3.3{tu 5} | -3.3{tu 4 3} 3.3{tu 4 3} 3.3{tu 4 3} 3.3{tu 4 3} -| -// tremolo picking (tp duration - where duration can be 8, 16 or 32) -3.3{tp 8} 3.3{tp 16} 3.3{tp 32} -| -// Crescendo / Decrescendo -3.3{cre} 3.3{cre} 3.3{dec} 3.3{dec} +The properties defined on beat level, result in a variety of effects and annotations +shown in the music sheet. Historically these properties are heavily abbreviated to +reduce the text that needs to be written to apply them. + +In future alphaTab will likely change to a more verbose, but clearer alternative. + +## `f` + +```plain title=" Syntax" +f +``` +**Description:** Adds a fade-in effect to the beat. Applies to all notes. + +**Values:** None + +**Example** + +{` + (0.1 2.2 2.3 2.4 0.5).2 { f } `} -## Dynamics +## `fo` -Dynamics are beat effects with the indicator `dy` followed by one of the supported dynamics values PPP, PP, P, MP, MF, F, FF, FFF, PPPP, PPPPP, PPPPPP, FFFF, FFFFF, FFFFFF, SF, SFP, SFPP, FP, RF, RFZ, SFZ, SFFZ, FZ, N, PF, SFZP. +```plain title=" Syntax" +fo +``` +**Description:** Adds a fade-out effect to the beat. Applies to all notes. -{` -1.1.8{dy ppp} 1.1{dy pp} 1.1{dy p} 1.1{dy mp} 1.1{dy mf} 1.1{dy f} 1.1{dy ff} 1.1{dy fff} +**Values:** None + +**Example** + +{` +(0.1 2.2 2.3 2.4 0.5).1 { fo } `} -## Tuplet Ranges +## `vs` + +```plain title=" Syntax" +fo +``` +**Description:** Adds a volume-swell effect to the beat. Applies to all notes. + +**Values:** None -You can also specify the tuplet as part of a ranged duration. This makes writing tuplets a bit easier if there are many. -To reset the tuplet range, a new duration range can be started. For individual notes other tuplets can be specified too. -`{tu 1}` can be used to specify no tuplet while a tuplet range is active. +**Example** -{` -:4{tu 3} 3.3 3.3 3.3 :8 3.3 3.3 3.3 3.3 | -:8{tu 3} 3.3 3.3 3.3 3.3.16 3.3.16 3.3.16 3.3.2{tu 1} 3.3.16{tu 1} 3.3.4 3.3.4 3.3.4 +{` +(0.1 2.2 2.3 2.4 0.5).1 { vs } `} -## Tremolo / Whammy Bar +## `v` -The tremolo/whammy bar effect is a bit more complex than the others. -You can specify a number of values which are evenly distributed over the -time when the note is played with the format `tb (value1 value2 ...)`. -The values indicate the number of quarter notes increased or decreased while playing (use decimals for quarter notes). +```plain title=" Syntax" +v +``` +**Description:** Adds a slight vibrato effect to the beat. Applies to all notes. -{` -3.3.1{tb (0 4 0 8)} | -3.3.1{tb (0 -4 0 -8)} | +**Values:** None + +**Example** + +{` +(0.1 2.2 2.3 2.4 0.5).1 { v } `} -To specify a whammy with exact positions (not evenly distributed) you can use `tbe (offset1 value1 offset2 value2)`. -The offset is ranging from 0 to 60. +## `vw` -{` -3.3.1{tbe (0 0 5 4 30 8 60 0)} +```plain title=" Syntax" +vw +``` +**Description:** Adds a wide vibrato effect to the beat. Applies to all notes. + +**Values:** None + +**Example** + +{` +(0.1 2.2 2.3 2.4 0.5).1 { vw } `} -Additionally the exact whammy type and style can be specified for both kinds after before the value list. +## `s` -* `tb type (value1 value2)` -* `tb type style (value1 value2)` -* `tbe type (value1 value2)` -* `tbe type style (value1 value2)` +```plain title=" Syntax" +s +``` +**Description:** Adds a bass slap annotation to the beat. -It is recommended to rely on the auto-detection of the type and only specify the type explicitly if something is wrong: -* `custom` - use this for non standard custom whammys with multiple points -* `dive` - use this when having a gradual change between two points -* `dip` - use this when you have a A->B->A whammy pattern. -* `hold` - use this when holding whammys (on tied notes) -* `predive` - use this when whammy bar is pressed/pulled before playing the note and then kept. -* `predivedive` - use this when whammy bar is pressed/pulled before playing the note and then released again. +**Values:** None -The style can be one of these values: -* `default` - No additional text is shown, the bend offsets and values are respected as specified. -* `gradual` - Will show an additional "grad." on the whammy line. The audio is generated according to the type spread evenly across the play duration. -* `fast` - No additional text is shown. The audio is generated according to the type spread evenly across the fixed duration set via `settings.player.songBookBendDuration`. +**Example** -## Brushes / Arpeggio +{` +\instrument "Electric Bass Finger" +\ts (3 4) 3.4.8 {s} (5.1 5.2).4 {p} 3.4.8 {s} (5.1 5.2).4 {p} +`} -Brush stroke effects are: brush down `bd`, brush up `bu`, arpeggio down `ad`, and arpeggio up `au`. -By default, the duration between notes is calculated based on the number of notes in the beat (the chord). -A custom duration (in MIDI ticks) can also be specified with, for example `bd 120`. +## `p` -{` -:2 (0.1 0.2 0.3 2.4 2.5 0.6){bd} (0.1 0.2 0.3 2.4 2.5 0.6){bu} | -(0.1 0.2 0.3 2.4 2.5 0.6){ad} (0.1 0.2 0.3 2.4 2.5 0.6){au} | -(0.1 0.2 0.3 2.4 2.5 0.6){bd 360} (0.1 0.2 0.3 2.4 2.5 0.6){bu 60} +```plain title=" Syntax" +p +``` +**Description:** Adds a bass pop annotation to the beat. + +**Values:** None + +**Example** + +{` +\instrument "Electric Bass Finger" +\ts (3 4) 3.4.8 {s} (5.1 5.2).4 {p} 3.4.8 {s} (5.1 5.2).4 {p} `} -## Chords +## `tt` + +```plain title=" Syntax" +tt +``` +**Description:** Adds a guitar or bass tapping annotation to the beat. + +**Values:** None + +**Example** + +{` +\instrument "Electric Bass Finger" +:8 {tu 3} + 18.1 {tt h} 10.1 {h} 14.1 + 18.1 {tt h} 10.1 {h} 14.1 + 18.1 {tt h} 10.1 {h} 14.1 + 18.1 {tt h} 10.1 {h} 14.1 + `} + + +## `d` + +```plain title=" Syntax" +d +``` +**Description:** Marks the beat a single dot. + +**Values:** None + +**Example** + +{` +(0.1 2.2 2.3 2.4 0.5).1 { dd } +`} + +## `dd` + +```plain title=" Syntax" +dd +``` +**Description:** Marks the beat with two dots. + +**Values:** None + +**Example** + +{` +(0.1 2.2 2.3 2.4 0.5).1 { dd } +`} + +## `su` + +```plain title=" Syntax" +su +``` +**Description:** Adds an upwards pick-stroke annotation to the beat. + +**Values:** None + +**Example** + +{` +0.1 { su } +`} + +## `sd` + +```plain title=" Syntax" +sd +``` +**Description:** Adds an downwards pick-stroke annotation to the beat. + +**Values:** None -If you want to specify chords on top of your beats this can be done via the `ch "ChordName"` effect. -This will annotate the chord name above the beat. +**Example** -{` -(1.1 3.2 5.3 3.4 1.5){ch "A#add9"} (1.1 3.2 5.3 3.4 1.5)*3 | -(4.1 6.2 6.3 6.4 4.5){ch "C#"} (4.1 6.2 6.3 6.4 4.5)*3 | -(6.1 8.2 8.3 8.4 6.5){ch "D"} (6.1 8.2 8.3 8.4 6.5)*3 | -(0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} (0.1 0.2 1.3 2.4 2.5 0.6)*3 +{` +0.1 { sd } `} +## `cre` -## Timer +```plain title=" Syntax" +cre +``` +**Description:** Adds a crescendo effect to the beat. + +**Values:** None + +**Example** + +{` +3.3 { cre } -.3 { cre } +`} + + +## `dec` + +```plain title=" Syntax" +dec +``` +**Description:** Adds a decrescendo (diminuendo) effect to the beat. + +**Values:** None + +**Example** + +{` +3.3 { dec } -.3 { dec } +`} + +## `spd`, `sph`, `spu` and `spe` + + +```plain title=" Syntax" +spd +sph +spu +spe +``` +**Description:** Adds sustain pedal annotations to the beat. + +The different properties mark whether to press the pedal down, hold or release it. + +* `spd` Sustain pedal down (press) +* `sph` Sustain pedal hold (continue press) +* `spu` Sustain pedal up (release) +* `spe` Sustain pedal up at end of the beat + +**Values:** None + +**Example** + +{` +C4 {spd} C4 {sph} C4 {sph} C4 {spu} | +C4 {spd} C4 {sph} C4 {sph} C4 {spe} +`} + +## `slashed` + +```plain title=" Syntax" +slashed +``` +**Description:** Marks the beat to be displayed with slash notation. + +**Values:** None + +**Example** + +{` +(0.1 2.2 2.3 2.4 0.5).2 (0.1 2.2 2.3 2.4 0.5).2 { slashed } +`} + +## `ds` + +```plain title=" Syntax" +ds +``` +**Description:** Marks the beat to be a dead-slap beat. + +As no notes should be on such a beat, simply use `()` to indicate the empty beat which is not a rest. + +**Values:** None + +**Example** + +{` +().4 {ds} ().4 {ds} +`} + +## `glpf`, `glpt` + +```plain title=" Syntax" +glpf +glpt +``` +**Description:** Adds a golpe effect to the beat. + +* `glpf` for a Golpe tapped with the finger +* `glpt` for a Golpe tapped with the thumb + +**Values:** None + +**Example** + +{` +3.3{glpf} 3.3{glpt} +`} + +## `waho`, `wahc` + +```plain title=" Syntax" +waho +wahc +``` +**Description:** Adds a Wah-pedal effect to the beat. + +* `waho` for a the pedal to be opened +* `wahc` for a the pedal to be closed + +**Values:** None + +**Example** + +{` +3.3 3.3{waho} 3.3 3.3 {wahc} +`} + +## `legatoOrigin` + +```plain title=" Syntax" +legatoOrigin +``` +**Description:** Adds a legato from this beat to the next one. + +**Values:** None + +**Example** + +{` +3.3.4{ legatoOrigin } 10.3.4 +`} + +## `timer` + +```plain title=" Syntax" +timer +``` +**Description:** Adds a timestamp marker to the beat. Timers are showing the exact timestamp when a beat is played the first time (respecting aspects like repeats). -To enable the display of timers add a `timer` to the beat effect list. -{` +**Values:** None + +**Example** + +{` \\tempo 120 -. 3.3.4 { timer } 3.3.4*3 | \\ro 3.3.4 { timer } 3.3.4*3 | 3.3.4 { timer } 3.3.4*3 | @@ -153,151 +367,538 @@ To enable the display of timers add a `timer` to the beat effect list. 3.3.4 { timer } 3.3.4*3 `} -## Tempo Changes +## `tu` -With the support of multiple tempo changes within a single bar, tempo changes can now be applied on beat level to mark -the exact spot when the tempo should be changed. +```plain title=" Syntax" +tu simple +tu (numerator denominator) +``` +**Description:** Adds a tuplet to the beat duration. -{` -. -C4 {tempo 120} D4 E4 {tempo 140} F4 | C4.8 {tempo 80} C4 D4 {tempo 100} D4 E4 {tempo 120} E4 F4 {tempo 240} F4 +There are some built-in simple tuplet variants (see below) or you can specify the exact division. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| simple | The simple tuplet | `number` | yes | +| numerator | The tuplet numerator | `number` | yes | +| denominator | The tuplet denominator | `number` | yes | + +The simple tuplets expand like this: + +* `3` => `3:2` +* `5` => `5:4` +* `6` => `6:4` +* `7` => `6:4` +* `9` => `9:8` +* `10` => `10:8` +* `12` => `12:8` + +**Example** + +{` +C4 {tu 3} * 3 | +C4 {tu 5} * 5 | +C4 {tu 5 2} * 5 `} -## Rasgueado +## `txt` -Rasgueado patterns can be added to beats via `rasg PATTERN` where pattern is one of the following values dervived from the patterns -Guitar Pro supports: +```plain title=" Syntax" +txt text +``` +**Description:** Adds a text annotation to the beat. -import { RasgueadoPatterns } from '@site/src/components/RasgueadoPatterns'; +**Values:** - +| Name | Description | Type | Required | +|------|-------------|------|----------| +| text | The text to show above the beat | `string` | yes | -{` -(1.1 3.2 2.3 0.4) * 4 {rasg amii} + +**Example** + +{` +C4 {txt "This is a C4 Note"} `} -## Slashed Beats +## `lyrics` + +```plain title=" Syntax" +lyrics text +lyrics line text +``` +**Description:** Adds a lyric text to the beat. + +This is an alternative way of applying the exact lyrics to beats instead of using +the `\lyrics` metadata where a special syntax is used to spread the text across beats. + -To use slash notation on beats add the `slashed` keyword to the effect list. +**Values:** -{` -C4.4 {slashed} C4.8 {slashed} C4.8 {slashed} C4.4 {slashed} +| Name | Description | Type | Required | +|------|-------------|------|----------| +| text | The lyrics to show | `string` | yes | +| line | The line number (e.g. for multiple verses)| `number` | no | + + +**Example** + +{` +C4 {lyrics "Do"} +D4 {lyrics "Re"} +E4 {lyrics "Mi"} +F4 {lyrics "Fa"} | +G4 {lyrics 0 "So" lyrics 1 "G"} +A4 {lyrics 0 "La" lyrics 1 "A"} +B4 {lyrics 0 "Ti" lyrics 1 "B"} +r `} -## Dead Slap +## `tb` and `tbe` -To use dead slapped beats the `ds` keyword to the effect list. As no notes should be on such a beat, -simply use `()` to indicate the empty beat. +```plain title=" Syntax" +tb (type style value1 value2 value3...) +tbe (type style offset1 value1 offset2 value2 offset3 value3...) +``` +**Description:** Adds a whammy bar (aka. tremolo bar) effect to the beat. -{` -().4 {ds} ().4 {ds} +* The `tb` variant automatically spreads the values across the duration of the beat. +* The `tbe` (exact) variant allows specifying exactly at which offset a value is placed. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| type | The type of whammy (affects the display). | `custom`, `dive`, `dip`, `hold`, `predive`, `predivedive` | no | +| style | The style of the whammy play style. | `default`, `gradual`, `fast`` | no | +| offset | The offset at which the value becomes valid | `number` (0-60) | yes (if `tbe`) | +| value | The value of the whammy in quarter-tones relative to the original note, decimals supported | `number` | yes | + +It is recommended to rely on the auto-detection of the type and only specify the type explicitly if something is wrong: +* `custom` - use this for non standard custom whammys with multiple points +* `dive` - use this when having a gradual change between two points +* `dip` - use this when you have a A->B->A whammy pattern. +* `hold` - use this when holding whammys (on tied notes) +* `predive` - use this when whammy bar is pressed/pulled before playing the note and then kept. +* `predivedive` - use this when whammy bar is pressed/pulled before playing the note and then released again. + +The style can be one of these values: +* `default` - No additional text is shown, the bend offsets and values are respected as specified. +* `gradual` - Will show an additional "grad." on the whammy line. The audio is generated according to the type spread evenly across the play duration. +* `fast` - No additional text is shown. The audio is generated according to the type spread evenly across the fixed duration set via `settings.player.songBookBendDuration`. + +**Example** + +{` +3.3.1{tb (0 4 0 8)} | r | +3.3.1{tb (0 -4 0 -8)} | r | +3.3.1{tbe (0 0 5 4 30 8 60 0)} +`} + +## `bu`, `bd` + +```plain title=" Syntax" +bu duration +bd duration +``` +**Description:** Adds a brush stroke effect to the beat. + +* `bu` for an upwards brush +* `bd` for a downwards brush + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| duration | A custom duration of the stroke speed in MIDI ticks | `number` | no | + +By default, the duration between notes is calculated based on the number of notes in the beat. + +**Example** + +{` +:2 (0.1 0.2 0.3 2.4 2.5 0.6){bd} (0.1 0.2 0.3 2.4 2.5 0.6){bu} | +(0.1 0.2 0.3 2.4 2.5 0.6){bd 360} (0.1 0.2 0.3 2.4 2.5 0.6){bu 60} `} -## Beat Timer +## `au`, `ad` -To show the time when a beat is played the first time add `timer` to the effect list. +```plain title=" Syntax" +au duration +ad duration +``` +**Description:** Adds an arpeggio effect to the beat. -{` -:2 C4 { timer } C4 | -\\ro C4 { timer } C4 | -\\ae 1 C4 C4 { timer } | -\\rc 3 \\ae (2 3) C4 { timer } C4 { timer } | -C4 { timer } C4 +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| duration | A custom duration of the stroke speed in MIDI ticks | `number` | no | + +By default, the duration between notes is calculated based on the number of notes in the beat. + +**Example** + +{` +(0.1 0.2 0.3 2.4 2.5 0.6){ad} (0.1 0.2 0.3 2.4 2.5 0.6){au} | `} -## Sustain Pedals +## `ch` + +```plain title=" Syntax" +ch chordName +``` +**Description:** Adds a chord annotation to the beat. + +If the staff has a definition for this chord it will be shown in the chord diagram list to indicate its usage. +The beat still has to define the notes separately. + -To mark that on a beat the sustain pedal should be pressed add `spd`. -To release it again `spu` +**Values:** -{` -3.3{string} 3.3{spd} 3.3 3.3 {spu} +| Name | Description | Type | Required | +|------|-------------|------|----------| +| chordName | The name of the chord | `string` | yes | + +**Example** + +{` +\\chord ("C" 0 1 0 2 3 x) +\\ts 2 4 +(0.1 1.2 0.3 2.4 3.5){ch "C"} (0.1 1.2 0.3 2.4 3.5) | +(0.1 2.2 2.3 2.4 0.5){ch "A"} `} -## Golpe +## `gr` -To mark that on a beat a golpe should be performed with the thumb use `glpt`, to add a golpe played with a finger use `glpf` +```plain title=" Syntax" +gr type +``` +**Description:** Marks the beat as a grace beat holding grace notes. -{` -3.3{glpf} 3.3{glpt} +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| type | The type of grace notes | `ob`, `bb`, `b` | no (default: `bb`) | + +* `ob` is an On-Beat grace note where this beat will start at the play time of the next beat and steal its play time from the next beat. +* `bb` is a Before-Beat grace note where this beat will start before the next beat and steal its play time from the previous beat. +* `b` is a bend grace note, a mechanism used in alphaTab for the "songbook style" bends notes. You will likely not apply this type manually. + +**Example** + +{` +C5 + D5 {gr} C5 +C5 + D5 {gr} C5 +| +C5 + D5 {gr ob} C5 +C5 + D5 {gr ob} C5 `} -## Wah-Pedal +## `dy` + +```plain title=" Syntax" +dy dynamic +``` +**Description:** Defines the play dynamics for this beat. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| dynamic | The dynamic value to apply | `identifier` | yes | + +Following dynamic values are supported: + +* PPP +* PP +* P +* MP +* MF +* F +* FF +* FFF +* PPPP +* PPPPP +* PPPPPP +* FFFF +* FFFFF +* FFFFFF +* SF +* SFP +* SFPP +* FP +* RF +* RFZ +* SFZ +* SFFZ +* FZ +* N +* PF +* SFZP + +**Example** + +{` +1.1.8{dy ppp} 1.1{dy pp} 1.1{dy p} 1.1{dy mp} 1.1{dy mf} 1.1{dy f} 1.1{dy ff} 1.1{dy fff} +`} -To mark that on a beat a wah pedal should be opened `waho`, and indicate a close use `wahc`. +## `tempo` -{` -3.3 3.3{waho} 3.3 3.3 {wahc} +```plain title=" Syntax" +tempo bpm +tempo (bpm label hide) +``` +**Description:** Add a tempo change to the beat. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| bpm | The new tempo in BPM | `number` | yes | +| label | A textual label for the tempo | `string` | no | +| hide | If specified, the tempo change is not shown in the music sheet | `hide` | no | + +**Example** + +{` +C4 {tempo 120} D4 E4 {tempo 140} F4 | C4.8 {tempo 80} C4 D4 {tempo 100} D4 E4 {tempo 120} E4 F4 {tempo 240} F4 `} -## Barré +## `volume` -To show barré chord notation, add `barre fret mode` to the effect list where +```plain title=" Syntax" +volume value +``` +**Description:** Add a volume change to the beat. -* `fret` is the numeric fret of the barré chord -* `mode` is either `full` (default if no mode specified) or `half` +The change affects all beats after this one. -{` +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The new volume | `number` (0-16) | yes | + +**Example** + +{` +C4 {volume 8} D4 E4 {tempo 16} F4 +`} + +## `balance` + +```plain title=" Syntax" +balance value +``` +**Description:** Add a balance (pan) change to the beat. + +The change affects all beats after this one. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The new balance | `number` (0-16, 8 is centered) | yes | + +**Example** + +{` +C4 {balance 0} D4 E4 {balance 16} F4 +`} + +## `tp` + +```plain title=" Syntax" +tp speed +``` +**Description:** Add a tremolo picking to the beat. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| speed | The tremolo picking speed | `number` (8, 16 or 32) | yes | + +**Example** + +{` +3.3{tp 8} 3.3{tp 16} 3.3{tp 32} +`} + +## `barre` + +```plain title=" Syntax" +barre fret +barre (fret mode) +``` +**Description:** Add a barré chord notation to the beat. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| fret | The numeric fret for the barre chord | `number` | yes | +| mode | The barre mode | `full` or `half` | no | + +**Example** + +{` 1.1 {barre 24} 2.1 {barre 24} 3.1 {barre 24} 4.1 | 1.1 {barre 4 half} 2.1 {barre 4 half} 3.1 {barre 4 half} 4.1 {barre 4 half} | `} -## Ottava -To mark octave changes on beats add `ottava value` to the effect list where value is one of: +## `rasg` + +```plain title=" Syntax" +rasg pattern +``` +**Description:** Add a rasgueado play pattern to the beat. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| pattern | The pattern to apply | `identifier` | yes | + +The pattern is one of the following values dervived from the patterns Guitar Pro supports: + +import { RasgueadoPatterns } from '@site/src/components/RasgueadoPatterns'; + + + +**Example** + +{` +(1.1 3.2 2.3 0.4) * 4 {rasg amii} +`} + +## `ot` + +```plain title=" Syntax" +ot value +``` +**Description:** Adds a octave change (ottava) to the beat. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The octave shift to apply | `15ma`, `8va`, `regular`, `8vb` or `15mb` | yes | -* `15ma` -* `8va` -* `regular` -* `8vb` -* `15mb` +**Example** -{` +{` 3.3.4{ ot 15ma } 3.3.4{ ot 8vb } `} -## Legato +## `instrument` -To indicate a beat starts a legato to the next beat mark it with `legatoOrigin`: +```plain title=" Syntax" +instrument value +``` -{` -3.3.4{ legatoOrigin } 10.3.4 +**Description:** Adds a instrument change to the beat. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The new MIDI instrument | `number` or `string` | yes | + +See also [`instrument`](./structural-metadata.mdx#instrument). + +**Example** + +{` +3.3.4{ ot 15ma } 3.3.4{ ot 8vb } `} -## Instrument Changes +## `bank` + +```plain title=" Syntax" +bank value +``` -To mark a change of the instrument used for playback use the `instrument instrumentNumberOrName` effect. +**Description:** Adds a instrument bank change to the beat. -See [Instrument](/docs/alphatex/metadata#instrument) for details on available instruments. +**Values:** -{` -\\instrument ElectricGuitarClean -1.1 2.1 3.1 4.1 | 1.1 { instrument DistortionGuitar txt Distortion } 2.1 3.1 4.1 +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The new MIDI bank | `number` | yes | + +See also [`bank`](./structural-metadata.mdx#bank). + +**Example** + +{` +C4 C4 C4 {instrument 25 bank 2} C4 `} -## Fermata +## `fermata` + +```plain title=" Syntax" +fermata type +fermata (type length) +``` -To mark fermatas add `fermata fermataType` or `fermata fermataType fermataLength` to the beat effects. -* `fermataType` can be `short`, `medium` or `long` -* `fermataLength` is currently ignored. +**Description:** Adds a fermata to the beat. -{` +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| type | The fermata type | `short`, `medium` or `long` | yes | +| length | The fermata length | `number` | no | + +**Example** + +{` G4 G4 G4 { fermata medium 4 } `} -## Beaming Modes +## `beam` + +```plain title=" Syntax" +beam mode +``` + +**Description:** Changes the beaming and stem direction for the beat. + +Can be specified multiple times. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| mode | The mode to apply | `identifier` | yes | + + +Stem direction adjustments: + +* `invert` - Inverts the default stem direction. +* `up` - Forces the stem to point upwards. +* `down` - Forces the stem to point downwards. +* `auto` - Sets the beaming mode to automatic. + +Beaming modes: -The beaming modes allow adjusting allow overriding the default beam placement. +* `split` - Forces a split of the beam to the next beat (if there would be any) +* `merge` - Forces a merge of the beam to the next beat (even if there would be none) +* `splitsecondary` - Forces a split of the last bar connecting two beats (if there is any). -* `beam invert` - Inverts the default stem direction. -* `beam up` - Forces the stem to point upwards. -* `beam down` - Forces the stem to point downwards. -* `beam auto` - Sets the beaming mode to automatic. -* `beam split` - Forces a split of the beam to the next beat (if there would be any) -* `beam merge` - Forces a merge of the beam to the next beat (even if there would be none) -* `beam splitsecondary` - Forces a split of the last bar connecting two beats (if there is any). +**Example** -{` +{` :8 3.3{ beam invert } 3.3 | 3.1{ beam up } 3.1 | 3.6{ beam down } 3.6 | From 4905b4a28fb03c7982a60f19c2fe754120d69518 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 22 Oct 2025 16:22:55 +0900 Subject: [PATCH 11/15] feat: dark mode on rasgueado --- src/components/RasgueadoPatterns/index.tsx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/RasgueadoPatterns/index.tsx b/src/components/RasgueadoPatterns/index.tsx index db98558..b5ddfbf 100644 --- a/src/components/RasgueadoPatterns/index.tsx +++ b/src/components/RasgueadoPatterns/index.tsx @@ -3,6 +3,7 @@ import * as alphaTab from "@coderline/alphatab"; import { useEffect, useRef } from "react"; import styles from "./styles.module.scss"; import environment from "@site/src/environment"; +import { useColorMode } from '@docusaurus/theme-common'; type RasguadoItemMode = "down" | "up" | "head"; type RasgueadoPatternItem = { @@ -141,7 +142,7 @@ const RasgueadoPatternDefinition = new Map< { finger: "i", mode: "up", - flag: alphaTab.model.MusicFontSymbol.FlagEighthUp, + flag: alphaTab.model.MusicFontSymbol.Flag8thUp, }, ], ], @@ -155,7 +156,7 @@ const RasgueadoPatternDefinition = new Map< { finger: "p", mode: "up", - flag: alphaTab.model.MusicFontSymbol.FlagEighthUp, + flag: alphaTab.model.MusicFontSymbol.Flag8thUp, }, ], ], @@ -199,11 +200,13 @@ type RasgueadoPatternProps = { const canvas = alphaTab.Environment.renderEngines.get("svg")!.createCanvas(); canvas.settings = new alphaTab.Settings(); -environment.setAlphaTabDefaults(canvas.settings); canvas.settings.display.scale = 1.5; export function RasgueadoPattern({ rasgueado }: RasgueadoPatternProps) { const pattern = RasgueadoPatternDefinition.get(rasgueado)!; + const { colorMode } = useColorMode(); + + environment.setAlphaTabDefaults(canvas.settings, colorMode); const canvasRef = useRef(null); @@ -233,7 +236,7 @@ export function RasgueadoPattern({ rasgueado }: RasgueadoPatternProps) { // canvas.fillRect(startX, 0, actualWidth, canvasHeight); - canvas.color = new alphaTab.model.Color(0, 0, 0); + canvas.color = canvas.settings.display.resources.mainGlyphColor; canvas.font = alphaTab.model.Font.fromJson(canvasStyle.font)!.withSize(10); canvas.font.families = [canvas.font.families[0]]; @@ -382,7 +385,7 @@ export function RasgueadoPattern({ rasgueado }: RasgueadoPatternProps) { } canvasRef.current!.innerHTML = canvas.endRender() as string; - }, []); + }, [colorMode]); return (
From 9299c66a5b5deeda89c39f92f27c729791fc0e2f Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 22 Oct 2025 17:17:35 +0900 Subject: [PATCH 12/15] docs: note properties --- docs/alphatex/beat-properties.mdx | 2 +- docs/alphatex/note-properties.mdx | 545 ++++++++++++++++++++++++------ 2 files changed, 439 insertions(+), 108 deletions(-) diff --git a/docs/alphatex/beat-properties.mdx b/docs/alphatex/beat-properties.mdx index 73bb84f..b681ac9 100644 --- a/docs/alphatex/beat-properties.mdx +++ b/docs/alphatex/beat-properties.mdx @@ -4,7 +4,7 @@ title: Beat Properties import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; -The properties defined on beat level, result in a variety of effects and annotations +The properties defined on beat level result in a variety of effects and annotations shown in the music sheet. Historically these properties are heavily abbreviated to reduce the text that needs to be written to apply them. diff --git a/docs/alphatex/note-properties.mdx b/docs/alphatex/note-properties.mdx index effea99..2d0601d 100644 --- a/docs/alphatex/note-properties.mdx +++ b/docs/alphatex/note-properties.mdx @@ -1,163 +1,455 @@ --- -title: Note Effects +title: Note Properties --- import { AlphaTexSample } from '@site/src/components/AlphaTexSample'; -Just like beat effects, there are also effects for single notes like harmonics, -bends, accentuations etc. The syntax is `Fret.String{NoteEffects}` or `PitchedNote{NoteEffects}`. +The properties defined on note level result in a variety of effects and annotations +shown in the music sheet. Historically these properties are heavily abbreviated to +reduce the text that needs to be written to apply them. + +In future alphaTab will likely change to a more verbose, but clearer alternative. + +## `nh`, `ah`, `th`, `ph`, `sh`, `fh` + +```plain title=" Syntax" +nh +ah value +th value +ph value +sh value +fh value +``` +**Description:** Applies a harmonic effect to the note (for fretted instruments). + +* `nh` for a Natural Harmonic +* `ah` for a Artificial Harmonic +* `th` for a Tapped Harmonic +* `ph` for a Pinch Harmonic +* `sh` for a Semi Harmonic +* `fh` for a Feedback Harmonic + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| value | The harmonic value | `number` | no | + +The harmonic value determines a relative fret-offset changing the note pitch when played. +For natural harmonics the played fret determines the harmonic value. The rules are a bit special but mostly +are aligned with the frequency adjustments happening when harmonics are played at respective frets: + +* `2.4` adds 36 frets +* `2.7` adds 34 frets +* `< 3` adds 0 frets +* `<= 3.5` adds 31 frets +* `<= 4` adds 28 frets +* `<= 5` adds 34 frets +* `<= 7` adds 19 frets +* `<= 8.5` adds 36 frets +* `<= 9` adds 28 frets +* `<= 10` adds 34 frets +* `<= 11` adds 0 frets +* `<= 12` adds 12 frets +* `< 14` adds 0 frets +* `<= 15` adds 34 frets +* `<= 16` adds 28 frets +* `<= 17` adds 36 frets +* `<= 18` adds 0 frets +* `<= 19` adds 19 frets +* `<= 21` adds 0 frets +* `<= 22` adds 36 frets +* `<= 24` adds 24 frets +* other: adds 0 frets + + +**Example** + +{` +:8 3.3{nh} 3.3{ah} 3.3{ph} 3.3{th} 3.3{sh} +`} -## Simple Effects -Please find the list of supported effects in the examples below. +## `v` -### Harmonics +```plain title=" Syntax" +v +``` +**Description:** Applies a slight vibrato effect to the note. -Natural `nh`, artificial `ah`, pinch `ph`, tap `th`, semi `sh`, feedback `fh`. +**Values:** None -{` -:8 3.3{nh} 3.3{ah} 3.3{ph} 3.3{th} 3.3{sh} +**Example** + +{` +3.3{v} `} -### Trill +## `vw` -`tr ` +```plain title=" Syntax" +vw +``` +**Description:** Applies a wide vibrato effect to the note. -{` -:4 3.3{tr 4 16} 3.3{tr 5 32} 3.3{tr 6 64} -`} +**Values:** None -### Vibrato +**Example** -{` -3.3{v} +{` +3.3{vw} `} -### Slide - -Legato `sl`, shift `ss`, into-from-below `sib`, into-from-above `sia`, -out-up `sou`, out-down `sod`, pick-slide-down `psd` and pick-slide-up `psu`. - -{` +## `sl`, `ss`, `sib`, `sia`, `sou`, `sod`, `psu`, `psd` + +```plain title=" Syntax" +sl +ss +sib +sia +sou +sod +psd +psu +``` +**Description:** Applies a slide effect to the note. + +* `sl` for a legato slide +* `ss` for a shift slide +* `sib` for a slide into from below +* `sia` for a slide into from above +* `sou` for a slide out upwards +* `sod` for a slide out downwards +* `psu` for a pick slide upwards +* `psd` for a pick slide downwards + +**Values:** None + +**Example** + +{` 3.3{sl} 4.3 3.3{ss} 4.3 | 3.3{sib} 3.3{sia} 3.3{sou} 3.3{sod} | 3.3{sib sou} 3.3{sib sod} 3.3{sia sod} 3.3{sia sou} | x.3{psd} 3.3 | -x.3{psu} 3.3 | -`} +x.3{psu} 3.3 |`} + +## `h` + +```plain title=" Syntax" +h +``` +**Description:** Applies a hammer on / pull-off effect to the note. + +The fret of the following note on the same string defines whether it is a hammer-on or pull-of + +**Values:** None -### Hammer-On / Pull-Off +**Example** {` 3.3{h} 4.3 4.3{h} 3.3 | 3.3{h} 4.3{h} 3.3{h} 4.3 `} -### Left Hand Tapping +## `lht` + +```plain title=" Syntax" +lht +``` +**Description:** Applies a left-hand-tapped annotation to the note. + +**Values:** None + +**Example** {` :16 15.1{h} 13.1{h} 12.1{h} 15.2{lht} `} -### Ghost Note +## `g` + +```plain title=" Syntax" +g +``` +**Description:** Marks the note as a ghost note. + +**Values:** None + +**Example** {` 3.3{g} `} -### Dead Notes +## `ac`, `hac`, `ten` -Dead Notes are notated by using `x` as fret, or with the note effect `x`. +```plain title=" Syntax" +ac +hac +ten +``` -{` -x.3 3.3{x} -`} +**Description:** Applies an accentuation to the note. + +* `ac` for a simple accentuation ++ `hac` for a heavy accentuation +* `ten` for a tenuto accentuation -### Accentuations +**Values:** None -Normal `ac`, heavy `hac` and tenuto `ten`. +**Example** {` 3.3{ac} 3.3{hac} 3.3{ten} `} -### Staccato +## `tr` + +```plain title=" Syntax" +tr fret +tr (fret duration) +``` + +**Description:** Applies a trill effect to the note. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| fret | The fret on which to trill | `number` | yes | +| duration | The duration/speed of the trills | `16` (default), `32` or `64` | no | + +**Example** {` -3.3{st} +:4 3.3{tr 4} 3.3{tr 4 16} 3.3{tr 5 32} 3.3{tr 6 64} `} -### Palm Mute +## `pm` + +```plain title=" Syntax" +pm +``` + +**Description:** Applies a palm mute effect to the note. + +**Values:** None + +**Example** {` 3.3{pm} 3.3{pm} 3.3{pm} 3.3{pm} `} -### Let Ring +## `st` + +```plain title=" Syntax" +st +``` + +**Description:** Applies a staccato effect to the note. + +**Values:** None + +**Example** + +{` +3.3{st} +`} + +## `lr` + +```plain title=" Syntax" +lr +``` + +**Description:** Applies a LetRing effect to the note. + +**Values:** None + +**Example** {` 3.4{lr} 3.3{lr} 3.2{lr} 3.1{lr} `} -### Fingering +## `x` -Left hand `lf` and right hand `rf` where the fingers are: +```plain title=" Syntax" +x +``` -`1` for Thumb, `2` for Index, `3` for Middle, `4` for Annual, `5` for Little. +**Description:** Marks the note as a dead note. + +This is an alternative syntax to directly specifying the fret as `x`. + +**Values:** None + +**Example** {` -:8 3.3{lf 1} 3.3{lf 2} 3.3{lf 3} 3.3{lf 4} 3.3{lf 5} (2.2{lf 4} 2.3{lf 3} 2.4{lf 2}) | -:8 3.3{rf 1} 3.3{rf 2} 3.3{rf 3} 3.3{rf 4} 3.3{lf 5} +x.3 3.3{x} `} -### Ornaments +## `t`, `-` -Ornaments are similar like trills, but played as a sequence of adjacent notes. There are four ornament kinds supported: -* `turn` - Turn -* `iturn` - Inverted Turn -* `umordent` - Upper Mordent -* `lmordent` - Lower Mordent +```plain title=" Syntax" +t +- +``` + +**Description:** Marks the note as a tied note. + +This is an alternative syntax to directly specifying the fret as `-`. + +For non stringed instrument it can be a bit more tricky as we cannot use the string to identify which note to tie. +There are multiple ways to work around this problem. +AlphaTab will try to find the start note for the tie via several rules, if this does not match the desired behavior, +you can specify the note value as alternative and indicate the tie via a note effect. + +**Values:** None + +**Example** + +{` +3.3 -.3 | (1.1 3.2 2.3 0.4) (-.1 -.4) +`} + +{` +\\tuning piano +. +// If there is a single note on the previous beat, we tie to this one +// Then a simple - is enough for a tie +:2 a4 - | +// Alternatively you can specify a '-' or 't' as note effect to indicate a tie +:2 a4 a4{-} | +:2 a4 a4{t} | +// This also works for chords using correct note ordering +:2 (a4 a3) (- a3) | +:2 (a4 a3) (a4 -) | +// If nothing helps, always the explicit note value and tie effect should allow +// specifying the correct behavior +:2 (a4 a3) (a4{t} a3) | +:4 (a4 a3) (b2 b3) a4{t} a3{-} | +`} + +## `turn` + +```plain title=" Syntax" +turn +``` + +**Description:** Applies a turn ornament to the note. + +**Values:** None + +**Example** {` :1 C4{turn} | -C4 {iturn} | -C4 {umordent} | -C4 {lmordent} `} -### String Numbers +## `iturn` + +```plain title=" Syntax" +iturn +``` -To show the string numbers add `string` to the note effects list. +**Description:** Applies an inverted turn ornament to the note. + +**Values:** None + +**Example** {` -3.3{string} 3.4{string} 3.5{string} +:1 C4{iturn} | `} -## Bends +## `umordent` -The bend effect works like the tremolo/whammy bar effect. -You can specify a number of non-negative values which are evenly distributed over the -time when the note is played with the format `b (value1 value2 ...)`. -The values indicate the number of quarter notes increased bend up while playing. +```plain title=" Syntax" +umordent +``` -{` -3.3{b (0 4)} | -3.3{b (0 4 0 8)} | +**Description:** Applies an upper mordent ornament to the note. + +**Values:** None + +**Example** + +{` +:1 C4{umordent} | `} -To specify a bend with exact positions (not evenly distributed) you can use `be (offset1 value1 offset2 value2)`. -The offset is ranging from 0 to 60. +## `lmordent` -{` -:1 3.3 {be (0 0 5 2 30 4)} +```plain title=" Syntax" +lmordent +``` + +**Description:** Applies a lower mordent ornament to the note. + +**Values:** None + +**Example** + +{` +:1 C4{lmordent} | `} -Additionally the exact bend type and style can be specified for both kinds after before the value list. +## `string` + +```plain title=" Syntax" +string +``` -* `b type (value1 value2)` -* `b type style (value1 value2)` -* `be type (value1 value2)` -* `be type style (value1 value2)` +**Description:** Adds an annotation showing the string number of the note above the staff. + +**Values:** None + +**Example** + +{` +3.3{string} 3.4{string} 3.5{string} +`} + +## `hide` + +```plain title=" Syntax" +hide +``` + +**Description:** Hides the note from being displayed in the music sheet.. + +**Values:** None + +**Example** + +{` +:8 3.3 (4.4{hide} 5.5) +`} + +## `b`, `be` + + +```plain title=" Syntax" +b (type style value1 value2 value3...) +be (type style offset1 value1 offset2 value2 offset3 value3...) +``` +**Description:** Adds a bend effect to the note. + +* The `b` variant automatically spreads the values across the duration of the beat. +* The `be` (exact) variant allows specifying exactly at which offset a value is placed. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| type | The type of bend (affects the display). | `custom`, `bend`, `release`, `bendRelease`, `hold`, `prebend`, `prebendbend`, `prebendrelease` | no | +| style | The style of the bend play style. | `default`, `gradual`, `fast`` | no | +| offset | The offset at which the value becomes valid | `number` (0-60) | yes (if `tbe`) | +| value | The value of the whammy in quarter-tones relative to the original note, decimals supported | `number` | yes | It is recommended to rely on the auto-detection of the type and only specify the type explicitly if something is wrong: * `custom` - use this for non standard custom bends with multiple points @@ -171,59 +463,98 @@ It is recommended to rely on the auto-detection of the type and only specify the The style can be one of these values: * `default` - No additional text is shown, the bend offsets and values are respected as specified. -* `gradual` - Will show an additional "grad." on the bend line. The audio is generated according to the type spread evenly across the play duration. +* `gradual` - Will show an additional "grad." on the whammy line. The audio is generated according to the type spread evenly across the play duration. * `fast` - No additional text is shown. The audio is generated according to the type spread evenly across the fixed duration set via `settings.player.songBookBendDuration`. -## Tied Notes - -There are multiple ways to indicate tied notes depending on whether the instrument is stringed or not stringed. -For stringed instruments the fret simply can be set to `-` and the note will be tied to the note of the same string. +**Example** -{` -3.3 -.3 | (1.1 3.2 2.3 0.4) (-.1 -.4) +{` +3.3{b (0 4)} | +3.3{b (0 4 0 8)} | `} -For non stringed instrument it can be a bit more tricky as we cannot use the string to identify which note to tie. -There are multiple ways to work around this problem. -AlphaTab will try to find the start note for the tie via several rules, if this does not match the desired behavior, -you can specify the note value as alternative and indicate the tie via a note effect. +To specify a bend with exact positions (not evenly distributed) you can use `be (offset1 value1 offset2 value2)`. +The offset is ranging from 0 to 60. -{` -\\tuning piano -. -// If there is a single note on the previous beat, we tie to this one -// Then a simple - is enough for a tie -:2 a4 - | -// Alternatively you can specify a '-' or 't' as note effect to indicate a tie -:2 a4 a4{-} | -// This also works for chords using correct note ordering -:2 (a4 a3) (- a3) | -:2 (a4 a3) (a4 -) | -// If nothing helps, always the explicit note value and tie effect should allow -// specifying the correct behavior -:2 (a4 a3) (a4{t} a3) | -:4 (a4 a3) (b2 b3) a4{t} a3{-} | +{` +:1 3.3 {be (0 0 5 2 30 4)} `} -## Show String Numbers +## `lf`, `rf` + + +```plain title=" Syntax" +lf finger +rf finger +``` +**Description:** Adds a fingering annotation to the note. + +* `lf` for the left-hand finger +* `rf` for the right-hand finger + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| finger | The finger to specify. | `number` | yes | -Add `string` to the note effect list to show the string numbers. +* `1` for the thumb +* `2` for the index finger +* `3` for the middle finger +* `4` for the annual finger +* `5` for the little finger + +**Example** {` -:8 3.3{ string } (4.4{string} 5.5{string}) +:8 3.3{lf 1} 3.3{lf 2} 3.3{lf 3} 3.3{lf 4} 3.3{lf 5} (2.2{lf 4} 2.3{lf 3} 2.4{lf 2}) | +:8 3.3{rf 1} 3.3{rf 2} 3.3{rf 3} 3.3{rf 4} 3.3{lf 5} `} -## Invisible Notes +## `acc` + +```plain title=" Syntax" +acc mode +``` +**Description:** Changes the mode to determine the accidentals for this note. + +**Values:** + +| Name | Description | Type | Required | +|------|-------------|------|----------| +| mode | The accidental mode to use. | `identifier` | yes | -To fully hide notes mark them with `hide`. +* `d` or `default` for the default mode (auto-detect the accidentals) +* `forceNone` or `-` to force no accidental +* `forceNatural` or `n` to force a naturalize accidental +* `forceSharp` or `#` to force a sharp accidental +* `forceDoubleSharp`, `##` or `x` to force a double-sharp accidental +* `forceFlat`, `b` to force a flat accidental +* `forceDoubleFlat`, `bb` to force a double flat accidental + +Keep in mind that not all combinations of note heights and accidental modes can be valid. +alphaTab will attempt to adjust the note height and place the requested accidental which could, +in some situations lead to notes being placed at the wrong line. + +**Example** {` -:8 3.3 (4.4{hide} 5.5) +\\ks Db +3.5 5.5 {acc x} 4.5 {acc #} 2.5 {acc b} `} -## Slurs +## `slur` + +```plain title=" Syntax" +slur id +``` +**Description:** Marks the start or end of a slur for the note. + +**Values:** -To define slurs we mark the start and end note of the slur with the same `slur CustomId`. +| Name | Description | Type | Required | +|------|-------------|------|----------| +| id | A unique ID to mark the start and end of the slur. | `string` or `identifier` | yes | {` (3.3 {slur s1} 4.4).4 7.3.8 8.3.8 10.3 {slur s1} .8 From b5f82dd50cb1d5988299b05ac89db81dd8d35a12 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sat, 1 Nov 2025 12:02:26 +0100 Subject: [PATCH 13/15] chore: docusaurus update --- docusaurus.config.ts | 6 +- package-lock.json | 4528 +++++++++-------- package.json | 10 +- src/theme/CodeBlock/Content/String.tsx | 122 - src/theme/CodeBlock/Content/styles.module.css | 87 - src/theme/CodeBlock/Line/index.tsx | 78 - src/theme/CodeBlock/Line/styles.module.css | 45 - src/theme/CodeBlock/utils.ts | 151 - 8 files changed, 2284 insertions(+), 2743 deletions(-) delete mode 100644 src/theme/CodeBlock/Content/String.tsx delete mode 100644 src/theme/CodeBlock/Content/styles.module.css delete mode 100644 src/theme/CodeBlock/Line/index.tsx delete mode 100644 src/theme/CodeBlock/Line/styles.module.css delete mode 100644 src/theme/CodeBlock/utils.ts diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 412c6d9..628190e 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -86,11 +86,10 @@ const config: Config = { tagline: "Build modern music notation apps for web, desktop and mobile", url: "https://alphatab.net", baseUrl: "/", - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", favicon: "img/favicon.ico", organizationName: "CoderLine", projectName: "alphaTab", + onBrokenLinks: "throw", customFields: { isPreRelease: isPreRelease, alphaTabVersion: alphaTabVersion, @@ -99,6 +98,9 @@ const config: Config = { markdown: { mermaid: true, + hooks: { + onBrokenMarkdownLinks: "warn", + } }, themes: ["@docusaurus/theme-mermaid"], diff --git a/package-lock.json b/package-lock.json index 178a326..63a6181 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,9 @@ "version": "0.0.0", "dependencies": { "@coderline/alphatab": "^1.7.0-alpha.1515", - "@docusaurus/core": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", - "@docusaurus/theme-mermaid": "^3.7.0", + "@docusaurus/core": "^3.9.2", + "@docusaurus/preset-classic": "^3.9.2", + "@docusaurus/theme-mermaid": "^3.9.2", "@fontsource/noto-sans": "^5.1.1", "@fontsource/noto-serif": "^5.1.1", "@fortawesome/free-brands-svg-icons": "^6.7.2", @@ -32,8 +32,8 @@ "webpack": "^5.98.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.7.0", - "@docusaurus/tsconfig": "^3.7.0", + "@docusaurus/module-type-aliases": "^3.9.2", + "@docusaurus/tsconfig": "^3.9.2", "@types/react": "^19.0.10", "babel-plugin-macros": "^3.1.0", "copy-webpack-plugin": "^12.0.2", @@ -49,134 +49,202 @@ "node": ">=18.0" } }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", - "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", + "node_modules/@ai-sdk/gateway": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-2.0.5.tgz", + "integrity": "sha512-5TTDSl0USWY6YGnb4QmJGplFZhk+p9OT7hZevAaER6OGiZ17LB1GypsGYDpNo/MiVMklk8kX4gk6p1/R/EiJ8Q==", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", - "@algolia/autocomplete-shared": "1.17.9" + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.15", + "@vercel/oidc": "3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", - "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", + "node_modules/@ai-sdk/provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-2.0.0.tgz", + "integrity": "sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.15.tgz", + "integrity": "sha512-kOc6Pxb7CsRlNt+sLZKL7/VGQUd7ccl3/tIK+Bqf5/QhHR0Qm3qRBMz1IwU1RmjJEZA73x+KB5cUckbDl2WF7Q==", "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" + "@ai-sdk/provider": "2.0.0", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.6" + }, + "engines": { + "node": ">=18" }, "peerDependencies": { - "search-insights": ">= 1 < 3" + "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", - "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", + "node_modules/@ai-sdk/react": { + "version": "2.0.86", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-2.0.86.tgz", + "integrity": "sha512-vqxbbMOKMpYFHZy0aYEO4jtDcKaFCHL/rEtTqAIDlH14GT0uusSjN99gkDHHG3EnbyJSQmk9gqtqbd1GDwlRRg==", "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" + "@ai-sdk/provider-utils": "3.0.15", + "ai": "5.0.86", + "swr": "^2.2.5", + "throttleit": "2.1.0" + }, + "engines": { + "node": ">=18" }, "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" + "react": "^18 || ^19 || ^19.0.0-rc", + "zod": "^3.25.76 || ^4.1.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.8.0.tgz", + "integrity": "sha512-Hb4BkGNnvgCj3F9XzqjiFTpA5IGkjOXwGAOV13qtc27l2qNF8X9rzSp1H5hu8XewlC0DzYtQtZZIOYzRZDyuXg==", + "dependencies": { + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz", + "integrity": "sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.19.2", + "@algolia/autocomplete-shared": "1.19.2" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz", + "integrity": "sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==", + "dependencies": { + "@algolia/autocomplete-shared": "1.19.2" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", - "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz", + "integrity": "sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "node_modules/@algolia/client-abtesting": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.20.3.tgz", - "integrity": "sha512-wPOzHYSsW+H97JkBLmnlOdJSpbb9mIiuNPycUCV5DgzSkJFaI/OFxXfZXAh1gqxK+hf0miKue1C9bltjWljrNA==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.42.0.tgz", + "integrity": "sha512-JLyyG7bb7XOda+w/sp8ch7rEVy6LnWs3qtxr6VJJ2XIINqGsY6U+0L3aJ6QFliBRNUeEAr2QBDxSm8u9Sal5uA==", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.20.3.tgz", - "integrity": "sha512-XE3iduH9lA7iTQacDGofBQyIyIgaX8qbTRRdj1bOCmfzc9b98CoiMwhNwdTifmmMewmN0EhVF3hP8KjKWwX7Yw==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.42.0.tgz", + "integrity": "sha512-SkCrvtZpdSWjNq9NGu/TtOg4TbzRuUToXlQqV6lLePa2s/WQlEyFw7QYjrz4itprWG9ASuH+StDlq7n49F2sBA==", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.3.tgz", - "integrity": "sha512-IYRd/A/R3BXeaQVT2805lZEdWo54v39Lqa7ABOxIYnUvX2vvOMW1AyzCuT0U7Q+uPdD4UW48zksUKRixShcWxA==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.42.0.tgz", + "integrity": "sha512-6iiFbm2tRn6B2OqFv9XDTcw5LdWPudiJWIbRk+fsTX+hkPrPm4e1/SbU+lEYBciPoaTShLkDbRge4UePEyCPMQ==", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.3.tgz", - "integrity": "sha512-QGc/bmDUBgzB71rDL6kihI2e1Mx6G6PxYO5Ks84iL3tDcIel1aFuxtRF14P8saGgdIe1B6I6QkpkeIddZ6vWQw==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.42.0.tgz", + "integrity": "sha512-iEokmw2k6FBa8g/TT7ClyEriaP/FUEmz3iczRoCklEHWSgoABMkaeYrxRXrA2yx76AN+gyZoC8FX0iCJ55dsOg==", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.20.3.tgz", - "integrity": "sha512-zuM31VNPDJ1LBIwKbYGz/7+CSm+M8EhlljDamTg8AnDilnCpKjBebWZR5Tftv/FdWSro4tnYGOIz1AURQgZ+tQ==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.42.0.tgz", + "integrity": "sha512-ivVniRqX2ARd+jGvRHTxpWeOtO9VT+rK+OmiuRgkSunoTyxk0vjeDO7QkU7+lzBOXiYgakNjkZrBtIpW9c+muw==", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.20.3.tgz", - "integrity": "sha512-Nn872PuOI8qzi1bxMMhJ0t2AzVBqN01jbymBQOkypvZHrrjZPso3iTpuuLLo9gi3yc/08vaaWTAwJfPhxPwJUw==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.42.0.tgz", + "integrity": "sha512-9+BIw6rerUfA+eLMIS2lF4mgoeBGTCIHiqb35PLn3699Rm3CaJXz03hChdwAWcA6SwGw0haYXYJa7LF0xI6EpA==", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.3.tgz", - "integrity": "sha512-9+Fm1ahV8/2goSIPIqZnVitV5yHW5E5xTdKy33xnqGd45A9yVv5tTkudWzEXsbfBB47j9Xb3uYPZjAvV5RHbKA==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.42.0.tgz", + "integrity": "sha512-NZR7yyHj2WzK6D5X8gn+/KOxPdzYEXOqVdSaK/biU8QfYUpUuEA0sCWg/XlO05tPVEcJelF/oLrrNY3UjRbOww==", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" @@ -188,92 +256,80 @@ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/ingestion": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.20.3.tgz", - "integrity": "sha512-5GHNTiZ3saLjTNyr6WkP5hzDg2eFFAYWomvPcm9eHWskjzXt8R0IOiW9kkTS6I6hXBwN5H9Zna5mZDSqqJdg+g==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.42.0.tgz", + "integrity": "sha512-MBkjRymf4BT6VOvMpJlg6kq8K+PkH9q+N+K4YMNdzTXlL40YwOa1wIWQ5LxP/Jhlz64kW5g9/oaMWY06Sy9dcw==", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.20.3.tgz", - "integrity": "sha512-KUWQbTPoRjP37ivXSQ1+lWMfaifCCMzTnEcEnXwAmherS5Tp7us6BAqQDMGOD4E7xyaS2I8pto6WlOzxH+CxmA==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.42.0.tgz", + "integrity": "sha512-kmLs7YfjT4cpr4FnhhRmnoSX4psh9KYZ9NAiWt/YcUV33m0B/Os5L4QId30zVXkOqAPAEpV5VbDPWep+/aoJdQ==", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.20.3.tgz", - "integrity": "sha512-oo/gG77xTTTclkrdFem0Kmx5+iSRFiwuRRdxZETDjwzCI7svutdbwBgV/Vy4D4QpYaX4nhY/P43k84uEowCE4Q==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.42.0.tgz", + "integrity": "sha512-U5yZ8+Jj+A4ZC0IMfElpPcddQ9NCoawD1dKyWmjHP49nzN2Z4284IFVMAJWR6fq/0ddGf4OMjjYO9cnF8L+5tw==", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.20.3.tgz", - "integrity": "sha512-BkkW7otbiI/Er1AiEPZs1h7lxbtSO9p09jFhv3/iT8/0Yz0CY79VJ9iq+Wv1+dq/l0OxnMpBy8mozrieGA3mXQ==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.42.0.tgz", + "integrity": "sha512-EbuxgteaYBlKgc2Fs3JzoPIKAIaevAIwmv1F+fakaEXeibG4pkmVNsyTUjpOZIgJ1kXeqNvDrcjRb6g3vYBJ9A==", "dependencies": { - "@algolia/client-common": "5.20.3" + "@algolia/client-common": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.3.tgz", - "integrity": "sha512-eAVlXz7UNzTsA1EDr+p0nlIH7WFxo7k3NMxYe8p38DH8YVWLgm2MgOVFUMNg9HCi6ZNOi/A2w/id2ZZ4sKgUOw==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.42.0.tgz", + "integrity": "sha512-4vnFvY5Q8QZL9eDNkywFLsk/eQCRBXCBpE8HWs8iUsFNHYoamiOxAeYMin0W/nszQj6abc+jNxMChHmejO+ftQ==", "dependencies": { - "@algolia/client-common": "5.20.3" + "@algolia/client-common": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.3.tgz", - "integrity": "sha512-FqR3pQPfHfQyX1wgcdK6iyqu86yP76MZd4Pzj1y/YLMj9rRmRCY0E0AffKr//nrOFEwv6uY8BQY4fd9/6b0ZCg==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.42.0.tgz", + "integrity": "sha512-gkLNpU+b1pCIwk1hKTJz2NWQPT8gsfGhQasnZ5QVv4jd79fKRL/1ikd86P0AzuIQs9tbbhlMwxsSTyJmlq502w==", "dependencies": { - "@algolia/client-common": "5.20.3" + "@algolia/client-common": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@antfu/install-pkg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz", @@ -295,41 +351,41 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.9", - "@babel/types": "^7.26.9", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -353,14 +409,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", - "dependencies": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -368,23 +424,23 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -402,16 +458,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", - "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.26.9", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "engines": { @@ -430,12 +486,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -454,52 +510,60 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.10" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -509,32 +573,32 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -544,13 +608,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -560,73 +624,72 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", - "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", - "license": "MIT", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -636,12 +699,12 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -651,11 +714,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -665,11 +728,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -679,13 +742,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -695,12 +758,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -732,11 +795,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -746,11 +809,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -760,11 +823,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -774,11 +837,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -803,11 +866,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -817,13 +880,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -833,13 +896,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -849,11 +912,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -863,11 +926,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -877,12 +940,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -892,12 +955,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -907,16 +970,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -926,12 +989,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -941,11 +1004,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -955,12 +1019,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -970,11 +1034,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -984,12 +1048,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -999,11 +1063,26 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1013,11 +1092,11 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1027,11 +1106,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1041,12 +1120,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1056,13 +1135,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1072,11 +1151,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1086,11 +1165,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1100,11 +1179,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1114,11 +1193,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1128,12 +1207,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1143,12 +1222,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1158,14 +1237,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1175,12 +1254,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1190,12 +1269,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1205,11 +1284,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1219,11 +1298,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1233,11 +1312,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1247,13 +1326,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1263,12 +1344,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1278,11 +1359,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1292,12 +1373,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1307,11 +1388,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1321,12 +1402,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1336,13 +1417,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1352,11 +1433,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1366,11 +1447,11 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", - "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1380,11 +1461,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1394,15 +1475,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1412,11 +1493,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" + "@babel/plugin-transform-react-jsx": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1426,12 +1507,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1441,12 +1522,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1456,12 +1536,12 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1471,11 +1551,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1485,15 +1565,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz", - "integrity": "sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", + "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "engines": { @@ -1512,11 +1592,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1526,12 +1606,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1541,11 +1621,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1555,11 +1635,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1569,11 +1649,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", - "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1583,15 +1663,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", - "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", + "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1601,11 +1681,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1615,12 +1695,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1630,12 +1710,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1645,12 +1725,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1660,78 +1740,79 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", - "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", + "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", + "dependencies": { + "@babel/compat-data": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.5", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.4", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.28.5", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.4", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.4", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "engines": { @@ -1741,18 +1822,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -1775,16 +1844,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", - "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", + "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.28.0", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1794,15 +1863,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1824,56 +1893,53 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.10.tgz", - "integrity": "sha512-uITFQYO68pMEYR46AHgQoyBg7KPPJDAbGn4jUTIRgCFJIp88MIBUianVOplhZDEec07bp9zIyr4Kp0FCyQzmWg==", - "license": "MIT", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", + "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" + "core-js-pure": "^3.43.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", - "license": "MIT", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1941,9 +2007,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", - "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", "funding": [ { "type": "github", @@ -1958,14 +2024,14 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/color-helpers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", - "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", "funding": [ { "type": "github", @@ -1981,9 +2047,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz", - "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "funding": [ { "type": "github", @@ -1998,14 +2064,14 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-color-parser": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz", - "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", "funding": [ { "type": "github", @@ -2017,21 +2083,21 @@ } ], "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.2" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "funding": [ { "type": "github", @@ -2046,13 +2112,13 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "funding": [ { "type": "github", @@ -2068,9 +2134,31 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/postcss-alpha-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz", + "integrity": "sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==", "funding": [ { "type": "github", @@ -2081,18 +2169,24 @@ "url": "https://opencollective.com/csstools" } ], + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, "engines": { "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "postcss": "^8.4" } }, "node_modules/@csstools/postcss-cascade-layers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", - "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz", + "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", "funding": [ { "type": "github", @@ -2148,9 +2242,37 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.8.tgz", - "integrity": "sha512-9dUvP2qpZI6PlGQ/sob+95B3u5u7nkYt9yhZFCC7G9HBRHBxj+QxS/wUlwaMGYW0waf+NIierI8aoDTssEdRYw==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz", + "integrity": "sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-function-display-p3-linear": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz", + "integrity": "sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==", "funding": [ { "type": "github", @@ -2162,10 +2284,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2176,9 +2298,37 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.8.tgz", - "integrity": "sha512-yuZpgWUzqZWQhEqfvtJufhl28DgO9sBwSbXbf/59gejNuvZcoUTRGQZhzhwF4ccqb53YAGB+u92z9+eSKoB4YA==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz", + "integrity": "sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz", + "integrity": "sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==", "funding": [ { "type": "github", @@ -2190,10 +2340,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2204,9 +2354,36 @@ } }, "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz", - "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz", + "integrity": "sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-contrast-color-function": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz", + "integrity": "sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==", "funding": [ { "type": "github", @@ -2218,9 +2395,10 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2231,9 +2409,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.7.tgz", - "integrity": "sha512-XTb6Mw0v2qXtQYRW9d9duAjDnoTbBpsngD7sRNLmYDjvwU2ebpIHplyxgOeo6jp/Kr52gkLi5VaK5RDCqzMzZQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", + "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", "funding": [ { "type": "github", @@ -2245,9 +2423,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2282,9 +2460,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.8.tgz", - "integrity": "sha512-/K8u9ZyGMGPjmwCSIjgaOLKfic2RIGdFHHes84XW5LnmrvdhOTVxo255NppHi3ROEvoHPW7MplMJgjZK5Q+TxA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz", + "integrity": "sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==", "funding": [ { "type": "github", @@ -2296,9 +2474,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2308,9 +2486,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.8.tgz", - "integrity": "sha512-CoHQ/0UXrvxLovu0ZeW6c3/20hjJ/QRg6lyXm3dZLY/JgvRU6bdbQZF/Du30A4TvowfcgvIHQmP1bNXUxgDrAw==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz", + "integrity": "sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==", "funding": [ { "type": "github", @@ -2322,10 +2500,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2336,9 +2514,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.8.tgz", - "integrity": "sha512-LpFKjX6hblpeqyych1cKmk+3FJZ19QmaJtqincySoMkbkG/w2tfbnO5oE6mlnCTXcGUJ0rCEuRHvTqKK0nHYUQ==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz", + "integrity": "sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==", "funding": [ { "type": "github", @@ -2350,10 +2528,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2364,9 +2542,9 @@ } }, "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz", - "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz", + "integrity": "sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==", "funding": [ { "type": "github", @@ -2378,7 +2556,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -2411,9 +2589,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", "funding": [ { "type": "github", @@ -2469,9 +2647,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", - "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz", + "integrity": "sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==", "funding": [ { "type": "github", @@ -2483,9 +2661,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2583,9 +2761,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", - "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", + "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", "funding": [ { "type": "github", @@ -2597,7 +2775,7 @@ } ], "dependencies": { - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2608,9 +2786,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.7.tgz", - "integrity": "sha512-LB6tIP7iBZb5CYv8iRenfBZmbaG3DWNEziOnPjGoQX5P94FBPvvTBy68b/d9NnS5PELKwFmmOYsAEIgEhDPCHA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", + "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", "funding": [ { "type": "github", @@ -2622,10 +2800,10 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -2635,9 +2813,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", - "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", + "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", "funding": [ { "type": "github", @@ -2649,9 +2827,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -2710,9 +2888,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.8.tgz", - "integrity": "sha512-+5aPsNWgxohXoYNS1f+Ys0x3Qnfehgygv3qrPyv+Y25G0yX54/WlVB+IXprqBLOXHM1gsVF+QQSjlArhygna0Q==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz", + "integrity": "sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==", "funding": [ { "type": "github", @@ -2724,10 +2902,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2738,9 +2916,9 @@ } }, "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", - "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz", + "integrity": "sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==", "funding": [ { "type": "github", @@ -2762,9 +2940,9 @@ } }, "node_modules/@csstools/postcss-random-function": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.3.tgz", - "integrity": "sha512-dbNeEEPHxAwfQJ3duRL5IPpuD77QAHtRl4bAHRs0vOVhVbHrsL7mHnwe0irYjbs9kYwhAHZBQTLBgmvufPuRkA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", + "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", "funding": [ { "type": "github", @@ -2776,9 +2954,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2788,9 +2966,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.8.tgz", - "integrity": "sha512-eGE31oLnJDoUysDdjS9MLxNZdtqqSxjDXMdISpLh80QMaYrKs7VINpid34tWQ+iU23Wg5x76qAzf1Q/SLLbZVg==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz", + "integrity": "sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==", "funding": [ { "type": "github", @@ -2802,10 +2980,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2852,9 +3030,9 @@ } }, "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.2.tgz", - "integrity": "sha512-4EcAvXTUPh7n6UoZZkCzgtCf/wPzMlTNuddcKg7HG8ozfQkUcHsJ2faQKeLmjyKdYPyOUn4YA7yDPf8K/jfIxw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", + "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", "funding": [ { "type": "github", @@ -2866,9 +3044,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2878,9 +3056,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.7.tgz", - "integrity": "sha512-rdrRCKRnWtj5FyRin0u/gLla7CIvZRw/zMGI1fVJP0Sg/m1WGicjPVHRANL++3HQtsiXKAbPrcPr+VkyGck0IA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", + "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", "funding": [ { "type": "github", @@ -2892,9 +3070,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2904,9 +3082,9 @@ } }, "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz", - "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz", + "integrity": "sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==", "funding": [ { "type": "github", @@ -2918,7 +3096,7 @@ } ], "dependencies": { - "@csstools/color-helpers": "^5.0.2", + "@csstools/color-helpers": "^5.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -2929,9 +3107,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.7.tgz", - "integrity": "sha512-qTrZgLju3AV7Djhzuh2Bq/wjFqbcypnk0FhHjxW8DWJQcZLS1HecIus4X2/RLch1ukX7b+YYCdqbEnpIQO5ccg==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", + "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", "funding": [ { "type": "github", @@ -2943,9 +3121,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -3005,19 +3183,22 @@ } }, "node_modules/@docsearch/css": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", - "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.2.0.tgz", + "integrity": "sha512-65KU9Fw5fGsPPPlgIghonMcndyx1bszzrDQYLfierN+Ha29yotMHzVS94bPkZS6On9LS8dE4qmW4P/fGjtCf/g==" }, "node_modules/@docsearch/react": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", - "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.2.0.tgz", + "integrity": "sha512-zSN/KblmtBcerf7Z87yuKIHZQmxuXvYc6/m0+qnjyNu+Ir67AVOagTa1zBqcxkVUVkmBqUExdcyrdo9hbGbqTw==", "dependencies": { - "@algolia/autocomplete-core": "1.17.9", - "@algolia/autocomplete-preset-algolia": "1.17.9", - "@docsearch/css": "3.9.0", - "algoliasearch": "^5.14.2" + "@ai-sdk/react": "^2.0.30", + "@algolia/autocomplete-core": "1.19.2", + "@docsearch/css": "4.2.0", + "ai": "^5.0.30", + "algoliasearch": "^5.28.0", + "marked": "^16.3.0", + "zod": "^4.1.8" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", @@ -3041,9 +3222,9 @@ } }, "node_modules/@docusaurus/babel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", - "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.9.2.tgz", + "integrity": "sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA==", "dependencies": { "@babel/core": "^7.25.9", "@babel/generator": "^7.25.9", @@ -3055,41 +3236,40 @@ "@babel/runtime": "^7.25.9", "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/bundler": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", - "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.9.2.tgz", + "integrity": "sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA==", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.7.0", - "@docusaurus/cssnano-preset": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/babel": "3.9.2", + "@docusaurus/cssnano-preset": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", "babel-loader": "^9.2.1", - "clean-css": "^5.3.2", + "clean-css": "^5.3.3", "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", + "css-loader": "^6.11.0", "css-minimizer-webpack-plugin": "^5.0.1", "cssnano": "^6.1.2", "file-loader": "^6.2.0", "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.1", + "mini-css-extract-plugin": "^2.9.2", "null-loader": "^4.0.1", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "postcss-preset-env": "^10.1.0", - "react-dev-utils": "^12.0.1", + "postcss": "^8.5.4", + "postcss-loader": "^7.3.4", + "postcss-preset-env": "^10.2.1", "terser-webpack-plugin": "^5.3.9", "tslib": "^2.6.0", "url-loader": "^4.1.1", @@ -3097,7 +3277,7 @@ "webpackbar": "^6.0.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "@docusaurus/faster": "*" @@ -3172,17 +3352,17 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", - "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", - "dependencies": { - "@docusaurus/babel": "3.7.0", - "@docusaurus/bundler": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.9.2.tgz", + "integrity": "sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==", + "dependencies": { + "@docusaurus/babel": "3.9.2", + "@docusaurus/bundler": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -3190,19 +3370,19 @@ "combine-promises": "^1.1.0", "commander": "^5.1.0", "core-js": "^3.31.1", - "del": "^6.1.1", "detect-port": "^1.5.1", "escape-html": "^1.0.3", "eta": "^2.2.0", "eval": "^0.1.8", + "execa": "5.1.1", "fs-extra": "^11.1.1", "html-tags": "^3.3.1", "html-webpack-plugin": "^5.6.0", "leven": "^3.1.0", "lodash": "^4.17.21", + "open": "^8.4.0", "p-map": "^4.0.0", "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", @@ -3211,19 +3391,19 @@ "react-router-dom": "^5.3.4", "semver": "^7.5.4", "serve-handler": "^6.1.6", - "shelljs": "^0.8.5", + "tinypool": "^1.0.2", "tslib": "^2.6.0", "update-notifier": "^6.0.2", "webpack": "^5.95.0", "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", + "webpack-dev-server": "^5.2.2", "webpack-merge": "^6.0.1" }, "bin": { "docusaurus": "bin/docusaurus.mjs" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "@mdx-js/react": "^3.0.0", @@ -3232,46 +3412,46 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", - "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.9.2.tgz", + "integrity": "sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ==", "dependencies": { "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", + "postcss": "^8.5.4", "postcss-sort-media-queries": "^5.2.0", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/logger": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", - "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.9.2.tgz", + "integrity": "sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", - "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.9.2.tgz", + "integrity": "sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ==", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", "estree-util-value-to-estree": "^3.0.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", - "image-size": "^1.0.2", + "image-size": "^2.0.2", "mdast-util-mdx": "^3.0.0", "mdast-util-to-string": "^4.0.0", "rehype-raw": "^7.0.0", @@ -3288,7 +3468,7 @@ "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3296,16 +3476,16 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", - "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.9.2.tgz", + "integrity": "sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew==", "dependencies": { - "@docusaurus/types": "3.7.0", + "@docusaurus/types": "3.9.2", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@*", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" }, "peerDependencies": { @@ -3314,23 +3494,23 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", - "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.9.2.tgz", + "integrity": "sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ==", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "cheerio": "1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", "lodash": "^4.17.21", - "reading-time": "^1.5.0", + "schema-dts": "^1.1.2", "srcset": "^4.0.0", "tslib": "^2.6.0", "unist-util-visit": "^5.0.0", @@ -3338,7 +3518,7 @@ "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", @@ -3347,30 +3527,31 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", - "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", + "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", "js-yaml": "^4.1.0", "lodash": "^4.17.21", + "schema-dts": "^1.1.2", "tslib": "^2.6.0", "utility-types": "^3.10.0", "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3378,70 +3559,74 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", - "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.9.2.tgz", + "integrity": "sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA==", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/plugin-css-cascade-layers": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.9.2.tgz", + "integrity": "sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ==", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", - "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.9.2.tgz", + "integrity": "sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA==", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", + "react-json-view-lite": "^2.3.0", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@docusaurus/plugin-debug/node_modules/react-json-view-lite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", - "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.9.2.tgz", + "integrity": "sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw==", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3449,18 +3634,18 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", - "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.9.2.tgz", + "integrity": "sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA==", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3468,17 +3653,17 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", - "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.9.2.tgz", + "integrity": "sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw==", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3486,22 +3671,22 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", - "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.9.2.tgz", + "integrity": "sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw==", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3509,21 +3694,21 @@ } }, "node_modules/@docusaurus/plugin-svgr": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", - "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz", + "integrity": "sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw==", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "@svgr/core": "8.1.0", "@svgr/webpack": "^8.1.0", "tslib": "^2.6.0", "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3531,27 +3716,28 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", - "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/plugin-debug": "3.7.0", - "@docusaurus/plugin-google-analytics": "3.7.0", - "@docusaurus/plugin-google-gtag": "3.7.0", - "@docusaurus/plugin-google-tag-manager": "3.7.0", - "@docusaurus/plugin-sitemap": "3.7.0", - "@docusaurus/plugin-svgr": "3.7.0", - "@docusaurus/theme-classic": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-search-algolia": "3.7.0", - "@docusaurus/types": "3.7.0" - }, - "engines": { - "node": ">=18.0" + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.9.2.tgz", + "integrity": "sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w==", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/plugin-content-blog": "3.9.2", + "@docusaurus/plugin-content-docs": "3.9.2", + "@docusaurus/plugin-content-pages": "3.9.2", + "@docusaurus/plugin-css-cascade-layers": "3.9.2", + "@docusaurus/plugin-debug": "3.9.2", + "@docusaurus/plugin-google-analytics": "3.9.2", + "@docusaurus/plugin-google-gtag": "3.9.2", + "@docusaurus/plugin-google-tag-manager": "3.9.2", + "@docusaurus/plugin-sitemap": "3.9.2", + "@docusaurus/plugin-svgr": "3.9.2", + "@docusaurus/theme-classic": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/theme-search-algolia": "3.9.2", + "@docusaurus/types": "3.9.2" + }, + "engines": { + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3559,30 +3745,29 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", - "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.9.2.tgz", + "integrity": "sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA==", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/plugin-content-blog": "3.9.2", + "@docusaurus/plugin-content-docs": "3.9.2", + "@docusaurus/plugin-content-pages": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/theme-translations": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", "infima": "0.2.0-alpha.45", "lodash": "^4.17.21", "nprogress": "^0.2.0", - "postcss": "^8.4.26", + "postcss": "^8.5.4", "prism-react-renderer": "^2.3.0", "prismjs": "^1.29.0", "react-router-dom": "^5.3.4", @@ -3591,7 +3776,7 @@ "utility-types": "^3.10.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3599,14 +3784,14 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", - "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", - "dependencies": { - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.9.2.tgz", + "integrity": "sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==", + "dependencies": { + "@docusaurus/mdx-loader": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3617,7 +3802,7 @@ "utility-types": "^3.10.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", @@ -3626,41 +3811,47 @@ } }, "node_modules/@docusaurus/theme-mermaid": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.7.0.tgz", - "integrity": "sha512-7kNDvL7hm+tshjxSxIqYMtsLUPsEBYnkevej/ext6ru9xyLgCed+zkvTfGzTWNeq8rJIEe2YSS8/OV5gCVaPCw==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "mermaid": ">=10.4", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.9.2.tgz", + "integrity": "sha512-5vhShRDq/ntLzdInsQkTdoKWSzw8d1jB17sNPYhA/KvYYFXfuVEGHLM6nrf8MFbV8TruAHDG21Fn3W4lO8GaDw==", + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "mermaid": ">=11.6.0", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { + "@mermaid-js/layout-elk": "^0.1.9", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@mermaid-js/layout-elk": { + "optional": true + } } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", - "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", - "dependencies": { - "@docsearch/react": "^3.8.1", - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "algoliasearch": "^5.17.1", - "algoliasearch-helper": "^3.22.6", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.9.2.tgz", + "integrity": "sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw==", + "dependencies": { + "@docsearch/react": "^3.9.0 || ^4.1.0", + "@docusaurus/core": "3.9.2", + "@docusaurus/logger": "3.9.2", + "@docusaurus/plugin-content-docs": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/theme-translations": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", + "algoliasearch": "^5.37.0", + "algoliasearch-helper": "^3.26.0", "clsx": "^2.0.0", "eta": "^2.2.0", "fs-extra": "^11.1.1", @@ -3669,7 +3860,7 @@ "utility-types": "^3.10.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -3677,30 +3868,31 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", - "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.9.2.tgz", + "integrity": "sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA==", "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/tsconfig": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.7.0.tgz", - "integrity": "sha512-vRsyj3yUZCjscgfgcFYjIsTcAru/4h4YH2/XAE8Rs7wWdnng98PgWKvP5ovVc4rmRpRg2WChVW0uOy2xHDvDBQ==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.9.2.tgz", + "integrity": "sha512-j6/Fp4Rlpxsc632cnRnl5HpOWeb6ZKssDj6/XzzAzVGXXfm9Eptx3rxCC+fDzySn9fHTS+CWJjPineCR1bB5WQ==", "dev": true }, "node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.9.2.tgz", + "integrity": "sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q==", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", "@types/react": "*", "commander": "^5.1.0", "joi": "^17.9.2", @@ -3728,14 +3920,15 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", - "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.9.2.tgz", + "integrity": "sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/logger": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-common": "3.9.2", "escape-string-regexp": "^4.0.0", + "execa": "5.1.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", "github-slugger": "^1.5.0", @@ -3745,38 +3938,38 @@ "js-yaml": "^4.1.0", "lodash": "^4.17.21", "micromatch": "^4.0.5", + "p-queue": "^6.6.2", "prompts": "^2.4.2", "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", "tslib": "^2.6.0", "url-loader": "^4.1.1", "utility-types": "^3.10.0", "webpack": "^5.88.1" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/utils-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", - "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.9.2.tgz", + "integrity": "sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw==", "dependencies": { - "@docusaurus/types": "3.7.0", + "@docusaurus/types": "3.9.2", "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", - "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.9.2.tgz", + "integrity": "sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A==", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/logger": "3.9.2", + "@docusaurus/utils": "3.9.2", + "@docusaurus/utils-common": "3.9.2", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -3784,7 +3977,7 @@ "tslib": "^2.6.0" }, "engines": { - "node": ">=18.0" + "node": ">=20.0" } }, "node_modules/@esbuild/aix-ppc64": { @@ -4356,16 +4549,21 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -4376,14 +4574,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", @@ -4399,28 +4589,137 @@ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" }, "node_modules/@mdx-js/mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", - "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", @@ -4504,6 +4803,14 @@ "node": ">= 8" } }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -4926,6 +5233,11 @@ "micromark-util-symbol": "^1.0.1" } }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==" + }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", @@ -5188,18 +5500,10 @@ "node": ">=10.13.0" } }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -5492,20 +5796,20 @@ } }, "node_modules/@types/express": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", - "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -5547,14 +5851,14 @@ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==" }, "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", "dependencies": { "@types/node": "*" } @@ -5617,9 +5921,9 @@ } }, "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", "dependencies": { "@types/node": "*" } @@ -5627,7 +5931,8 @@ "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true }, "node_modules/@types/parse5": { "version": "5.0.3", @@ -5640,9 +5945,9 @@ "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==" }, "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==" + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==" }, "node_modules/@types/range-parser": { "version": "1.2.7", @@ -5687,9 +5992,9 @@ } }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==" }, "node_modules/@types/sax": { "version": "1.2.7", @@ -5700,11 +6005,10 @@ } }, "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -5717,13 +6021,22 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/sockjs": { @@ -5747,17 +6060,17 @@ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" }, "node_modules/@types/ws": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "version": "17.0.34", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.34.tgz", + "integrity": "sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==", "dependencies": { "@types/yargs-parser": "*" } @@ -6176,6 +6489,14 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" }, + "node_modules/@vercel/oidc": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.0.3.tgz", + "integrity": "sha512-yNEQvPcVrK9sIe637+I0jD6leluPxzwJKx/Haw6F4H77CdDsszUn5V3o96LPziXkSNE2B83+Z3mjqGKBK/R6Gg==", + "engines": { + "node": ">= 20" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -6424,6 +6745,23 @@ "node": ">=8" } }, + "node_modules/ai": { + "version": "5.0.86", + "resolved": "https://registry.npmjs.org/ai/-/ai-5.0.86.tgz", + "integrity": "sha512-ooHwNTkLdedFf98iQhtSc5btc/P4UuXuOpYneoifq0190vqosLunNdW8Hs6CiE0Am7YOGNplDK56JIPlHZIL4w==", + "dependencies": { + "@ai-sdk/gateway": "2.0.5", + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.15", + "@opentelemetry/api": "1.9.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, "node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", @@ -6467,32 +6805,33 @@ } }, "node_modules/algoliasearch": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.3.tgz", - "integrity": "sha512-iNC6BGvipaalFfDfDnXUje8GUlW5asj0cTMsZJwO/0rhsyLx1L7GZFAY8wW+eQ6AM4Yge2p5GSE5hrBlfSD90Q==", - "dependencies": { - "@algolia/client-abtesting": "5.20.3", - "@algolia/client-analytics": "5.20.3", - "@algolia/client-common": "5.20.3", - "@algolia/client-insights": "5.20.3", - "@algolia/client-personalization": "5.20.3", - "@algolia/client-query-suggestions": "5.20.3", - "@algolia/client-search": "5.20.3", - "@algolia/ingestion": "1.20.3", - "@algolia/monitoring": "1.20.3", - "@algolia/recommend": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.42.0.tgz", + "integrity": "sha512-X5+PtWc9EJIPafT/cj8ZG+6IU3cjRRnlHGtqMHK/9gsiupQbAyYlH5y7qt/FtsAhfX5AICHffZy69ZAsVrxWkQ==", + "dependencies": { + "@algolia/abtesting": "1.8.0", + "@algolia/client-abtesting": "5.42.0", + "@algolia/client-analytics": "5.42.0", + "@algolia/client-common": "5.42.0", + "@algolia/client-insights": "5.42.0", + "@algolia/client-personalization": "5.42.0", + "@algolia/client-query-suggestions": "5.42.0", + "@algolia/client-search": "5.42.0", + "@algolia/ingestion": "1.42.0", + "@algolia/monitoring": "1.42.0", + "@algolia/recommend": "5.42.0", + "@algolia/requester-browser-xhr": "5.42.0", + "@algolia/requester-fetch": "5.42.0", + "@algolia/requester-node-http": "5.42.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.24.1.tgz", - "integrity": "sha512-knYRACqLH9UpeR+WRUrBzBFR2ulGuOjI2b525k4PNeqZxeFMHJE7YcL7s6Jh12Qza0rtHqZdgHMfeuaaAkf4wA==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz", + "integrity": "sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -6632,14 +6971,6 @@ "astring": "bin/astring" } }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/autocomplete.js": { "version": "0.37.1", "resolved": "https://registry.npmjs.org/autocomplete.js/-/autocomplete.js-0.37.1.tgz", @@ -6649,9 +6980,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "funding": [ { "type": "opencollective", @@ -6667,11 +6998,11 @@ } ], "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -6740,12 +7071,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { @@ -6761,23 +7092,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" + "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6797,6 +7128,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.22", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.22.tgz", + "integrity": "sha512-/tk9kky/d8T8CTXIQYASLyhAxR5VwL3zct1oAoVTaOUHwrmsGnfbRwNdEq+vOl2BN8i3PcDdP0o4Q+jjKQoFbQ==", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -6942,9 +7281,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", "funding": [ { "type": "opencollective", @@ -6960,10 +7299,11 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" @@ -6972,11 +7312,25 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -7040,12 +7394,12 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -7094,9 +7448,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001701", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz", - "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==", + "version": "1.0.30001752", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001752.tgz", + "integrity": "sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g==", "funding": [ { "type": "opencollective", @@ -7490,9 +7844,9 @@ } }, "node_modules/compressible/node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "engines": { "node": ">= 0.6" } @@ -7501,7 +7855,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", @@ -7582,9 +7935,9 @@ } }, "node_modules/consola": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", - "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "engines": { "node": "^14.18.0 || >=16.10.0" } @@ -7628,17 +7981,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/copy-webpack-plugin": { "version": "12.0.2", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", @@ -7739,11 +8081,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", - "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", "dependencies": { - "browserslist": "^4.24.3" + "browserslist": "^4.26.3" }, "funding": { "type": "opencollective", @@ -7751,9 +8093,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.40.0.tgz", - "integrity": "sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==", + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.46.0.tgz", + "integrity": "sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -7873,9 +8215,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", + "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", "engines": { "node": "^14 || ^16 || >=18" }, @@ -7884,9 +8226,9 @@ } }, "node_modules/css-has-pseudo": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", - "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz", + "integrity": "sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==", "funding": [ { "type": "github", @@ -8041,9 +8383,9 @@ } }, "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -8084,9 +8426,9 @@ } }, "node_modules/cssdb": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.3.tgz", - "integrity": "sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.4.2.tgz", + "integrity": "sha512-PzjkRkRUS+IHDJohtxkIczlxPPZqRo0nXplsYXOMBRPjcVRjj1W4DfvRgshUYTVuUigU7ptVYkFJQ7abUB0nyg==", "funding": [ { "type": "opencollective", @@ -8713,9 +9055,9 @@ "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dependencies": { "ms": "^2.1.3" }, @@ -8781,15 +9123,30 @@ "node": ">=0.10.0" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dependencies": { - "execa": "^5.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defer-to-connect": { @@ -8840,27 +9197,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/delaunator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", @@ -8928,35 +9264,6 @@ "node": ">= 4.0.0" } }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -9261,9 +9568,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.107", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.107.tgz", - "integrity": "sha512-dJr1o6yCntRkXElnhsHh1bAV19bo/hKyFf7tCcWgpXbuFIF0Lakjgqv5LRfSDaNzAII8Fnxg2tqgHkgCvxdbxw==" + "version": "1.5.244", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz", + "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -9583,10 +9890,9 @@ } }, "node_modules/estree-util-value-to-estree": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.3.tgz", - "integrity": "sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ==", - "license": "MIT", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz", + "integrity": "sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==", "dependencies": { "@types/estree": "^1.0.0" }, @@ -9667,6 +9973,14 @@ "node": ">=0.8.x" } }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -9955,14 +10269,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -10043,9 +10349,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -10061,126 +10367,6 @@ } } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -10238,16 +10424,6 @@ "node": ">=14.14" } }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -10383,26 +10559,6 @@ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -10414,6 +10570,21 @@ "node": ">= 6" } }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -10441,49 +10612,6 @@ "node": ">=10" } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -10839,9 +10967,9 @@ } }, "node_modules/hast-util-raw/node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -10945,9 +11073,9 @@ } }, "node_modules/hast-util-to-estree": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.2.tgz", - "integrity": "sha512-94SDoKOfop5gP8RHyw4vV1aj+oChuD42g08BONGAaWFbbO6iaWUqxk7SWfGybgcVzhK16KifZr3zD2dqQgx3jQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", @@ -10962,7 +11090,7 @@ "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", + "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" }, @@ -10993,9 +11121,9 @@ } }, "node_modules/hast-util-to-estree/node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11020,9 +11148,9 @@ } }, "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.5.tgz", - "integrity": "sha512-gHD+HoFxOMmmXLuq9f2dZDMQHVcplCVpMfBNRpJsF03yyLZvJGzsFORe8orVuYDX9k2w0VH0uF8oryFd1whqKQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", @@ -11036,7 +11164,7 @@ "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", + "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" }, @@ -11067,9 +11195,9 @@ } }, "node_modules/hast-util-to-jsx-runtime/node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11292,21 +11420,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -11463,9 +11576,9 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", - "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==" + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==" }, "node_modules/http-proxy": { "version": "1.18.1", @@ -11480,6 +11593,40 @@ "node": ">=8.0.0" } }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/http2-wrapper": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", @@ -11497,7 +11644,15 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "engines": { - "node": ">=10.17.0" + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "engines": { + "node": ">=10.18" } }, "node_modules/iconv-lite": { @@ -11531,13 +11686,9 @@ } }, "node_modules/image-size": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", - "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", + "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", "bin": { "image-size": "bin/image-size.js" }, @@ -11550,15 +11701,6 @@ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/immutable": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", @@ -11612,16 +11754,6 @@ "node": ">=12" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -11645,14 +11777,6 @@ "node": ">=12" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -11821,6 +11945,37 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -11836,6 +11991,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-npm": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", @@ -11863,14 +12029,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -11909,14 +12067,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -12071,6 +12221,11 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -12188,12 +12343,12 @@ } }, "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, "node_modules/layout-base": { @@ -12384,10 +12539,9 @@ } }, "node_modules/marked": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-16.2.0.tgz", - "integrity": "sha512-LbbTuye+0dWRz2TS9KJ7wsnD4KAtpj0MVkWc90XvBa6AslXsT0hTBVH5k32pcSyHH1fst9XEFJunXHktVy0zlg==", - "license": "MIT", + "version": "16.4.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.1.tgz", + "integrity": "sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==", "bin": { "marked": "bin/marked.js" }, @@ -12450,9 +12604,9 @@ } }, "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "dependencies": { "@types/unist": "^3.0.0" }, @@ -12829,14 +12983,20 @@ } }, "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.50.0.tgz", + "integrity": "sha512-N0LUYQMUA1yS5tJKmMtU9yprPm6ZIg24yr/OVv/7t6q0kKDIho4cBbXRi1XKttUmNYDYgF/q45qrKE/UhGO0CA==", "dependencies": { - "fs-monkey": "^1.0.4" + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" }, - "engines": { - "node": ">= 4.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" } }, "node_modules/merge-descriptors": { @@ -13459,9 +13619,9 @@ ] }, "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", "funding": [ { "type": "GitHub Sponsors", @@ -13537,11 +13697,10 @@ ] }, "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", - "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", "dependencies": { - "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", @@ -13806,9 +13965,9 @@ ] }, "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", - "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", "funding": [ { "type": "GitHub Sponsors", @@ -14310,9 +14469,9 @@ ] }, "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", "funding": [ { "type": "GitHub Sponsors", @@ -14324,7 +14483,6 @@ } ], "dependencies": { - "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", @@ -14650,9 +14808,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -14738,9 +14896,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -14806,9 +14964,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==" }, "node_modules/nopt": { "version": "1.0.10", @@ -15013,19 +15171,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -15072,6 +15221,14 @@ "node": ">=12.20" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", @@ -15114,24 +15271,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/package-json": { @@ -15222,11 +15401,11 @@ "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "node_modules/parse5": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dependencies": { - "entities": "^4.5.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -15244,6 +15423,17 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -15274,14 +15464,6 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", @@ -15361,73 +15543,6 @@ "pathe": "^2.0.1" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/points-on-curve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", @@ -15443,9 +15558,9 @@ } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -15461,7 +15576,7 @@ } ], "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -15535,9 +15650,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.8.tgz", - "integrity": "sha512-S/TpMKVKofNvsxfau/+bw+IA6cSfB6/kmzFj5szUofHOVnFFMB2WwK+Zu07BeMD8T0n+ZnTO5uXiMvAKe2dPkA==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz", + "integrity": "sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==", "funding": [ { "type": "github", @@ -15549,10 +15664,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -15645,9 +15760,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", - "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", "funding": [ { "type": "github", @@ -15659,10 +15774,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -15672,9 +15787,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", - "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", "funding": [ { "type": "github", @@ -15686,9 +15801,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -15700,9 +15815,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", - "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", + "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", "funding": [ { "type": "github", @@ -15714,9 +15829,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "postcss-selector-parser": "^7.0.0" }, "engines": { @@ -15833,9 +15948,9 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz", - "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz", + "integrity": "sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==", "funding": [ { "type": "github", @@ -15847,7 +15962,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -15985,9 +16100,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.8.tgz", - "integrity": "sha512-plV21I86Hg9q8omNz13G9fhPtLopIWH06bt/Cb5cs1XnaGU2kUtEitvVd4vtQb/VqCdNUHK5swKn3QFmMRbpDg==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz", + "integrity": "sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==", "funding": [ { "type": "github", @@ -15999,10 +16114,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -16244,9 +16359,9 @@ } }, "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "funding": [ { "type": "github", @@ -16258,7 +16373,7 @@ } ], "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-resolve-nested": "^3.1.0", "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, @@ -16270,9 +16385,9 @@ } }, "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", "funding": [ { "type": "github", @@ -16540,9 +16655,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.5.tgz", - "integrity": "sha512-LQybafF/K7H+6fAs4SIkgzkSCixJy0/h0gubDIAP3Ihz+IQBRwsjyvBnAZ3JUHD+A/ITaxVRPDxn//a3Qy4pDw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.4.0.tgz", + "integrity": "sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw==", "funding": [ { "type": "github", @@ -16554,62 +16669,66 @@ } ], "dependencies": { - "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.8", - "@csstools/postcss-color-mix-function": "^3.0.8", - "@csstools/postcss-content-alt-text": "^2.0.4", - "@csstools/postcss-exponential-functions": "^2.0.7", + "@csstools/postcss-alpha-function": "^1.0.1", + "@csstools/postcss-cascade-layers": "^5.0.2", + "@csstools/postcss-color-function": "^4.0.12", + "@csstools/postcss-color-function-display-p3-linear": "^1.0.1", + "@csstools/postcss-color-mix-function": "^3.0.12", + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.2", + "@csstools/postcss-content-alt-text": "^2.0.8", + "@csstools/postcss-contrast-color-function": "^2.0.12", + "@csstools/postcss-exponential-functions": "^2.0.9", "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.8", - "@csstools/postcss-gradients-interpolation-method": "^5.0.8", - "@csstools/postcss-hwb-function": "^4.0.8", - "@csstools/postcss-ic-unit": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.11", + "@csstools/postcss-gradients-interpolation-method": "^5.0.12", + "@csstools/postcss-hwb-function": "^4.0.12", + "@csstools/postcss-ic-unit": "^4.0.4", "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.7", + "@csstools/postcss-is-pseudo-class": "^5.0.3", + "@csstools/postcss-light-dark-function": "^2.0.11", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.3", - "@csstools/postcss-media-minmax": "^2.0.7", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", + "@csstools/postcss-logical-viewport-units": "^3.0.4", + "@csstools/postcss-media-minmax": "^2.0.9", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", "@csstools/postcss-nested-calc": "^4.0.0", "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.8", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/postcss-random-function": "^1.0.3", - "@csstools/postcss-relative-color-syntax": "^3.0.8", + "@csstools/postcss-oklab-function": "^4.0.12", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/postcss-random-function": "^2.0.1", + "@csstools/postcss-relative-color-syntax": "^3.0.12", "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.2", - "@csstools/postcss-stepped-value-functions": "^4.0.7", - "@csstools/postcss-text-decoration-shorthand": "^4.0.2", - "@csstools/postcss-trigonometric-functions": "^4.0.7", + "@csstools/postcss-sign-functions": "^1.1.4", + "@csstools/postcss-stepped-value-functions": "^4.0.9", + "@csstools/postcss-text-decoration-shorthand": "^4.0.3", + "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.19", - "browserslist": "^4.24.4", + "autoprefixer": "^10.4.21", + "browserslist": "^4.26.0", "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.2", + "css-has-pseudo": "^7.0.3", "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.2.3", + "cssdb": "^8.4.2", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.8", + "postcss-color-functional-notation": "^7.0.12", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.5", - "postcss-custom-properties": "^14.0.4", - "postcss-custom-selectors": "^8.0.4", + "postcss-custom-media": "^11.0.6", + "postcss-custom-properties": "^14.0.6", + "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.0", + "postcss-double-position-gradients": "^6.0.4", "postcss-focus-visible": "^10.0.1", "postcss-focus-within": "^9.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^6.0.0", "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.8", + "postcss-lab-function": "^7.0.12", "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.1", + "postcss-nesting": "^13.0.2", "postcss-opacity-percentage": "^3.0.0", "postcss-overflow-shorthand": "^6.0.0", "postcss-page-break": "^3.0.4", @@ -16864,9 +16983,9 @@ } }, "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "engines": { "node": ">=6" } @@ -16986,14 +17105,6 @@ } ] }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -17070,155 +17181,37 @@ "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", - "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "rc": "cli.js" } }, - "node_modules/react-dev-utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/react-dev-utils/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/react": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, "node_modules/react-dom": { @@ -17232,11 +17225,6 @@ "react": "^19.0.0" } }, - "node_modules/react-error-overlay": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz", - "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==" - }, "node_modules/react-fast-compare": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", @@ -17264,6 +17252,17 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-json-view-lite": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz", + "integrity": "sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g==", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0" + } + }, "node_modules/react-loadable": { "name": "@docusaurus/react-loadable", "version": "6.0.0", @@ -17376,22 +17375,6 @@ "node": ">=8.10.0" } }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/recma-build-jsx": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", @@ -17407,9 +17390,9 @@ } }, "node_modules/recma-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", - "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", @@ -17420,6 +17403,9 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/recma-parse": { @@ -17452,26 +17438,15 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dependencies": { "regenerate": "^1.4.2" }, @@ -17484,14 +17459,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regex-parser": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", @@ -17499,16 +17466,16 @@ "dev": true }, "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", + "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" @@ -17545,27 +17512,16 @@ "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/rehype-parse": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-7.0.1.tgz", @@ -17698,9 +17654,9 @@ } }, "node_modules/remark-mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", - "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" @@ -17726,9 +17682,9 @@ } }, "node_modules/remark-rehype": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", - "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -17985,21 +17941,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/robust-predicates": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", @@ -18033,6 +17974,17 @@ "node": ">=12.0.0" } }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -18182,6 +18134,11 @@ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" }, + "node_modules/schema-dts": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", + "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==" + }, "node_modules/schema-utils": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", @@ -18480,9 +18437,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "engines": { "node": ">= 0.4" }, @@ -18490,22 +18447,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -18675,11 +18616,11 @@ } }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/source-map-js": { @@ -18769,9 +18710,9 @@ } }, "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==" + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==" }, "node_modules/string_decoder": { "version": "1.3.0", @@ -18886,10 +18827,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-to-js": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.18.tgz", + "integrity": "sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==", + "dependencies": { + "style-to-object": "1.0.11" + } + }, "node_modules/style-to-object": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", - "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.11.tgz", + "integrity": "sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==", "dependencies": { "inline-style-parser": "0.2.4" } @@ -18973,6 +18922,18 @@ "node": ">= 10" } }, + "node_modules/swr": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.6.tgz", + "integrity": "sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw==", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -19063,10 +19024,31 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "node_modules/thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/thunky": { "version": "1.1.0", @@ -19088,6 +19070,14 @@ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -19173,6 +19163,21 @@ "node": ">=6" } }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -19277,6 +19282,7 @@ "version": "5.8.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19324,17 +19330,17 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "engines": { "node": ">=4" } @@ -19508,9 +19514,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", "funding": [ { "type": "opencollective", @@ -19704,6 +19710,14 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -19948,41 +19962,47 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" @@ -19997,53 +20017,51 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.21.2", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { @@ -20054,66 +20072,38 @@ } } }, - "node_modules/webpack-dev-server/node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/webpack-dev-server/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, + "node_modules/webpack-dev-server/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" + "node": ">=12" }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-dev-server/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "engines": { "node": ">=10.0.0" }, @@ -20369,11 +20359,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -20405,6 +20390,34 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", @@ -20444,14 +20457,15 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, "engines": { "node": ">= 6" } }, "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "engines": { "node": ">=12.20" }, @@ -20459,6 +20473,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", + "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", diff --git a/package.json b/package.json index 454aeeb..e31ecfd 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,9 @@ }, "dependencies": { "@coderline/alphatab": "^1.7.0-alpha.1515", - "@docusaurus/core": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", - "@docusaurus/theme-mermaid": "^3.7.0", + "@docusaurus/core": "^3.9.2", + "@docusaurus/preset-classic": "^3.9.2", + "@docusaurus/theme-mermaid": "^3.9.2", "@fontsource/noto-sans": "^5.1.1", "@fontsource/noto-serif": "^5.1.1", "@fortawesome/free-brands-svg-icons": "^6.7.2", @@ -41,8 +41,8 @@ "webpack": "^5.98.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.7.0", - "@docusaurus/tsconfig": "^3.7.0", + "@docusaurus/module-type-aliases": "^3.9.2", + "@docusaurus/tsconfig": "^3.9.2", "@types/react": "^19.0.10", "babel-plugin-macros": "^3.1.0", "copy-webpack-plugin": "^12.0.2", diff --git a/src/theme/CodeBlock/Content/String.tsx b/src/theme/CodeBlock/Content/String.tsx deleted file mode 100644 index c661167..0000000 --- a/src/theme/CodeBlock/Content/String.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import React, { type ReactNode } from "react"; -import clsx from "clsx"; -import { useThemeConfig, usePrismTheme } from "@docusaurus/theme-common"; -import { - parseCodeBlockTitle, - parseLanguage, - parseLines, - containsLineNumbers, - useCodeWordWrap, -} from "@docusaurus/theme-common/internal"; -import { Highlight, type Language } from "prism-react-renderer"; -import Line from "../Line"; -import CopyButton from "@theme/CodeBlock/CopyButton"; -import WordWrapButton from "@theme/CodeBlock/WordWrapButton"; -import Container from "@theme/CodeBlock/Container"; -import type { Props } from "@theme/CodeBlock/Content/String"; - -import styles from "./styles.module.css"; -import { parseCodeBlockMeta, ParseLineOptions } from "../utils"; - -// Prism languages are always lowercase -// We want to fail-safe and allow both "php" and "PHP" -// See https://github.com/facebook/docusaurus/issues/9012 -function normalizeLanguage(language: string | undefined): string | undefined { - return language?.toLowerCase(); -} - -export default function CodeBlockString({ - children, - className: blockClassName = "", - metastring, - title: titleProp, - showLineNumbers: showLineNumbersProp, - language: languageProp, -}: Props): ReactNode { - const { - prism: { defaultLanguage, magicComments }, - } = useThemeConfig(); - const language = normalizeLanguage( - languageProp ?? parseLanguage(blockClassName) ?? defaultLanguage - ); - - const prismTheme = usePrismTheme(); - const wordWrap = useCodeWordWrap(); - - // We still parse the metastring in case we want to support more syntax in the - // future. Note that MDX doesn't strip quotes when parsing metastring: - // "title=\"xyz\"" => title: "\"xyz\"" - const title = parseCodeBlockTitle(metastring) || titleProp; - - const options:ParseLineOptions = { - metastring, - language, - magicComments, - }; - - const { lineClassNames, code } = parseLines(children, options); - const showLineNumbers = - showLineNumbersProp ?? containsLineNumbers(metastring); - - const meta = parseCodeBlockMeta(options); - - return ( - - {title &&
{title}
} -
- - {({ className, style, tokens, getLineProps, getTokenProps }) => ( -
-              
-                {tokens.map((line, i) => (
-                  
-                ))}
-              
-            
- )} -
-
- {(wordWrap.isEnabled || wordWrap.isCodeScrollable) && ( - wordWrap.toggle()} - isEnabled={wordWrap.isEnabled} - /> - )} - -
-
-
- ); -} diff --git a/src/theme/CodeBlock/Content/styles.module.css b/src/theme/CodeBlock/Content/styles.module.css deleted file mode 100644 index 3760c53..0000000 --- a/src/theme/CodeBlock/Content/styles.module.css +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -.codeBlockContent { - position: relative; - /* rtl:ignore */ - direction: ltr; - border-radius: inherit; -} - -.codeBlockTitle { - border-bottom: 1px solid var(--ifm-color-emphasis-300); - font-size: var(--ifm-code-font-size); - font-weight: 500; - padding: 0.75rem var(--ifm-pre-padding); - border-top-left-radius: inherit; - border-top-right-radius: inherit; -} - -.codeBlock { - --ifm-pre-background: var(--prism-background-color); - margin: 0; - padding: 0; -} - -.codeBlockTitle + .codeBlockContent .codeBlock { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.codeBlockStandalone { - padding: 0; -} - -.codeBlockLines { - font: inherit; - /* rtl:ignore */ - float: left; - min-width: 100%; - padding: var(--ifm-pre-padding); -} - -.codeBlockLinesWithNumbering { - display: table; - padding: var(--ifm-pre-padding) 0; -} - -@media print { - .codeBlockLines { - white-space: pre-wrap; - } -} - -.buttonGroup { - display: flex; - column-gap: 0.2rem; - position: absolute; - /* rtl:ignore */ - right: calc(var(--ifm-pre-padding) / 2); - top: calc(var(--ifm-pre-padding) / 2); -} - -.buttonGroup button { - display: flex; - align-items: center; - background: var(--prism-background-color); - color: var(--prism-color); - border: 1px solid var(--ifm-color-emphasis-300); - border-radius: var(--ifm-global-radius); - padding: 0.4rem; - line-height: 0; - transition: opacity var(--ifm-transition-fast) ease-in-out; - opacity: 0; -} - -.buttonGroup button:focus-visible, -.buttonGroup button:hover { - opacity: 1 !important; -} - -:global(.theme-code-block:hover) .buttonGroup button { - opacity: 0.4; -} diff --git a/src/theme/CodeBlock/Line/index.tsx b/src/theme/CodeBlock/Line/index.tsx deleted file mode 100644 index a175c07..0000000 --- a/src/theme/CodeBlock/Line/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React, { type ReactNode } from "react"; -import clsx from "clsx"; -import type { Props } from "@theme/CodeBlock/Line"; - -import styles from "./styles.module.css"; -import { CodeBlockMeta } from "../utils"; -import Link from "@docusaurus/Link"; - -export type ExtendedCodeLineProps = Props & { - meta: CodeBlockMeta; -}; - - -export default function CodeBlockLine({ - line, - classNames, - showLineNumbers, - getLineProps, - getTokenProps, - meta, -}: ExtendedCodeLineProps): ReactNode { - if (line.length === 1 && line[0]!.content === "\n") { - line[0]!.content = ""; - } - - const lineProps = getLineProps({ - line, - className: clsx(classNames, showLineNumbers && styles.codeLine), - }); - - const lineTokens = line.map((token, key) => { - const trimmed = token.content.trim(); - const makeLink = token.types.some((t) => t === "plain" || t === "function"); - if (makeLink) { - const link = meta.options[`link${trimmed}`.toLowerCase()]; - if (typeof link === "string") { - const index = token.content.indexOf(trimmed); - let before = token.content.substring(0, index); - let after = token.content.substring(index + trimmed.length); - return ( - <> - {before && ( - - )} - - {after && ( - - )} - - ); - } - } - - return ; - }); - - return ( - - {showLineNumbers ? ( - <> - - {lineTokens} - - ) : ( - lineTokens - )} -
-
- ); -} diff --git a/src/theme/CodeBlock/Line/styles.module.css b/src/theme/CodeBlock/Line/styles.module.css deleted file mode 100644 index 7c28ed9..0000000 --- a/src/theme/CodeBlock/Line/styles.module.css +++ /dev/null @@ -1,45 +0,0 @@ -/* Intentionally has zero specificity, so that to be able to override -the background in custom CSS file due bug https://github.com/facebook/docusaurus/issues/3678 */ -:where(:root) { - --docusaurus-highlighted-code-line-bg: rgb(72 77 91); -} - -:where([data-theme='dark']) { - --docusaurus-highlighted-code-line-bg: rgb(100 100 100); -} - -:global(.theme-code-block-highlighted-line) { - background-color: var(--docusaurus-highlighted-code-line-bg); - display: block; - margin: 0 calc(-1 * var(--ifm-pre-padding)); - padding: 0 var(--ifm-pre-padding); -} - -.codeLine { - display: table-row; - counter-increment: line-count; -} - -.codeLineNumber { - display: table-cell; - text-align: right; - width: 1%; - position: sticky; - left: 0; - padding: 0 var(--ifm-pre-padding); - background: var(--ifm-pre-background); - overflow-wrap: normal; -} - -.codeLineNumber::before { - content: counter(line-count); - opacity: 0.4; -} - -:global(.theme-code-block-highlighted-line) .codeLineNumber::before { - opacity: 0.8; -} - -.codeLineContent { - padding-right: var(--ifm-pre-padding); -} diff --git a/src/theme/CodeBlock/utils.ts b/src/theme/CodeBlock/utils.ts deleted file mode 100644 index 5054260..0000000 --- a/src/theme/CodeBlock/utils.ts +++ /dev/null @@ -1,151 +0,0 @@ -import rangeParser from "parse-numeric-range"; -import { useThemeConfig } from "@docusaurus/theme-common"; - -type MagicCommentConfig = ReturnType< - typeof useThemeConfig ->["prism"]["magicComments"][0]; - -/** - * The supported types for {@link CodeBlockMeta.options} values. - */ -export type CodeMetaOptionValue = string | boolean | number; - -/** - * Any options as specified by the user in the "metastring" of codeblocks. - */ -export interface CodeBlockMeta { - /** - * The highlighted lines, 0-indexed. e.g. `{ 0: ["highlight", "sample"] }` - * means the 1st line should have `highlight` and `sample` as class names. - */ - readonly lineClassNames: { [lineIndex: number]: string[] }; - - /** - * The parsed options, key converted to lowercase. - * e.g. `"title" => "file.js", "showlinenumbers" => true` - */ - readonly options: { [key: string]: CodeMetaOptionValue }; -} - -// note: regexp/no-useless-non-capturing-group is a false positive -// the group is required or it breaks the correct alternation of -// | -const optionRegex = - // eslint-disable-next-line regexp/no-useless-non-capturing-group - /(?\w+)(?:=(?:(?:(?["'])(?.*?)\k)|(?\S*)))?/g; -const metastringLinesRangeRegex = /\{(?[\d,-]+)\}/g; -const highlightOptionKey = "highlight"; - -function parseCodeBlockOptions( - meta: CodeBlockMeta, - originalMetastring: string, - metastring: string, - magicComments: MagicCommentConfig[] -) { - if (metastring) { - optionRegex.lastIndex = 0; - - let match = optionRegex.exec(metastring); - - while (match) { - const { stringValue, rawValue } = match.groups!; - - const key = match.groups!.key!.toLowerCase(); - - // special highlight option - if (key === highlightOptionKey) { - if (magicComments.length === 0) { - throw new Error( - `A highlight range has been given in code block's metastring (\`\`\` ${originalMetastring}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.` - ); - } - const metastringRangeClassName = magicComments[0]!.className; - rangeParser(stringValue ?? rawValue!) - .filter((n) => n > 0) - .forEach((n) => { - meta.lineClassNames[n - 1] = [metastringRangeClassName]; - }); - } else if (stringValue === undefined && rawValue === undefined) { - // flag options - meta.options[key] = true; - } else if (stringValue !== undefined) { - // string option - meta.options[key] = stringValue; - } else if (rawValue === "true") { - // boolean option - meta.options[key] = true; - } else if (rawValue === "false") { - meta.options[key] = false; - } else { - const number = parseFloat(rawValue!); - if (!Number.isNaN(number)) { - // number value - meta.options[key] = number; - } else { - // non quoted string - meta.options[key] = rawValue!; - } - } - - match = optionRegex.exec(metastring); - } - } -} - -export type ParseLineOptions = { - /** - * The full metastring, as received from MDX. Line ranges declared here - * start at 1. Or alternatively the parsed {@link CodeBlockMeta}. - */ - metastring: string | undefined; - /** - * Language of the code block, used to determine which kinds of magic - * comment styles to enable. - */ - language: string | undefined; - /** - * Magic comment types that we should try to parse. Each entry would - * correspond to one class name to apply to each line. - */ - magicComments: MagicCommentConfig[]; -}; - -/** - * Rewrites the range syntax to special options. e.g. - * `{1,2,3-4,5} => highlight=1 highlight=2 highlight=3-4 highlight=5` - * @param metastring The input metastring with the range syntax - * @returns The string where the range syntax has been rewritten - */ -function rewriteLinesRange(metastring: string): string { - metastringLinesRangeRegex.lastIndex = 0; - - return metastring.replaceAll(metastringLinesRangeRegex, (_, range) => { - return (range as string) - .split(",") - .map((r) => `${highlightOptionKey}=${r}`) - .join(" "); - }); -} - -export function parseCodeBlockMeta(options: ParseLineOptions): CodeBlockMeta { - if (typeof options.metastring === "object") { - return options.metastring; - } - - const meta: CodeBlockMeta = { - lineClassNames: {}, - options: {}, - }; - - const { metastring, magicComments } = options; - - // exit early if nothing to do. - if (!metastring) { - return meta; - } - - const rewritten = rewriteLinesRange(metastring); - parseCodeBlockOptions(meta, metastring, rewritten, magicComments); - - return meta; -} From aa489568d5845bf3029c6ceac84acdce0f82332d Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sat, 1 Nov 2025 12:10:18 +0100 Subject: [PATCH 14/15] chore: broken links and anchors --- docs/alphatex/bar-metadata.mdx | 2 +- docs/alphatex/document-structure.mdx | 6 +++--- docs/alphatex/structural-metadata.mdx | 2 +- docs/alphatex/syntax.mdx | 4 ++-- docs/releases/release1_4.mdx | 2 +- docs/releases/release1_5.mdx | 6 +++--- docs/showcase/general.mdx | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/alphatex/bar-metadata.mdx b/docs/alphatex/bar-metadata.mdx index a15b786..4635d14 100644 --- a/docs/alphatex/bar-metadata.mdx +++ b/docs/alphatex/bar-metadata.mdx @@ -602,7 +602,7 @@ There are no properties on this metadata. **Description:** Specifies how the sustain petal should be pressed down (`spd`), held (`sph`) or lifted up (`spu`). This tag allows specifying the sustain pedal relative to the bar. -The sustain pedal can also be applied via [beat properties](./beat-properties.mdx#sustain-pedals). +The sustain pedal can also be applied via [beat properties](./beat-properties.mdx#spd-sph-spu-and-spe). **Values:** diff --git a/docs/alphatex/document-structure.mdx b/docs/alphatex/document-structure.mdx index 977d740..4e73957 100644 --- a/docs/alphatex/document-structure.mdx +++ b/docs/alphatex/document-structure.mdx @@ -82,7 +82,7 @@ Optionally you can specify some properties afterwards the duration to specify tu `:4 {tu 3 2}` -See [Tuplet Ranges](./beat-properties.mdx#TupletRanges) for more details. +See [Tuplet Effect](./beat-properties.mdx#tu) for more details. {` :16 // 16th notes from here @@ -112,7 +112,7 @@ A rest is simply indicated by specifying an `r`: :4 r r r r `} -Multiple [Notes](#Notes) can be grouped with parenthesis `()`. Similar to the value lists, you can also just specify +Multiple [Notes](#notes) can be grouped with parenthesis `()`. Similar to the value lists, you can also just specify one note and omit the parenthesis. {` @@ -185,7 +185,7 @@ notes are expressed as the fret and string the note is played on. The final note On percussion instruments, you specify the articulation which should be played as note. The percussion can be a quoted string or an identifier (name without quotes). -All details are described over at the [Percussion](./percussion.mdx) page. +More details are described over at the [`\\articulation`](./staff-metadata.mdx#articulation) metadata docs. {` \\instrument percussion diff --git a/docs/alphatex/structural-metadata.mdx b/docs/alphatex/structural-metadata.mdx index d1d3b4f..bcb5480 100644 --- a/docs/alphatex/structural-metadata.mdx +++ b/docs/alphatex/structural-metadata.mdx @@ -39,7 +39,7 @@ it is encouraged to also specify the initial item if there are multiple tracks, | longName | The long name of the track | `string` | no | | shortName | The short name of the track | `string` | no | -The displayed name depends on the configured [`Track Name Policy`](./score-metadata.mdx#track-names). +The displayed name depends on the configured [`Track Name Policy`](./score-metadata.mdx#singletracktracknamepolicy-and-multitracktracknamepolicy). If the short name is not specified, the first 10 characters of the long name are used as short name. **Example** diff --git a/docs/alphatex/syntax.mdx b/docs/alphatex/syntax.mdx index 3807fd9..b785215 100644 --- a/docs/alphatex/syntax.mdx +++ b/docs/alphatex/syntax.mdx @@ -95,10 +95,10 @@ Metadata tags identifiers are case-insensitive. ### Metadata tag values Metadata tags might have one or multiple values. The exact values supported (required or optional) depend on the tag. -See [Value Lists](#ValueLists) above for more details. +See [Value Lists](#value-lists) above for more details. ### Metadata tag properties Metadata tags might have one or multiple properties. The exact values supported depend on the tag. -See [Properties](#Properties) above for more details. +See [Properties](#properties) above for more details. diff --git a/docs/releases/release1_4.mdx b/docs/releases/release1_4.mdx index 845d083..933905c 100644 --- a/docs/releases/release1_4.mdx +++ b/docs/releases/release1_4.mdx @@ -288,7 +288,7 @@ while the song is being played. #### alphaTex: Support for Percussion Tabs https://github.com/CoderLine/alphaTab/pull/1493 -With alphaTab 1.4.0 you can finally also express percussion tabs. [Learn more here](/docs/alphatex/percussion) +With alphaTab 1.4.0 you can finally also express percussion tabs. [Learn more here](/docs/alphatex/staff-metadata.mdx#articulation) {` \\track "Drums" diff --git a/docs/releases/release1_5.mdx b/docs/releases/release1_5.mdx index 1b64b35..17178b6 100644 --- a/docs/releases/release1_5.mdx +++ b/docs/releases/release1_5.mdx @@ -168,21 +168,21 @@ https://github.com/CoderLine/alphaTab/pull/2002 Text templates and alignments for song info can be specified via alphaTex. -See [AlphaTex Metadata](/docs/alphatex/metadata). +See [AlphaTex Score Metadata](/docs/alphatex/score-metadata.mdx). ### alphatex: Bar Line customizations https://github.com/CoderLine/alphaTab/pull/2031 The new barlines styles can also be activated via alphaTex. -See [AlphaTex Bar Metadata](/docs/alphatex/bar-metadata#bar-lines). +See [AlphaTex Bar Metadata](/docs/alphatex/bar-metadata.mdx#barlineleft-and-barlineright). ### alphatex: More Dynamic Values https://github.com/CoderLine/alphaTab/pull/2030 The list of possible dynamic values (as defined by MusicXML) can also be specified in alphaTex. -See [AlphaTex Beat Effects](/docs/alphatex/beat-effects#dynamics). +See [AlphaTex Beat Effects](/docs/alphatex/beat-properties.mdx#dy). ### alphatex: Different key signatures across staves https://github.com/CoderLine/alphaTab/pull/2034 diff --git a/docs/showcase/general.mdx b/docs/showcase/general.mdx index ca2ce91..871f80a 100644 --- a/docs/showcase/general.mdx +++ b/docs/showcase/general.mdx @@ -45,7 +45,7 @@ alphaTab renders brackets and braces across staves which belong together. alphaT * Group Staves - The staves of the same track will be grouped together. If there are multiple "standard notation" staves a brace will be drawn, otherwise a bracket. * Group Same Instruments - Multiple tracks of the same instrument will be grouped together. No grouping happens if the staves of an instrument require a brace. -The mode is loaded from Guitar Pro files, can be [configured via alphaTex](/docs/alphatex/stylesheet.mdx#brackets-and-braces) or configured via `score.stylesheet.bracketExtendMode` on the data model. +The mode is loaded from Guitar Pro files, can be [configured via alphaTex](/docs/alphatex/score-metadata.mdx#bracketextendmode) or configured via `score.stylesheet.bracketExtendMode` on the data model. {` \\bracketextendmode GroupSimilarInstruments From 091c3cd08c068ff07d2f7472c5a5eaec380eb1eb Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Sat, 1 Nov 2025 12:10:26 +0100 Subject: [PATCH 15/15] fix: sass warning --- .../AlphaTexSyncPointSample/styles.module.scss | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/components/AlphaTexSyncPointSample/styles.module.scss b/src/components/AlphaTexSyncPointSample/styles.module.scss index d17258c..d3e651f 100644 --- a/src/components/AlphaTexSyncPointSample/styles.module.scss +++ b/src/components/AlphaTexSyncPointSample/styles.module.scss @@ -1 +1,16 @@ -@import '../AlphaTab/styles.module.scss' \ No newline at end of file +.wrapper { + position: relative; + + > button { + position: absolute; + top: 2rem; + left: 2rem; + opacity: 0; + z-index: 100; + transition: all 0.2s ease-in-out; + } + + &:hover > button { + opacity: 1; + } +}