From 6b9195db48a91797aea9d91114c23bd7fd8683be Mon Sep 17 00:00:00 2001 From: Simeon Simeonoff Date: Wed, 5 Aug 2026 16:05:57 +0300 Subject: [PATCH 01/38] docs(theming): update Angular docs for 22.1.0 theming changes --- .../content/en/components/action-strip.mdx | 2 +- .../src/content/en/components/card.mdx | 2 +- .../en/components/date-range-picker.mdx | 12 +--- .../src/content/en/components/divider.mdx | 22 +++---- .../src/content/en/components/drop-down.mdx | 4 +- .../general/how-to/how-to-customize-theme.mdx | 64 ++++++++++--------- .../en/components/general/update-guide.mdx | 24 +++++++ .../src/content/en/components/style-guide.mdx | 6 +- .../themes/misc/angular-material-theming.mdx | 2 +- .../themes/sass/component-themes.mdx | 11 ++++ .../components/themes/sass/global-themes.mdx | 6 +- .../en/components/themes/sass/typography.mdx | 26 ++++---- .../en/grids_templates/row-actions.mdx | 2 +- 13 files changed, 104 insertions(+), 79 deletions(-) diff --git a/docs/angular/src/content/en/components/action-strip.mdx b/docs/angular/src/content/en/components/action-strip.mdx index f3a29b369e..531bb3f2b3 100644 --- a/docs/angular/src/content/en/components/action-strip.mdx +++ b/docs/angular/src/content/en/components/action-strip.mdx @@ -214,7 +214,7 @@ Additional components and/or directives that can be used within the Action Strip - - - -- +- diff --git a/docs/angular/src/content/en/components/card.mdx b/docs/angular/src/content/en/components/card.mdx index 650ff419cc..a5b2850008 100644 --- a/docs/angular/src/content/en/components/card.mdx +++ b/docs/angular/src/content/en/components/card.mdx @@ -442,7 +442,7 @@ Additional components and/or directives that were used: - - - -- +- Styles: diff --git a/docs/angular/src/content/en/components/date-range-picker.mdx b/docs/angular/src/content/en/components/date-range-picker.mdx index 5a736c80df..4758a344ad 100644 --- a/docs/angular/src/content/en/components/date-range-picker.mdx +++ b/docs/angular/src/content/en/components/date-range-picker.mdx @@ -613,19 +613,9 @@ The last step is to pass the custom themes: ``` -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` +If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, tokens generated via CSS variables do not require `::ng-deep` to penetrate it, since the `tokens()` mixin above already produces plain CSS custom properties that cascade normally. -```scss -:host { - ::ng-deep { - @include date-range-picker($custom-date-range-theme); - @include input-group($custom-input-group-theme); - @include calendar($custom-calendar-theme); - } -} -``` - ### Scoping Styles Regarding style scoping, you should refer to both styling sections [Overlay Scoped Component Styles](/overlay-styling#Scoped Overlay Styles) and [Input Group Scoping Styles](/input-group#styling) as they provide more information. diff --git a/docs/angular/src/content/en/components/divider.mdx b/docs/angular/src/content/en/components/divider.mdx index b04ffdddf6..20790534ec 100644 --- a/docs/angular/src/content/en/components/divider.mdx +++ b/docs/angular/src/content/en/components/divider.mdx @@ -49,31 +49,31 @@ import { IgxDividerModule } from 'igniteui-angular/directives'; export class AppModule {} ``` -Alternatively, as of `16.0.0` you can import the `IgxDividerDirective` as a standalone dependency. +Alternatively, as of `16.0.0` you can import the `IgxDividerComponent` as a standalone dependency. ```typescript // home.component.ts -import { IgxDividerDirective } from 'igniteui-angular/directives'; -// import { IgxDividerDirective } from '@infragistics/igniteui-angular'; for licensed package +import { IgxDividerComponent } from 'igniteui-angular/directives'; +// import { IgxDividerComponent } from '@infragistics/igniteui-angular'; for licensed package @Component({ selector: 'app-home', template: '', styleUrls: ['home.component.scss'], standalone: true, - imports: [IgxDividerDirective] + imports: [IgxDividerComponent] }) export class HomeComponent {} ``` -Now that you have the Ignite UI for Angular Divider module or directive imported, you can start using the `igx-divider` component. +Now that you have the Ignite UI for Angular Divider module or component imported, you can start using the `igx-divider` component. ## Using the Angular Divider ### Vertical Divider -By adding the attribute and setting its value to `true`, you can change the direction of the divider from horizontal to vertical. +By adding the attribute and setting its value to `true`, you can change the direction of the divider from horizontal to vertical. ```html @@ -84,7 +84,7 @@ By adding the attribute of the divider and set its value to `dashed`. +To change the default look simply use the attribute of the divider and set its value to `dashed`. ```html @@ -95,7 +95,7 @@ To change the default look simply use the attribute of the divider to `true` and provider the desired value, the divider will start shrinking from both ends. +To inset the divider, set the attribute of the divider to `true` and provider the desired value, the divider will start shrinking from both ends. **Keep in mind that you have to add unit(px,rem,%...) at the end of the value otherwise, it will not work.** @@ -110,12 +110,12 @@ To inset the divider, set the -If the value of the attribute is set to a false value, or if the attribute is omitted altogether, the divider will set in only on the left. +If the value of the attribute is set to a false value, or if the attribute is omitted altogether, the divider will set in only on the left. ## API References
-- -- +- +- ## Additional Resources
diff --git a/docs/angular/src/content/en/components/drop-down.mdx b/docs/angular/src/content/en/components/drop-down.mdx index 29146828c9..c17ae9c34b 100644 --- a/docs/angular/src/content/en/components/drop-down.mdx +++ b/docs/angular/src/content/en/components/drop-down.mdx @@ -561,8 +561,8 @@ The last step is to pass the custom drop-down theme: - . - - -- -- +- +- ## Theming Dependencies - diff --git a/docs/angular/src/content/en/components/general/how-to/how-to-customize-theme.mdx b/docs/angular/src/content/en/components/general/how-to/how-to-customize-theme.mdx index 5d78b92f71..90e7964081 100644 --- a/docs/angular/src/content/en/components/general/how-to/how-to-customize-theme.mdx +++ b/docs/angular/src/content/en/components/general/how-to/how-to-customize-theme.mdx @@ -16,9 +16,6 @@ import gettingStartedDarkApp from '../../../images/general/theming-walkthrough/g import customizingUpdatedToolbar from '../../../images/general/theming-walkthrough/customizing-updated-toolbar.png'; import customizingColorSchemaLight from '../../../images/general/theming-walkthrough/customizing-color-schema-light.png'; import customizingColorSchemaDark from '../../../images/general/theming-walkthrough/customizing-color-schema-dark.png'; -import optimizingInitialBuild from '../../../images/general/theming-walkthrough/optimizing-initial-build.png'; -import optimizingAfterExclude from '../../../images/general/theming-walkthrough/optimizing-after-exclude.png'; -import optimizingAfterModuleLazyload from '../../../images/general/theming-walkthrough/optimizing-after-module-lazyload.png'; # Customizing Ignite UI for Angular Theming @@ -124,7 +121,7 @@ $custom-palette: palette( /* Grid Toolbar */ /* All grid toolbars will have custom background and elevations */ $toolbar-theme: grid-toolbar-theme( - $background-color: $primary + $background: $primary ); :host { @@ -181,7 +178,7 @@ Then our theme definition will go in the general scope, which we will use for th @media (prefers-color-scheme: light) { /* Grid Toolbar override for light color scheme */ igx-grid-toolbar { - --background-color: #{$primary-light}; + --background: #{$primary-light}; --title-text-color: #{text-contrast($primary-light)}; } /* END Grid Toolbar */ @@ -197,7 +194,7 @@ Then our theme definition will go in the general scope, which we will use for th /* Grid Toolbar override for dark color scheme */ igx-grid-toolbar { - --background-color: #{$primary-dark}; + --background: #{$primary-dark}; --title-text-color: #{text-contrast($primary-dark)}; } /* END Grid Toolbar */ @@ -239,11 +236,13 @@ We've made this as granular as possible, so modifications can be applied without ## Theme Optimization -After making some customizations, we're going to build the application we generated and modified to see what our application theme looks like in terms of size. + +Starting with Ignite UI for Angular 22.1.0, component structural styles ship inside each component's own bundle instead of a single, all-or-nothing global stylesheet. Your build tool (webpack, esbuild, etc.) includes structural CSS only for the components your application actually imports, automatically, without any additional configuration on your part. + -Optimizing Initial Build +Calling `@include theme()` (together with `core()` and `typography()`) generates the shared design **tokens** — the `--ig-*` CSS custom properties consumed by every component — for your global stylesheet. Since structural styles no longer live here, this output is already much smaller than a stylesheet that used to bundle every component's structural CSS regardless of whether it was used. -As you can see, the application theme is slightly over 400kb, which comes down to ~40kb when compressed and transferred over. This is not large, but can it be more optimal? The answer is yes, unless every single component from the Ignite UI for Angular suite is used. Calling `@include theme()` brings in all of the component themes, but we have a mechanism for telling the function what to exclude. There's an parameter to the theming mixin, which takes component names as an array and excludes those from the theme at build time. Since it's not so easy to find and list all of the components available in the package, it's preferable if you can just list all of the components you use. We expose the full component list as a variable, which you have access to once you +You can trim the token output further with the parameter, which removes a listed component's tokens from the global preset. This is useful when you know your application will never use a given component and don't want to ship tokens for it. Since it's not so easy to find and list all of the components available in the package, it's preferable if you can just list all of the components you use. We expose the full component list as a variable, which you have access to once you ```scss @use "@infragistics/igniteui-angular/theming" as *; @@ -277,11 +276,9 @@ Some component themes depend on other component themes. Even if you exclude certain themes, they will be retained by the build if you use a component theme, which depends on an excluded theme. -What does our build look like after we've excluded certain themes? - -Optimizing After Exclude +### Scoping a feature's custom theme to its lazy-loaded route -As you can see, our styles size is reduced to almost half it's original size. This looks pretty good at the moment, but can we reduce this even further? In fact, we can. Most of the styles size is taken by the largest components in the suite, in this case the `IgxTreeGridComponent` that we have in one of our views. However, we don't use this component in any other view. We can make the view with the `igx-tree-grid` a lazy-loaded route and we can include the theme for the grids only for that route, hence making our top-level css even smaller. How is this done? +Even with automatic tree-shaking, you'll often still want to keep **custom token overrides** for a component close to the one feature that uses them, instead of adding them to your global stylesheet where every view has to carry them. Say your `IgxTreeGridComponent` and `IgxComboComponent` instances, richly customized to match a specific design, are only used inside one "Employees" view and nowhere else in your app. Rather than defining their custom colors in the app-wide `styles.scss`, you can colocate those overrides with the feature itself by lazy-loading that view as its own route. We will start by creating a new module and a new routing module in the folder with the employees component in our app. @@ -353,15 +350,15 @@ export class AppRoutingModule { } ``` -Now we remove the `IgxTreeGridModule` and `IgxComboModule` imports, as well as the `EmployeesComponent` from our `app.module.ts` because we don't use the imports in any other views and we can have only one component declaration in all modules. +Now we remove the `IgxTreeGridModule` and `IgxComboModule` imports, as well as the `EmployeesComponent` declaration, from our `app.module.ts` because we don't use them in any other views and a component can only be declared in one module. -Then we will proceed by removing the `igx-grid`, `igx-grid-toolbar` and `igx-combo` from our theme includes, and we will include them on the `employees.component.scss` level. +Then we move the custom `igx-grid`, `igx-grid-toolbar`, and `igx-combo` token overrides out of the global stylesheet and colocate them with the component that uses them, in `employees.component.scss`. Because these are just CSS custom properties, there's no need for `::ng-deep` to reach past `ViewEncapsulation`: ```scss /* employees.component.scss */ @use "@infragistics/igniteui-angular/theming" as *; -:host ::ng-deep { +:host { height: 100%; display: flex; justify-content: flex-start; @@ -369,19 +366,28 @@ Then we will proceed by removing the `igx-grid`, `igx-grid-toolbar` and `igx-com align-content: flex-start; $primary: #1028c7; - @include core(); - - @include grid(grid-theme()); - @include combo(combo-theme()); - - @include grid-toolbar( - grid-toolbar-theme( - $background-color: $primary, - ); + @include tokens(grid-theme( + $schema: $dark-material-schema, + $background: #1a1a1a, + $foreground: #fff, + $accent-color: $primary + )); + + @include tokens(combo-theme( + $schema: $dark-material-schema, + $toggle-button-background: $primary + )); + + @include tokens(grid-toolbar-theme( + $schema: $dark-material-schema, + $background: $primary + )); } ``` +With those overrides moved out, the top-level stylesheet no longer needs to exclude `igx-grid`, `igx-combo`, and `igx-grid-toolbar` from its token output — it can generate tokens for them using the shared app-wide palette and schema like any other component, while the Employees view supplies its own richer overrides on top: + ```scss /* Updated styles.scss */ @use "sass:map"; @@ -411,7 +417,7 @@ $include: ( @include theme( $palette: $custom-palette, $schema: $dark-material-schema, - $exclude: map.keys(map.remove($components, $include...),) + $exclude: map.keys(map.remove($components, $include...)) ); ``` @@ -419,11 +425,7 @@ $include: ( You probably want to put all your variables, like color palette values in a separate `_variables.scss` file, which you can include from multiple components to reuse the variables. -The result in terms of build is the following: - -Optimizing After Module Lazy Load - -As you can see, our top-level `styles.css` came down to a little over 70kb, which is a little less than 6kb when compressed. We started at ~428kb, ~40kb compressed and managed to bring this down about 7 times in terms of compressed size. The rest is being delivered only when the view containing the `igx-tree-grid` and `igx-combo` components is being loaded. +The result: the global stylesheet no longer carries color overrides that only matter for the Employees view, and since `IgxTreeGridComponent` and `IgxComboComponent` are now only imported by the lazy-loaded `EmployeesModule`, their structural styles are fetched together with that module's chunk — only when a user actually navigates to the Employees view, rather than on every page load. ## Additional Resources diff --git a/docs/angular/src/content/en/components/general/update-guide.mdx b/docs/angular/src/content/en/components/general/update-guide.mdx index ecd656e6af..60a0a7fbe1 100644 --- a/docs/angular/src/content/en/components/general/update-guide.mdx +++ b/docs/angular/src/content/en/components/general/update-guide.mdx @@ -63,6 +63,30 @@ Unfortunately not all changes can be automatically updated. Changes below are sp For example: if you are updating from version 6.2.4 to 7.1.0 you'd start from the "From 6.x .." section apply those changes and work your way up: +## From 22.0.x to 22.1.x + +Ignite UI for Angular 22.1.0 finishes the migration to the `tokens()` mixin as the single way to apply a component theme and moves component structural styles into each component's own bundle. Most of the following changes are rewritten automatically by the `ng update` migration for 22.1.0, but if you have code that isn't picked up automatically (e.g. non-standard formatting, aliased imports), here's what changed: + +- The individual per-component Sass theme wrapper mixins (`avatar`, `badge`, `banner`, `card`, `dialog`, `tabs`, and the rest of the previously deprecated component mixins, including the grid/pivot mixins) have been removed. Replace any remaining `@include (-theme(...))` call with `@include tokens(-theme(...))`. + +```scss +// Before +.my-avatar { + @include avatar(avatar-theme($background: red)); +} + +// After +.my-avatar { + @include tokens(avatar-theme($background: red)); +} +``` + +- The per-component `-typography` mixins (`badge-typography`, `dialog-typography`, `checkbox-typography`, etc.) have been removed. Typography is now applied automatically as part of each component's tokens, so calls to these mixins should simply be deleted. See [Typography](/themes/sass/typography#component-typography) for how to scope a typography override to a specific component instance instead. +- Deep Sass imports of per-component structural partials (e.g. `igniteui-angular/lib/core/styles/components/avatar/avatar-component`) and their `component()` mixin calls are no longer needed and should be removed — structural styles now ship automatically with each component's bundle. +- `IgxDividerDirective` has been renamed to `IgxDividerComponent`. `IgxDividerModule` still exports the same component under the same name, so applications that only use the module import are unaffected; only direct standalone imports of `IgxDividerDirective` need updating. + +For details on the underlying tree-shaking and cascade-layering changes, see [Component Themes](/themes/sass/component-themes) and [Global Themes](/themes/sass/global-themes#excluding-components). + ## From 21.1.x to 22.0.x Angular no longer ships the `HammerModule` for touch gestures. To keep touch interactions (pan, swipe, tap) working in Ignite UI for Angular components, load HammerJS as a global script via the `scripts` array in your `angular.json`: diff --git a/docs/angular/src/content/en/components/style-guide.mdx b/docs/angular/src/content/en/components/style-guide.mdx index c39c5e40fc..3cad637e6c 100644 --- a/docs/angular/src/content/en/components/style-guide.mdx +++ b/docs/angular/src/content/en/components/style-guide.mdx @@ -154,10 +154,8 @@ Structured statements like for `x =1 to 10` loop structures -Next, we have added an showing information about some credit cards. Inside its content, there are [`mat-sliders`](https://material.angular.io/components/slider/overview), an and a [`mat-stepper`](https://material.angular.io/components/stepper/overview) with [`mat-form-fields`](https://material.angular.io/components/form-field/overview). +Next, we have added an showing information about some credit cards. Inside its content, there are [`mat-sliders`](https://material.angular.io/components/slider/overview), an and a [`mat-stepper`](https://material.angular.io/components/stepper/overview) with [`mat-form-fields`](https://material.angular.io/components/form-field/overview). Ignite UI for Angular Expansion Panel diff --git a/docs/angular/src/content/en/components/themes/sass/component-themes.mdx b/docs/angular/src/content/en/components/themes/sass/component-themes.mdx index 7be732493b..86242f94c7 100644 --- a/docs/angular/src/content/en/components/themes/sass/component-themes.mdx +++ b/docs/angular/src/content/en/components/themes/sass/component-themes.mdx @@ -6,6 +6,7 @@ llms: description: "Component themes allow you to change the styles of specific component instances by overriding the globally defined theme." --- import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; +import DocsAside from 'igniteui-astro-components/components/mdx/DocsAside.astro'; # Component Themes @@ -158,6 +159,16 @@ In a component template: +## Cascade Layers + +
+ +Structural styles, typography, design-system overrides, and derived/contextual tokens are now split across each component's own bundle and the global preset. To keep precedence between them deterministic regardless of import order, Ignite UI for Angular declares its CSS in the following [cascade layers](https://developer.mozilla.org/en-US/docs/Web/CSS/@layer): `ig.base` → `ig.typography` → `ig.material` (or the equivalent design-system layer) → `ig.derived`. Styles declared later in this list win over earlier ones, regardless of selector specificity or the order the component bundles happen to load in. + + +Any CSS you author outside of an `@layer` block is treated by the browser as unlayered, and unlayered styles always take precedence over layered styles, no matter their specificity. This means plain, unlayered overrides in your application stylesheet (including ones added via `::ng-deep`) will continue to beat Ignite UI's own layered styles, so you generally don't need extra specificity tricks to override component styles with your own CSS rules. + + ## View Encapsulation
diff --git a/docs/angular/src/content/en/components/themes/sass/global-themes.mdx b/docs/angular/src/content/en/components/themes/sass/global-themes.mdx index 3e7c1faccb..c5a0ec45f1 100644 --- a/docs/angular/src/content/en/components/themes/sass/global-themes.mdx +++ b/docs/angular/src/content/en/components/themes/sass/global-themes.mdx @@ -82,7 +82,11 @@ Including `core` before `theme` is essential. The `core` mixins provide all base
-The `theme` mixin allows you to provide a list of component names to be excluded from the global theme styles. For instance, if you want to completely remove all styles we include for the `igx-avatar` and `igx-badge` to reduce the amount of produced CSS or to supply your own custom styles, you can do so by passing the list of components like so: + +Since Ignite UI for Angular 22.1.0, component structural styles ship inside each component's own bundle and are already tree-shaken automatically based on what your application imports — you don't need `$exclude` to keep unused component CSS out of your build. The `theme` mixin's `$exclude` list now only controls the shared design **tokens** (`--ig-*` CSS custom properties) emitted into your global stylesheet, which is a much smaller amount of CSS than the structural styles ever were. + + +The `theme` mixin allows you to provide a list of component names to be excluded from the global theme's token output. For instance, if you want to remove the tokens we generate for `igx-avatar` and `igx-badge` because you know your application will never use them, you can do so by passing the list of components like so: ```scss // ... diff --git a/docs/angular/src/content/en/components/themes/sass/typography.mdx b/docs/angular/src/content/en/components/themes/sass/typography.mdx index e1b9ac96a8..1bfd81f2ec 100644 --- a/docs/angular/src/content/en/components/themes/sass/typography.mdx +++ b/docs/angular/src/content/en/components/themes/sass/typography.mdx @@ -171,7 +171,7 @@ $my-type-scale: extend( ``` -The above code will modify the `h6` scale category globally, which will affect the look and feel of all components that use the `h6` scale. This is done for consistency so that all `h6` elements look the same across your app. We understand that you may want to apply the modification for `h6` to specific components only, like the `igx-card` component in our case. This is why every component has its own typography mixin, which accepts a category configuration. +The above code will modify the `h6` scale category globally, which will affect the look and feel of all components that use the `h6` scale. This is done for consistency so that all `h6` elements look the same across your app. We understand that you may want to apply the modification for `h6` to specific components only, like the `igx-card` component in our case. Every component's typography is applied through the same universal `--ig-{category}-*` design tokens (e.g. `--ig-h6-font-size`), so you can scope an override to just the elements you care about by targeting those tokens with the `type-style-vars` mixin instead of changing the global type scale. ```scss @@ -180,26 +180,22 @@ $my-h6: type-style( $font-size: rem(12px), ); -// You can specify which categories from the type sale the card uses -$card-categories: ( - title: 'h6', - title-small: 'subtitle-1', - subtitle: 'subtitle-2', - content: 'body-2', -); - .my-cool-card { - // Overwrite the 'h6' type style for this scope + // Overwrite the 'h6' tokens for this scope only. + // Because CSS custom properties inherit, this affects every + // descendant that reads the '--ig-h6-*' tokens, including the + // card title inside .my-cool-card. @include type-style-vars('h6', $my-h6); - - // Pass the custom card catergories to the card typography mixin - @include card-typography($card-categories); } ``` -We no longer include the `typography` mixin by passing it the `$my-type-scale` scale with our modification to the `h6` category. Now all we do is pass the custom h6 style we created to the `type-style-vars` mixin. +Typography is applied automatically as part of each component's tokens, so every part of a component stays visually consistent with the rest of your app out of the box. When you want to give a specific component instance its own distinct look — say, a smaller title on just one card — scope a `type-style-vars` override for that category to the component instance, as shown above. You can also reach for the underlying `--ig-{category}-*` tokens directly as plain CSS custom properties, no Sass required: -Using the card-typography mixin, we can update the typography styles for all elements in the card component. In the example above, the title-small key in the $card-categories map is assigned the subtitle-1 type style. This change makes the small title in the card slightly larger. By default, the card component uses the subtitle-2 type style for the small title, which has a smaller font size than subtitle-1. The mixin allows us to override this default and apply the new style. +```css +.my-cool-card { + --ig-h6-font-size: 0.75rem; +} +``` ## Converting Units diff --git a/docs/angular/src/content/en/grids_templates/row-actions.mdx b/docs/angular/src/content/en/grids_templates/row-actions.mdx index 44d385e818..cb939d53a0 100644 --- a/docs/angular/src/content/en/grids_templates/row-actions.mdx +++ b/docs/angular/src/content/en/grids_templates/row-actions.mdx @@ -148,4 +148,4 @@ Additional components and/or directives that can be used within the Action Strip - - - -- +- From efcb7309c5b750d4c468eba8f0f11778a1eca802 Mon Sep 17 00:00:00 2001 From: Simeon Simeonoff Date: Wed, 5 Aug 2026 16:09:37 +0300 Subject: [PATCH 02/38] lint(cspell): allow "unlayered" for cascade-layers docs --- cspell.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cspell.json b/cspell.json index 1d47e03df7..d4117e45dd 100644 --- a/cspell.json +++ b/cspell.json @@ -396,6 +396,7 @@ "xlsb", "agentic", "wireframes", - "opensource" + "opensource", + "unlayered" ] } From a35861ddadf3ab336181d1f0c8147aae6eb23d0e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:02:05 +0000 Subject: [PATCH 03/38] docs(jp): sync Blazor changelog for 26.1.98 release Translate new {PackageVerLatest} section (26.1.98 August 2026) and rename the previous PackageVerLatest heading to PackageVerChanges-26-1-JUNE. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../general-changelog-dv-blazor.mdx | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/docs/xplat/src/content/jp/components/general-changelog-dv-blazor.mdx b/docs/xplat/src/content/jp/components/general-changelog-dv-blazor.mdx index bd4559a4c7..8d7c7bc9d6 100644 --- a/docs/xplat/src/content/jp/components/general-changelog-dv-blazor.mdx +++ b/docs/xplat/src/content/jp/components/general-changelog-dv-blazor.mdx @@ -35,6 +35,42 @@ import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; ## **{PackageVerLatest}** +### 機能拡張 + +#### {PackageCharts} + +- `Axis` およびすべての `XYChart` 派生チャートに軸の表示/非表示プロパティを追加し、スタイルのオーバーライドなしに個々の軸要素を切り替えられるようにしました。 + - `AreLabelsVisible` - ラベル パネルのレイアウト スロットを維持したまま、ティック ラベルのテキストを非表示にします。 + - `AreTickMarksVisible` - ティック マークのストロークを非表示にします。 + - `AreAnnotationsVisible` - 軸アノテーション (例: `FinalValueLayer` バッジ) を非表示にします。 + - `IsLabelPanelVisible` - ラベル パネル全体を折りたたんでゼロの範囲にします。 + - 対応するチャートレベルの転送プロパティ `XAxisAreLabelsVisible`、`XAxisAreTickMarksVisible`、`XAxisAreAnnotationsVisible`、`XAxisIsLabelPanelVisible`、`YAxisAreLabelsVisible`、`YAxisAreTickMarksVisible`、`YAxisAreAnnotationsVisible`、`YAxisIsLabelPanelVisible` が `IgbCategoryChart`、`IgbFinancialChart` およびその他の `XYChart` 派生チャートに追加されました。 + +- シリーズに `LegendItemBadgeMarkerSizeScaling` を追加しました。これにより、凡例バッジがシリーズの `MarkerSize` に応じてどのようにスケールするかを制御できます。サポートされる値は `Auto` (デフォルト、バッジを 1x と 2x の間で補間)、`None` (バッジはデフォルトのサイズを維持)、`Linear` (バッジは `MarkerSize` に直接スケール) です。解決されたサイズは、読み取り専用プロパティ `ActualLegendItemBadgeMarkerWidth` および `ActualLegendItemBadgeMarkerHeight` を通じて公開されます。 + +- `IgbLinearGraphRange` (`IgbLinearGauge` および `IgbBulletGraph` で使用) および `IgbRadialGaugeRange` に `StartInset` と `EndInset` を追加しました。これらのプロパティは、デバイス非依存ピクセル単位で測定された距離だけ範囲の開始端と終了端を内側にトリミングし、ゲージのサイズや値範囲に関わらず隣接する範囲間に一定のギャップを生成します。両方のデフォルト値は `0` であるため、インセットが設定されない限り範囲はフラッシュで接します。 + +#### {PackageGrids} (Grids) + +- 内部の Ignite UI for Angular 参照を 21.2 から 22.0 に更新し、`IgbGrid`、`IgbTreeGrid`、`IgbHierarchicalGrid`、`IgbRowIsland` の生成モデルを更新しました。新しい `GridBase`、`HierarchicalGridBase`、`RowIslandBase` の共有サーフェスが含まれます。 + +### バグ修正 + +| バグ番号 | コントロール | 説明 | +|------------|---------|-------------| +| 3817 | IgbInput およびその他の Web 入力 | ロード時にコンポーネントが登録されなかった問題を修正しました。`defineAllComponents` の登録が復元されました。 | +| 3743 | IgbGrid | フィルタリング イベントの詳細ペイロードで、以前の誤った型の代わりに `FilteringExpressionsTree` を使用するようになりました。 | +| 2129 | Web 入力 | `ReportValidity` と `CheckValidity` が `IgbCheckbox`、`IgbCombo`、`IgbDatePicker`、`IgbDateRangePicker`、`IgbInput`、`IgbRating`、`IgbSelect`、`IgbSlider`、`IgbTextarea` で誤った型を返していた問題を修正しました。 | +| 2123 | Web 入力 | フォーカス オプションが正しくマーシャリングされなかった問題を修正しました。プレーン オブジェクトとして処理されるようになりました。 | +| 3684 | IgbChat およびその他の Web コンポーネント | レンダラー要素を通じて渡されたときに列挙型プロパティが正しくシリアライズされなかった問題を修正しました。 | +| 3777 | IgbRadialGauge、IgbLinearGauge、IgbBulletGraph | ゲージで null 参照例外が発生する可能性があった問題を修正しました。 | +| 3534 | IgbSpreadsheet | 水平線が正しく表示されず、線の太さが変わると SVG 図形が位置をずらしていた問題を修正しました。 | +| 3821 | IgbDataPieChart | ホバー時に `SeriesPointerEnter` がハンドラーに届かず、集計されたバケットの角度範囲が誤って測定されていた問題を修正しました。 | +| 3322 | IgbDataPieChart | 以前の画像の読み込みが完了する前に要求された画像が変更された場合に、スライス レイヤーが誤った画像を表示していた問題を修正しました。 | +| 3688 | IgbDataChart | 破棄時にチャートが正しく破棄されなかった問題を修正しました。 | + +## **{PackageVerChanges-26-1-JUNE}** + ### IgbDockManager - Web Component の最新 2.1 バージョンへの内部参照を更新し、さまざまなバグ修正とパフォーマンスの改善を含みます。 From 497951c3313752233fc0152ad821fec5dc213713 Mon Sep 17 00:00:00 2001 From: Hristo Hristov <57346540+Hristo313@users.noreply.github.com> Date: Thu, 6 Aug 2026 18:53:43 +0300 Subject: [PATCH 04/38] feat(docs): update badge xplat topic (#445) --- docs/angular/package.json | 2 +- .../src/content/en/components/badge.mdx | 449 -------- .../src/content/en/components/toc.json | 2 +- .../anatomy-content-light/badge-lt-a.png | Bin 0 -> 39071 bytes .../en/images/badge/badge-do-n\320\276t.png" | Bin 0 -> 4555 bytes .../src/content/en/images/badge/badge-do.png | Bin 0 -> 21505 bytes docs/xplat/package.json | 2 +- .../images/badge/badge-do-n\320\276t.png" | Bin 0 -> 4555 bytes .../src/assets/images/badge/badge-do.png | Bin 0 -> 21505 bytes .../content/en/components/inputs/badge.mdx | 790 +++++++++++++- docs/xplat/src/content/en/toc.json | 12 +- package-lock.json | 999 ++++++++++-------- package.json | 6 +- 13 files changed, 1298 insertions(+), 964 deletions(-) delete mode 100644 docs/angular/src/content/en/components/badge.mdx create mode 100644 docs/angular/src/content/en/images/anatomy-content-light/badge-lt-a.png create mode 100644 "docs/angular/src/content/en/images/badge/badge-do-n\320\276t.png" create mode 100644 docs/angular/src/content/en/images/badge/badge-do.png create mode 100644 "docs/xplat/src/assets/images/badge/badge-do-n\320\276t.png" create mode 100644 docs/xplat/src/assets/images/badge/badge-do.png diff --git a/docs/angular/package.json b/docs/angular/package.json index ab3ca766cf..4b531ed97f 100644 --- a/docs/angular/package.json +++ b/docs/angular/package.json @@ -37,7 +37,7 @@ "dependencies": { "astro": "^6.1.6", "docs-template": "file:../../", - "igniteui-astro-components": "0.0.27", + "igniteui-astro-components": "0.0.30", "sharp": "^0.34.2" }, "devDependencies": { diff --git a/docs/angular/src/content/en/components/badge.mdx b/docs/angular/src/content/en/components/badge.mdx deleted file mode 100644 index ab21c48d81..0000000000 --- a/docs/angular/src/content/en/components/badge.mdx +++ /dev/null @@ -1,449 +0,0 @@ ---- -title: Angular Badge Component – Ignite UI for Angular | Infragistics | MIT license -description: Display an active count or icon in a predefined style to decorate other components anywhere in an application with Ignite UI for Angular Badge control. -keywords: Angular Badge component, Angular Badge control, Ignite UI for Angular, Angular UI Components -license: MIT -llms: - description: "Angular Badge is a component used in conjunction with avatars, navigation menus, or other components in an application when a visual notification is needed." ---- - -import DocsAside from 'igniteui-astro-components/components/mdx/DocsAside.astro'; -import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; -import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; - -# Angular Badge Component Overview - -
-Angular Badge is a component used in conjunction with avatars, navigation menus, or other components in an application when a visual notification is needed. Badges are usually designed as icons with a predefined style to communicate information, success, warnings, or errors. -
- -## Angular Badge Example - - - -
- -## Getting Started with Ignite UI for Angular Badge - -To get started with the Ignite UI for Angular Badge component, first you need to install Ignite UI for Angular. In an existing Angular application, type the following command: - -```cmd -ng add igniteui-angular -``` - -For a complete introduction to the Ignite UI for Angular, read the [_getting started_](/general/getting-started) topic. - -The next step is to import the `IgxBadgeModule` in your **app.module.ts** file. - -```typescript -// app.module.ts - -... -import { IgxBadgeModule } from 'igniteui-angular/badge'; -// import { IgxBadgeModule } from '@infragistics/igniteui-angular'; for licensed package - -@NgModule({ - ... - imports: [..., IgxBadgeModule], - ... -}) -export class AppModule {} -``` - -Alternatively, as of `16.0.0` you can import the as a standalone dependency. - -```typescript -// home.component.ts - -... -import { IgxBadgeComponent } from 'igniteui-angular/badge'; -// import { IgxBadgeComponent } from '@infragistics/igniteui-angular'; for licensed package - -@Component({ - selector: 'app-home', - template: '', - styleUrls: ['home.component.scss'], - standalone: true, - imports: [IgxBadgeComponent] -}) -export class HomeComponent {} -``` - - -This component uses Material Icons. Add the following link to your `index.html`: `` - - -Now that you have the Ignite UI for Angular Badge module or component imported, you can start with a basic configuration of the `igx-badge` component. - -## Using the Angular Badge Component - -Let's see how the demo sample is done. It's a simple success badge on an avatar. To build that, we need to import the `IgxAvatarModule`, along with the `IgxBadgeModule`: - -```typescript -// app.module.ts -... -import { IgxBadgeModule } from 'igniteui-angular/badge'; -import { IgxAvatarModule } from 'igniteui-angular/avatar'; -// import { IgxBadgeModule, IgxAvatarModule } from '@infragistics/igniteui-angular'; for licensed package - -@NgModule({ - ... - imports: [..., IgxBadgeModule, IgxAvatarModule], - ... -}) - -export class AppModule {} -``` - -_Alternatively, as of `16.0.0` you can import the and as standalone dependencies._ - -Next, we will add those components to our template: - -```html -
- - -
-``` - -Using the wrapper, we will position the badge absolutely, covering a little bit of the avatar: - -```scss -.wrapper { - position: relative; - margin-top: 15px; -} - -igx-badge { - position: absolute; - bottom: 0; - left: 28px; -} -``` - -### Badge Shape - -We can change the badge shape through the attribute setting its value to `square`. By default, the shape of the badge is `rounded`. - -```html - -``` - -If everything's done right, you should see the demo sample shown above in your browser. - -### Badge Size - -The size of the badge can be controlled using the `--size` variable. It will make sure that the badge sizes proportionally in both directions. Keep in mind, however, that badges containing text values use the `caption` typography style for its font-size and line-height. For that reason, when setting the `--size` of a badge containing text to values below 16px, you will also need to modify its typography. - -Example: - -```scss -igx-badge { - --size: 12px; - - font-size: calc(var(--size) / 2); - line-height: normal; -} -``` - -### Badge Value and Icon - -Use the `[value]` input to display text or a numeric count inside the badge: - -```html - -``` - -Use the `[icon]` input to display an icon inside the badge: - -```html - -``` - -When both `[icon]` and `[value]` are set, the badge displays both simultaneously: - -```html - - -``` - -Or you can project content directly: - -```html - {{ model.value }} - - - - bluetooth - Bluetooth - -``` - -### Badge Icon - -In addition to material icons, the `igx-badge` component also supports usage of [Material Icons Extended](/material-icons-extended) and any other custom icon set. To add an icon from the material icons extended set inside your badge component, first you have to register it: - -```ts -export class BadgeIconComponent implements OnInit { - constructor (protected _iconService: IgxIconService) {} - - public ngOnInit() { - this._iconService.addSvgIconFromText(heartMonitor.name, heartMonitor.value, 'imx-icons'); - } -} -``` - -Then, just specify the icon name and family as follows: - -```html - -``` - - - -### Outlined Badge - -The `igx-badge` component can also have a subtle border around it when its attribute is set. - -```html - -``` - - - -The color of the border can also be customized with the `$border-color` property from the . - -### Dot Badge - -The `igx-badge` component can also render as a minimal dot indicator for notifications by enabling its property. Dot badges do not support content, but they can be outlined and can use any of the available dot types (e.g., primary, success, info, etc.). - -```html - -``` - - - -### Badge in List - -Let's extend the previous sample and create a list with contacts, similar to those in chat clients. In addition to the contact name, we want to display an avatar and the current state of the contact (online, offline or away). To achieve this, we're using the and components. For a container, is used. - -To continue, include all needed modules and import them in the **app.module.ts** file. - -```typescript -// app.module.ts - -... -import { IgxListModule } from 'igniteui-angular/list'; -import { IgxAvatarModule } from 'igniteui-angular/avatar'; -import { IgxBadgeModule } from 'igniteui-angular/badge'; -// import { IgxListModule, IgxAvatarModule, IgxBadgeModule } from '@infragistics/igniteui-angular'; for licensed package - -@NgModule({ - ... - imports: [..., IgxListModule, IgxAvatarModule, IgxBadgeModule], -}) -export class AppModule {} -``` - - -The has and inputs to configure the badge look. You can set the icon by providing its name from the official [material icons set](https://material.io/icons/). The badge type can be set to either `Default`, `Info`, `Success`, `Warning`, or `Error`. Each type applies a specific background color, which takes precedence over any custom background color. - - -In our sample, and are bound to model properties named _icon_ and _type_. - -Next, we're adding the contacts in our template: - -```html -{/* contacts.component.html */} - - - - Team Members (4) - - -
-
- - -
-
- {{ member.name }} -
-
-
-
-``` - -We're going to create our members in the typescript file like this: - -```typescript -// contacts.component.ts - -... -public members: Member[] = [ - new Member('Terrance Orta', 'online'), - new Member('Donna Price', 'online'), - new Member('Lisa Landers', 'away'), - new Member('Dorothy H. Spencer', 'offline'), -]; - -``` - -```typescript -... -class Member { - public name: string; - public status: string; - public type: string; - public icon: string; - - constructor(name: string, status: string) { - this.name = name; - this.status = status; - switch (status) { - case 'online': - this.type = 'success'; - this.icon = 'check'; - break; - case 'away': - this.type = 'warning'; - this.icon = 'schedule'; - break; - case 'offline': - this.type = 'error'; - this.icon = 'remove'; - break; - } - } -} -``` - -Position the badge in its parent container: - -```css -/* contacts.component.css */ - -.wrapper { - display: flex; - flex-direction: row; -} - -.contact-name { - font-weight: 600; -} - -.contact-container { - margin-left: 20px; -} - -.badge-style { - position: absolute; - bottom: 2.5px; - left: 40px; -} - -``` - -If the sample is configured properly, a list of members should be displayed and every member has an avatar and a badge, showing its current state. - - - -## Styling - -### Badge Theme Property Map - -Changing the `$background-color` property automatically updates the following dependent properties: - -| Primary Property | Dependent Property | Description | -| --- | --- | --- | -| **$background-color** | $icon-color | The color used for icons in the badge. | -| | $text-color | The color used for text in the badge. | - -To get started with styling the badges, we need to import the `index` file, where all the theme functions and component mixins live: - -```scss -@use "igniteui-angular/theming" as *; - -// IMPORTANT: Prior to Ignite UI for Angular version 13 use: -// @import '~igniteui-angular/lib/core/styles/themes/index'; -``` - -Following the simplest approach, we create a new theme that extends the and accepts some parameters that style the badge's items. When you set the `$background-color`, the `$icon-color` and `$text-color` are automatically assigned based on which offers better contrast—black or white. Note that the `$border-radius` property only takes effect when the badge's is set to `square`. - -```scss -$custom-badge-theme: badge-theme( - $background-color: #57a5cd, - $border-radius: 4px -); -``` - -To include the new theme we use the `tokens` mixin: - -```scss -:host { - @include tokens($custom-badge-theme); -} -``` - -### Demo - - - -### Styling with Tailwind - -You can style the `badge` using our custom Tailwind utility classes. Make sure to [set up Tailwind](/themes/misc/tailwind-classes) first. - -Along with the tailwind import in your global stylesheet, you can apply the desired theme utilities as follows: - -```scss -@import "tailwindcss"; -... -@use 'igniteui-theming/tailwind/utilities/material.css'; -``` - -The utility file includes both `light` and `dark` theme variants. - -- Use `light-*` classes for the light theme. -- Use `dark-*` classes for the dark theme. -- Append the component name after the prefix, e.g., `light-badge`, `dark-badge`. - -Once applied, these classes enable dynamic theme calculations. From there, you can override the generated CSS variables using `arbitrary properties`. After the colon, provide any valid CSS color format (HEX, CSS variable, RGB, etc.). - -You can find the full list of properties in the . The syntax is as follows: - -```html - - -``` - - -The exclamation mark(`!`) is required to ensure the utility class takes precedence. Tailwind applies styles in layers, and without marking these styles as important, they will get overridden by the component’s default theme. - - -At the end your badges should look like this: - - - -
- -## API References - -- -- -- -- -- -- -## Theming Dependencies - -- - -## Additional Resources - -
- -Our community is active and always welcoming to new ideas. - -- [Ignite UI for Angular **Forums**](https://www.infragistics.com/community/forums/f/ignite-ui-for-angular) -- [Ignite UI for Angular **GitHub**](https://github.com/IgniteUI/igniteui-angular) diff --git a/docs/angular/src/content/en/components/toc.json b/docs/angular/src/content/en/components/toc.json index 70a1e35c37..796c2396b8 100644 --- a/docs/angular/src/content/en/components/toc.json +++ b/docs/angular/src/content/en/components/toc.json @@ -2007,7 +2007,7 @@ }, { "name": "Badge", - "href": "badge.mdx", + "href": "inputs/badge.mdx", "updated": false }, { diff --git a/docs/angular/src/content/en/images/anatomy-content-light/badge-lt-a.png b/docs/angular/src/content/en/images/anatomy-content-light/badge-lt-a.png new file mode 100644 index 0000000000000000000000000000000000000000..7318080d955b79bac3b12cf25c0f0e9b748c6471 GIT binary patch literal 39071 zcmeFZ^;?sD*atjOKtM$$CB0R;q)`M^M5P;Kqr1CPP~e6MC`dQT=F-Ax; zCN*NjdkyaAIo|glcz=304vuTPu5X^#d4A6PE<#P^%}sI!au5h~Q~vEM4G@S#9|R(L zcAW&c^Hq?<8n}=-ztwXCfp`@O|5tLQ5(FPfi{w>V+kCKNKo{(o(rH<1N$;%CbsXV$!bhF+t{RO zIFdOqmGY_OB#=lbE8mFthpa1EqV_JNl26a8zi$?MEPxT6jAcW=POyC4f?W~LNS1nN zBck#HSA6c9K|>F$5|r<5kUHJ3W>O`%ZAp~`Rc7)^zQ0--Q=KYdUDrLG7x-exDWo3V z!EVJ`RrevS=`=~Ixx3o@AZaEe@G7Cd8|P!fMa_n~{03be1J!9xQ{7k?n}H=iv1QDu zTMSuSqjJ)uS;kD9@I^ZkB09n~{-<`upR%etLq`Ef-^qGyX0)StGTgE4;^9h2D}jQo zZD5y4TC)X=<(X`PUPq%+QUi*~$2jo{@a((Rv>br$# z^vb(vfw=EXxIS)qDxmqx716_p(&Y@f7~kss<@hIR8|C+#OH6sdD&cb%GjiRo2fBbH zTJ-VdZ4O->5M{pWeJXJU(XA zazU1`%NdTc3KKSWD3c`WCui+MYTn=nIo)lAi7_Xk7@$2J2 z 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 literal 0 HcmV?d00001 diff --git a/docs/angular/src/content/en/images/badge/badge-do.png b/docs/angular/src/content/en/images/badge/badge-do.png new file mode 100644 index 0000000000000000000000000000000000000000..b8374e9278b07edaba14db761f443baaa07885d7 GIT binary patch literal 21505 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 literal 0 HcmV?d00001 diff --git a/docs/xplat/package.json b/docs/xplat/package.json index 4bac430430..a0dff05e71 100644 --- a/docs/xplat/package.json +++ b/docs/xplat/package.json @@ -67,7 +67,7 @@ "dependencies": { "astro": "^6.1.6", "docs-template": "file:../../", - "igniteui-astro-components": "0.0.27", + "igniteui-astro-components": "0.0.30", "sharp": "^0.34.2" }, "devDependencies": { diff --git "a/docs/xplat/src/assets/images/badge/badge-do-n\320\276t.png" "b/docs/xplat/src/assets/images/badge/badge-do-n\320\276t.png" new file mode 100644 index 0000000000000000000000000000000000000000..6b8bd521215f8de54cce1224426c7ded8a1f79b7 GIT binary patch literal 4555 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 literal 0 HcmV?d00001 diff --git a/docs/xplat/src/assets/images/badge/badge-do.png b/docs/xplat/src/assets/images/badge/badge-do.png new file mode 100644 index 0000000000000000000000000000000000000000..b8374e9278b07edaba14db761f443baaa07885d7 GIT binary patch literal 21505 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 literal 0 HcmV?d00001 diff --git a/docs/xplat/src/content/en/components/inputs/badge.mdx b/docs/xplat/src/content/en/components/inputs/badge.mdx index 333eea4044..4faba407f2 100644 --- a/docs/xplat/src/content/en/components/inputs/badge.mdx +++ b/docs/xplat/src/content/en/components/inputs/badge.mdx @@ -1,37 +1,97 @@ --- -title: "{Platform} Badge | Infragistics" -description: Infragistics' {Platform} Badge component allows you to display content in a predefined style to decorate other components anywhere in an application. -keywords: "{Platform}, UI controls, web widgets, UI widgets, Web Components, {Platform} Badge Components, Infragistics" +title: "Badge" +description: "The {ProductName} Badge displays a short status, category, count, or notification indicator alongside avatars, navigation menus, and other components." +keywords: "{Platform} Badge, {ProductName}, badge indicator" license: MIT mentionedTypes: ["Badge"] +last_updated: "2026-07-24" llms: - description: "The {ProductName} Badge is a component used in conjunction with avatars, navigation menus, or other components in an application when a visual notification is needed." + description: "The {ProductName} Badge component displays a short status, category, count, or notification indicator alongside avatars, navigation menus, and other components." --- import PlatformBlock from 'igniteui-astro-components/components/mdx/PlatformBlock.astro'; import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; +import Anatomy from 'igniteui-astro-components/components/mdx/Anatomy.astro'; +import Faq from 'igniteui-astro-components/components/mdx/Faq.astro'; +import FaqItem from 'igniteui-astro-components/components/mdx/FaqItem.astro'; +import { Image } from 'astro:assets'; +import badgeAnatomy from '@xplat-images/anatomy-content-light/badge-lt-a.png'; +import badgeDo from '@xplat-images/badge/badge-do.png'; +import badgeDoNot from '@xplat-images/badge/badge-do-nоt.png'; -# {Platform} Badge Overview +# Badge Component -The {ProductName} Badge is a component used in conjunction with avatars, navigation menus, or other components in an application when a visual notification is needed. Badges are usually designed with predefined styles to communicate information, success, warnings, or errors. +The {Platform} Badge component is provided by the platform-specific {ProductName} package and is used in conjunction with avatars, navigation menus, or other components in an application when a visual notification is needed. Badges are usually designed with predefined styles to communicate information, success, warnings, or errors. -## {Platform} Badge Example +## Live Demo - +The {Platform} Badge demo shows how the component can communicate a compact status or notification next to another interface element. - + -## Usage + + + + + + + + + + +## Anatomy + +The {Platform} Badge presents a compact label or dot indicator that decorates another interface element. + + + + + +1. Dot indicator: A small badge dot used to show a status or a new update.
+2. Icon: Represents the type of status or action.
+3. Container: The badge shape that holds and styles the icon or label.
+4. Label: Text or a number displayed inside the badge.
+ +The component renders its content inside the `base` CSS part. Use the component's default slot for text or other inline content; when `dot` is enabled, the badge renders as an indicator without content. + +```text + +└── ::part(base) + └── default slot content + +``` + +## Getting Started + +To use the {Platform} Badge, follow the [{ProductName} Getting Started](../general-getting-started.mdx) topic for the basic project setup, then register the component for your target platform. + +### Prerequisites and Version Compatibility + +Use a supported version of the {ProductName} package for your target framework. Keep the framework package, the Badge package, and the theme package on the same release version. The examples below identify the framework and package used by each code block so that the snippets remain self-contained when read without the surrounding page context. -First, you need to install the {ProductName} by running the following command: +For Web Components using the **{PackageWebComponents}** package, install the package: ```cmd npm install {PackageWebComponents} ``` -You will then need to import the , its necessary CSS, and register its module, like so: +You will then need to import the , its theme CSS, and register the component, like so: ```ts import { defineComponents, IgcBadgeComponent } from "igniteui-webcomponents"; @@ -40,19 +100,17 @@ import 'igniteui-webcomponents/themes/light/bootstrap.css'; defineComponents(IgcBadgeComponent); ``` -For a complete introduction to the {ProductName}, read the [**Getting Started**](../general-getting-started.mdx) topic. - -First, you need to the install the corresponding {ProductName} npm package by running the following command: +For React using the **igniteui-react** package, install the package: ```cmd npm install igniteui-react ``` -You will then need to import the and its necessary CSS like so: +You will then need to import the Badge wrapper and its theme CSS, like so: ```tsx import { IgrBadge } from 'igniteui-react'; @@ -63,7 +121,7 @@ import 'igniteui-webcomponents/themes/light/bootstrap.css'; -Before using the , you need to register it as follows: +For Blazor using the **IgniteUI.Blazor** package, register the Badge module as follows: ```csharp // in Program.cs file @@ -79,10 +137,34 @@ You will also need to link an additional CSS file to apply the styling to the
+ + +For Angular using the **igniteui-angular** package, install the package: + +```cmd +npm install igniteui-angular +``` + +Then import the Badge component: + +```ts +import { IgxBadgeComponent } from 'igniteui-angular/badge'; +``` + +Add `IgxBadgeComponent` to the component `imports` collection, then use the `igx-badge` element in your template. + The simplest way to start using the is as follows: +```html + +``` + + + +The simplest way to start using the is as follows: + ```html ``` @@ -105,39 +187,403 @@ The simplest way to start using the is as fo -## Examples +## Usage + +Use the {Platform} Badge to display a short status, category, count, or notification indicator alongside another component. + + + +Let's see how the demo sample is done. It's a simple success badge on an avatar. To build that, import the `IgxAvatarModule` together with the `IgxBadgeModule`: + +```typescript +import { IgxBadgeModule } from 'igniteui-angular/badge'; +import { IgxAvatarModule } from 'igniteui-angular/avatar'; +``` + +Add both modules to the component `imports` collection, or import the standalone components. Then add the components to your template: + +```html +
+ + +
+``` + +Use a relatively positioned wrapper to place the Badge over the avatar: + +```scss +.wrapper { + position: relative; + margin-top: 15px; +} + +igx-badge { + position: absolute; + bottom: 0; + left: 28px; +} +``` + +### Type + +The Badge can carry different types of content such as a number or an icon. + +Use the `[value]` input to display text or a numeric count inside the Badge: + +```html + +``` + +Use the `[icon]` input to display an icon inside the Badge: + +```html + +``` + +When both `[icon]` and `[value]` are set, the Badge displays both simultaneously: + +```html + +``` + +You can also project content directly. When projecting both an icon and text, wrap the text to keep the correct padding: + +```html + + bluetooth + Bluetooth + +``` + + + +#### Icon +In addition to Material Icons, the Angular Badge supports Material Icons Extended and other custom icon sets. Register the custom icon with `IgxIconService`, then specify its name and icon set: + +```ts +this._iconService.addSvgIconFromText(heartMonitor.name, heartMonitor.value, 'imx-icons'); +``` + +```html + +``` + + + +#### Dot + +The Ignite UI for Angular Badge can also render as a minimal dot indicator for notifications by setting its attribute. Dot badges do not support content, but they can be outlined and can use any of the available dot types (for example, `primary`, `success`, or `info`). + +Set the attribute to render a minimal notification indicator without content: + +```html + +``` + + + +### Size + +Control the Badge size with the `--size` CSS variable. For text badges smaller than `16px`, also adjust the font size and line height: + +```scss +igx-badge { + --size: 12px; + + font-size: calc(var(--size) / 2); + line-height: normal; +} +``` + + + +### Shape + +The Badge shape can be set to `rounded` (the default) or `square` with the attribute. + +```html + +``` + + + +When the Badge has a `square` shape, it can be further customized by setting a custom border radius using the `--border-radius` CSS variable. ### Variants -The {ProductName} badge supports several pre-defined stylistic variants. You can change the variant by assigning one of the supported values - `primary`(default), `info`, `success`, `warning`, or `danger` to the attribute. +The Angular Badge supports the Primary, Info, Success, Warn, and Error types. Set the attribute to select a type. + +```html + +``` + + + +
+ + + +The following example shows a success Badge displayed on an Avatar. Import the Badge and Avatar components from the platform-specific package, then place the Badge inside a relatively positioned wrapper. ```tsx - +import { IgrAvatar, IgrBadge } from 'igniteui-react'; +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +``` + +Add the components to your JSX: + +```tsx +
+ + +
```
+```ts +import { defineComponents, IgcAvatarComponent, IgcBadgeComponent } from 'igniteui-webcomponents'; +import 'igniteui-webcomponents/themes/light/bootstrap.css'; + +defineComponents(IgcAvatarComponent, IgcBadgeComponent); +``` + +Add the components to your HTML: + ```html - +
+ + +
```
+Register the Avatar and Badge modules in `Program.cs`: + +```csharp +builder.Services.AddIgniteUIBlazor(typeof(IgbAvatarModule), typeof(IgbBadgeModule)); +``` + +Add the components to your Razor markup: + ```razor - +
+ + +
+``` + +
+ +Use a relatively positioned wrapper to place the Badge over the Avatar: + +```css +.wrapper { + position: relative; + margin-top: 15px; +} +``` + +
+ + + +### Type + +The {ProductName} Badge can carry different types of content, such as a number or an icon. + +Use the property to display text or a numeric count inside the Badge: + + + +```tsx +12 +``` + + + + + +```html +12 +``` + + + + + +```razor +12 +``` + + + +You can also project content directly. When projecting both an icon and text, wrap the text to keep the correct padding. + + + +```tsx + + + Bluetooth + ``` - + + +```html + + + Bluetooth + +``` -Even if a custom background color is set for the badge using the `--background-color` CSS variable, the variant color always takes precedence and is applied to the badge. + + + + +```razor + + + Bluetooth + +``` + + + + + +#### Icon + +Add an icon as child content inside the Badge: + + + +```tsx + + + +``` + + + + + +```html + + + +``` + + + + + +```razor + + + +``` + + + +For custom icons, register the icon with the platform's icon service and render it as child content inside the Badge. + +For example, register an SVG icon before using it in the Badge: + + + +```ts +import { registerIconFromText } from 'igniteui-webcomponents'; + +registerIconFromText( + 'heart-monitor', + '', + 'custom' +); +``` + + + + + +```razor +@code { + private IgbIcon icon; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && icon != null) + { + await icon.EnsureReady(); + await icon.RegisterIconFromTextAsync( + "heart-monitor", + "", + "custom"); + } + } +} +``` + + + + + +#### Dot + +The {ProductName} Badge can also render as a minimal dot indicator for notifications by setting its attribute. Dot badges do not support content, but they can be outlined and can use any of the available dot types (for example, `primary`, `success`, or `info`). + +Set the attribute to render a minimal notification indicator without content: + + + +```tsx + +``` + + + + + +```html + +``` + + + + + +```razor + +``` + + + + + +### Size + +Control the Badge size with the `--size` CSS variable. For text badges smaller than `16px`, also adjust the font size and line height: + +```css +igc-badge { + --size: 12px; + + font-size: calc(var(--size) / 2); + line-height: normal; +} +``` + + ### Shape @@ -167,18 +613,22 @@ The badge component supports `rounded`(default) and `square` shapes. These value - + + + When the badge has a `square` shape, it can be further customized by setting a custom border radius using the `--border-radius` CSS variable. -### Outlined + -The badge can also have a subtle border around it when the attribute is set. +### Variants + +The {ProductName} Badge supports several pre-defined stylistic variants (Primary, Info, Success, Warn, and Error). Assign one of the supported values — `primary`, `info`, `success`, `warning`, or `danger` — to the attribute. ```tsx - + ``` @@ -186,7 +636,7 @@ The badge can also have a subtle border around it when the ```html - + ``` @@ -194,23 +644,23 @@ The badge can also have a subtle border around it when the ```razor - + ``` - + -The border color of the outlined badge can also be customized using the `--border-color` CSS variable. + -### Dot +### Outlined -The {ProductName} badge component can also render as a minimal dot indicator for notifications by setting its attribute. Dot badges do not support content, but they can be outlined and can use any of the available dot types (e.g., primary, success, info, etc.). +The badge can also have a subtle border around it when the attribute is set. ```tsx - + ``` @@ -218,7 +668,7 @@ The {ProductName} badge component can also render as a minimal dot indicator for ```html - + ``` @@ -226,16 +676,123 @@ The {ProductName} badge component can also render as a minimal dot indicator for ```razor - + ``` - + + +```html + +``` + + + + + + + + + + + + + +The border color of the outlined badge can also be customized using the `--border-color` CSS variable. + + + +### Do/Don't + +**When to use:** Use a Badge to communicate a short status, category, count, or notification state alongside another component. Use `dot` when the indicator does not need visible text. + +**When not to use:** Do not use a Badge as the primary control for an action, as a replacement for a form validation message, or when the status cannot be understood from the badge content, surrounding context, or accessible labeling. + +
+ + + + + + + + + + + + + +
DoDon't
Badge used with an Avatar and a text labelBadge examples used without a surrounding interface element
+
+ +## Properties + +The {Platform} Badge exposes platform-specific properties for controlling its content, appearance, and indicator behavior. + + + +The Angular Badge exposes the following properties. Use the API reference for the complete type definitions. + +| name | type | default | description | +| --- | --- | --- | --- | +| | boolean | `false` | Renders the Badge as a dot indicator without content. | +| | boolean | `false` | Displays an outline around the Badge. | +| | BadgeShape | `rounded` | Sets the Badge shape. | +| | BadgeType | `default` | Sets the Angular Badge stylistic type. | +| | string | — | Applies a custom CSS class. | + + + + + +The React Badge exposes the following properties. + +| name | type | default | description | +| --- | --- | --- | --- | +| | boolean | `false` | Renders the Badge as a dot indicator. | +| | boolean | `false` | Displays an outline around the Badge. | +| | BadgeShape | `rounded` | Sets the Badge shape. | +| | StyleVariant | `primary` | Sets the Badge stylistic variant. | + + + + + +The Web Components Badge exposes the following properties. + +| name | type | default | description | +| --- | --- | --- | --- | +| | boolean | `false` | Renders the Badge as a dot indicator. | +| | boolean | `false` | Displays an outline around the Badge. | +| | BadgeShape | `rounded` | Sets the Badge shape. | +| | StyleVariant | `primary` | Sets the Badge stylistic variant. | +| | CSSResult | — | Applies custom styles. | + + + + + +The Blazor Badge exposes the following properties. + +| name | type | default | description | +| --- | --- | --- | --- | +| | boolean | `false` | Renders the Badge as a dot indicator. | +| | boolean | `false` | Displays an outline around the Badge. | +| | BadgeShape | `rounded` | Sets the Badge shape. | +| | StyleVariant | `primary` | Sets the Badge stylistic variant. | + + ## Styling -The component exposes a `base` CSS part that can be used to change all of its style properties. +The {Platform} Badge uses the component's `base` CSS part and documented styling variables to customize its appearance. + +### Sass Theming + +Use the {ProductName} theme system to style the Badge consistently with the rest of your application. + +### CSS Variables ```css igc-badge::part(base) { @@ -244,11 +801,164 @@ igc-badge::part(base) { } ``` - +| variable | what it changes | +| --- | --- | +| `--background-color` | The badge background color. | +| `--border-radius` | The badge corner radius. | +| `--border-color` | The outlined badge border color. | + +### Style Parts + +| part | what it styles | +| --- | --- | +| `base` | The Badge root element. | + + + + + +### Styling with Tailwind + +You can style the Badge using custom Tailwind utility classes. Make sure to [set up Tailwind](/themes/tailwind) first. + +Along with the Tailwind import in your global stylesheet, include the utility file: + +```scss +@import "tailwindcss"; +@use 'igniteui-theming/tailwind/utilities/material.css'; +``` + +Use `light-badge` and `dark-badge` for the light and dark theme variants. You can override the generated CSS variables with arbitrary properties: + +```html + + +``` + +The exclamation mark (`!`) ensures that the utility class takes precedence over the component's default theme. + + + + + + + + + +### Styling with Tailwind + +You can style the Badge with the custom Tailwind utility classes from `igniteui-theming`. Make sure to [set up Tailwind](/themes/tailwind) first, then import the Ignite UI utilities in your global stylesheet: + +```css +@import "tailwindcss"; +@import "igniteui-theming/tailwind/utilities/material.css"; +``` + + + +```jsx + +``` + + + + + +```html + +``` + + + + + +```razor + +``` + + + +The exclamation mark (`!`) gives the Tailwind utility precedence over the Badge's default theme styles. + + + + + +## Accessibility + +The {Platform} Badge communicates a visual status and must have meaningful text or surrounding accessible context when that status is important. + +### Keyboard Interaction + +The Badge is a visual status indicator and does not provide an interactive keyboard action. It is reached according to the focus behavior of the element it decorates. + +### Screen Readers / ARIA + +Provide meaningful visible content or an accessible label in the surrounding component when the Badge conveys information that is not otherwise available to assistive technology. Verify the resulting announcement for the specific surrounding control. + +### Accessibility Compliance + +Accessibility conformance for this component must be verified against the official product accessibility statement and the rendered usage context. + +## Troubleshooting + +The {Platform} Badge troubleshooting guidance follows a problem → cause → fix format for common styling and content issues. + +### Why does my custom background color not change the Badge? + +The selected `variant` takes precedence over the `--background-color` CSS variable. To use a custom background color, avoid setting a variant that applies its own background color. + +### Why is my dot Badge not displaying content? + +The `dot` property renders the Badge as a minimal indicator and does not support content. Use a regular Badge when you need to display text or other inline content. + +### Known Limitations + +The {Platform} Badge has the following platform-independent limitations. + +- A dot Badge is an indicator only and cannot display text or an icon. +- Badge styling and variant/type names differ between Angular and the other supported frameworks. Use the platform-specific examples and API links on this page rather than copying an attribute between frameworks. +- The Badge is a visual status indicator and does not provide keyboard interaction of its own. ## API References + +The {Platform} Badge API reference lists the complete verified API surface for the target platform. + +## Dependencies + +The {Platform} Badge requires a theme stylesheet to apply its visual styling. See the framework-specific setup in **Getting Started**. + ## Additional Resources +The following resources provide additional {Platform} Badge guidance and project support. + - [{ProductName} **Forums**]({ForumsLink}) - [{ProductName} **GitHub**]({GithubLink}) + +## Related Components + +The {Platform} Badge is commonly used with related components such as Avatar when a status indicator belongs to another visual element. + +- [Avatar](../layouts/avatar.mdx) — combine an Avatar with a Badge to show a status indicator. + +## FAQ + +These frequently asked questions cover common {Platform} Badge content, indicator, and package choices. + + + + + Yes. Use the platform-specific value and icon APIs shown in **Usage**. When projecting content directly, keep the icon and text in the component's default content area. + + + + Set the platform-specific `dot` property or attribute. A dot Badge intentionally renders without text or other content. + + + + Use `igniteui-angular` for Angular, `igniteui-react` for React, `igniteui-webcomponents` for Web Components, and `IgniteUI.Blazor` for Blazor. Keep related Ignite UI packages on the same release version. + + + \ No newline at end of file diff --git a/docs/xplat/src/content/en/toc.json b/docs/xplat/src/content/en/toc.json index 17c916bd26..3d607d7a76 100644 --- a/docs/xplat/src/content/en/toc.json +++ b/docs/xplat/src/content/en/toc.json @@ -70,8 +70,7 @@ }, { "exclude": [ - "Blazor", - "Angular" + "Blazor" ], "name": "Getting Started", "href": "general-getting-started.mdx", @@ -2223,9 +2222,6 @@ "href": "layouts/accordion.mdx" }, { - "exclude": [ - "Angular" - ], "name": "Avatar", "href": "layouts/avatar.mdx" }, @@ -2434,9 +2430,6 @@ "header": true }, { - "exclude": [ - "Angular" - ], "name": "Badge", "href": "inputs/badge.mdx" }, @@ -2772,9 +2765,6 @@ "href": "themes/styles.mdx" }, { - "exclude": [ - "Angular" - ], "name": "Custom Tailwind Classes", "href": "themes/tailwind.mdx", "new": true diff --git a/package-lock.json b/package-lock.json index a871c5cf87..53a81a8c13 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "dependencies": { "astro-seo-schema": "^6.0.0", "gray-matter": "^4.0.3", - "igniteui-astro-components": "0.0.27", + "igniteui-astro-components": "0.0.30", "igniteui-theming": "^25.0.2", "igniteui-webcomponents": "^7.2.4", "js-yaml": "^4.1.1", @@ -48,7 +48,7 @@ "dependencies": { "astro": "^6.1.6", "docs-template": "file:../../", - "igniteui-astro-components": "0.0.27", + "igniteui-astro-components": "0.0.30", "sharp": "^0.34.2" }, "devDependencies": { @@ -83,7 +83,7 @@ "dependencies": { "astro": "^6.1.6", "docs-template": "file:../../", - "igniteui-astro-components": "0.0.27", + "igniteui-astro-components": "0.0.30", "sharp": "^0.34.2" }, "devDependencies": { @@ -254,9 +254,9 @@ } }, "node_modules/@astrojs/ts-plugin": { - "version": "1.10.9", - "resolved": "https://registry.npmjs.org/@astrojs/ts-plugin/-/ts-plugin-1.10.9.tgz", - "integrity": "sha512-2pNc9EMXJcvYsmjQahYyqOiUNN9hMzgnxgIE/fZBLJAeOxPeOCSMa6BdngwV+bMgZDJcUSfC3qFt3+9abuUxtQ==", + "version": "1.10.10", + "resolved": "https://registry.npmjs.org/@astrojs/ts-plugin/-/ts-plugin-1.10.10.tgz", + "integrity": "sha512-US1czRBD43THzzwSyWJwPRX9VDBYbHmJKnpJAsmqT7Uun5UYvcMNNOfDyZxp5bKTNiApvA8HrjwUhYso8CE2Iw==", "dev": true, "license": "MIT", "dependencies": { @@ -298,12 +298,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", - "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.7" + "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -313,9 +313,9 @@ } }, "node_modules/@babel/types": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", - "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.29.7", @@ -338,9 +338,9 @@ } }, "node_modules/@bufbuild/protobuf": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.12.1.tgz", - "integrity": "sha512-BvAMfS6LrgZiryOAZ4pBYucu4wG/Ei/9o9DZ9akbREnMLbPJiom2i8b9C8IsKErQoiKqVhrerzt3kOT/RrzLHg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.13.0.tgz", + "integrity": "sha512-acq7c49vxfm1ggJ95P70TX7ABDM0vxr1SYD3BB0o0jnBLB4OAqeHyKuN+cD3w80gXEDQ2zxHpR6CUeA+O/aU9g==", "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@capsizecss/unpack": { @@ -356,9 +356,9 @@ } }, "node_modules/@clack/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.2.tgz", - "integrity": "sha512-0Ty/1Gfm+Kb07sXcuESjyKfwEhSy4Ns1AgeEisHb/bDY5fWme0tTeTkU14T1Gmcs17YIjB/teiDe4uaCghbYqQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz", + "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==", "license": "MIT", "dependencies": { "fast-wrap-ansi": "^0.2.0", @@ -369,12 +369,12 @@ } }, "node_modules/@clack/prompts": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.6.0.tgz", - "integrity": "sha512-EYlRokl8szrP9Z25qT5aepMdBjzBvHF9ZEhzIiUBc9guz/T31EqRgvD0QSgZcpE93xiwrr+OkB4nz0BZyF6fSA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz", + "integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==", "license": "MIT", "dependencies": { - "@clack/core": "1.4.2", + "@clack/core": "1.4.3", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" @@ -565,9 +565,9 @@ } }, "node_modules/@cspell/dict-companies": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.11.tgz", - "integrity": "sha512-0cmafbcz2pTHXLd59eLR1gvDvN6aWAOM0+cIL4LLF9GX9yB2iKDNrKsvs4tJRqutoaTdwNFBbV0FYv+6iCtebQ==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.12.tgz", + "integrity": "sha512-mjiz/N3zWOCsz5VfwMUydSl7uW0OU9H2PnbCNc3RV44Vj6Q59CSp6EYGSGZQxrXU1gpsuZUrwr6QCjNjFOOg5A==", "dev": true, "license": "MIT" }, @@ -607,9 +607,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-data-science": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.14.tgz", - "integrity": "sha512-jl6Ds4u5u5JT+yY30pWQpAbdCHfy3lCcNkLbpL/AZKoUaLEoXbaYsps9xQtvD7DyaiXxiLZkdH2yHHXtoFtZyg==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.16.tgz", + "integrity": "sha512-M72mxv5asuAnORurz4iXRJ+Tw9XBq6eu7D2Ne7biP0Z1RciKGNxXWu9JycA/KlVvK1hAlKj/fANlXhuEWpXKFg==", "dev": true, "license": "MIT" }, @@ -642,23 +642,23 @@ "license": "MIT" }, "node_modules/@cspell/dict-en_us": { - "version": "4.4.35", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.35.tgz", - "integrity": "sha512-xWpxBCc/FzzMMo/A+0qwARVaIIhR0Ql8yhhv4rvsvg+GfQF+LG9yzg2GwTM5N2rjvzmM3nKuR9zxFZq2I6fJSg==", + "version": "4.4.36", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.36.tgz", + "integrity": "sha512-2yOhI/+7d1DbfvMljGW4jw8pLqDEsVmnvUXBOCFXtLU2BWgQkrqOJDCNseYjEiEbTp0OtdrWEWWPFSP1TNugQw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.12.tgz", - "integrity": "sha512-14Eu6QGqyksqOd4fYPuRb58lK1Va7FQK9XxFsRKnZU8LhL3N+kj7YKDW+7aIaAN/0WGEqslGP6lGbQzNti8Akw==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.13.tgz", + "integrity": "sha512-00rpydUxKNWY2xxrSx+h46aNWLvbkJdd57SsnEFt24fbs1fROhXZ6XSQu+gQz/zNuiCvFi4Ro3ej9DLbEdWQmQ==", "dev": true, "license": "CC BY-SA 4.0" }, "node_modules/@cspell/dict-en-gb-mit": { - "version": "3.1.24", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.24.tgz", - "integrity": "sha512-Oowb/Uzkh7OmDRdCcETzMc9imEb4IpLlHJXoYjX8A8DS2X/54gqSjI915JFB8hKtFjBko5OM0BLQ+6cZhFEMmQ==", + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.25.tgz", + "integrity": "sha512-zGODptk24CMrXi49ieG2SUm94CKxEsVF0dYNF+1ZYH0MSsQDZ/PKDlrrbvtBqSupKdPSj0Z9sjOmMNfHHW9ZSg==", "dev": true, "license": "MIT" }, @@ -761,9 +761,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-k8s": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.12.tgz", - "integrity": "sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.13.tgz", + "integrity": "sha512-ELGkS13k7K/NEfVimBSrxVTfqXvOF/Kvxj4I62YxRm8bvHbfoXgrGaOx28lPiNRz+dmu+yYtvuXbnURKtYbC6g==", "dev": true, "license": "MIT" }, @@ -830,9 +830,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.41", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.41.tgz", - "integrity": "sha512-To3xsfRmMBYVXtWVEdUgV35M9a/JZ54dSuoY6m6D3uHKKL3I326Wmy4xifZ3PU8MQaWhyEH7zbIcUEtKwTQMcA==", + "version": "5.2.43", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.43.tgz", + "integrity": "sha512-H2gYwtu59dNO9662Uq0usfuhyNd7lZJE1C61a/UXcpRyWWSrTo2Bz+vwGYp1bXZ1LmjXadqvwJ8ArFlGdiadNQ==", "dev": true, "license": "MIT" }, @@ -858,13 +858,13 @@ "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.27", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.27.tgz", - "integrity": "sha512-Rj6xQgYS4X6ienjgAZF+njA0GRY4oSPouJWv0vfikCTn6EWlfk0V6Dy1HP3Migj1O+IC2NmespgVq+BZNSp8OA==", + "version": "4.2.29", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.29.tgz", + "integrity": "sha512-OnEt1a35iuQzc2Ize1qU/43ZyF10urRKAm+mlTz++vnAgDLBHpKfWakpSK50nyL5/1WvyQ8BaMjb52MBLEpTeA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/dict-data-science": "^2.0.14" + "@cspell/dict-data-science": "^2.0.16" } }, "node_modules/@cspell/dict-r": { @@ -903,9 +903,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.2.2.tgz", - "integrity": "sha512-0CaYd6TAsKtEoA7tNswm1iptEblTzEe3UG8beG2cpSTHk7afWIVMtJLgXDv0f/Li67Lf3Z1Jf3JeXR7GsJ2TRw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.2.4.tgz", + "integrity": "sha512-z6y/TGH3QNf5wB4pVvN/P3GfFEW/Whf6QAekNsIn06VKl95dnamfpkPWqV8rEtCixQFaKalb5+y9hRQXH3XQ1g==", "dev": true, "license": "MIT" }, @@ -931,9 +931,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-terraform": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.3.tgz", - "integrity": "sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.4.tgz", + "integrity": "sha512-Ere42ilvMFvQA4GlcN0OKlruMPR6EsvaB+iTHzj2xc+NJGRK64V7yApUcWrOrSgTiM/vhWXPIsK3OMfiAiNdmA==", "dev": true, "license": "MIT" }, @@ -1032,9 +1032,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz", - "integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.3.0.tgz", + "integrity": "sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==", "funding": [ { "type": "github", @@ -1055,9 +1055,9 @@ } }, "node_modules/@csstools/css-color-parser": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.9.tgz", - "integrity": "sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.10.tgz", + "integrity": "sha512-UZhQLIUyJaaMepqehrCODwCg2KW25vFvLWBmqYFaPclYvvxzj/sG8LBOhBFCp11i9uE7t1EyS+RAoV9tztPFyw==", "funding": [ { "type": "github", @@ -1071,7 +1071,7 @@ "license": "MIT", "dependencies": { "@csstools/color-helpers": "^6.1.0", - "@csstools/css-calc": "^3.2.1" + "@csstools/css-calc": "^3.3.0" }, "engines": { "node": ">=20.19.0" @@ -1104,9 +1104,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz", - "integrity": "sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz", + "integrity": "sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==", "funding": [ { "type": "github", @@ -1147,9 +1147,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", - "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", "license": "MIT", "optional": true, "dependencies": { @@ -1597,64 +1597,64 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.11" + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", + "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" + "@floating-ui/core": "^1.8.0", + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", "license": "MIT" }, "node_modules/@fontsource-variable/instrument-sans": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@fontsource-variable/instrument-sans/-/instrument-sans-5.2.8.tgz", - "integrity": "sha512-mTCaukbdIjjoipj2E3Q5XoZM3ZxJWdzyHevf/LG/0PHlfF9Q85pxOM7B7A9MerFyxmRzz5kVlumgIvgDSG4CPg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/instrument-sans/-/instrument-sans-5.3.0.tgz", + "integrity": "sha512-u4gKbDBTNFGkg997tfQn3eHOhHuquWUFTRT/rwzuKtrxX5P2ekfs2x+LgBPP4P32+cC+vUwF1Cr+IdRoPQbrGw==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" } }, "node_modules/@fontsource-variable/inter": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.2.8.tgz", - "integrity": "sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.3.0.tgz", + "integrity": "sha512-OupL48va4JNofb97w6NYeF9S7W/kHNKM0Er8Dem5nqi4jeOLrVJDoE8tZEpnMJmtkvNbB1EIPPwHcdkF6b1oUA==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" } }, "node_modules/@fontsource-variable/jetbrains-mono": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.2.8.tgz", - "integrity": "sha512-WBA9elru6Jdp5df2mES55wuOO0WIrn3kpXnI4+W2ek5u3ZgLS9XS4gmIlcQhiZOWEKl95meYdvK7xI+ETLCq/Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.3.0.tgz", + "integrity": "sha512-F32xpS2NsGYoQi2ADSkKTgpJj7ozajsGgDJ8woTnqjmIB+dxDIqImjl4pXZVEExu8UFZ2ndhmX18EBS/hdz3Lw==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" } }, "node_modules/@hono/node-server": { - "version": "1.19.14", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz", - "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.0.tgz", + "integrity": "sha512-XovyyCCnBzW+zKu+z/zq8hwNs4KOR5rEMAOxo2f40Q5xoOI37IMm6MIg2COOUtUApo0i6850MTBKH2u4QLGIqg==", "license": "MIT", "engines": { - "node": ">=18.14.1" + "node": ">=20" }, "peerDependencies": { "hono": "^4" @@ -2258,12 +2258,12 @@ "license": "BSD-2-Clause" }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", - "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", + "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.9", + "@hono/node-server": "^1.19.9 || ^2.0.5", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", @@ -2297,6 +2297,25 @@ } } }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, "node_modules/@oslojs/encoding": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", @@ -2395,9 +2414,9 @@ ] }, "node_modules/@parcel/watcher": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", - "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -2405,7 +2424,7 @@ "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">= 10.0.0" @@ -2415,25 +2434,24 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.6", - "@parcel/watcher-darwin-arm64": "2.5.6", - "@parcel/watcher-darwin-x64": "2.5.6", - "@parcel/watcher-freebsd-x64": "2.5.6", - "@parcel/watcher-linux-arm-glibc": "2.5.6", - "@parcel/watcher-linux-arm-musl": "2.5.6", - "@parcel/watcher-linux-arm64-glibc": "2.5.6", - "@parcel/watcher-linux-arm64-musl": "2.5.6", - "@parcel/watcher-linux-x64-glibc": "2.5.6", - "@parcel/watcher-linux-x64-musl": "2.5.6", - "@parcel/watcher-win32-arm64": "2.5.6", - "@parcel/watcher-win32-ia32": "2.5.6", - "@parcel/watcher-win32-x64": "2.5.6" + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", - "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", "cpu": [ "arm64" ], @@ -2451,9 +2469,9 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", "cpu": [ "arm64" ], @@ -2471,9 +2489,9 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", - "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", "cpu": [ "x64" ], @@ -2491,9 +2509,9 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", - "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", "cpu": [ "x64" ], @@ -2511,9 +2529,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", - "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", "cpu": [ "arm" ], @@ -2534,9 +2552,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", - "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", "cpu": [ "arm" ], @@ -2557,9 +2575,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", - "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", "cpu": [ "arm64" ], @@ -2580,9 +2598,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", - "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", "cpu": [ "arm64" ], @@ -2603,9 +2621,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", - "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", "cpu": [ "x64" ], @@ -2626,9 +2644,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", - "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", "cpu": [ "x64" ], @@ -2649,9 +2667,9 @@ } }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", - "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", "cpu": [ "arm64" ], @@ -2668,30 +2686,10 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", - "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", - "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", "cpu": [ "x64" ], @@ -2737,9 +2735,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", - "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", "cpu": [ "arm" ], @@ -2750,9 +2748,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", - "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", "cpu": [ "arm64" ], @@ -2763,9 +2761,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", - "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", + "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", "cpu": [ "arm64" ], @@ -2776,9 +2774,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", - "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", "cpu": [ "x64" ], @@ -2789,9 +2787,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", - "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", "cpu": [ "arm64" ], @@ -2802,9 +2800,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", - "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", "cpu": [ "x64" ], @@ -2815,9 +2813,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", - "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", "cpu": [ "arm" ], @@ -2831,9 +2829,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", - "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", "cpu": [ "arm" ], @@ -2847,9 +2845,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", - "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", "cpu": [ "arm64" ], @@ -2863,9 +2861,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", - "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", "cpu": [ "arm64" ], @@ -2879,9 +2877,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", - "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", "cpu": [ "loong64" ], @@ -2895,9 +2893,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", - "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", "cpu": [ "loong64" ], @@ -2911,9 +2909,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", - "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", "cpu": [ "ppc64" ], @@ -2927,9 +2925,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", - "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", "cpu": [ "ppc64" ], @@ -2943,9 +2941,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", - "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", "cpu": [ "riscv64" ], @@ -2959,9 +2957,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", - "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", "cpu": [ "riscv64" ], @@ -2975,9 +2973,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", - "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", "cpu": [ "s390x" ], @@ -2991,9 +2989,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", - "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", "cpu": [ "x64" ], @@ -3007,9 +3005,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", - "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", "cpu": [ "x64" ], @@ -3023,9 +3021,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", - "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", "cpu": [ "x64" ], @@ -3036,9 +3034,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", - "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", "cpu": [ "arm64" ], @@ -3049,9 +3047,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", - "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", "cpu": [ "arm64" ], @@ -3062,9 +3060,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", - "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", "cpu": [ "ia32" ], @@ -3075,9 +3073,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", - "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", "cpu": [ "x64" ], @@ -3088,9 +3086,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", - "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", "cpu": [ "x64" ], @@ -3101,15 +3099,15 @@ ] }, "node_modules/@shikijs/core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.0.tgz", - "integrity": "sha512-EooU3i9F6IAE8kEu+AnGf9DFZWkQBZ+hJn3tLVbsH+61mtQiva5biai66fAA6nvFPXkLgvrh7BrR7YcJU83xQQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.1.tgz", + "integrity": "sha512-VeR2CY6Nn9/WbisoYLOQZ7HZOnwTrpBuOw4wExjqLnBCi62BNWynBUO6K2uPIASPFJwAv7cX1fUu+LrPlSstcw==", "license": "MIT", "dependencies": { - "@shikijs/primitive": "4.3.0", - "@shikijs/types": "4.3.0", + "@shikijs/primitive": "4.4.1", + "@shikijs/types": "4.4.1", "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", + "@types/hast": "^3.0.5", "hast-util-to-html": "^9.0.5" }, "engines": { @@ -3117,12 +3115,12 @@ } }, "node_modules/@shikijs/engine-javascript": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.3.0.tgz", - "integrity": "sha512-hTv/KiFf2tpiqlACPiztGGurEARWIutB8YUhcrA1pUC7VzzwKO+g5crUocrLztrZ5ro5Z4hbXg7bYclETn3gSQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.1.tgz", + "integrity": "sha512-6U4lJBh8LTvIkEVqRHv/rr3ruwtO6IweFQt1ME1ntHJMGHS+6N86vfYGO1o8c/DtOCTia2lfhdQBtBrps1sDfQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0", + "@shikijs/types": "4.4.1", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" }, @@ -3131,12 +3129,12 @@ } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.3.0.tgz", - "integrity": "sha512-1vMdN3gHfnKfLYwecUI2ITJI4RhHt96xEaJumVn7Heb0IlJ8WQMIH0Voak+2j22BpSNKdnOfB/pCTPnPm2gq7A==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.1.tgz", + "integrity": "sha512-p23RugMKss0r5DAtRJW1yAXUDl60JvhQYV20yuxei//26JyDSJefV3umyWzzwep2weblMnJGDYahuti6XkcMgA==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0", + "@shikijs/types": "4.4.1", "@shikijs/vscode-textmate": "^10.0.2" }, "engines": { @@ -3144,51 +3142,51 @@ } }, "node_modules/@shikijs/langs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.3.0.tgz", - "integrity": "sha512-rnlqFbBRSys9bT4gl/5rw9RnS0W/I84ZldXPkO7cvlEMoV85TyF/aU01N7/NbSR776RNLjrJKjfFUXJR6wN1Cg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.1.tgz", + "integrity": "sha512-xb2kCMloBCIraIy2fS5MW0t/BxVY3q2nDyQKBoeSeq6KNrQbShHetCFlw2n35fGIJ6t3+hXDLQogP5ir9O9bvA==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0" + "@shikijs/types": "4.4.1" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/primitive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.0.tgz", - "integrity": "sha512-CPkz64PTa5diRW1ggzMZH9VM/du4RNChYgVtgqrFcgruvIybmCvySv8GkiHSczUHXYuuR8TdKEwFx+UnZMpgdg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.1.tgz", + "integrity": "sha512-ko2OfDoG89YuQ7xL5LtcQiWKb7NIv1Ephb7g48TVU198OzAMLC8lXVEwaJGHK4sUMYrfAGJDqYmNLOLiW/Kz8w==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0", + "@shikijs/types": "4.4.1", "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "@types/hast": "^3.0.5" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/themes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.3.0.tgz", - "integrity": "sha512-Avgt05YiT+Y3prjIc9lmQxhJzHBcCfR6cjiFW4OyaMBbt2A6trX5rfjUzx+Vj/mE9qpArYjatnqo9XPjQNW/AQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.1.tgz", + "integrity": "sha512-wudOaoFro+/Zl9gQv2W1Ur5XlVduqvTuYLI483Xi0wgc1A+cy1hfB2r6ac6ufBgF+ID7KJEW7L41MHrzQ4wH+w==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0" + "@shikijs/types": "4.4.1" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/types": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.3.0.tgz", - "integrity": "sha512-oc8b9U2SYvofKZk8e/737nIX0qwf6eV2vHFATeObAu7r+mUVpLs8Re0BmVkIjAWAYgkmG/CzLNo7rzuBzRu/wQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.1.tgz", + "integrity": "sha512-GOwCLQDHM5EjGUWNPrhzJbr6JP8V/Dx/CDVkWvbZ1Avw5JFnNUckrgbLmE07qtg4WlW7Q7QFndhjIkeU9XMPvw==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "@types/hast": "^3.0.5" }, "engines": { "node": ">=20" @@ -3226,9 +3224,9 @@ } }, "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -3286,9 +3284,9 @@ } }, "node_modules/@types/node": { - "version": "26.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.0.1.tgz", - "integrity": "sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==", + "version": "26.1.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz", + "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3322,9 +3320,9 @@ "license": "MIT" }, "node_modules/@ungap/structured-clone": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz", - "integrity": "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", "license": "ISC" }, "node_modules/@volar/language-core": { @@ -3370,9 +3368,9 @@ } }, "node_modules/acorn": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", - "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "dev": true, "license": "MIT", "bin": { @@ -3685,16 +3683,16 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", - "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/buffer-builder": { @@ -4413,9 +4411,9 @@ } }, "node_modules/devalue": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", - "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.0.tgz", + "integrity": "sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==", "license": "MIT" }, "node_modules/devlop": { @@ -4584,9 +4582,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.2.0.tgz", - "integrity": "sha512-3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", "license": "MIT" }, "node_modules/es-object-atoms": { @@ -4885,11 +4883,12 @@ } }, "node_modules/express-rate-limit": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz", - "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==", + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.1.tgz", + "integrity": "sha512-0D493aP61w0TJ2A0wy27riRsO7FMQ7FK+KUHOKCSfPvYo0R55aiC6emCVgFUeShH0fq0ICPVzNcgoS+BsbXQCA==", "license": "MIT", "dependencies": { + "debug": "^4.4.3", "ip-address": "^10.2.0" }, "engines": { @@ -4936,9 +4935,9 @@ "license": "MIT" }, "node_modules/fast-equals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-6.0.0.tgz", - "integrity": "sha512-PFhhIGgdM79r5Uztdj9Zb6Tt1zKafqVfdMGwVca1z5z6fbX7DmsySSuJd8HiP6I1j505DCS83cLxo5rmSNeVEA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-6.0.2.tgz", + "integrity": "sha512-sAjhj9ZhOxYCGiNMnZLaucOqf5ZeFnHNoKoAZiD9thhJ0N8RP85qJK759/97C/3L7NzzmGVB5uiX9AUpySZmUQ==", "dev": true, "license": "MIT", "engines": { @@ -4968,9 +4967,9 @@ } }, "node_modules/fast-uri": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz", - "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", "funding": [ { "type": "github", @@ -5031,9 +5030,9 @@ } }, "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", "dev": true, "license": "ISC" }, @@ -5242,9 +5241,9 @@ } }, "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", - "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.1.tgz", + "integrity": "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==", "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -5587,9 +5586,9 @@ } }, "node_modules/hono": { - "version": "4.12.27", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.27.tgz", - "integrity": "sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.0.tgz", + "integrity": "sha512-jhunvfHWxd7J5EFfSgH4xsYJzSe/lfqbUCxiyyeaQasUsXeEHXtzVid+7EOGByc5JnFa23SSFL3Y2RV/z1T+eQ==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -5650,9 +5649,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -5666,9 +5665,9 @@ } }, "node_modules/igniteui-astro-components": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/igniteui-astro-components/-/igniteui-astro-components-0.0.27.tgz", - "integrity": "sha512-IqwYm7CcBYISnuqd8uzllbjCgIt6pdhmO1+aiPUfiBncSQfM5xIanX2vGvRSz3dhxOSkBD0VZmLBvQ0HMT2+uQ==", + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/igniteui-astro-components/-/igniteui-astro-components-0.0.30.tgz", + "integrity": "sha512-rNorqGrJ460iWlWoQPSrXrk+EvMjgWklIQGK3cjllLk077asbreEA9YvjfYRHUI97SAjps0pb05wTSG5wLlwWg==", "license": "MIT", "workspaces": [ "playground" @@ -5688,6 +5687,83 @@ "igniteui-webcomponents": "^7.2.4" } }, + "node_modules/igniteui-astro-components/node_modules/@shikijs/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/igniteui-astro-components/node_modules/@shikijs/engine-javascript": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/igniteui-astro-components/node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/igniteui-astro-components/node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/igniteui-astro-components/node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/igniteui-astro-components/node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/igniteui-astro-components/node_modules/shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, "node_modules/igniteui-i18n-core": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/igniteui-i18n-core/-/igniteui-i18n-core-1.0.5.tgz", @@ -6155,9 +6231,9 @@ } }, "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", "dev": true, "license": "MIT", "engines": { @@ -6245,9 +6321,9 @@ "license": "MIT" }, "node_modules/ip-address": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", - "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.4.0.tgz", + "integrity": "sha512-oSK96Grm3aP6OrS263xVxbNDGVL7rzBtYdpGqlDG8iQdoenDoTs/nkki+DflYbAEE8Xl6o5YxhxlrKvI3nqKXQ==", "license": "MIT", "engines": { "node": ">= 12" @@ -6458,18 +6534,18 @@ "license": "ISC" }, "node_modules/jose": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", - "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==", + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.8.tgz", + "integrity": "sha512-Bsdjwm3Qsd/P0jR+BHDe3LytDfY7WBq2HmCCLIwuVRHMuEC9ae7/R474GIUdF1NgCyZjzVo/A9DOiOBtXq8ZoQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } }, "node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "funding": [ { "type": "github", @@ -6593,9 +6669,9 @@ } }, "node_modules/linkify-it": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.1.tgz", - "integrity": "sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", + "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", "dev": true, "funding": [ { @@ -6654,9 +6730,9 @@ } }, "node_modules/lru-cache": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", - "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -6672,13 +6748,13 @@ } }, "node_modules/magicast": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz", - "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.4.tgz", + "integrity": "sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.3", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "source-map-js": "^1.2.1" } }, @@ -7122,19 +7198,23 @@ "license": "CC0-1.0" }, "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz", + "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", "dev": true, "license": "MIT" }, "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", "license": "MIT", "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/merge-descriptors": { @@ -7939,13 +8019,13 @@ } }, "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.5" + "brace-expansion": "^5.0.8" }, "engines": { "node": "18 || 20 || >=22" @@ -7980,9 +8060,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.15", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", - "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "version": "3.3.17", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", + "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", "funding": [ { "type": "github", @@ -8042,9 +8122,9 @@ "license": "MIT" }, "node_modules/node-mock-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", - "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.5.tgz", + "integrity": "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==", "license": "MIT" }, "node_modules/normalize-path": { @@ -8090,9 +8170,9 @@ } }, "node_modules/obug": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", - "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", "funding": [ "https://github.com/sponsors/sxzz", "https://opencollective.com/debug" @@ -8158,9 +8238,9 @@ } }, "node_modules/p-limit": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.0.tgz", - "integrity": "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.1.tgz", + "integrity": "sha512-0trZaiG7Y7kN/Egy9a8j47t9osC0Tch4PaIWd9yGF6bvmlk7muExRvGNYb8sXBwEKMoNKsbNN9P8EefuQekE4Q==", "license": "MIT", "dependencies": { "yocto-queue": "^1.2.1" @@ -8173,9 +8253,9 @@ } }, "node_modules/p-queue": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.0.tgz", - "integrity": "sha512-7NED7xhQ74Ngp4JP/2e0VZHp7vSWfJfqeiR92jPgxsz6m0Se4P03YoTKa9dDXyZ3r6P616gUXttrB6nnHYKang==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz", + "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.4", @@ -8201,9 +8281,9 @@ } }, "node_modules/package-manager-detector": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", - "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz", + "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==", "license": "MIT" }, "node_modules/pagefind": { @@ -8354,9 +8434,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "license": "MIT", "engines": { "node": ">=12" @@ -8375,9 +8455,9 @@ } }, "node_modules/postcss": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", - "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "version": "8.5.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", "funding": [ { "type": "opencollective", @@ -8394,7 +8474,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.12", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -8755,9 +8835,9 @@ } }, "node_modules/remark-smartypants": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", - "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.3.tgz", + "integrity": "sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==", "license": "MIT", "dependencies": { "retext": "^9.0.0", @@ -8874,9 +8954,9 @@ } }, "node_modules/rollup": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", - "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", "license": "MIT", "dependencies": { "@types/estree": "1.0.9" @@ -8889,31 +8969,32 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.62.2", - "@rollup/rollup-android-arm64": "4.62.2", - "@rollup/rollup-darwin-arm64": "4.62.2", - "@rollup/rollup-darwin-x64": "4.62.2", - "@rollup/rollup-freebsd-arm64": "4.62.2", - "@rollup/rollup-freebsd-x64": "4.62.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", - "@rollup/rollup-linux-arm-musleabihf": "4.62.2", - "@rollup/rollup-linux-arm64-gnu": "4.62.2", - "@rollup/rollup-linux-arm64-musl": "4.62.2", - "@rollup/rollup-linux-loong64-gnu": "4.62.2", - "@rollup/rollup-linux-loong64-musl": "4.62.2", - "@rollup/rollup-linux-ppc64-gnu": "4.62.2", - "@rollup/rollup-linux-ppc64-musl": "4.62.2", - "@rollup/rollup-linux-riscv64-gnu": "4.62.2", - "@rollup/rollup-linux-riscv64-musl": "4.62.2", - "@rollup/rollup-linux-s390x-gnu": "4.62.2", - "@rollup/rollup-linux-x64-gnu": "4.62.2", - "@rollup/rollup-linux-x64-musl": "4.62.2", - "@rollup/rollup-openbsd-x64": "4.62.2", - "@rollup/rollup-openharmony-arm64": "4.62.2", - "@rollup/rollup-win32-arm64-msvc": "4.62.2", - "@rollup/rollup-win32-ia32-msvc": "4.62.2", - "@rollup/rollup-win32-x64-gnu": "4.62.2", - "@rollup/rollup-win32-x64-msvc": "4.62.2", + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", "fsevents": "~2.3.2" } }, @@ -8934,14 +9015,14 @@ } }, "node_modules/run-con": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", - "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.3.tgz", + "integrity": "sha512-Lb7OKM9aaykzyoNiHGhSVCjZsvbyy6qDMp2vDXL+MoCfz3GfNJtHYH7uYsU3QNMyInBk++xx+EZ8xZ8Sxs5fNQ==", "dev": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", - "ini": "~4.1.0", + "ini": "~7.0.0", "minimist": "^1.2.8", "strip-json-comments": "~3.1.1" }, @@ -8950,13 +9031,13 @@ } }, "node_modules/run-con/node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-7.0.0.tgz", + "integrity": "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" } }, "node_modules/rxjs": { @@ -9334,9 +9415,9 @@ } }, "node_modules/sax": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", - "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", "license": "BlueOak-1.0.0", "engines": { "node": ">=11.0.0" @@ -9503,19 +9584,19 @@ } }, "node_modules/shiki": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.3.0.tgz", - "integrity": "sha512-NKKjWzR6LIGL3sXBrWDw9sDS9cxx42/DkysaNqJEeOWE8Kix5gpak0bc00OfDVEO4oyXSyz8+aRaqKoBD1yo7A==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.1.tgz", + "integrity": "sha512-rFP+iYKzjLEIqiMiKANhARqiAbk4deDhWnBtnUO/K0D0dPxMGDH4N0FVfBY/VeI+lPrV4wNGCHQZp7EOr7NNBw==", "license": "MIT", "dependencies": { - "@shikijs/core": "4.3.0", - "@shikijs/engine-javascript": "4.3.0", - "@shikijs/engine-oniguruma": "4.3.0", - "@shikijs/langs": "4.3.0", - "@shikijs/themes": "4.3.0", - "@shikijs/types": "4.3.0", + "@shikijs/core": "4.4.1", + "@shikijs/engine-javascript": "4.4.1", + "@shikijs/engine-oniguruma": "4.4.1", + "@shikijs/langs": "4.4.1", + "@shikijs/themes": "4.4.1", + "@shikijs/types": "4.4.1", "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "@types/hast": "^3.0.5" }, "engines": { "node": ">=20" @@ -9600,9 +9681,9 @@ "license": "MIT" }, "node_modules/smol-toml": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz", - "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz", + "integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==", "license": "BSD-3-Clause", "engines": { "node": ">= 18" @@ -9760,9 +9841,9 @@ } }, "node_modules/svgo": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", - "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz", + "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==", "license": "MIT", "dependencies": { "commander": "^11.1.0", @@ -9836,9 +9917,9 @@ } }, "node_modules/tinyexec": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", - "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", + "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", "license": "MIT", "engines": { "node": ">=18" @@ -9861,21 +9942,21 @@ } }, "node_modules/tldts": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.5.tgz", - "integrity": "sha512-RfEzKWcq5fHUOFq7J3rl3Oz6ylKGtcHqUznzj4EcXsxLSIjJcvpbXAQtWGeJQ0xKnimR5e0Cn+cn9TssfMzm+g==", + "version": "7.4.10", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.10.tgz", + "integrity": "sha512-GgouD1B+sWwvkaEq8vXC15DjQitxbvs12oIXELpconwm+Tg3zfcEv4jgzq3vtKverDXsg3VI8aRgNL2Nra0Iog==", "license": "MIT", "dependencies": { - "tldts-core": "^7.4.5" + "tldts-core": "^7.4.10" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.5.tgz", - "integrity": "sha512-pGrwzZDvPwKe+7NNUqAunb6rqTfynr0VOUhCMdqbu5xlvNiszsAJygRzwvpVycdzejlbpY+SWJOn+s75Og7FEA==", + "version": "7.4.10", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.10.tgz", + "integrity": "sha512-KnQjp53ZekKgm/r3l+u8kJGGzYgrWdP8+Mql7a4vijh2WE0IrZWspQj/TpTxDho/YxO+AnOZnIjQcCD+q6iJsw==", "license": "MIT" }, "node_modules/toidentifier": { @@ -9888,9 +9969,9 @@ } }, "node_modules/tough-cookie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", - "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", "license": "BSD-3-Clause", "dependencies": { "tldts": "^7.0.5" @@ -10015,9 +10096,9 @@ "license": "MIT" }, "node_modules/ultrahtml": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", - "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz", + "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==", "license": "MIT" }, "node_modules/uncrypto": { @@ -10027,18 +10108,18 @@ "license": "MIT" }, "node_modules/undici": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", - "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", "license": "MIT", "engines": { "node": ">=20.18.1" } }, "node_modules/undici-types": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.28.0.tgz", - "integrity": "sha512-LJAfY+2w6HGeT8d8J1wNQsUGUEGio6NWWpwdwurQe4f6oojzCFuGLizl1KSve4irsTxyLly1QhEeE6iapdaIvQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.29.0.tgz", + "integrity": "sha512-vamA8dGlzMwhpyYpQp9d8vka3o4D/yn5I7ez7Or+msDA4bZ8Uh+Zy91WvWf3I73gDAkFha9JcYRqm2li0Npfgg==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index b9310ccea4..0dc63bda63 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,7 @@ "dependencies": { "astro-seo-schema": "^6.0.0", "gray-matter": "^4.0.3", - "igniteui-astro-components": "0.0.27", + "igniteui-astro-components": "0.0.30", "igniteui-theming": "^25.0.2", "igniteui-webcomponents": "^7.2.4", "js-yaml": "^4.1.1", @@ -174,7 +174,9 @@ "astro": ">=6" }, "overrides": { - "shiki": "^4.0.0" + "igniteui-webcomponents": { + "shiki": "^4.0.2" + } }, "engines": { "node": ">=22.12.0" From 7d0c624fb879f0ce0fdba8767a2281fa91546a53 Mon Sep 17 00:00:00 2001 From: Jun-ichi Sakamoto Date: Fri, 7 Aug 2026 04:33:02 +0000 Subject: [PATCH 05/38] docs(changelog): refine Japanese Blazor changelog for 26.1.98 --- .../components/general-changelog-dv-blazor.mdx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/xplat/src/content/jp/components/general-changelog-dv-blazor.mdx b/docs/xplat/src/content/jp/components/general-changelog-dv-blazor.mdx index 8d7c7bc9d6..8a69a58bb9 100644 --- a/docs/xplat/src/content/jp/components/general-changelog-dv-blazor.mdx +++ b/docs/xplat/src/content/jp/components/general-changelog-dv-blazor.mdx @@ -42,17 +42,17 @@ import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; - `Axis` およびすべての `XYChart` 派生チャートに軸の表示/非表示プロパティを追加し、スタイルのオーバーライドなしに個々の軸要素を切り替えられるようにしました。 - `AreLabelsVisible` - ラベル パネルのレイアウト スロットを維持したまま、ティック ラベルのテキストを非表示にします。 - `AreTickMarksVisible` - ティック マークのストロークを非表示にします。 - - `AreAnnotationsVisible` - 軸アノテーション (例: `FinalValueLayer` バッジ) を非表示にします。 - - `IsLabelPanelVisible` - ラベル パネル全体を折りたたんでゼロの範囲にします。 - - 対応するチャートレベルの転送プロパティ `XAxisAreLabelsVisible`、`XAxisAreTickMarksVisible`、`XAxisAreAnnotationsVisible`、`XAxisIsLabelPanelVisible`、`YAxisAreLabelsVisible`、`YAxisAreTickMarksVisible`、`YAxisAreAnnotationsVisible`、`YAxisIsLabelPanelVisible` が `IgbCategoryChart`、`IgbFinancialChart` およびその他の `XYChart` 派生チャートに追加されました。 + - `AreAnnotationsVisible` - 軸注釈 (例: `FinalValueLayer` バッジ) を非表示にします。 + - `IsLabelPanelVisible` - ラベル パネル全体を折りたたんでサイズをゼロにします。 + - 対応するチャート レベルの転送プロパティ `XAxisAreLabelsVisible`、`XAxisAreTickMarksVisible`、`XAxisAreAnnotationsVisible`、`XAxisIsLabelPanelVisible`、`YAxisAreLabelsVisible`、`YAxisAreTickMarksVisible`、`YAxisAreAnnotationsVisible`、`YAxisIsLabelPanelVisible` が `IgbCategoryChart`、`IgbFinancialChart` およびその他の `XYChart` 派生チャートに追加されました。 -- シリーズに `LegendItemBadgeMarkerSizeScaling` を追加しました。これにより、凡例バッジがシリーズの `MarkerSize` に応じてどのようにスケールするかを制御できます。サポートされる値は `Auto` (デフォルト、バッジを 1x と 2x の間で補間)、`None` (バッジはデフォルトのサイズを維持)、`Linear` (バッジは `MarkerSize` に直接スケール) です。解決されたサイズは、読み取り専用プロパティ `ActualLegendItemBadgeMarkerWidth` および `ActualLegendItemBadgeMarkerHeight` を通じて公開されます。 +- シリーズに `LegendItemBadgeMarkerSizeScaling` を追加しました。これにより、凡例バッジがシリーズの `MarkerSize` に応じてどのようにスケールするかを制御できます。サポートされる値は `Auto` (デフォルト、バッジを 1x と 2x の間で補間)、`None` (バッジはデフォルトのサイズを維持)、`Linear` (バッジは `MarkerSize` に直接スケール) です。最終的に適用されるサイズは、読み取り専用プロパティ `ActualLegendItemBadgeMarkerWidth` および `ActualLegendItemBadgeMarkerHeight` を通じて公開されます。 -- `IgbLinearGraphRange` (`IgbLinearGauge` および `IgbBulletGraph` で使用) および `IgbRadialGaugeRange` に `StartInset` と `EndInset` を追加しました。これらのプロパティは、デバイス非依存ピクセル単位で測定された距離だけ範囲の開始端と終了端を内側にトリミングし、ゲージのサイズや値範囲に関わらず隣接する範囲間に一定のギャップを生成します。両方のデフォルト値は `0` であるため、インセットが設定されない限り範囲はフラッシュで接します。 +- `IgbLinearGraphRange` (`IgbLinearGauge` および `IgbBulletGraph` で使用) および `IgbRadialGaugeRange` に `StartInset` と `EndInset` を追加しました。これらのプロパティは、デバイス非依存ピクセル単位で測定された距離だけ範囲の開始端と終了端を内側にトリミングし、ゲージのサイズや値範囲に関わらず隣接する範囲間に一定のギャップを生成します。両方のデフォルト値は `0` であるため、インセットが設定されない限り範囲は従来どおり隙間なく接します。 -#### {PackageGrids} (Grids) +#### {PackageGrids} (グリッド) -- 内部の Ignite UI for Angular 参照を 21.2 から 22.0 に更新し、`IgbGrid`、`IgbTreeGrid`、`IgbHierarchicalGrid`、`IgbRowIsland` の生成モデルを更新しました。新しい `GridBase`、`HierarchicalGridBase`、`RowIslandBase` の共有サーフェスが含まれます。 +- 内部の Ignite UI for Angular 参照を 21.2 から 22.0 に更新し、`IgbGrid`、`IgbTreeGrid`、`IgbHierarchicalGrid`、`IgbRowIsland` の生成モデルを刷新しました。新しい `GridBase`、`HierarchicalGridBase`、`RowIslandBase` の共有 API が含まれます。 ### バグ修正 @@ -65,9 +65,9 @@ import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; | 3684 | IgbChat およびその他の Web コンポーネント | レンダラー要素を通じて渡されたときに列挙型プロパティが正しくシリアライズされなかった問題を修正しました。 | | 3777 | IgbRadialGauge、IgbLinearGauge、IgbBulletGraph | ゲージで null 参照例外が発生する可能性があった問題を修正しました。 | | 3534 | IgbSpreadsheet | 水平線が正しく表示されず、線の太さが変わると SVG 図形が位置をずらしていた問題を修正しました。 | -| 3821 | IgbDataPieChart | ホバー時に `SeriesPointerEnter` がハンドラーに届かず、集計されたバケットの角度範囲が誤って測定されていた問題を修正しました。 | +| 3821 | IgbDataPieChart | ホバー時に `SeriesPointerEnter` がハンドラーに届かず、集計によりまとめられたバケットの角度範囲が誤って測定されていた問題を修正しました。 | | 3322 | IgbDataPieChart | 以前の画像の読み込みが完了する前に要求された画像が変更された場合に、スライス レイヤーが誤った画像を表示していた問題を修正しました。 | -| 3688 | IgbDataChart | 破棄時にチャートが正しく破棄されなかった問題を修正しました。 | +| 3688 | IgbDataChart | 破棄時にチャートが正しく解放されなかった問題を修正しました。 | ## **{PackageVerChanges-26-1-JUNE}** From 90c4e3702880e1c7f6c62532e20c7eddca023fe1 Mon Sep 17 00:00:00 2001 From: Adrian Petrov Date: Mon, 10 Aug 2026 09:40:58 +0300 Subject: [PATCH 06/38] docs(chip): add outlined content --- .../src/content/en/components/chip.mdx | 10 +++++++ .../src/content/en/components/inputs/chip.mdx | 30 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/docs/angular/src/content/en/components/chip.mdx b/docs/angular/src/content/en/components/chip.mdx index c23e2dd8aa..f482c678fd 100644 --- a/docs/angular/src/content/en/components/chip.mdx +++ b/docs/angular/src/content/en/components/chip.mdx @@ -110,6 +110,16 @@ The Angular chip supports several pre-defined stylistic variants. You can change +### Outlined + +The Angular Chip can also be rendered in an outlined style and have a border around it by setting the property. + +```html +Outlined +``` + + + ### Selection Selecting Default diff --git a/docs/xplat/src/content/en/components/inputs/chip.mdx b/docs/xplat/src/content/en/components/inputs/chip.mdx index 387bb2605e..0f867dba75 100644 --- a/docs/xplat/src/content/en/components/inputs/chip.mdx +++ b/docs/xplat/src/content/en/components/inputs/chip.mdx @@ -201,6 +201,36 @@ The {ProductName} chip supports several pre-defined stylistic variants. You can +### Outlined + +The {ProductName} chip can be rendered in an outlined style and have a border around it by setting the property. + + + +```tsx + +``` + + + + + +```html + +``` + + + + + +```razor + +``` + + + + + ### Disabled The {ProductName} chip can be disabled by using the property. From 11f59794e93301f3eeb1d72dff4a9858e88abd27 Mon Sep 17 00:00:00 2001 From: Adrian Petrov Date: Mon, 10 Aug 2026 09:50:59 +0300 Subject: [PATCH 07/38] chore(chip): alt text fix --- docs/angular/src/content/en/components/chip.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/angular/src/content/en/components/chip.mdx b/docs/angular/src/content/en/components/chip.mdx index f482c678fd..8dbe9d8b9b 100644 --- a/docs/angular/src/content/en/components/chip.mdx +++ b/docs/angular/src/content/en/components/chip.mdx @@ -118,7 +118,7 @@ The Angular Chip can also be rendered in an outlined style and have a border aro Outlined ``` - + ### Selection From d3f92facd087ca17a4e8277510faa3aef98917bf Mon Sep 17 00:00:00 2001 From: Simeon Simeonoff Date: Fri, 14 Aug 2026 15:40:46 +0300 Subject: [PATCH 08/38] docs(theming): clarify Angular 22.1 migration guidance --- .../src/content/en/components/avatar.mdx | 2 +- .../content/en/components/button-group.mdx | 3 +- .../src/content/en/components/button.mdx | 3 +- .../src/content/en/components/calendar.mdx | 2 +- .../src/content/en/components/card.mdx | 3 +- .../src/content/en/components/chat.mdx | 2 +- .../src/content/en/components/checkbox.mdx | 2 +- .../src/content/en/components/chip.mdx | 2 +- .../en/components/circular-progress.mdx | 2 +- .../src/content/en/components/combo.mdx | 2 +- .../src/content/en/components/date-picker.mdx | 6 +- .../en/components/date-range-picker.mdx | 5 +- .../src/content/en/components/dialog.mdx | 5 +- .../general/how-to/how-to-customize-theme.mdx | 66 ++++++++++++------- .../en/components/general/update-guide.mdx | 51 +++++++++++--- .../content/en/components/grid/groupby.mdx | 6 +- .../src/content/en/components/icon.mdx | 2 +- .../content/en/components/linear-progress.mdx | 2 +- .../content/en/components/month-picker.mdx | 2 +- .../src/content/en/components/navbar.mdx | 2 +- .../src/content/en/components/navdrawer.mdx | 4 +- .../content/en/components/overlay-styling.mdx | 53 ++++----------- .../en/components/pivotgrid/pivot-grid.mdx | 2 +- .../content/en/components/query-builder.mdx | 4 +- .../content/en/components/radio-button.mdx | 2 +- .../src/content/en/components/select.mdx | 3 +- .../content/en/components/simple-combo.mdx | 2 +- .../src/content/en/components/snackbar.mdx | 3 +- .../src/content/en/components/splitter.mdx | 2 +- .../src/content/en/components/switch.mdx | 2 +- .../src/content/en/components/tabbar.mdx | 2 +- .../src/content/en/components/tabs.mdx | 2 +- .../content/en/components/texthighlight.mdx | 4 +- .../themes/misc/bootstrap-theming.mdx | 2 +- .../themes/sass/component-themes.mdx | 61 ++++++++--------- .../components/themes/sass/global-themes.mdx | 18 ++++- .../en/components/themes/sass/schemas.mdx | 3 +- .../src/content/en/components/time-picker.mdx | 6 +- .../src/content/en/components/toast.mdx | 2 +- .../src/content/en/components/tooltip.mdx | 2 +- .../en/components/treegrid/tree-grid.mdx | 2 +- .../en/grids_templates/advanced-filtering.mdx | 5 +- .../en/grids_templates/cell-selection.mdx | 2 +- .../en/grids_templates/column-hiding.mdx | 6 +- .../en/grids_templates/column-moving.mdx | 5 +- .../en/grids_templates/column-resizing.mdx | 5 +- .../en/grids_templates/column-selection.mdx | 2 +- .../grids_templates/excel-style-filtering.mdx | 5 +- .../content/en/grids_templates/filtering.mdx | 6 +- .../grids_templates/multi-column-headers.mdx | 4 +- .../src/content/en/grids_templates/paging.mdx | 2 +- .../en/grids_templates/row-editing.mdx | 3 +- .../content/en/grids_templates/sorting.mdx | 5 +- .../content/en/grids_templates/summaries.mdx | 7 +- .../content/en/grids_templates/toolbar.mdx | 4 +- 55 files changed, 215 insertions(+), 197 deletions(-) diff --git a/docs/angular/src/content/en/components/avatar.mdx b/docs/angular/src/content/en/components/avatar.mdx index a362e26b4d..c1e42cfef3 100644 --- a/docs/angular/src/content/en/components/avatar.mdx +++ b/docs/angular/src/content/en/components/avatar.mdx @@ -164,7 +164,7 @@ Changing the `$background` property automatically updates the following dependen | **$background** | $color | The text color used for the avatar. | | | $icon-color | The icon color used for the avatar. | -To get started with styling the avatar, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the avatar, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/button-group.mdx b/docs/angular/src/content/en/components/button-group.mdx index 10e8c3eea4..32b168dd5f 100644 --- a/docs/angular/src/content/en/components/button-group.mdx +++ b/docs/angular/src/content/en/components/button-group.mdx @@ -86,7 +86,6 @@ import { IgxIconComponent } from 'igniteui-angular/icon'; export class HomeComponent {} ``` - This component uses Material Icons. Add the following link to your `index.html`: `` @@ -278,7 +277,7 @@ When you set a value for the `$item-background` property, all related dependent | | $item-disabled-border | The border color for disabled items. | | | $disabled-selected-border-color | The border color for disabled selected items. | -To get started with styling the button group, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the button group, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/button.mdx b/docs/angular/src/content/en/components/button.mdx index 3e27a70f33..f9dfe1874c 100644 --- a/docs/angular/src/content/en/components/button.mdx +++ b/docs/angular/src/content/en/components/button.mdx @@ -116,7 +116,6 @@ As of version `17.1.0` the IgniteUI for Angular exposes a new `igxIconButton` di ``` - This component uses Material Icons. Add the following link to your `index.html`: `` @@ -604,7 +603,7 @@ To style the button you can use our type-specific theme functions: {/* .theme-switcher-wrapper */} -To get started with styling the calendar, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the calendar, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/card.mdx b/docs/angular/src/content/en/components/card.mdx index a5b2850008..025297bb21 100644 --- a/docs/angular/src/content/en/components/card.mdx +++ b/docs/angular/src/content/en/components/card.mdx @@ -108,7 +108,6 @@ import { IGX_CARD_DIRECTIVES } from 'igniteui-angular/card'; export class HomeComponent {} ``` - This component uses Material Icons. Add the following link to your `index.html`: `` @@ -350,7 +349,7 @@ Changing the `$background` property automatically updates the following dependen | | $content-text-color | The text color of the card content. | | | $actions-text-color | The text color of the card buttons. | -To get started with styling the card, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the card, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/chat.mdx b/docs/angular/src/content/en/components/chat.mdx index a1dd4e0ddd..d19dab5073 100644 --- a/docs/angular/src/content/en/components/chat.mdx +++ b/docs/angular/src/content/en/components/chat.mdx @@ -406,7 +406,7 @@ We highly recommend using the standard Web Component styling approaches before r Apart from the **CSS parts** and **slots**, the Chat component also has a function exposed by our theming engine. -In order to style the Chat component using the theme function, first we need to import the theming module, where all the theme functions and component mixins live: +In order to style the Chat component using the theme function, first we need to import the theming module, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/checkbox.mdx b/docs/angular/src/content/en/components/checkbox.mdx index 2bc834cb0a..db035af6d4 100644 --- a/docs/angular/src/content/en/components/checkbox.mdx +++ b/docs/angular/src/content/en/components/checkbox.mdx @@ -248,7 +248,7 @@ When you modify a primary property, all related dependent properties are updated > **Note:** The actual results may vary depending on the theme variant. -To get started with styling the checkbox, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the checkbox, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/chip.mdx b/docs/angular/src/content/en/components/chip.mdx index c23e2dd8aa..041a27c042 100644 --- a/docs/angular/src/content/en/components/chip.mdx +++ b/docs/angular/src/content/en/components/chip.mdx @@ -527,7 +527,7 @@ When you modify a primary property, all related dependent properties are updated | | $focus-selected-border-color | The selected chip focus border color. | | | $focus-selected-outline-color (bootstrap & indigo variants only) | The chip focus outline color in selected state. | -To get started with styling the chip, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the chip, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/circular-progress.mdx b/docs/angular/src/content/en/components/circular-progress.mdx index 75d51d96a9..5666979037 100644 --- a/docs/angular/src/content/en/components/circular-progress.mdx +++ b/docs/angular/src/content/en/components/circular-progress.mdx @@ -242,7 +242,7 @@ After reproducing the steps above, you should get this as a result: ## Styling -To get started with styling the circular progress bar, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the circular progress bar, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/combo.mdx b/docs/angular/src/content/en/components/combo.mdx index 9130ceb900..86f9a31c4d 100644 --- a/docs/angular/src/content/en/components/combo.mdx +++ b/docs/angular/src/content/en/components/combo.mdx @@ -373,7 +373,7 @@ The last step is to include the component's theme. ``` -The component uses the [`IgxOverlay`](/overlay) service to hold and display the combobox items list container. To properly scope your styles you might have to use an . For more details check the [`IgxOverlay Styling Guide`](/overlay-styling). Also is necessary to use `::ng-deep` when we are styling the components. +The uses the [`IgxOverlay`](/overlay) service to display its list. Depending on View Encapsulation and where the generated selectors must match, the local theme include may still require `::ng-deep`. A list attached to the default detached outlet also cannot inherit from the combo's host; configure the beneath the themed container or emit the theme from a selector that can match the outlet. See the [`IgxOverlay Styling Guide`](/overlay-styling). [!Note] The default `type` of the `IgxCombo` is `box` unlike the [`IgxSelect`](/select) where it is `line`. diff --git a/docs/angular/src/content/en/components/date-picker.mdx b/docs/angular/src/content/en/components/date-picker.mdx index 6825f07736..9a5cd4dd28 100644 --- a/docs/angular/src/content/en/components/date-picker.mdx +++ b/docs/angular/src/content/en/components/date-picker.mdx @@ -313,7 +313,7 @@ Here is how an Angular Date Picker with Japanese locale definition would look li ## Styling -To get started with styling the date picker, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the date picker, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -338,8 +338,8 @@ The last step is to pass the custom Date Picker theme: } ``` - -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` + +In some component templates, Emulated View Encapsulation can still prevent the generated token declarations from reaching nested Ignite UI elements. If the theme does not take effect, use `::ng-deep` as shown below or move the theme to a global stylesheet. ```scss diff --git a/docs/angular/src/content/en/components/date-range-picker.mdx b/docs/angular/src/content/en/components/date-range-picker.mdx index 4758a344ad..6a7ddd801e 100644 --- a/docs/angular/src/content/en/components/date-range-picker.mdx +++ b/docs/angular/src/content/en/components/date-range-picker.mdx @@ -132,7 +132,6 @@ The Angular Date Range Picker component also allows configuring two separate inp ``` - In the two-input configuration, place the `input` directly inside `igx-date-range-start` and `igx-date-range-end`. @@ -552,7 +551,7 @@ The header, subheader and title parts of the calendar header can be customized b ## Styling -To get started with styling the `igxDateRangePicker`, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the `igxDateRangePicker`, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -613,7 +612,7 @@ The last step is to pass the custom themes: ``` -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, tokens generated via CSS variables do not require `::ng-deep` to penetrate it, since the `tokens()` mixin above already produces plain CSS custom properties that cascade normally. +Token overrides normally inherit through [`Emulated`](/themes/sass/component-themes#view-encapsulation) View Encapsulation, but generated selectors for nested picker elements may still require `::ng-deep`. If the local theme does not take effect, wrap the affected include in `::ng-deep` or move it to a global stylesheet. A calendar displayed in a detached overlay must be themed from a selector that can match its outlet or moved beneath the themed container. ### Scoping Styles diff --git a/docs/angular/src/content/en/components/dialog.mdx b/docs/angular/src/content/en/components/dialog.mdx index 4ca3c0c1c1..65dbe41167 100644 --- a/docs/angular/src/content/en/components/dialog.mdx +++ b/docs/angular/src/content/en/components/dialog.mdx @@ -80,7 +80,6 @@ import { IgxRippleDirective } from 'igniteui-angular/directives'; export class HomeComponent {} ``` - This component uses Material Icons. Add the following link to your `index.html`: `` @@ -275,7 +274,7 @@ Changing the `$background` property automatically updates the following dependen | | $message-color | The dialog message text color. | | | $border-color | The border color used for dialog component. | -To get started with styling the dialog window, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the dialog window, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -332,7 +331,7 @@ The last step is to **include** the component theme in our application. ``` -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` to apply the styles. +In some component templates, Emulated View Encapsulation can still prevent the generated token declarations from reaching nested Ignite UI elements. If the theme does not take effect, use `::ng-deep` as shown below or move the theme to a global stylesheet. ```scss diff --git a/docs/angular/src/content/en/components/general/how-to/how-to-customize-theme.mdx b/docs/angular/src/content/en/components/general/how-to/how-to-customize-theme.mdx index 90e7964081..83df99cc53 100644 --- a/docs/angular/src/content/en/components/general/how-to/how-to-customize-theme.mdx +++ b/docs/angular/src/content/en/components/general/how-to/how-to-customize-theme.mdx @@ -40,10 +40,13 @@ As you can see, the application has applied default theming, which is [material ```scss /* You can add global styles to this file, and also import other style files */ -// Standard CSS normalize, comment out if not required or using a different module -@use "minireset.css/minireset"; @use "@infragistics/igniteui-angular/theming" as *; +// Standard CSS normalize, remove if it is not required. +@layer ig.reset { + @import "minireset.css"; +} + @include core(); @include typography(); @include light-theme($light-material-palette); @@ -124,9 +127,7 @@ $toolbar-theme: grid-toolbar-theme( $background: $primary ); -:host { - @include tokens($toolbar-theme); -} +@include tokens($toolbar-theme); /* END Grid Toolbar */ ``` @@ -141,9 +142,12 @@ The same process can be applied to override and customize any of the component t Now let's dig even deeper and create two custom versions of the theme, which can be switched between at runtime. We can do this with user control/preference and let them switch it at any time. For the example, however, we will use the OS defined user preference (light or dark) in order to apply a theme, which matches the current OS setting. In order to do this, we will need two color palettes: ```scss -@use "minireset.css/minireset"; @use "@infragistics/igniteui-angular/theming" as *; +@layer ig.reset { + @import "minireset.css"; +} + @include core(); @include typography($font-family: "Poppins"); @@ -352,7 +356,7 @@ export class AppRoutingModule { Now we remove the `IgxTreeGridModule` and `IgxComboModule` imports, as well as the `EmployeesComponent` declaration, from our `app.module.ts` because we don't use them in any other views and a component can only be declared in one module. -Then we move the custom `igx-grid`, `igx-grid-toolbar`, and `igx-combo` token overrides out of the global stylesheet and colocate them with the component that uses them, in `employees.component.scss`. Because these are just CSS custom properties, there's no need for `::ng-deep` to reach past `ViewEncapsulation`: +Then we move the custom `igx-grid`, `igx-grid-toolbar`, and `igx-combo` themes out of the global stylesheet and colocate them with the component that uses them, in `employees.component.scss`. We use scoped mode because the components are excluded from the global `theme()` output below. CSS custom properties normally inherit through Emulated View Encapsulation; if a generated selector for a nested component does not match, wrap only that include in `::ng-deep` or move it to a global stylesheet: ```scss /* employees.component.scss */ @@ -367,33 +371,45 @@ Then we move the custom `igx-grid`, `igx-grid-toolbar`, and `igx-combo` token ov $primary: #1028c7; - @include tokens(grid-theme( - $schema: $dark-material-schema, - $background: #1a1a1a, - $foreground: #fff, - $accent-color: $primary - )); - - @include tokens(combo-theme( - $schema: $dark-material-schema, - $toggle-button-background: $primary - )); - - @include tokens(grid-toolbar-theme( - $schema: $dark-material-schema, - $background: $primary - )); + @include tokens( + grid-theme( + $schema: $dark-material-schema, + $background: #1a1a1a, + $foreground: #fff, + $accent-color: $primary + ), + $mode: 'scoped' + ); + + @include tokens( + combo-theme( + $schema: $dark-material-schema, + $toggle-button-background: $primary + ), + $mode: 'scoped' + ); + + @include tokens( + grid-toolbar-theme( + $schema: $dark-material-schema, + $background: $primary + ), + $mode: 'scoped' + ); } ``` -With those overrides moved out, the top-level stylesheet no longer needs to exclude `igx-grid`, `igx-combo`, and `igx-grid-toolbar` from its token output — it can generate tokens for them using the shared app-wide palette and schema like any other component, while the Employees view supplies its own richer overrides on top: +Because the Employees stylesheet now emits complete scoped themes, the top-level stylesheet can continue excluding `igx-grid`, `igx-combo`, and `igx-grid-toolbar` from its token output. It only emits global tokens for the shared components listed in `$include`: ```scss /* Updated styles.scss */ @use "sass:map"; -@use "minireset.css/minireset"; @use "@infragistics/igniteui-angular/theming" as *; +@layer ig.reset { + @import "minireset.css"; +} + @include core(); @include typography($font-family: "Poppins"); diff --git a/docs/angular/src/content/en/components/general/update-guide.mdx b/docs/angular/src/content/en/components/general/update-guide.mdx index 60a0a7fbe1..ccaa6d9315 100644 --- a/docs/angular/src/content/en/components/general/update-guide.mdx +++ b/docs/angular/src/content/en/components/general/update-guide.mdx @@ -65,27 +65,62 @@ For example: if you are updating from version 6.2.4 to 7.1.0 you'd start from th ## From 22.0.x to 22.1.x -Ignite UI for Angular 22.1.0 finishes the migration to the `tokens()` mixin as the single way to apply a component theme and moves component structural styles into each component's own bundle. Most of the following changes are rewritten automatically by the `ng update` migration for 22.1.0, but if you have code that isn't picked up automatically (e.g. non-standard formatting, aliased imports), here's what changed: +Ignite UI for Angular 22.1.0 finishes the migration to the `tokens()` mixin and moves component structural styles into each component's bundle. The `ng update` migration performs the following syntactic changes automatically: -- The individual per-component Sass theme wrapper mixins (`avatar`, `badge`, `banner`, `card`, `dialog`, `tabs`, and the rest of the previously deprecated component mixins, including the grid/pivot mixins) have been removed. Replace any remaining `@include (-theme(...))` call with `@include tokens(-theme(...))`. +- Replaces the removed per-component Sass wrapper mixins (`avatar`, `badge`, `banner`, `card`, `dialog`, `tabs`, the grid and pivot mixins, and the rest of the previously deprecated wrappers) with `tokens()`. +- Removes calls to the deleted per-component `-typography` mixins, such as `badge-typography`, `dialog-typography`, and `checkbox-typography`. Typography is now applied through component tokens. See [Typography](/themes/sass/typography#component-typography) for component-specific overrides. +- Removes deep Sass imports of structural partials, such as `igniteui-angular/lib/core/styles/components/avatar/avatar-component`, and their matching `component()` calls. Structural styles now ship automatically with the component bundle. +- Renames direct imports and usages of `IgxDividerDirective` to `IgxDividerComponent`. `IgxDividerModule` is unaffected. + +Review migrated `tokens()` calls manually. The migration cannot determine whether a wrapper mixin represented an ordinary universal-token override or relied on component-local declarations. Keep the generated default mode unless testing or the theme's structure shows that local declarations are required. In that situational case, add `$mode: 'scoped'`: ```scss // Before .my-avatar { - @include avatar(avatar-theme($background: red)); + @include avatar(avatar-theme($background: red)); } // After .my-avatar { - @include tokens(avatar-theme($background: red)); + @include tokens( + avatar-theme($background: red), + $mode: 'scoped' + ); } ``` -- The per-component `-typography` mixins (`badge-typography`, `dialog-typography`, `checkbox-typography`, etc.) have been removed. Typography is now applied automatically as part of each component's tokens, so calls to these mixins should simply be deleted. See [Typography](/themes/sass/typography#component-typography) for how to scope a typography override to a specific component instance instead. -- Deep Sass imports of per-component structural partials (e.g. `igniteui-angular/lib/core/styles/components/avatar/avatar-component`) and their `component()` mixin calls are no longer needed and should be removed — structural styles now ship automatically with each component's bundle. -- `IgxDividerDirective` has been renamed to `IgxDividerComponent`. `IgxDividerModule` still exports the same component under the same name, so applications that only use the module import are unaffected; only direct standalone imports of `IgxDividerDirective` need updating. +Start with the default global mode, including when replacing most `css-vars()` calls. If the component remains in the global `theme()` output, its local declarations can consume the universal tokens and no scoped mode is usually needed. + +Use scoped mode only when the default output does not provide the component-local declarations required by the customization. Typical cases include: + +- The removed wrapper established a complete local theme whose behavior is not preserved by universal token overrides alone. +- The component is listed in the global `theme()` mixin's `$exclude` list. In that case, the global theme does not emit the local declarations consumed by the component's structural stylesheet. +- The theme uses component-local sizing expressions. Global mode intentionally omits sizing values that depend on local sizing variables. +- The theme map contains multiple selectors, such as a component host and a ghost or overlay selector. Detached overlays must be themed from a selector that can match the overlay at its outlet, usually in a global stylesheet. +- The local theme changes the design system or light/dark variant. Pass the corresponding `$schema` to the component theme function so scoped mode emits the correct theme metadata. + +Do not add scoped mode indiscriminately. Keep the default global mode for ordinary `--ig--*` overrides, whether application-wide or restricted by a selector. The component must remain included in the global `theme()` output so its local declarations can consume those universal tokens: + +```scss +@include tokens( + avatar-theme( + $schema: $dark-material-schema, + $background: var(--ig-primary-500) + ) +); +``` + +Scoped mode does not universally remove the need for `::ng-deep`. Angular's Emulated View Encapsulation may still prevent selectors generated for nested or internal elements from matching. Preserve `::ng-deep` where testing shows it is required, or move that theme include to a global stylesheet. For a detached overlay, `::ng-deep` alone is insufficient; the theme must match or be inherited at the overlay outlet. + +Ignite UI styles now use the cascade order `ig.reset` → `ig.base` → the active design-system layer (`ig.material`, `ig.bootstrap`, `ig.fluent`, or `ig.indigo`) → `ig.derived`. If your application loads a reset or normalize stylesheet, place it in the lowest-precedence reset layer so it cannot override component styles: + +```scss +@layer ig.reset { + @import "minireset.css"; +} +``` -For details on the underlying tree-shaking and cascade-layering changes, see [Component Themes](/themes/sass/component-themes) and [Global Themes](/themes/sass/global-themes#excluding-components). +For details, see [Component Themes](/themes/sass/component-themes) and [Global Themes](/themes/sass/global-themes#excluding-components). ## From 21.1.x to 22.0.x diff --git a/docs/angular/src/content/en/components/grid/groupby.mdx b/docs/angular/src/content/en/components/grid/groupby.mdx index 9a994871ac..a50375bc84 100644 --- a/docs/angular/src/content/en/components/grid/groupby.mdx +++ b/docs/angular/src/content/en/components/grid/groupby.mdx @@ -455,11 +455,7 @@ In order for the custom theme to affect only specific component, you can move al This way, due to Angular's [ViewEncapsulation](https://angular.io/api/core/Component#encapsulation), your styles will be applied only to your custom component. - - If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to penetrate this encapsulation using `::ng-deep` in order to style the components which are inside the grid. - - -In our example, we need to use `::ng-deep` for our chip theme: +Depending on where the grouped chips are rendered, Emulated View Encapsulation may prevent their token declarations from matching. If the chip theme does not take effect, use `::ng-deep` for that nested theme or move it to a global stylesheet: ```scss :host { diff --git a/docs/angular/src/content/en/components/icon.mdx b/docs/angular/src/content/en/components/icon.mdx index 48d5c73469..a5526ea516 100644 --- a/docs/angular/src/content/en/components/icon.mdx +++ b/docs/angular/src/content/en/components/icon.mdx @@ -206,7 +206,7 @@ On the top of your `server.ts` file, add: ## Styling -To get started with styling the icons, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the icons, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/linear-progress.mdx b/docs/angular/src/content/en/components/linear-progress.mdx index 9a6f32fba3..869bde3b89 100644 --- a/docs/angular/src/content/en/components/linear-progress.mdx +++ b/docs/angular/src/content/en/components/linear-progress.mdx @@ -253,7 +253,7 @@ After completing the steps above, our progress bar should look like this: ## Styling -To get started with styling the linear progress bar, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the linear progress bar, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/month-picker.mdx b/docs/angular/src/content/en/components/month-picker.mdx index e4c4470297..14c72af8f5 100644 --- a/docs/angular/src/content/en/components/month-picker.mdx +++ b/docs/angular/src/content/en/components/month-picker.mdx @@ -183,7 +183,7 @@ Here is an example of localizing and formatting the month picker component: ## Styling -To get started with styling the month picker, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the month picker, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/navbar.mdx b/docs/angular/src/content/en/components/navbar.mdx index a842d9d4c6..031c8324ce 100644 --- a/docs/angular/src/content/en/components/navbar.mdx +++ b/docs/angular/src/content/en/components/navbar.mdx @@ -286,7 +286,7 @@ When you modify a primary property, all related dependent properties are automat | | $border-color (changes for indigo variant only) | The navbar border color | | **$idle-icon-color** | $hover-icon-color | The navbar hover icon color | -To get started with styling the navbar, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the navbar, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/navdrawer.mdx b/docs/angular/src/content/en/components/navdrawer.mdx index 4095832577..35d11f14bb 100644 --- a/docs/angular/src/content/en/components/navdrawer.mdx +++ b/docs/angular/src/content/en/components/navdrawer.mdx @@ -455,7 +455,7 @@ The example below presents the capabilities of a hierarchical structure by using ## Styling -To get started with styling the navigation drawer, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the navigation drawer, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -485,7 +485,7 @@ The last step is to **include** the component theme in our application. ``` -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` to apply the styles. +In some component templates, Emulated View Encapsulation can still prevent the generated token declarations from reaching nested Ignite UI elements. If the theme does not take effect, use `::ng-deep` as shown below or move the theme to a global stylesheet. ```scss diff --git a/docs/angular/src/content/en/components/overlay-styling.mdx b/docs/angular/src/content/en/components/overlay-styling.mdx index e598be8079..a418b0766a 100644 --- a/docs/angular/src/content/en/components/overlay-styling.mdx +++ b/docs/angular/src/content/en/components/overlay-styling.mdx @@ -25,7 +25,7 @@ To display the content above other elements, the service moves it into a special ## Styling Overlay Components -In most cases [global](/themes/sass/global-themes) theme styles are not affected by the overlay outlets. For example, let's take a look at a Drop Down, [styled](/drop-down#styling) by the mixin: +A theme emitted from the global stylesheet can affect content in any overlay outlet. For example, the following [Drop Down](/drop-down#styling) theme emits universal token overrides at the Sass root, where they are available to drop-down content attached to the document body: ```html {/* overlay-styling.component.html */} @@ -37,27 +37,23 @@ In most cases [global](/themes/sass/global-themes) theme styles are not affected ``` ```scss +// styles.scss @use "igniteui-angular/theming" as *; -// IMPORTANT: Prior to Ignite UI for Angular version 13 use: -// @import '~igniteui-angular/lib/core/styles/themes/index'; - $my-drop-down-theme: drop-down-theme( $background-color: #efefef ); -:host { - @include tokens($my-drop-down-theme); -} +@include tokens($my-drop-down-theme); ``` -The global styles are not generated under a scoped rule and are not affected by any encapsulation, and thus can match any element on the page, including `igx-drop-down-item` the service moved to the overlay outlet. +Because these universal overrides are global, the drop-down content can consume them after the overlay service moves it to an outlet. ## Scoped Component Styles -When scoping styles for elements that are displayed in the overlay, we need to specify to the position of the overlay `outlet` in the DOM. CSS rules that are scoped require a specific hierarchical structure of the elements - we need to make sure the overlay content is displayed in the correct context of the styles we want to apply. +A local theme can only affect overlay content that inherits from its container or matches its generated selectors. Content attached to the default outlet at the end of `body` is not a descendant of the component that opened it. -For example, let's take the `igx-combo` - its item [styles](/combo#styling) use the `igx-drop-down` theme, because the combo defines its content inside of its own view. +For example, the `igx-combo` item [styles](/combo#styling) use the drop-down theme. This component-local theme takes effect after the combo outlet is moved beneath the host: ```scss // overlay-styling.component.scss @@ -67,20 +63,11 @@ For example, let's take the `igx-combo` - its item [styles](/combo#styling) use } ``` - -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` to apply the styles. + +`::ng-deep` does not make tokens inherit into a detached outlet. Either emit the overlay theme globally or move the outlet beneath the themed container. If a special customization uses scoped mode and its generated selectors still cannot match the nested overlay content, `::ng-deep` may also be required after moving the outlet. -```scss -// overlay-styling.component.scss -:host { - ::ng-deep { - @include tokens($my-drop-down-theme); - } -} -``` - -The items in our combo's list **are not** descendants of our component `host` - they are currently being displayed in the default overlay outlet, at the end of the document's body. You can change this by using the property in the `overlaySettings`. The `outlet` controls where the overlay container should be rendered. +Use the property to control where the overlay container is rendered. Here, we can pass a reference to the element where we'd like our container to be: @@ -118,30 +105,14 @@ $my-overlay-theme: overlay-theme( $background-color: rgba(0, 153, 255, 0.3) ); -:host { - @include tokens($my-overlay-theme); -} +@include tokens($my-overlay-theme); ``` -Now **all** modal overlays will have a purple tint to their background. - - -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` to apply the styles. - - -```scss -// overlay-styling.component.scss -:host { - ::ng-deep { - @include tokens($my-overlay-theme); - } -} -``` +Now **all** modal overlays will have a purple tint. Because this theme is emitted globally, Angular View Encapsulation and `::ng-deep` are not involved. ### Scoped Overlay Styles -If we want our overlay to have a specific background **only** under a certain component, we can [scope the theme](#scoped-overlay-styles). -When scoping a modal overlay, you need to move the overlay outlet, which has some [limitations](/overlay#assumptions-and-limitations). In order to minimize the risks of overflow clipping, z-index and viewport issues, we recommend using outlets for modal overlays only in higher level components: +To give an overlay a specific background only beneath a certain container, move its outlet under that container and scope the theme there. Custom outlets have some [limitations](/overlay#assumptions-and-limitations); to reduce overflow clipping, stacking, and viewport issues, use them in higher-level components: ```scss // styles.scss diff --git a/docs/angular/src/content/en/components/pivotgrid/pivot-grid.mdx b/docs/angular/src/content/en/components/pivotgrid/pivot-grid.mdx index 5915e36ef2..5a74dd2461 100644 --- a/docs/angular/src/content/en/components/pivotgrid/pivot-grid.mdx +++ b/docs/angular/src/content/en/components/pivotgrid/pivot-grid.mdx @@ -330,7 +330,7 @@ The Pivot Grid can be styled through the [`Ignite UI for Angular Theme Library`] ### Importing global theme -To get started with styling the Pivot Grid, you first need to import the `index` file, where all the theme functions and component mixins are located: +To get started with styling the Pivot Grid, you first need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/query-builder.mdx b/docs/angular/src/content/en/components/query-builder.mdx index ba389e23eb..100b416b31 100644 --- a/docs/angular/src/content/en/components/query-builder.mdx +++ b/docs/angular/src/content/en/components/query-builder.mdx @@ -291,7 +291,7 @@ When you modify a primary property, all related dependent properties are automat | | $separator-color | The separator color of the query block | | | $header-border (Bootstrap only) | The border color of the query builder header | -To get started with styling the Query Builder, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the Query Builder, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -357,7 +357,7 @@ The last step is to **include** the new component themes using the `tokens` mixi ``` -If the component is using an [`Emulated`](./themes/sass/component-themes.mdx#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` to style the components inside the query builder component (button, chip, drop-down ...etc). +Token overrides normally inherit through Emulated View Encapsulation, but generated selectors for nested query builder controls may still require `::ng-deep`. If the local theme does not take effect, wrap that include in `::ng-deep` or move it to a global stylesheet. If a drop-down is attached to a detached overlay outlet, emit its theme from a selector that can match the outlet or configure the outlet beneath the themed container. ### Demo diff --git a/docs/angular/src/content/en/components/radio-button.mdx b/docs/angular/src/content/en/components/radio-button.mdx index ec4aea6890..2b65760caa 100644 --- a/docs/angular/src/content/en/components/radio-button.mdx +++ b/docs/angular/src/content/en/components/radio-button.mdx @@ -165,7 +165,7 @@ When you modify a primary property, all related dependent properties are automat | **$error-color** | $error-color-hover | Label, border, and dot color in invalid state on hover | | | $focus-outline-color-error | Focus outline color in invalid state | -To get started with styling the radio buttons, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the radio buttons, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/select.mdx b/docs/angular/src/content/en/components/select.mdx index 26b232926e..e09e56e3a2 100644 --- a/docs/angular/src/content/en/components/select.mdx +++ b/docs/angular/src/content/en/components/select.mdx @@ -92,7 +92,6 @@ Add the `igx-select` along with a list of items to choose from. We use ``` - This component uses Material Icons. Add the following link to your `index.html`: `` @@ -394,7 +393,7 @@ To get the Select component styled, you have to style its containing components. Take a look at the [`Input Group`](/input-group#styling) and the [`Drop Down`](/drop-down#styling) styling sections to get a better understanding of how to style those two components. We also have a function which is used only for styling the button of our Select component.
-To get started with styling the Select component button, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the Select component button, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/simple-combo.mdx b/docs/angular/src/content/en/components/simple-combo.mdx index 7c56763c52..502659acde 100644 --- a/docs/angular/src/content/en/components/simple-combo.mdx +++ b/docs/angular/src/content/en/components/simple-combo.mdx @@ -372,7 +372,7 @@ The last step is to include the component's theme. ``` -The component uses the [`IgxOverlay`](/overlay) service to hold and display the simple combobox items list container. To properly scope your styles you might have to use an . For more details check the [`IgxOverlay Styling Guide`](/overlay-styling). Also is necessary to use `::ng-deep` when we are styling the components. +The uses the [`IgxOverlay`](/overlay) service to display its list. Depending on View Encapsulation and where the generated selectors must match, the local theme include may still require `::ng-deep`. A list attached to the default detached outlet also cannot inherit from the combo's host; configure the beneath the themed container or emit the theme from a selector that can match the outlet. See the [`IgxOverlay Styling Guide`](/overlay-styling). [!Note] The default `type` of the `IgxSimpleCombo` is `box` unlike the [`IgxSelect`](/select) where it is `line`. diff --git a/docs/angular/src/content/en/components/snackbar.mdx b/docs/angular/src/content/en/components/snackbar.mdx index f1503f4655..f2ec4f962b 100644 --- a/docs/angular/src/content/en/components/snackbar.mdx +++ b/docs/angular/src/content/en/components/snackbar.mdx @@ -225,7 +225,6 @@ Let’s create a list with contacts that can be deleted. When an item is deleted ``` - This component uses Material Icons. Add the following link to your `index.html`: `` @@ -315,7 +314,7 @@ When you modify a primary property, all related dependent properties are automat -To get started with styling the snackbar, we need to import the index file, where all the theme functions and component mixins live: +To get started with styling the snackbar, we need to import the index file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/splitter.mdx b/docs/angular/src/content/en/components/splitter.mdx index c1b0dc6210..4f71911252 100644 --- a/docs/angular/src/content/en/components/splitter.mdx +++ b/docs/angular/src/content/en/components/splitter.mdx @@ -238,7 +238,7 @@ When you modify a primary property, all related dependent properties are automat -To get started with styling the **igxSplitter** component, you need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the **igxSplitter** component, you need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/switch.mdx b/docs/angular/src/content/en/components/switch.mdx index 5e03e8f9e3..94b5957a5b 100644 --- a/docs/angular/src/content/en/components/switch.mdx +++ b/docs/angular/src/content/en/components/switch.mdx @@ -237,7 +237,7 @@ When you modify a primary property, all related dependent properties are automat -To get started with styling the switch, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the switch, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/tabbar.mdx b/docs/angular/src/content/en/components/tabbar.mdx index 8f48ce11e2..4d6581ed51 100644 --- a/docs/angular/src/content/en/components/tabbar.mdx +++ b/docs/angular/src/content/en/components/tabbar.mdx @@ -441,7 +441,7 @@ When you modify a primary property, all related dependent properties are automat -To get started with styling the tabs, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the tabs, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/tabs.mdx b/docs/angular/src/content/en/components/tabs.mdx index bd31fb40a7..22cbc9fd6e 100644 --- a/docs/angular/src/content/en/components/tabs.mdx +++ b/docs/angular/src/content/en/components/tabs.mdx @@ -504,7 +504,7 @@ When you modify a primary property, all related dependent properties are automat -To get started with styling the tabs, we need to import the theming module, where all the theme functions and component mixins live: +To get started with styling the tabs, we need to import the theming module, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/texthighlight.mdx b/docs/angular/src/content/en/components/texthighlight.mdx index 97ce58639c..05e1ee885a 100644 --- a/docs/angular/src/content/en/components/texthighlight.mdx +++ b/docs/angular/src/content/en/components/texthighlight.mdx @@ -356,7 +356,7 @@ export class HomeComponent { ## Styles -The directive can be styled in terms of changing the color and the background of all occurrences of the given string. To get started, we need to import the `index` file, where all the theme functions and component mixins live: +The directive can be styled in terms of changing the color and the background of all occurrences of the given string. To get started, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -387,7 +387,7 @@ The last step is to **include** the newly created theme. ``` -If the component is using an [`Emulated`](./themes/sass/component-themes.mdx#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` to apply the styles. +Token overrides normally inherit through Emulated View Encapsulation, but generated selectors and the custom CSS selectors in the next example may still require `::ng-deep` when they target highlight elements created outside the component's own template. ### Custom styles diff --git a/docs/angular/src/content/en/components/themes/misc/bootstrap-theming.mdx b/docs/angular/src/content/en/components/themes/misc/bootstrap-theming.mdx index 27282e7fd7..c6bfc52cd9 100644 --- a/docs/angular/src/content/en/components/themes/misc/bootstrap-theming.mdx +++ b/docs/angular/src/content/en/components/themes/misc/bootstrap-theming.mdx @@ -104,7 +104,7 @@ Finally, we inserted an Ignite UI for Angular `icon button` in the top right cor ## Styling -To get started with styling components using the Ignite UI theming engine, create an scss file named of your choice that would be the base file for your global theme. We will call this file `_variables.scss`. Next, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling components using the Ignite UI theming engine, create an scss file named of your choice that would be the base file for your global theme. We will call this file `_variables.scss`. Next, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss // _variables.scss diff --git a/docs/angular/src/content/en/components/themes/sass/component-themes.mdx b/docs/angular/src/content/en/components/themes/sass/component-themes.mdx index 86242f94c7..96015b4205 100644 --- a/docs/angular/src/content/en/components/themes/sass/component-themes.mdx +++ b/docs/angular/src/content/en/components/themes/sass/component-themes.mdx @@ -18,12 +18,7 @@ Component themes allow you to change the styles of specific component instances
-Before we dig deep into how you can create component-level themes, let's take a few moments to talk about how Ignite UI for Angular approaches component theming. Because we want to be able to support older browsers, like IE11, we have two completely different approaches for theming components. - -- The first approach is to style component instances using [CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables). By using CSS variables we gain the ability to create component themes without replicating their styles over and over again. Also, this approach allows us to modify the value of the CSS variables at runtime. -- The second approach is to create a new set of CSS rules that overwrite any previously declared CSS rules for a specific component. This approach is pretty straight-forward, and it is the only way we can provide sensible theming support for older browser, albeit it is not ideal as it adds a lot of additional CSS rules to the generated CSS theme. - -We'll take a look at how these approaches work in practice, and how to use one instead of the other when generating component-level themes. +Ignite UI for Angular component themes use CSS custom properties. Each component ships its structural CSS in its own bundle, while Sass theme functions and the `tokens()` mixin generate the design-token values consumed by those styles. This keeps component CSS tree-shakable and lets applications override themes at runtime without regenerating structural rules. @@ -31,16 +26,16 @@ We'll take a look at how these approaches work in practice, and how to use one i
-There are several parts to a component theme: +A component theme has two parts: -- **The component theme function** - A Sass function that normalizes the passed arguments and produces a theme to be consumed by a component mixin. -- **The Tokens mixin** - A Sass mixin that consumes a component theme that generates CSS variable tokens from an Ignite UI component theme. -- **The component mixin** - A Sass mixin that consumes a component theme and produces _CSS rules_ used to style a particular component. +- **The component theme function** — normalizes the supplied values and returns a theme map. +- **The `tokens()` mixin** — consumes that map and emits CSS custom properties in global or scoped mode. +The old per-component wrapper mixins no longer exist as of Ignite UI for Angular 22.1.0. Use `tokens()` for every component theme. ### The tokens mixin -Using the `tokens` mixin is the preferred way to customize your components. It generates CSS custom properties (`design tokens`) from an Ignite UI component theme in either global or scoped mode. +The mode determines whether `tokens()` emits universal overrides or the complete local variables consumed by a component's structural stylesheet. **Global mode (default)** — emits universal `--ig-{component}-{property}` tokens. Local var() references are rewritten to their global equivalents so derived values (e.g., `adaptive-contrast`) resolve correctly at any scope. Sizable expressions are skipped, you have to pass concrete values instead. @@ -55,7 +50,7 @@ Using the `tokens` mixin is the preferred way to customize your components. It g } ``` -**Scoped mode** — emits component-scoped variables `--{property}` with a fallback chain: configured prefix `(--igx-*) -> universal (--ig-*) -> schema default`. When called from the stylesheet root, the theme's selector is used to create the rule. When called inside a selector, both the current selector and the component selector receive the variables. +**Scoped mode** — emits component-local variables (`--{property}`) with a fallback chain from the configured prefix (`--igx-*`) to universal tokens (`--ig-*`) and finally the schema default. When called from the stylesheet root, the theme map's selector is used. When called inside another selector, declarations are emitted for the current selector and the component selector. ```scss // Input (from root): @@ -81,8 +76,7 @@ igx-avatar { } ``` -Say you want to create a new global avatar theme that has a different background color to the one we set in the avatar's default theme. As mentioned in the [**overview section**](#overview) there are 2 general approaches to creating a component theme. -There are even more ways you can organize and scope your component themes. The most straightforward way to do that is in the same file you defined your [**global theme**](/themes/sass/global-themes). +Use the default global mode for universal overrides that should apply application-wide or be inherited by multiple component instances. The component must remain included in the global [`theme()`](/themes/sass/global-themes) output so its local declarations can consume the universal tokens. Defining an avatar theme: @@ -92,36 +86,33 @@ $avatar-purple-theme: avatar-theme( $background: purple, ); -// Pass the theme to the `tokens` mixin -:root { - @include tokens($avatar-purple-theme); -} +// Pass the theme to tokens() in its default global mode. +@include tokens($avatar-purple-theme); ``` -The above code produces CSS variables for the `igx-avatar` component. These new CSS variables overwrite the default avatar rules. -Similarly, if you were to include `tokens` mixin later down in the global `scss` file, the mixin will again overwrite any previously defined themes. +The code emits universal `--ig-avatar-*` overrides at `:root`. If another global `tokens()` call for the avatar appears later, normal cascade order makes the later values win. For instance: ```scss // ... -:root { - @include tokens($avatar-purple-theme); -} +@include tokens($avatar-purple-theme); // Later $avatar-royalblue-theme: avatar-theme( $background: royalblue, ); -:root { - @include tokens($avatar-royalblue-theme); -} +@include tokens($avatar-royalblue-theme); ``` In the above code, the de facto global theme is now the `$avatar-royalblue-theme` as it overwrites any previously included `tokens` mixins. -This brings us to our next point. +Use `$mode: 'scoped'` only when the theme must emit component-local declarations that are not already supplied by the global theme. Typical cases include components excluded from `theme()`, component-local sizing expressions, theme maps whose multiple selectors need local declarations, and themes that establish a different schema or light/dark variant. Pass that variant's `$schema` to the component theme function. + +Do not select scoped mode merely because `tokens()` is nested in a selector or replaces a `css-vars()` call. If the component remains in the global `theme()` output, default global mode usually provides the intended override through the universal-token fallback chain. Use scoped mode only after determining that the customization depends on declarations the default mode does not emit. + +Detached overlays do not inherit token overrides from the component that opened them. Emit the override globally or move the outlet beneath the themed container. Use scoped mode only if the overlay customization also requires component-local declarations that the global theme does not provide. See [Overlay Styling](/overlay-styling). @@ -163,10 +154,18 @@ In a component template:
-Structural styles, typography, design-system overrides, and derived/contextual tokens are now split across each component's own bundle and the global preset. To keep precedence between them deterministic regardless of import order, Ignite UI for Angular declares its CSS in the following [cascade layers](https://developer.mozilla.org/en-US/docs/Web/CSS/@layer): `ig.base` → `ig.typography` → `ig.material` (or the equivalent design-system layer) → `ig.derived`. Styles declared later in this list win over earlier ones, regardless of selector specificity or the order the component bundles happen to load in. +Structural styles, design-system overrides, and derived/contextual tokens are split across component bundles and the global preset. Ignite UI declares them in the following [cascade layer](https://developer.mozilla.org/en-US/docs/Web/CSS/@layer) order: `ig.reset` → `ig.base` → `ig.material`/`ig.bootstrap`/`ig.fluent`/`ig.indigo` → `ig.derived`. A later layer wins over an earlier one regardless of bundle load order. + +Wrap a third-party reset or normalize stylesheet in `ig.reset` so it cannot override component or typography styles: + +```scss +@layer ig.reset { + @import "minireset.css"; +} +``` -Any CSS you author outside of an `@layer` block is treated by the browser as unlayered, and unlayered styles always take precedence over layered styles, no matter their specificity. This means plain, unlayered overrides in your application stylesheet (including ones added via `::ng-deep`) will continue to beat Ignite UI's own layered styles, so you generally don't need extra specificity tricks to override component styles with your own CSS rules. +Unlayered application rules take precedence over Ignite UI's layered rules. Keep ordinary application overrides unlayered unless you intentionally want them to participate in the Ignite UI layer order. ## View Encapsulation @@ -216,7 +215,9 @@ $avatar-royalblue-theme: avatar-theme( } ``` -When using CSS variables, we don't have to use the `::ng-deep` pseudo-selector. With the code above we've created CSS variables for the `igx-avatar`, which will always have `royalblue` as its background color. The theme for our custom avatar will not 'leak' into other `igx-avatar` component instances, thus staying encapsulated within our custom `app-avatar` component. +The universal avatar tokens are declared on this host and inherited by its avatar. Angular's generated encapsulation attributes can still prevent selectors emitted by more complex component themes from matching nested or internal elements. If a local theme does not take effect, use `::ng-deep` around that include or move it to a global stylesheet. The theme remains limited to this `app-avatar` subtree unless it is emitted globally. + +Shadow DOM boundaries and detached overlay outlets require the theme to be emitted where the target can inherit from it or where its selectors can match. The above instance could also be achieved without using any Sass. All we need to do is to set the value of `--ig-avatar-background` CSS variable to the desired color: diff --git a/docs/angular/src/content/en/components/themes/sass/global-themes.mdx b/docs/angular/src/content/en/components/themes/sass/global-themes.mdx index c5a0ec45f1..80c034cc4c 100644 --- a/docs/angular/src/content/en/components/themes/sass/global-themes.mdx +++ b/docs/angular/src/content/en/components/themes/sass/global-themes.mdx @@ -72,7 +72,7 @@ $my-color-palette: palette( @include theme($my-color-palette); ``` -Let's explain what the `core` and `theme` mixins do. The `core` mixin takes care of some configurations, like adding enhanced accessibility(e.g. colors suitable for color blind users) and printing styles for all components. The `theme` mixin includes each individual component style (bar the ones listed as excluded) and configures the palette, schema, elevations, and roundness that is not listed in the `$exclude` list of components. +The `core()` mixin configures shared infrastructure such as sizing, spacing, enhanced accessibility, global directive styles, and print styles. The `theme()` mixin emits the palette, elevations, theme metadata, and component token declarations for the selected schema. Component structural styles are not generated by `theme()` as of 22.1.0; they ship in each component bundle and are tree-shaken automatically. Including `core` before `theme` is essential. The `core` mixins provide all base definitions needed for the `theme` mixin to work correctly. @@ -95,9 +95,9 @@ $unnecessary: (igx-avatar, igx-badge); @include theme($my-color-palette, $exclude: $unnecessary); ``` -If you know your app will not be using some of our components, we recommend you add them to the `$exclude` list. +If you know your app will not use some components, you can add them to `$exclude` to omit their token declarations. This does not control structural CSS; unused component bundles are already removed by the application build. -You can do the inverse, i.e. include only the component styles you want using the method below: +You can do the inverse and emit tokens only for the components you want using the method below: ```scss @use 'sass:map'; @@ -113,6 +113,18 @@ $allowed: (igx-avatar, igx-badge); ); ``` +## Third-party Resets + +Ignite UI declares its layers in the order `ig.reset` → `ig.base` → the active design-system layer → `ig.derived`. Wrap third-party reset or normalize stylesheets in the lowest-precedence `ig.reset` layer: + +```scss +@layer ig.reset { + @import "minireset.css"; +} +``` + +Unlayered application styles continue to take precedence over Ignite UI's layered styles. + ## Light and Dark Themes We also provide _**light**_ and _**dark**_ versions for our four themes - Material, Fluent, Indigo, Bootstrap. diff --git a/docs/angular/src/content/en/components/themes/sass/schemas.mdx b/docs/angular/src/content/en/components/themes/sass/schemas.mdx index 2dbd5a51e9..f251569ac1 100644 --- a/docs/angular/src/content/en/components/themes/sass/schemas.mdx +++ b/docs/angular/src/content/en/components/themes/sass/schemas.mdx @@ -152,7 +152,8 @@ $indigo-avatar: map.get($light-indigo-schema, avatar); @include tokens( avatar-theme( $schema: $indigo-avatar - ) + ), + $mode: 'scoped' ); } ``` diff --git a/docs/angular/src/content/en/components/time-picker.mdx b/docs/angular/src/content/en/components/time-picker.mdx index 8757d00a47..115711897c 100644 --- a/docs/angular/src/content/en/components/time-picker.mdx +++ b/docs/angular/src/content/en/components/time-picker.mdx @@ -386,7 +386,7 @@ In reactive forms, we can handle the -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` + +In some component templates, Emulated View Encapsulation can still prevent the generated token declarations from reaching nested Ignite UI elements. If the theme does not take effect, use `::ng-deep` as shown below or move the theme to a global stylesheet. ```scss diff --git a/docs/angular/src/content/en/components/toast.mdx b/docs/angular/src/content/en/components/toast.mdx index b92bb9b3f1..bcd153506a 100644 --- a/docs/angular/src/content/en/components/toast.mdx +++ b/docs/angular/src/content/en/components/toast.mdx @@ -206,7 +206,7 @@ When you modify a primary property, all related dependent properties are automat -To get started with styling the toast, we need to import the index file, where all the theme functions and component mixins live: +To get started with styling the toast, we need to import the index file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/tooltip.mdx b/docs/angular/src/content/en/components/tooltip.mdx index 51fdaea73c..de3047d0fd 100644 --- a/docs/angular/src/content/en/components/tooltip.mdx +++ b/docs/angular/src/content/en/components/tooltip.mdx @@ -466,7 +466,7 @@ public overlaySettings: OverlaySettings = { ## Styling -To get started with styling the tooltip, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the tooltip, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/components/treegrid/tree-grid.mdx b/docs/angular/src/content/en/components/treegrid/tree-grid.mdx index c48862b3c5..c48d49809b 100644 --- a/docs/angular/src/content/en/components/treegrid/tree-grid.mdx +++ b/docs/angular/src/content/en/components/treegrid/tree-grid.mdx @@ -285,7 +285,7 @@ See the [Grid Sizing](/treegrid/sizing) topic. The Tree Grid allows styling through the [`Ignite UI for Angular Theme Library`](/themes/sass/component-themes). The tree grid's exposes a wide variety of properties, which allows the customization of all the tree grid's features. -To get started with styling the Tree Grid, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the Tree Grid, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/grids_templates/advanced-filtering.mdx b/docs/angular/src/content/en/grids_templates/advanced-filtering.mdx index 5161993da8..6d843664d0 100644 --- a/docs/angular/src/content/en/grids_templates/advanced-filtering.mdx +++ b/docs/angular/src/content/en/grids_templates/advanced-filtering.mdx @@ -242,7 +242,7 @@ You can also see how our [drag and drop App Builder™](https://www.infragistics ## Styling -To get started with styling the Advanced Filtering dialog, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the Advanced Filtering dialog, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -278,7 +278,7 @@ We include the created **query-builder-theme** within `igx-advanced-filtering-di -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep`: +In some component templates, Emulated View Encapsulation can still prevent the generated token declarations from reaching nested Ignite UI elements. If the theme does not take effect, use `::ng-deep` as shown below or move the theme to a global stylesheet. ```scss @@ -309,7 +309,6 @@ If the component is using an [`Emulated`](/themes/sass/component-themes#view-enc - The sample will not be affected by the selected global theme from `Change Theme`. diff --git a/docs/angular/src/content/en/grids_templates/cell-selection.mdx b/docs/angular/src/content/en/grids_templates/cell-selection.mdx index 75bf44fdcf..43b665daf9 100644 --- a/docs/angular/src/content/en/grids_templates/cell-selection.mdx +++ b/docs/angular/src/content/en/grids_templates/cell-selection.mdx @@ -301,7 +301,7 @@ The theme engine exposes properties that allow us to style the **range of select ### Import theme -To get started with styling the selection, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the selection, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/grids_templates/column-hiding.mdx b/docs/angular/src/content/en/grids_templates/column-hiding.mdx index 8e18e9127b..d503175e0d 100644 --- a/docs/angular/src/content/en/grids_templates/column-hiding.mdx +++ b/docs/angular/src/content/en/grids_templates/column-hiding.mdx @@ -487,7 +487,7 @@ If all went well, this is how our column hiding UI component should look like: ## Styling -To get started with styling the column actions component, we need to import the index file, where all the theme functions and component mixins live: +To get started with styling the column actions component, we need to import the index file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -520,7 +520,7 @@ Instead of hardcoding the color values like we just did, we can achieve greater In this example we only changed the text-color of the flat buttons and the button disabled color, but the provides way more parameters to control the button style. -The last step is to **include** the component mixins, each with its respective theme: +The last step is to apply each component theme with `tokens()`: ```scss :host { @@ -537,7 +537,7 @@ We include the created **flat-button-theme** within `.igx-column-actions`, so th
-If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` for the components inside the column action component (buttons, checkboxes ...etc): +In some component templates, Emulated View Encapsulation can still prevent the generated token declarations from reaching nested Ignite UI elements. If the theme does not take effect, use `::ng-deep` as shown below or move the theme to a global stylesheet. ```scss diff --git a/docs/angular/src/content/en/grids_templates/column-moving.mdx b/docs/angular/src/content/en/grids_templates/column-moving.mdx index 110a43efc1..1463baf98d 100644 --- a/docs/angular/src/content/en/grids_templates/column-moving.mdx +++ b/docs/angular/src/content/en/grids_templates/column-moving.mdx @@ -198,7 +198,7 @@ public onColumnMovingEnd(event) { ## Styling -To get started with styling the {ComponentTitle} column moving headers, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the {ComponentTitle} column moving headers, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -222,7 +222,7 @@ $dark-grid-column-moving-theme: grid-theme( Instead of hardcoding the color values like we just did, we can achieve greater flexibility in terms of colors by using the and functions. Please refer to [`Palettes`](/themes/sass/palettes) topic for detailed guidance on how to use them.
-The last step is to **include** the component mixins with its respective theme: +The last step is to apply the component theme with `tokens()`: ```scss :host { @@ -250,7 +250,6 @@ The last step is to **include** the component mixins with its respective theme: - The sample will not be affected by the selected global theme from `Change Theme`. diff --git a/docs/angular/src/content/en/grids_templates/column-resizing.mdx b/docs/angular/src/content/en/grids_templates/column-resizing.mdx index 47a872951d..301e4b78b7 100644 --- a/docs/angular/src/content/en/grids_templates/column-resizing.mdx +++ b/docs/angular/src/content/en/grids_templates/column-resizing.mdx @@ -309,7 +309,7 @@ This approach is more performance optimized than auto-sizing post initialization ## Styling -To get started with the styling of the {ComponentTitle} column resize line, we need to import the index file, where all the theme functions and component mixins live: +To get started with the styling of the {ComponentTitle} column resize line, we need to import the index file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -352,7 +352,7 @@ $custom-grid-theme: grid-theme( Instead of hardcoding the color values like we just did, we can achieve greater flexibility in terms of colors by using the and functions. Please refer to [`Palettes`](/themes/sass/palettes) topic for detailed guidance on how to use them.
-The last step is to **include** the component mixins with its respective theme: +The last step is to apply the component theme with `tokens()`: ```scss :host { @@ -378,7 +378,6 @@ The last step is to **include** the component mixins with its respective theme: - The sample will not be affected by the selected global theme from `Change Theme`. diff --git a/docs/angular/src/content/en/grids_templates/column-selection.mdx b/docs/angular/src/content/en/grids_templates/column-selection.mdx index 0380109d92..0c02fc259c 100644 --- a/docs/angular/src/content/en/grids_templates/column-selection.mdx +++ b/docs/angular/src/content/en/grids_templates/column-selection.mdx @@ -117,7 +117,7 @@ More information regarding the API manipulations could be found in the [`API Ref ## Styling -Before diving into the styling options, the core module and all component mixins need to be imported. +Before diving into the styling options, the theming module needs to be imported. ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/grids_templates/excel-style-filtering.mdx b/docs/angular/src/content/en/grids_templates/excel-style-filtering.mdx index bd0f8f1789..a84738f8ce 100644 --- a/docs/angular/src/content/en/grids_templates/excel-style-filtering.mdx +++ b/docs/angular/src/content/en/grids_templates/excel-style-filtering.mdx @@ -507,7 +507,7 @@ However, elements that go outside of the grid (e.g. Excel Style filter) will con ## Styling -To get started with styling the Excel Style Filtering dialog, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the Excel Style Filtering dialog, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -549,7 +549,7 @@ After that, we are ready to include our newly created grid theme. If we want to ``` -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep`: +This sample uses `::ng-deep` because both the generated theme selectors and the direct Excel Filtering selector must reach elements inside the grid's view. Moving the overrides to a global stylesheet is an alternative. ```scss @@ -580,7 +580,6 @@ If the component is using an [`Emulated`](/themes/sass/component-themes#view-enc - The sample will not be affected by the selected global theme from `Change Theme`. diff --git a/docs/angular/src/content/en/grids_templates/filtering.mdx b/docs/angular/src/content/en/grids_templates/filtering.mdx index 834ff2daf4..24c5975b3f 100644 --- a/docs/angular/src/content/en/grids_templates/filtering.mdx +++ b/docs/angular/src/content/en/grids_templates/filtering.mdx @@ -573,7 +573,7 @@ public matchingRecordsOnlyStrategy = new TreeGridMatchingRecordsOnlyFilteringStr ## Styling -To get started with styling the filtering row, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the filtering row, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -617,7 +617,7 @@ Instead of hardcoding the color values like we just did, we can achieve greater In this example we only changed some of the parameters for the input group and the button, but the and the provide way more parameters to control their respective styling. -The last step is to **include** the component mixins, each with its respective theme. We will also set the color property for the input's placeholder. +The last step is to apply each component theme with `tokens()`. We will also set the color property for the input's placeholder. ```scss :host { @@ -639,7 +639,7 @@ We include the created **flat-button-theme** and **input-group-theme** within `. -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep`: +This sample uses `::ng-deep` because the button, input, and placeholder themes are deliberately restricted to the grid's internal filtering-row selector. Moving those overrides to a global stylesheet is an alternative: ```scss diff --git a/docs/angular/src/content/en/grids_templates/multi-column-headers.mdx b/docs/angular/src/content/en/grids_templates/multi-column-headers.mdx index 0a7b48e247..9b1d725e44 100644 --- a/docs/angular/src/content/en/grids_templates/multi-column-headers.mdx +++ b/docs/angular/src/content/en/grids_templates/multi-column-headers.mdx @@ -281,7 +281,7 @@ The following sample demonstrates how to implement collapsible column groups usi ## Styling -To get started with styling the sorting behavior, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the sorting behavior, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -336,7 +336,7 @@ $custom-theme: grid-theme( Instead of hardcoding the color values like we just did, we can achieve greater flexibility in terms of colors by using the and functions. Please refer to [`Palettes`](/themes/sass/palettes) topic for detailed guidance on how to use them. -The last step is to **include** the component mixins: +The last step is to apply the component theme with `tokens()`: ```scss :host { diff --git a/docs/angular/src/content/en/grids_templates/paging.mdx b/docs/angular/src/content/en/grids_templates/paging.mdx index ebff766cf9..dc9b21bd35 100644 --- a/docs/angular/src/content/en/grids_templates/paging.mdx +++ b/docs/angular/src/content/en/grids_templates/paging.mdx @@ -199,7 +199,7 @@ In some cases you may want to define your own paging behavior and this is when w ## Styling -To get started with styling the paginator, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the paginator, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/angular/src/content/en/grids_templates/row-editing.mdx b/docs/angular/src/content/en/grids_templates/row-editing.mdx index 459dbf76f3..effadae05b 100644 --- a/docs/angular/src/content/en/grids_templates/row-editing.mdx +++ b/docs/angular/src/content/en/grids_templates/row-editing.mdx @@ -371,7 +371,7 @@ All we have to do now is apply the theme with a Sass `@include` statement. We pa Since the Row Editing overlay makes use of a lot of other components' themes, styling it via the global styles can affect other parts of our application (e.g. banners, buttons, etc.). The best way to prevent that is to scope the banner theme to the style file of the specific component it's applied to. -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to penetrate this encapsulation using `::ng-deep` in order to style the grid Row Editing Overlay. +In some component templates, Emulated View Encapsulation can still prevent the generated token declarations from reaching nested Ignite UI elements. If the theme does not take effect, use `::ng-deep` as shown below or move the theme to a global stylesheet. ```scss @@ -448,7 +448,6 @@ After styling the banner and buttons, we also define a custom style for [the cel - The sample will not be affected by the selected global theme from `Change Theme`. diff --git a/docs/angular/src/content/en/grids_templates/sorting.mdx b/docs/angular/src/content/en/grids_templates/sorting.mdx index aa2d6c30a9..d597cf376f 100644 --- a/docs/angular/src/content/en/grids_templates/sorting.mdx +++ b/docs/angular/src/content/en/grids_templates/sorting.mdx @@ -270,7 +270,7 @@ The sorting indicator icon in the column header can be customized using a templa ## Styling -To get started with styling the sorting behavior, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the sorting behavior, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -307,7 +307,7 @@ $custom-theme: grid-theme( Instead of hardcoding the color values like we just did, we can achieve greater flexibility in terms of colors by using the and functions. Please refer to [`Palettes`](/themes/sass/palettes) topic for detailed guidance on how to use them. -The last step is to **include** the component mixins: +The last step is to apply the component theme with `tokens()`: ```scss :host { @@ -337,7 +337,6 @@ The last step is to **include** the component mixins: - The sample will not be affected by the selected global theme from `Change Theme`. diff --git a/docs/angular/src/content/en/grids_templates/summaries.mdx b/docs/angular/src/content/en/grids_templates/summaries.mdx index c5a77a6cc5..b17355d034 100644 --- a/docs/angular/src/content/en/grids_templates/summaries.mdx +++ b/docs/angular/src/content/en/grids_templates/summaries.mdx @@ -63,7 +63,6 @@ The Angular UI grid in Ignite UI for Angular has a **summaries** feature that fu - The summary of the column is a **function of all column values**, unless filtering is applied, then the summary of the column will be **function of the filtered result values** @@ -721,7 +720,7 @@ The summary rows can be navigated with the following keyboard interactions: ## Styling -To get started with styling the sorting behavior, we need to import the `index` file, where all the theme functions and component mixins live: +To get started with styling the sorting behavior, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -793,10 +792,10 @@ The last step is to **include** the component custom theme: ``` -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep`: +In some component templates, Emulated View Encapsulation can still prevent the generated token declarations from reaching nested Ignite UI elements. If the theme does not take effect, use `::ng-deep` as shown below or move the theme to a global stylesheet. - ```scss +```scss :host { ::ng-deep { @include tokens($custom-theme); diff --git a/docs/angular/src/content/en/grids_templates/toolbar.mdx b/docs/angular/src/content/en/grids_templates/toolbar.mdx index 8d6fa055c0..bcbeddc26f 100644 --- a/docs/angular/src/content/en/grids_templates/toolbar.mdx +++ b/docs/angular/src/content/en/grids_templates/toolbar.mdx @@ -532,7 +532,7 @@ The following sample demonstrates how to add an additional button to the toolbar ## Styling -To get started with styling the toolbar, we need to import the index file, where all the theme functions and component mixins live: +To get started with styling the toolbar, we need to import the index file, where all the theme functions and the `tokens()` mixin are exported: ```scss @use "igniteui-angular/theming" as *; @@ -565,7 +565,7 @@ The last step is to **include** the newly created themes. ``` -If the component is using an [`Emulated`](/themes/sass/component-themes#view-encapsulation) ViewEncapsulation, it is necessary to `penetrate` this encapsulation using `::ng-deep` to style the components inside the grid toolbar component: +In some component templates, Emulated View Encapsulation can still prevent the generated token declarations from reaching nested Ignite UI elements. If the theme does not take effect, use `::ng-deep` as shown below or move the theme to a global stylesheet. ```scss From 98cb34e0756ed485cb44128cfd3a1b57bf0ab70a Mon Sep 17 00:00:00 2001 From: Hristo Hristov <57346540+Hristo313@users.noreply.github.com> Date: Fri, 14 Aug 2026 15:42:11 +0300 Subject: [PATCH 09/38] feat(docs): update category overview topic skill rules (#489) Co-authored-by: Stamen Stoychev --- .ai/skills/igniteui-doc-topics/SKILL.md | 55 +++++++++++++++++-- .../references/audit-rubric.md | 28 +++++++--- .../references/house-style.md | 28 ++++++++-- 3 files changed, 94 insertions(+), 17 deletions(-) diff --git a/.ai/skills/igniteui-doc-topics/SKILL.md b/.ai/skills/igniteui-doc-topics/SKILL.md index c667e6e22f..a7399c8e7d 100644 --- a/.ai/skills/igniteui-doc-topics/SKILL.md +++ b/.ai/skills/igniteui-doc-topics/SKILL.md @@ -98,10 +98,13 @@ cheat-sheet's "two classic confusions" section explains the reasoning. matching Indigo.Design component documentation under `https://www.infragistics.com/products/indigo-design/help/components/` and use its component structure as input for Usage subsection suggestions. -4. **Write frontmatter first** — `title`, `description` (answer-shaped, ≤~160 chars), `keywords`, - `license`, `llms.description`, `mentionedTypes` (xplat), and `relatedComponents` if the component - has close siblings (this lets **Usage**'s final **Do/Don't** subsection name the specific - sibling instead of speaking generically). +4. **Write frontmatter first** — apply the same metadata contract to every topic type, including + category/index topics: `title`, `description` (answer-shaped, ≤~160 chars), `keywords`, `license`, + `last_updated`, `llms.description`, and `mentionedTypes` (xplat). Use `relatedComponents` only + for component topics with close siblings. For xplat component topics, `title` uses the + `{ComponentTitle}` token convention. For xplat category/index topics, use a concise, + framework-neutral category title without `{Platform}` or `{ProductName}` tokens, for example + `title: "Grids and Tables"`. The site layout renders `last_updated`. 5. **Lay out the canonical sections** in order for that topic type, required ones always present. Feature-specific content goes as sub-headings under **Usage**, never as new top-level sections. 6. **Fill each section in its mode.** Lead every section with one plain, specific sentence. Put @@ -118,13 +121,55 @@ cheat-sheet's "two classic confusions" section explains the reasoning. `### Prerequisites and Version Compatibility` subsection under **Getting Started**, and the required **Known Limitations**, **Related Components**, and **FAQ** sections in their canonical positions. - For FAQ content, import and use the shared Astro `Faq` and `FaqItem` components. In slot mode, + For samples, use the shared Astro `Sample` component and verify its `src`, display props, and + descriptive `alt`. For Anatomy, import and use the shared Astro `Anatomy` component with a + verified anatomy image, name, description, and alt text; keep the verified DOM tree or skeleton + below it. For FAQ content, import and use the shared Astro `Faq` and `FaqItem` components. In slot mode, set `indicatorPosition="end"` on every `FaqItem`, because the value on `Faq` does not flow into slotted children. When auditing, flag plain FAQ headings or custom accordion markup and convert each question/answer pair to an `FaqItem` while keeping the answer concise and component-specific. + A verified `### Known Limitations` subsection may live inside `## Troubleshooting` when the + limitations are directly related to the troubleshooting guidance; do not duplicate it as a + separate top-level section. 7. **Self-check against the rubric** before presenting — especially mode-bleed (C-checks) and metadata (D-checks). Fix, then deliver the `.mdx`. +### Category/index topics use a separate structure + +Do not apply the component-topic blueprint to a category or index page. A category overview is a +reference/navigation map, not a composite component page. Its structure is: + +Apply the common metadata contract to category/index topics as well. Their frontmatter must include +`title`, `description`, `keywords`, `license`, `last_updated`, `llms.description`, and +`mentionedTypes` when the xplat category references generated API types. The category `title` is +the plain category name only, without `{Platform}` or `{ProductName}` tokens; for example, +`title: "Grids and Tables"`. Keep platform and product tokens in the description, keywords, visible +heading, and prose where they are needed. Do not render `last_updated` as visible MDX text. + +1. `#` title followed by a concise introductory block: a clear category definition and, when needed, + brief context about its scope or purpose. +2. `## Key Features` immediately after the title and introductory block. Open with a short sentence, then present + the category's capabilities in a compact table with `Feature`, `Description`, and `Benefits` + columns when the content is naturally scannable. Use `## Types` or `## Members` as a top-level + navigation section when the category maps component types. Make `Types` the parent navigation + section and make each + concrete type, such as `{Platform} Data Grid`, `{Platform} List`, or `{Platform} Tree Grid`, a + separate navigable `###` subsection beneath it. Include a verified `` for every type + entry, together with a concise definition and verified link. Additional + feature groups can follow as subsections inside `Key Features`. +3. `## Next Steps`. +4. `## Accessibility`, with the same three verified subsections used by component topics. +5. `## API References`. +6. `## Additional Resources`. +7. `## FAQ`, using the shared Astro `Faq` and `FaqItem` components. + +Do not add component-only `When to Use`, `When Not to Use`, `Live Demo`, `Getting +Started`, `Usage`, `Properties`, `Accessibility`, or `Troubleshooting` sections +to the category introduction. Put selection guidance in the category definition or the relevant +type/member entry, and put each demo inside the entry it demonstrates. Supporting content such as +browser support, support options, licensing, and FAQ belongs after the navigation sections as +subsections of the page's main structure, not as additional top-level category sections. + ## Audit workflow 1. **Classify** the topic and identify its doc set (Angular vs xplat) and type. diff --git a/.ai/skills/igniteui-doc-topics/references/audit-rubric.md b/.ai/skills/igniteui-doc-topics/references/audit-rubric.md index 3e13348c57..c065d3f086 100644 --- a/.ai/skills/igniteui-doc-topics/references/audit-rubric.md +++ b/.ai/skills/igniteui-doc-topics/references/audit-rubric.md @@ -12,10 +12,24 @@ concrete rule below (structure, naming, Diátaxis mode, or metadata) and to a fi ## Checks +### Category/index exception +Classify the topic before applying the checks below. A category/index page is evaluated against the +category blueprint in `house-style.md`, not the component-topic checklist. Do not report missing +component sections such as `Live Demo`, `Getting Started`, or `Usage` +when the page follows a concise introductory block (a definition plus brief scope or purpose context, +when needed) and `Key Features` (with a short intro and a `Feature` / `Description` / +`Benefits` table) → top-level `Types/Members` section with each concrete type as its own +navigable `###` child subsection and a verified sample → `Next Steps` → `Accessibility` → +`API References` → `Additional Resources` → `FAQ`. Report component-topic sections such as `Live Demo`, +`Getting Started`, or `Properties` in the category introduction as information-architecture drift +instead. Do not require optional supporting sections when the category has no verified category-wide +content for them. + ### A. Structure & order - A1 (Error) A required section or subsection is missing (`## Live Demo`, Anatomy, Getting Started with `### Prerequisites and Version Compatibility`, Usage, Properties, Accessibility, - Known Limitations, API References, Dependencies, Additional Resources, Related Components, and + Known Limitations (as a top-level section or a `### Known Limitations` subsection under + `Troubleshooting`), API References, Dependencies, Additional Resources, Related Components, and FAQ on a component topic. **Troubleshooting** is conditional and is required only when the topic contains version-migration, deprecation, or legacy-setup notes.) - A2 (Warning) Sections are present but out of the canonical order. @@ -32,7 +46,8 @@ concrete rule below (structure, naming, Diátaxis mode, or metadata) and to a fi **When to use:** / **When not to use:** are written as nested headings instead of inline labels inside that subsection. - A8 (Warning) **Anatomy** is incomplete: missing its opening screenshot/GIF (or a `{/* TODO */}` - marker for a not-yet-available asset), or missing the verified DOM tree / skeleton. + marker for a not-yet-available asset), missing the shared Astro `` component, or missing + the verified DOM tree / skeleton. - A9 (Warning) **Accessibility** is missing one of its three required `###` sub-sections — **Keyboard Interaction**, **Screen Readers / ARIA**, **Accessibility Compliance** — or has them out of order. @@ -44,6 +59,8 @@ concrete rule below (structure, naming, Diátaxis mode, or metadata) and to a fi component-specific. - A12 (Warning) A slot-mode FAQ does not set `indicatorPosition="end"` on every ``; setting it only on `` does not affect slotted children. +- A13 (Warning) A component topic uses a hand-written anatomy image block instead of the shared + Astro `` component, or uses a hand-written sample iframe instead of ``. ### B. Naming - B1 (Warning) A heading uses a drifted name with a standard equivalent (see reconciliation table). @@ -103,11 +120,8 @@ Run the compass on each section; flag content that has drifted out of the sectio `https://www.infragistics.com/api/blazor`). Use typed source for implementation details not exposed by API docs, and official framework docs for framework/version behavior; if unverifiable, don't assert it. Existing topic snippets/prose are not sufficient proof. -- D10 (Error) A component topic is missing the required `last_updated` metadata, or is missing the - corresponding visible `**Last updated:** Month D, YYYY` line immediately after the lead paragraph, - uses a different placement or format, or duplicates the date elsewhere in the body. The visible - value must be generated from or match the `last_updated` metadata and must not be manually hard-coded - independently in the body. +- D10 (Error) A topic is missing the required `last_updated` metadata. The date must be stored in + frontmatter and rendered by the site layout; do not duplicate it as MDX/Markdown content. - D11 (Warning) **Voice/tone drift** — prose isn't imperative/second-person present tense, mixes first-person-plural narration ("we create") with how-to, or carries filler ("simply", "just") or marketing inside instructional prose. diff --git a/.ai/skills/igniteui-doc-topics/references/house-style.md b/.ai/skills/igniteui-doc-topics/references/house-style.md index 1a24d2c308..b214eb1ba5 100644 --- a/.ai/skills/igniteui-doc-topics/references/house-style.md +++ b/.ai/skills/igniteui-doc-topics/references/house-style.md @@ -33,6 +33,7 @@ license: MIT mentionedTypes: ["Rating"] # xplat: API types referenced on the page llms: description: "…" # AI-facing one-liner; the exact text an assistant uses to summarize +last_updated: "YYYY-MM-DD" # required for every topic; rendered by the site layout relatedComponents: [Toast, Banner] # TARGET field — drives the Usage Do/Don't trigger (see below) --- ``` @@ -45,11 +46,16 @@ relatedComponents: [Toast, Banner] # TARGET field — drives the Usage Do/Don' - **`relatedComponents`** is the revision-2 trigger and is **not yet in the repo**. When authoring to target, set it. When auditing, treat a missing-but-warranted value as a finding, and a set value with no **Usage** → **Do/Don't** guidance as a hard error. +- **`last_updated`** is required for every topic, including category/index topics. Store the date in + frontmatter and let the site layout render it. For xplat component topics, use the tokenized component title convention. For xplat + category/index topics, use the plain category name only, without `{Platform}` or `{ProductName}` + in `title` (for example, `title: "Grids and Tables"`). ### MDX imports (declare what you use) ```mdx import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; +import Anatomy from 'igniteui-astro-components/components/mdx/Anatomy.astro'; import { Image } from 'astro:assets'; // when embedding repo-owned images import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; import DocsAside from 'igniteui-astro-components/components/mdx/DocsAside.astro'; @@ -140,9 +146,9 @@ under **Usage**, never a new top-level section. | # | Section (`##`) | Required? | Diátaxis mode | Contents | |---|---|---|---|---| -| 1 | *Title + one-line definition* (`#` + lead ¶) | required | orient / reference | H1 is **`‹Component› Component`** — **no** framework prefix, **no** "Overview" suffix (the framework lives in the SEO `title`). Follow with one plain sentence: what it is, what problem it solves. Mirror `llms.description`. Every topic must render the visible `**Last updated:** Month D, YYYY` line immediately after the lead paragraph; do not place it in the H1 or duplicate it elsewhere in the body. | +| 1 | *Title + one-line definition* (`#` + lead ¶) | required | orient / reference | H1 is **`‹Component› Component`** — **no** framework prefix, **no** "Overview" suffix (the framework lives in the SEO `title`). Follow with one plain sentence: what it is, what problem it solves. Mirror `llms.description`. Every topic, including category/index topics, must contain `last_updated` in frontmatter; the date is rendered by the site layout and must not be added as visible topic text. | | 2 | **Live Demo** | required | demonstration (action) | A `## Live Demo` section containing exactly one `` of the simplest useful state, before **Anatomy**. Keep this section sample-only unless a one-sentence setup is truly needed. | -| 3 | **Anatomy** | required for component topics | orientation (reference) | Opens with a screenshot/GIF of the component's parts or the behavior being shown, then the **DOM tree / skeleton** (rendered elements, parts, slots). If the visual asset doesn't exist yet, leave a `{/* TODO */}` marker rather than a broken image, but still include the section and verified skeleton. | +| 3 | **Anatomy** | required for component topics | orientation (reference) | Use the shared Astro `` component with a verified anatomy image, `name`, `description`, and `alt`; follow it with the verified **DOM tree / skeleton** (rendered elements, parts, slots). If the visual asset doesn't exist yet, leave a `{/* TODO */}` marker rather than a broken image, but still include the section and verified skeleton. | | 4 | **Getting Started** | required | how-to | **Lead with the component-specific import/registration** and include the required `### Prerequisites and Version Compatibility` subsection for verified package, framework, and version guidance. Compress the generic library install to a **single prerequisite line linking the general getting-started topic**; **don't** repeat identical install boilerplate. Show the **current** registration first; put legacy setup after, marked as legacy. | | 5 | **Usage** | required | how-to + explanation | Add property-focused sub-sections that showcase every public input with a minimal snippet and, when a verified demo exists and adds visual value, a ``. Give standalone properties their own sub-section (`Shape`, not `Avatar Shape`); group only tightly coupled properties that form one behavior (for example, content-source priority such as `src`, `alt`, `initials`, and default slot content). The final Usage subsection must be `### Do/Don't`; it uses inline **When to use:** and **When not to use:** labels, not nested headings, and includes the matching guidance image from the Indigo.Design documentation or a `{/* TODO */}` marker when the asset is not available. Styling content belongs in **Styling**, not here. | | 6 | **Properties** | required | reference | Table: name · type · default · description. (Replaces "Configuration".) | @@ -151,7 +157,7 @@ under **Usage**, never a new top-level section. | 9 | **Styling** | required when applicable | how-to + reference | **Open with a `` of the styled result** + one intro line, then the **Styling Variables table** (**one table** — variable · what it changes; **no default-value column, no per-theme tabs**) and styleable-parts table. Subsections cover each approach — **first `### Sass Theming`** (the primary Sass theme workflow), then others (e.g. `### Tailwind`, `### Custom sizing`). All styling content lives here, not under Usage. | | 10 | **Accessibility** | required | reference | Three sub-sections, in order: **Keyboard Interaction** (key→action table), **Screen Readers / ARIA**, **Accessibility Compliance** (conformance evidence — see the sub-structure spec below). | | 11 | **Troubleshooting** | conditional (required when version-migration or legacy-setup notes exist) | how-to | Gotchas phrased as the reader's real question; answer as cause → fix. **Collect version-migration notes, deprecations, and legacy/alternative approaches here** — not buried in code-fence comments or scattered asides. | -| 12 | **Known Limitations** | required | reference | Verified platform-independent limitations and boundaries of the component. Do not use this section for troubleshooting fixes or unsupported claims. | +| 12 | **Known Limitations** | required | reference | Verified platform-independent limitations and boundaries of the component. Use a top-level section when standalone; when the limitations directly support troubleshooting guidance, place them as a `### Known Limitations` subsection inside `## Troubleshooting`. Do not use this content for troubleshooting fixes or unsupported claims. | | 13 | **API References** | required | reference | `` out to the full generated reference; don't duplicate it. | | 14 | **Dependencies** | required | reference | Themes, styles, or supporting components the component relies on to render or function — modules to import (Angular) or supporting components/themes (xplat). | | 15 | **Additional Resources** | required | navigation | Forums, GitHub, related topics. | @@ -293,8 +299,20 @@ Title + intro → **Overview** → **Before You Start** → **Next Steps** → * accordion for FAQ content when a compact question-and-answer block is useful. **5b. Category / index overview** (Diátaxis: *reference/navigation* — a map) — e.g. "Charts overview": -Title + intro → **Key Features** → **Types** (identical micro-structure per entry: one-line def + link + small -``) → **Next Steps** → **API References / Additional Resources**. +The page starts with an H1 and a concise introductory block: a clear category definition and, when +needed, brief context about its scope or purpose. Follow it with **Key Features** (open with a short intro and a compact `Feature` / `Description` / +`Benefits` table) → top-level **Types / Members** section when the category maps component +types. Each concrete type/member, such as `{Platform} Data Grid`, `{Platform} List`, or +`{Platform} Tree Grid`, is its own navigable `###` child subsection with a concise definition, +verified link, and a verified `` for every entry) → additional feature +subsections as needed → **Next Steps** → **Accessibility** → **API References** → **Additional Resources** → **FAQ**. + +The category introduction must not use the component-topic sequence `When to Use`, +`When Not to Use`, `Live Demo`, `Getting Started`, `Usage`, `Properties`, +`Accessibility`, or `Troubleshooting` in the category introduction. Selection guidance belongs in the +category definition or in the relevant type/member entry, and a demo belongs inside the entry it +demonstrates. Supporting sections follow the navigation sections and must contain verified, +category-specific content. Guardrails: cap each section at ~3 short paragraphs (else add sub-sections); isolate marketing copy in a single "Why {ProductName}" section — never thread it through instructional content. From 66a48edf82495d58c7dc65a0f6d37de1267e764f Mon Sep 17 00:00:00 2001 From: Ivan Minchev <61944284+IMinchev64@users.noreply.github.com> Date: Fri, 14 Aug 2026 16:51:20 +0300 Subject: [PATCH 10/38] feat(docs): update avatar xplat topic (#450) --- .../src/content/en/components/avatar.mdx | 298 --------- .../content/en/components/layouts/avatar.mdx | 296 +++++++++ .../src/content/en/components/list.mdx | 4 +- .../src/content/en/components/stepper.mdx | 2 +- .../themes/misc/angular-material-theming.mdx | 2 +- .../themes/misc/bootstrap-theming.mdx | 2 +- .../src/content/en/components/toc.json | 2 +- .../src/content/en/components/tooltip.mdx | 4 +- .../anatomy-content-light/avatar-lt-a.png | Bin 0 -> 151792 bytes .../content/en/images/avatar/avatar_do1.png | Bin 0 -> 1819 bytes .../en/images/avatar/avatar_do1@2x.png | Bin 0 -> 4563 bytes .../en/images/avatar/avatar_do_not1.png | Bin 0 -> 1828 bytes .../en/images/avatar/avatar_dont1@2x.png | Bin 0 -> 5374 bytes .../src/assets/images/avatar/avatar_do1.png | Bin 0 -> 1819 bytes .../assets/images/avatar/avatar_do1@2x.png | Bin 0 -> 4563 bytes .../assets/images/avatar/avatar_do_not1.png | Bin 0 -> 1828 bytes .../assets/images/avatar/avatar_dont1@2x.png | Bin 0 -> 5374 bytes .../content/en/components/layouts/avatar.mdx | 609 ++++++++++++++---- docs/xplat/src/content/en/toc.json | 3 +- package-lock.json | 151 +---- 20 files changed, 821 insertions(+), 552 deletions(-) delete mode 100644 docs/angular/src/content/en/components/avatar.mdx create mode 100644 docs/angular/src/content/en/components/layouts/avatar.mdx create mode 100644 docs/angular/src/content/en/images/anatomy-content-light/avatar-lt-a.png create mode 100644 docs/angular/src/content/en/images/avatar/avatar_do1.png create mode 100644 docs/angular/src/content/en/images/avatar/avatar_do1@2x.png create mode 100644 docs/angular/src/content/en/images/avatar/avatar_do_not1.png create mode 100644 docs/angular/src/content/en/images/avatar/avatar_dont1@2x.png create mode 100644 docs/xplat/src/assets/images/avatar/avatar_do1.png create mode 100644 docs/xplat/src/assets/images/avatar/avatar_do1@2x.png create mode 100644 docs/xplat/src/assets/images/avatar/avatar_do_not1.png create mode 100644 docs/xplat/src/assets/images/avatar/avatar_dont1@2x.png diff --git a/docs/angular/src/content/en/components/avatar.mdx b/docs/angular/src/content/en/components/avatar.mdx deleted file mode 100644 index a362e26b4d..0000000000 --- a/docs/angular/src/content/en/components/avatar.mdx +++ /dev/null @@ -1,298 +0,0 @@ ---- -title: Angular Avatar Component – Ignite UI for Angular | Infragistics | MIT license -description: Ignite UI for Angular Avatar control enables users to add images, material icons or initials within any application for instances such as a profile button. -keywords: Angular Avatar component, Angular Avatar control, Ignite UI for Angular, Angular UI components -license: MIT -llms: - description: "Angular Avatar component helps adding initials, images, or material icons to your application." ---- - -import DocsAside from 'igniteui-astro-components/components/mdx/DocsAside.astro'; -import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; -import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; - -# Angular Avatar Component Overview - -
-Angular Avatar component helps adding initials, images, or material icons to your application. -
- - -## Angular Avatar Example - - - -
- -## Getting Started with Ignite UI for Angular Avatar - -To get started with the Ignite UI for Angular Avatar component, first you need to install Ignite UI for Angular. In an existing Angular application, type the following command: - -```cmd -ng add igniteui-angular -``` - -For a complete introduction to the Ignite UI for Angular, read the [_getting started_](/general/getting-started) topic. - -The next step is to import the `IgxAvatarModule` in your **app.module.ts** file. - -```typescript -// app.module.ts - -... -import { IgxAvatarModule } from 'igniteui-angular/avatar'; -// import { IgxAvatarModule } from '@infragistics/igniteui-angular'; for licensed package - -@NgModule({ - ... - imports: [..., IgxAvatarModule], - ... -}) -export class AppModule {} -``` - -Alternatively, as of `16.0.0` you can import the `IgxAvatarComponent` as a standalone dependency. - -```typescript -// home.component.ts - -... -import { IgxAvatarComponent } from 'igniteui-angular/avatar'; -// import { IgxAvatarComponent } from '@infragistics/igniteui-angular'; for licensed package - -@Component({ - selector: 'app-home', - template: '', - styleUrls: ['home.component.scss'], - standalone: true, - imports: [IgxAvatarComponent] -}) -export class HomeComponent {} -``` - -Now that you have the Ignite UI for Angular Avatar module or component imported, you can start with a basic configuration of the `igx-avatar` component. - -## Using the Angular Avatar Component - -The Ignite UI for Angular Avatar component comes in three shapes (square, rounded, and circle) and three size options (small, medium, and large). It can be used for displaying initials, images or icons. - -### Avatar Shape - -We can change the avatar shape through the attribute setting its value to `square`, `rounded` or `circle`. By default, the shape of the avatar is `square`. - -```html - -``` - -### Avatar displaying initials - -To get a simple avatar with (i.e. JS for 'Jack Sock'), add the following code inside the component template: - -```html - -``` - -Let's enhance our avatar by making it circular and bigger in size. - -```html - -``` - -We can also change the background using the `--ig-avatar-background` CSS variable or set a color on the initials through the `color` property. - -```scss -// avatar.component.scss - -igx-avatar { - --ig-avatar-background: #e41c77; - color: #000000; -} - -``` - - -The `roundShape` property of the `igx-avatar` component have been deprecated. The attribute should be used instead. - - -If all went well, you should see something like the following in the browser: - - - -### Avatar displaying image - -To get an avatar that displays an image, all you have to do is set the image source via the property. - -```html - - -``` - - -If all went well, you should see something like the following in the browser: - - - -### Avatar displaying icon - -Analogically, the avatar can display an icon via the property. Currently all icons from the material icon set are supported. - -```html - - -``` - - -This component uses Material Icons. Add the following link to your `index.html`: `` - - -You should see something like this: - - - -## Styling - -### Avatar Theme Property Map - -Changing the `$background` property automatically updates the following dependent properties: - -| Primary Property | Dependent Property | Description | -| --- | --- | --- | -| **$background** | $color | The text color used for the avatar. | -| | $icon-color | The icon color used for the avatar. | - -To get started with styling the avatar, we need to import the `index` file, where all the theme functions and component mixins live: - -```scss -@use "igniteui-angular/theming" as *; - -// IMPORTANT: Prior to Ignite UI for Angular version 13 use: -// @import '~igniteui-angular/lib/core/styles/themes/index'; -``` - -Following the simplest approach, we create a new theme that extends the providing values for the `$background` and `$border-radius` parameters. The `$color` (or `$icon-color`) is automatically set to either black or white, depending on which offers better contrast with the specified background. Note that the `$border-radius` property only takes effect when the avatar's is set to `rounded`. - -Given the following markup: - -```html -
- - -
-``` - -We create the following avatar theme: - -```scss -$custom-avatar-theme: avatar-theme( - $background: #72da67, - $border-radius: 16px -); -``` - -The last step is to pass the custom avatar theme: - -```scss -.initials { - @include tokens($custom-avatar-theme); -} -``` - -If all went well, you should see something like the following in the browser: - - - -### Styling with Tailwind - -You can style the `avatar` using our custom Tailwind utility classes. Make sure to [set up Tailwind](/themes/misc/tailwind-classes) first. - -Along with the tailwind import in your global stylesheet, you can apply the desired theme utilities as follows: - -```scss -@import "tailwindcss"; -... -@use 'igniteui-theming/tailwind/utilities/material.css'; -``` - -The utility file includes both `light` and `dark` theme variants. - -- Use `light-*` classes for the light theme. -- Use `dark-*` classes for the dark theme. -- Append the component name after the prefix, e.g., `light-avatar`, `dark-avatar`. - -Once applied, these classes enable dynamic theme calculations. From there, you can override the generated CSS variables using `arbitrary properties`. After the colon, provide any valid CSS color format (HEX, CSS variable, RGB, etc.). - -You can find the full list of properties in the . The syntax is as follows: - -```html - - -``` - - -The exclamation mark(`!`) is required to ensure the utility class takes precedence. Tailwind applies styles in layers, and without marking these styles as important, they will get overridden by the component’s default theme. - - -At the end your avatar should look like this: - - - -### Custom sizing - -You can either use the `--size` variable, targeting the `igx-avatar` directly: - -```scss -igx-avatar { - --size: 200px; -} -``` - -Or you can use the universal `--ig-avatar-size` variable to target all instances: - -```html -
- - -
-``` - -```scss -.my-app { - --ig-avatar-size: 200px; -} -``` - -You can also use one of the predefined sizes, assigning it to the `--ig-size` variable, if theres no size attribute applied. The available values for `--ig-size` are `--ig-size-small`, `--ig-size-medium`, and `--ig-size-large`: - -```scss -igx-avatar { - --ig-size: var(--ig-size-small); -} -``` - -Learn more about it in the [Size](/display-density) article. - -
- -## API References -
-- -## Theming Dependencies - -- -- - -## Additional Resources - -
- -Our community is active and always welcoming to new ideas. - -- [Ignite UI for Angular **Forums**](https://www.infragistics.com/community/forums/f/ignite-ui-for-angular) -- [Ignite UI for Angular **GitHub**](https://github.com/IgniteUI/igniteui-angular) diff --git a/docs/angular/src/content/en/components/layouts/avatar.mdx b/docs/angular/src/content/en/components/layouts/avatar.mdx new file mode 100644 index 0000000000..89ca220df9 --- /dev/null +++ b/docs/angular/src/content/en/components/layouts/avatar.mdx @@ -0,0 +1,296 @@ +--- +title: "Angular Avatar Component | Layouts | Infragistics" +description: "Use the Angular Avatar component to represent users, entities, or objects with images, initials, icons, or custom content." +keywords: "Angular Avatar, avatar component, profile image, initials, Ignite UI for Angular, Infragistics" +last_updated: "2026-07-29" +license: MIT +mentionedTypes: ["Avatar", "Badge", "Icon"] +relatedComponents: ["Badge"] +llms: + description: "The Ignite UI for Angular Avatar topic shows how to render user, entity, or object identity with images, initials, icons, custom content, shape, size, styling, and accessibility guidance." +--- +import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; +import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; +import Anatomy from 'igniteui-astro-components/components/mdx/Anatomy.astro'; +import Faq from 'igniteui-astro-components/components/mdx/Faq.astro'; +import FaqItem from 'igniteui-astro-components/components/mdx/FaqItem.astro'; +import { Image } from 'astro:assets'; +import avatarAnatomy from '@xplat-images/anatomy-content-light/avatar-lt-a.png'; +import avatarDo from '@xplat-images/avatar/avatar_do1.png'; +import avatarDo2x from '@xplat-images/avatar/avatar_do1@2x.png'; +import avatarDoNot from '@xplat-images/avatar/avatar_do_not1.png'; +import avatarDoNot2x from '@xplat-images/avatar/avatar_dont1@2x.png'; + +# Avatar Component + +The Ignite UI for Angular Avatar represents a user, entity, or object with an image, initials, or custom content. + +Use the avatar to provide a compact visual identity in lists, cards, profile menus, and activity feeds. + +## Live Demo + + + +## Anatomy + +The avatar is a single host element that applies image semantics and renders one of the supported content patterns. + + + + + +1. Image container: Displays image content type.
+2. Icon container: Displays icon content type.
+3. Initials container: Displays text content type.
+ +```text +igx-avatar[role="img"] // host - exposes the avatar +└─ one of, by priority: + ├─ div.igx-avatar__image // `src` set - image painted as a background + ├─ igx-icon // `icon` set + ├─ span // `initials` set - first two characters + └─ ng-content // custom projected content +``` + +## Getting Started + +Import the Angular avatar component before you render ``. If you have not set up Ignite UI for Angular yet, complete the shared [Getting Started](../general/getting-started.mdx) topic first. + +```ts +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +``` + +## Usage + +Render an avatar with an image source, initials, or custom content in the default slot. + +### Variants + +Set only the content source you intend to show. The Angular avatar renders `src` first, then `icon`, then `initials`, and falls back to projected custom content when none of those inputs are set. + +```html + + + + + +``` + + + +### Shape + +Set to `square`, `rounded`, or `circle`. + +```html + +``` + + + +### Size + +Set `--ig-size` to one of the shared size tokens when you need a preset avatar size. + +```html + +``` + + + +### Do/Don't + +**When to use:** Use the avatar when a UI needs a small representation of a person, organization, object, or account, such as a profile image, initials, or an icon. Keep a consistent avatar strategy within the same UI region so repeated identities are easy to scan. + +**When not to use:** Use the [Badge](../inputs/badge.mdx) component when you need to show a count, status, or notification indicator instead of representing an entity. Badges can also decorate avatars when both identity and status need to appear together. + +
+ + + + + + + + + + + + + +
DoDon't
Angular Avatar do guidanceAngular Avatar don't guidance
+
+ +## Properties + +The avatar exposes a small set of inputs for its content and shape. + +| Name | Type | Default | Description | +| -- | -- | -- | -- | +| | `string` | n/a | Sets the icon rendered by the avatar. | +| | `string` | n/a | Sets text initials rendered by the avatar. | +| | `"square" \| "rounded" \| "circle"` | `"square"` | Sets the avatar shape. | +| | `"small" \| "medium" \| "large"` | `"small"` | Sets the avatar size. | +| | `string` | n/a | Sets the image source URL. | + +## Styling + + + +The avatar appearance is controlled through theme variables and platform-specific styling hooks. + +Use the avatar CSS variables for token-level changes and Angular host classes when you need to target a specific rendered type or shape. + +| Variable | What it changes | +| -- | -- | +| `--ig-avatar-background` | Avatar background color. | +| `--ig-avatar-color` | Text and initials color. | +| `--ig-avatar-icon-color` | Icon color. | +| `--ig-avatar-border-radius` | Border radius used by rounded avatars. | +| `--ig-avatar-size` | Avatar width and height. | +| `--ig-size` | Shared component size token used to derive preset avatar sizes. | + +| Selector | Description | +| -- | -- | +| `igx-avatar` | The avatar host element. | +| `.igx-avatar--rounded` | Applied when `shape` is `rounded`. | +| `.igx-avatar--circle` | Applied when `shape` is `circle`. | +| `.igx-avatar--image` | Applied when the avatar renders an image. | +| `.igx-avatar--icon` | Applied when the avatar renders an icon. | +| `.igx-avatar--initials` | Applied when the avatar renders initials. | +| `.igx-avatar__image` | The image avatar element. | + +### Sass Theming + +Use the function when your application customizes Ignite UI themes through Sass. + +```scss +@use "igniteui-theming/sass/themes" as *; + +$custom-avatar-theme: avatar-theme( + $background: #72da67, + $border-radius: 16px, + $size: 3rem +); + +:root { + @include tokens($custom-avatar-theme); +} +``` + +### CSS Variables + +Set component CSS variables directly when you need local styling without a Sass build step. + +```css +igx-avatar { + --ig-avatar-background: var(--ig-success-500); + --ig-avatar-color: var(--ig-success-500-contrast); + --ig-avatar-border-radius: 20px; +} +``` + +### Styling with Tailwind + +Use the Angular Tailwind utility syntax when your application styles Ignite UI components through Tailwind classes. + + + +## Accessibility + +The avatar is a non-interactive identity visual with accessible image semantics. + +### Keyboard Interaction + +The avatar does not receive focus and has no keyboard interaction. + +| Key | Action | +| -- | -- | +| n/a | The avatar is not keyboard interactive. | + +### Screen Readers / ARIA + +The avatar initializes with image semantics and a default accessible label of `avatar`. + +- Use surrounding text to identify the represented person, entity, or object when an image avatar conveys identity. +- Treat decorative avatars as redundant when adjacent text already identifies the same entity. + +### Accessibility Compliance + +Infragistics documents Ignite UI for Angular accessibility support for Section 508 and WCAG 2.1 guideline areas in the [Accessibility Compliance](../interactivity/accessibility-compliance.mdx) topic. + +| Criterion | How the component complies | +| -- | -- | +| [1.1.1 Non-text Content](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content) | The avatar has an accessible label and can be paired with surrounding text that identifies the represented entity. | +| [4.1.2 Name, Role, Value](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value) | The component initializes with `role="img"` and a default accessible label. | + +Your responsibilities: + +- Keep sufficient contrast between the avatar background and text or icon color when overriding styles. +- Avoid duplicating the same identity announcement when adjacent text already names the person or entity. + +- Make sure nearby text identifies the represented entity when the avatar image conveys identity. + +## Troubleshooting + +Use this section to check boundaries and common decisions before treating Avatar as an interactive or status component. + +### Known Limitations + +The avatar is a visual identity primitive and does not add interaction, status, or notification behavior by itself. + +- Use an interactive container, such as a button or list item, when the represented entity must be clickable. +- Use a badge with the avatar when you need to show status, counts, or notification indicators. + +## API References + +Use these API references for the complete avatar API surface. + + + +## Dependencies + +The Sass styling workflow uses the and APIs. + +## Additional Resources + +Use these resources for support and related Ignite UI documentation. + +- [Ignite UI for Angular **Forums**](https://www.infragistics.com/community/forums/f/ignite-ui-for-angular) +- [Ignite UI for Angular **GitHub**](https://github.com/IgniteUI/igniteui-angular) + +## Related Components + +Use these related components when identity needs to be combined with status, actions, or richer layout. + +- [Badge](../inputs/badge.mdx) - Use Badge to show counts, status, or notification indicators. Badge can decorate Avatar when the UI needs both identity and status. + +## FAQ + + + + Use Avatar when the UI needs to represent a person, account, organization, or object. Use Badge when the UI needs to show a count, status, or notification indicator. + + + + No. Avatar is non-interactive and does not receive focus by itself. Put it inside an interactive component when the represented entity needs an action. + + + + Provide meaningful alternative text when the avatar image identifies a specific entity. Avoid repeating the same identity when adjacent text already names that entity. + + diff --git a/docs/angular/src/content/en/components/list.mdx b/docs/angular/src/content/en/components/list.mdx index c8d30218f8..9291575d95 100644 --- a/docs/angular/src/content/en/components/list.mdx +++ b/docs/angular/src/content/en/components/list.mdx @@ -17,7 +17,7 @@ The Ignite UI for Angular List component displays rows of items and supports one ## Angular List Example -The following example represents a list populated with contacts with a _name_ and a _phone number_ properties. The component uses [`igx-avatar`](/avatar) and [`igx-icon`](/icon) to enrich the user experience and expose the capabilities of setting avatar picture and different icon for _favorite a contact_. In addition, the List View expose sorting capabilities achieved by using our filtering pipe. +The following example represents a list populated with contacts with a _name_ and a _phone number_ properties. The component uses [`igx-avatar`](layouts/avatar.mdx) and [`igx-icon`](/icon) to enrich the user experience and expose the capabilities of setting avatar picture and different icon for _favorite a contact_. In addition, the List View expose sorting capabilities achieved by using our filtering pipe. @@ -210,7 +210,7 @@ After all that our Angular list should now look like that: ### Adding Avatar and Icons -We can use some of our other components in conjunction with the component to enrich the experience and add some functionality. We can have a nice picture avatar to the left of the name and phone values. Additionally, we can add a star icon to the right of them to allow the user to favorite a contact. To do that let's grab the [**IgxAvatar**](/avatar) and [**IgxIcon**](/icon) modules and import them in our app.module.ts file. +We can use some of our other components in conjunction with the component to enrich the experience and add some functionality. We can have a nice picture avatar to the left of the name and phone values. Additionally, we can add a star icon to the right of them to allow the user to favorite a contact. To do that let's grab the [**IgxAvatar**](layouts/avatar.mdx) and [**IgxIcon**](/icon) modules and import them in our app.module.ts file. ```typescript // app.module.ts diff --git a/docs/angular/src/content/en/components/stepper.mdx b/docs/angular/src/content/en/components/stepper.mdx index 55f11b5347..f68d0fa975 100644 --- a/docs/angular/src/content/en/components/stepper.mdx +++ b/docs/angular/src/content/en/components/stepper.mdx @@ -261,7 +261,7 @@ When the orientation is set to vertical layout the title position by default is If you want to display only indicators for the steps, set the option to `indicator`. -The step indicator supports any content, however with the restriction that its size would be always **24 pixels**. Having this in mind, we recommend using [IgxIconComponent](/icon) or [IgxAvatarComponent](/avatar) as step indicators. +The step indicator supports any content, however with the restriction that its size would be always **24 pixels**. Having this in mind, we recommend using [IgxIconComponent](/icon) or [IgxAvatarComponent](layouts/avatar.mdx) as step indicators. **Title** diff --git a/docs/angular/src/content/en/components/themes/misc/angular-material-theming.mdx b/docs/angular/src/content/en/components/themes/misc/angular-material-theming.mdx index 048e551909..d5f1885a78 100644 --- a/docs/angular/src/content/en/components/themes/misc/angular-material-theming.mdx +++ b/docs/angular/src/content/en/components/themes/misc/angular-material-theming.mdx @@ -414,7 +414,7 @@ Related topics: - [Palettes](../sass/palettes.mdx) - [Component Themes](../sass/component-themes.mdx) - [Typography](../sass/typography.mdx) -- [Avatar Component](../../avatar.mdx) +- [Avatar Component](../../layouts/avatar.mdx) - [Button Component](../../button.mdx) - [Dialog Component](../../dialog.mdx) - [Icon Component](../../icon.mdx) diff --git a/docs/angular/src/content/en/components/themes/misc/bootstrap-theming.mdx b/docs/angular/src/content/en/components/themes/misc/bootstrap-theming.mdx index 27282e7fd7..687791b0b3 100644 --- a/docs/angular/src/content/en/components/themes/misc/bootstrap-theming.mdx +++ b/docs/angular/src/content/en/components/themes/misc/bootstrap-theming.mdx @@ -367,7 +367,7 @@ Ignite UI for Angular exposes four default type scales for each of its themes, w - [Palettes](/themes/sass/palettes) - [Component Themes](/themes/sass/component-themes) - [Typography](/themes/sass/typography) -- [Avatar Component](/avatar) +- [Avatar Component](../../layouts/avatar.mdx) - [Button Component](/button) - [Dialog Component](/dialog) - [Icon Component](/icon) diff --git a/docs/angular/src/content/en/components/toc.json b/docs/angular/src/content/en/components/toc.json index 796c2396b8..056691d8fc 100644 --- a/docs/angular/src/content/en/components/toc.json +++ b/docs/angular/src/content/en/components/toc.json @@ -2193,7 +2193,7 @@ }, { "name": "Avatar", - "href": "avatar.mdx" + "href": "layouts/avatar.mdx" }, { "name": "Expansion Panel", diff --git a/docs/angular/src/content/en/components/tooltip.mdx b/docs/angular/src/content/en/components/tooltip.mdx index 51fdaea73c..5a2eb9de05 100644 --- a/docs/angular/src/content/en/components/tooltip.mdx +++ b/docs/angular/src/content/en/components/tooltip.mdx @@ -86,7 +86,7 @@ Now that you have the Ignite UI for Angular Tooltip module or directives importe ## Using the Angular Tooltip -Let's say we want to create a simple text tooltip like the one above. In our case, we're using our awesome [`IgxAvatar`](/avatar) as the element, so we start by importing the `IgxAvatarModule` first. +Let's say we want to create a simple text tooltip like the one above. In our case, we're using our awesome [`IgxAvatar`](layouts/avatar.mdx) as the element, so we start by importing the `IgxAvatarModule` first. ```typescript // app.module.ts @@ -162,7 +162,7 @@ If everything went well, you should see the sample shown in the [Tooltip Demo](# The content can be more than just simple text. Since the tooltip itself is a regular element in the markup, you can enhance its content by adding any elements you need and styling them accordingly. -Let's expand on the use of the and use it to provide more details for a specific location on a map! We'll use a simple div to represent our map, the [`IgxAvatar`](/avatar) for a logo in our tooltip and the [`IgxIcon`](/icon) for the location icon on our map. For this purpose, we will get their respective modules. +Let's expand on the use of the and use it to provide more details for a specific location on a map! We'll use a simple div to represent our map, the [`IgxAvatar`](layouts/avatar.mdx) for a logo in our tooltip and the [`IgxIcon`](/icon) for the location icon on our map. For this purpose, we will get their respective modules. ```typescript // app.module.ts diff --git a/docs/angular/src/content/en/images/anatomy-content-light/avatar-lt-a.png b/docs/angular/src/content/en/images/anatomy-content-light/avatar-lt-a.png new file mode 100644 index 0000000000000000000000000000000000000000..628c84a4d5b05057f03adcbc2eb724a98cae6ada GIT binary patch literal 151792 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

5SvUZ#&Q7qkzfr0tu^8;eyn-DV^9 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 I;*ITfMbbF7+-9z&Tvr;=5pv5l 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 Ud6ou5fBCmT4`QrUtLcpRFI!i&bpQYW literal 0 HcmV?d00001 diff --git a/docs/angular/src/content/en/images/avatar/avatar_do_not1.png b/docs/angular/src/content/en/images/avatar/avatar_do_not1.png new file mode 100644 index 0000000000000000000000000000000000000000..6d51576c235b8bbd74333609ded4f36cce167a79 GIT binary patch literal 1828 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 Ud6ou5fBCmT4`QrUtLcpRFI!i&bpQYW literal 0 HcmV?d00001 diff --git a/docs/xplat/src/assets/images/avatar/avatar_do_not1.png b/docs/xplat/src/assets/images/avatar/avatar_do_not1.png new file mode 100644 index 0000000000000000000000000000000000000000..6d51576c235b8bbd74333609ded4f36cce167a79 GIT binary patch literal 1828 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 + + + -## Usage + + - + +## Anatomy -First, you need to install the {ProductName} npm package by running the following command: +The avatar is a single host element that applies image semantics and renders one of the supported content patterns. -```cmd -npm install {PackageWebComponents} -``` + - + +1. Image container: Displays image content type.
+2. Icon container: Displays icon content type.
+3. Initials container: Displays text content type.
- + +```text +igc-avatar[role="img"] // host - exposes the avatar +└─ div[part="base"] // avatar wrapper + ├─ span[part="initials"] // rendered when `initials` is set + ├─ slot // rendered when `initials` is not set + └─ img[part="image"] // rendered while `src` is set and loads +``` + -First, you need to the install the corresponding {ProductName} npm package by running the following command: + -```cmd -npm install igniteui-react +```text +igx-avatar[role="img"] // host - exposes the avatar +└─ one of, by priority: + ├─ div.igx-avatar__image // `src` set - image painted as a background + ├─ igx-icon // `icon` set + ├─ span // `initials` set - first two characters + └─ ng-content // custom projected content ``` -You will then need to import the and its necessary CSS, like so: + -```tsx -import { IgrAvatar } from 'igniteui-react'; -import 'igniteui-webcomponents/themes/light/bootstrap.css'; -``` +## Getting Started + + +Register the avatar component before you use it. If you have not set up {ProductName} yet, complete the shared [Getting Started](../general-getting-started.mdx) topic first. + +```ts +import { defineComponents, IgcAvatarComponent } from 'igniteui-webcomponents'; + +defineComponents(IgcAvatarComponent); +``` + -Before using the , you need to register it as follows: +Import the Angular avatar component before you render ``. If you have not set up {ProductName} yet, complete the shared [Getting Started](../general/getting-started.mdx) topic first. +```ts +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +``` - + -```csharp -// in Program.cs file + -builder.Services.AddIgniteUIBlazor(typeof(IgbAvatarModule)); +Import the React wrapper and theme stylesheet before you render the avatar. If you have not set up {ProductName} yet, complete the shared [Getting Started](../general-getting-started.mdx) topic first. + +```tsx +import { IgrAvatar } from 'igniteui-react'; +import 'igniteui-webcomponents/themes/light/bootstrap.css'; ``` +Register the avatar module in `Program.cs` and add the theme stylesheet to your host page. If you have not set up {ProductName} yet, complete the shared [Getting Started](../general-getting-started.mdx) topic first. - -You will also need to link an additional CSS file to apply the styling to the component. The following needs to be placed in the **wwwroot/index.html** file in a **Blazor Web Assembly** project or the **Pages/_Host.cshtml** file in a **Blazor Server** project: +```csharp +builder.Services.AddIgniteUIBlazor(typeof(IgbAvatarModule)); +``` ```razor ``` + + +## Usage + +Render an avatar with an image source, initials, or custom content in the default slot. + +### Variants + + + +Set only the content source you intend to show. The avatar renders when they are set, otherwise it renders default slot content, and it also renders an image element while is set and loads successfully. + + +Set only the content source you intend to show. The Angular avatar renders `src` first, then `icon`, then `initials`, and falls back to projected custom content when none of those inputs are set. + + -```ts -import { defineComponents, IgcAvatarComponent } from 'igniteui-webcomponents'; +```html + -defineComponents(IgcAvatarComponent); + + + + + + ``` -For a complete introduction to the {ProductName}, read the [**Getting Started**](../general-getting-started.mdx) topic. + -The is capable of displaying images, initials, or any other content, including icons. Declaring an is as simple as: +```html + - + -```html - + ``` @@ -111,7 +192,16 @@ The is capable of displaying images, initia ```tsx - + + + + + + + ``` @@ -119,19 +209,47 @@ The is capable of displaying images, initia ```razor - + + + + + + + ``` -The avatar has several attributes that allow rendering different content based on the context. The most basic way to display content in the boundaries of the avatar is to provide content between the opening and closing tags. + + + + + + + + + + + + +### Shape + +Set to `square`, `rounded`, or `circle`. ```html - - - + +``` + + + + + +```html + ``` @@ -139,9 +257,7 @@ The avatar has several attributes that allow rendering different content based o ```tsx - - - + ``` @@ -149,157 +265,402 @@ The avatar has several attributes that allow rendering different content based o ```razor - - - + ``` -### Initials + -If the attribute is set all children elements of the avatar will be ignored and the string passed to this attribute will be displayed. + - + -```html - + - - - + + + + +### Size + +Set `--ig-size` to one of the shared size tokens when you need a preset avatar size. + + + +```css +igc-avatar { + --ig-size: var(--ig-size-large); +} ``` - + -```tsx - - - +```html + ``` - + -```razor - + - - - -``` + + + + + - +### Do/Don't +**When to use:** Use the avatar when a UI needs a small representation of a person, organization, object, or account, such as a profile image, initials, or an icon. Keep a consistent avatar strategy within the same UI region so repeated identities are easy to scan. + +**When not to use:** Use the [Badge](../inputs/badge.mdx) component when you need to show a count, status, or notification indicator instead of representing an entity. Badges can also decorate avatars when both identity and status need to appear together. -### Image + -The avatar can also display an image when the attribute is assigned a valid URL to a static asset. In that case the value will be ignored and children elements will not be rendered. + - +**When not to use:** Use the [Badge](../inputs/badge.mdx) component when you need to show a count, status, or notification indicator instead of representing an entity. Badges can also decorate avatars when both identity and status need to appear together. -```html - - - -``` + + +

+ + + + + + + + + + + + + +
DoDon't
{Platform} Avatar do guidance{Platform} Avatar don't guidance
+
+ +## Properties + +The avatar exposes a small set of inputs for its content and shape. + + + +| Name | Type | Default | Description | +| -- | -- | -- | -- | +| | `string` | n/a | Sets alternative text for the image avatar. | +| | `string` | n/a | Sets text initials rendered when no image is displayed. | +| | `"square" \| "rounded" \| "circle"` | `"square"` | Sets the avatar shape. | +| | `string` | n/a | Sets the image source URL. | - + -```tsx - - - -``` +| Name | Type | Default | Description | +| -- | -- | -- | -- | +| | `string` | n/a | Sets the icon rendered by the avatar. | +| | `string` | n/a | Sets text initials rendered by the avatar. | +| | `"square" \| "rounded" \| "circle"` | `"square"` | Sets the avatar shape. | +| | `"small" \| "medium" \| "large"` | `"small"` | Sets the avatar size. | +| | `string` | n/a | Sets the image source URL. | +## Styling - + -```razor - - - -``` + - + + + -### Shape +The avatar appearance is controlled through theme variables and platform-specific styling hooks. -The avatar supports three shapes - `circle`, `rounded`, and `square`. The default shape of the avatar is `square` and it can be changed via the attribute. + - +Use the avatar CSS variables for token-level changes and CSS parts when you need to target the rendered wrapper, image, icon, or initials. +| Variable | What it changes | +| -- | -- | +| `--ig-avatar-background` | Avatar background color. | +| `--ig-avatar-color` | Text and initials color. | +| `--ig-avatar-icon-color` | Slotted icon color. | +| `--ig-avatar-border-radius` | Border radius used by rounded avatars. | +| `--ig-avatar-size` | Avatar width and height. | +| `--ig-size` | Shared component size token used to derive preset avatar sizes. | +| CSS Part | Description | +| -- | -- | +| `base` | The avatar wrapper. | +| `icon` | The icon wrapper. | +| `initials` | The initials wrapper. | +| `image` | The image element. | + -### Size + + +Use the avatar CSS variables for token-level changes and Angular host classes when you need to target a specific rendered type or shape. + +| Variable | What it changes | +| -- | -- | +| `--ig-avatar-background` | Avatar background color. | +| `--ig-avatar-color` | Text and initials color. | +| `--ig-avatar-icon-color` | Icon color. | +| `--ig-avatar-border-radius` | Border radius used by rounded avatars. | +| `--ig-avatar-size` | Avatar width and height. | +| `--ig-size` | Shared component size token used to derive preset avatar sizes. | + +| Selector | Description | +| -- | -- | +| `igx-avatar` | The avatar host element. | +| `.igx-avatar--rounded` | Applied when `shape` is `rounded`. | +| `.igx-avatar--circle` | Applied when `shape` is `circle`. | +| `.igx-avatar--image` | Applied when the avatar renders an image. | +| `.igx-avatar--icon` | Applied when the avatar renders an icon. | +| `.igx-avatar--initials` | Applied when the avatar renders initials. | +| `.igx-avatar__image` | The image avatar element. | -Apart from the shape, the size of the avatar can also be changed by utilizing the `--ig-size` CSS variable. The supported sizes are `small` (default), `medium`, and `large`. The following code snippet shows how to use a different component size: + -```css -igc-avatar { - --ig-size: var(--ig-size-large); -} -``` +### Sass Theming - +Use the function when your application customizes Ignite UI themes through Sass. +```scss +@use "igniteui-theming/sass/themes" as *; +$custom-avatar-theme: avatar-theme( + $background: #72da67, + $border-radius: 16px, + $size: 3rem +); +:root { + @include tokens($custom-avatar-theme); +} +``` -### Styling +### CSS Variables -The component exposes several CSS parts, giving you full control over its style: +Set component CSS variables directly when you need local styling without a Sass build step. -|Name|Description| -|--|--| -| `base` | The base wrapper of the avatar. | -| `initials` | The initials wrapper of the avatar. | -| `image` | The image wrapper of the avatar. | -| `icon` | The icon wrapper of the avatar. | + ```css igc-avatar { --ig-avatar-background: var(--ig-success-500); + --ig-avatar-color: var(--ig-success-500-contrast); + --ig-avatar-border-radius: 20px; } igc-avatar::part(base) { - --size: 60px; - color: var(--ig-success-500-contrast); - border-radius: 20px; + border: 2px solid var(--ig-success-700); +} +``` + + + + + +```css +igx-avatar { + --ig-avatar-background: var(--ig-success-500); + --ig-avatar-color: var(--ig-success-500-contrast); + --ig-avatar-border-radius: 20px; } ``` - + + +### Styling with Tailwind + + +Use Tailwind utility classes with the {ProductName} Avatar when you need utility-first layout styling together with Ignite UI component tokens. + + + + + + + +Use the Angular Tailwind utility syntax when your application styles Ignite UI components through Tailwind classes. + + + + + +## Accessibility + +The avatar is a non-interactive identity visual with accessible image semantics. + +### Keyboard Interaction + +The avatar does not receive focus and has no keyboard interaction. + +| Key | Action | +| -- | -- | +| n/a | The avatar is not keyboard interactive. | + +### Screen Readers / ARIA + +The avatar initializes with image semantics and a default accessible label of `avatar`. + + + +- Set `alt` when a `src` image represents a specific person, entity, or object. +- Add an explicit `aria-label` when projected custom content needs a different accessible name. +- Treat decorative avatars as redundant when adjacent text already identifies the same entity. + + + + + +- Use surrounding text to identify the represented person, entity, or object when an image avatar conveys identity. +- Treat decorative avatars as redundant when adjacent text already identifies the same entity. + + +### Accessibility Compliance +Infragistics documents {ProductName} accessibility support for Section 508 and WCAG 2.1 guideline areas in the [Accessibility Compliance](../interactivity/accessibility-compliance.mdx) topic. + + + +| Criterion | How the component complies | +| -- | -- | +| [1.1.1 Non-text Content](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content) | The avatar has an accessible label, and image avatars can receive specific alternative text through `alt`. | +| [4.1.2 Name, Role, Value](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value) | The component initializes with image semantics and exposes content-related ARIA information. | + + + + + +| Criterion | How the component complies | +| -- | -- | +| [1.1.1 Non-text Content](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content) | The avatar has an accessible label and can be paired with surrounding text that identifies the represented entity. | +| [4.1.2 Name, Role, Value](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value) | The component initializes with `role="img"` and a default accessible label. | + + + +Your responsibilities: + +- Keep sufficient contrast between the avatar background and text or icon color when overriding styles. +- Avoid duplicating the same identity announcement when adjacent text already names the person or entity. + + + +- Provide a descriptive label or `alt` text when the avatar conveys identity. + + + + + +- Make sure nearby text identifies the represented entity when the avatar image conveys identity. + + + +## Troubleshooting + +Use this section to check boundaries and common decisions before treating Avatar as an interactive or status component. + +### Known Limitations + +The avatar is a visual identity primitive and does not add interaction, status, or notification behavior by itself. + +- Use an interactive container, such as a button or list item, when the represented entity must be clickable. +- Use a badge with the avatar when you need to show status, counts, or notification indicators. ## API References + +Use these API references for the complete avatar API surface. + + + + + + + + + + + + + + +## Dependencies + + + +Slotted icons require the component to be registered or imported. + + + + + +The avatar also uses the shared theme stylesheet for its default appearance. + + + + + +The Sass styling workflow uses the and APIs. + + + ## Additional Resources +Use these resources for support and related Ignite UI documentation. + - [{ProductName} **Forums**]({ForumsLink}) - [{ProductName} **GitHub**]({GithubLink}) + +## Related Components + +Use these related components when identity needs to be combined with status, actions, or richer layout. + + + +- [Badge](../inputs/badge.mdx) - Use Badge to show counts, status, or notification indicators. Badge can decorate Avatar when the UI needs both identity and status. + + + + + +- [Badge](../inputs/badge.mdx) - Use Badge to show counts, status, or notification indicators. Badge can decorate Avatar when the UI needs both identity and status. + + + +## FAQ + + + + Use Avatar when the UI needs to represent a person, account, organization, or object. Use Badge when the UI needs to show a count, status, or notification indicator. + + + + No. Avatar is non-interactive and does not receive focus by itself. Put it inside an interactive component when the represented entity needs an action. + + + + Provide meaningful alternative text when the avatar image identifies a specific entity. Avoid repeating the same identity when adjacent text already names that entity. + + diff --git a/docs/xplat/src/content/en/toc.json b/docs/xplat/src/content/en/toc.json index 3d607d7a76..2d3207de85 100644 --- a/docs/xplat/src/content/en/toc.json +++ b/docs/xplat/src/content/en/toc.json @@ -2223,7 +2223,8 @@ }, { "name": "Avatar", - "href": "layouts/avatar.mdx" + "href": "layouts/avatar.mdx", + "updated": true }, { "exclude": [ diff --git a/package-lock.json b/package-lock.json index 53a81a8c13..0091fc92d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1752,9 +1752,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1771,9 +1768,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1790,9 +1784,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1809,9 +1800,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1828,9 +1816,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1847,9 +1832,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1866,9 +1848,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1885,9 +1864,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1904,9 +1880,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1929,9 +1902,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1954,9 +1924,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1979,9 +1946,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -2004,9 +1968,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -2029,9 +1990,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -2054,9 +2012,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -2079,9 +2034,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -2455,6 +2407,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2475,6 +2428,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2495,6 +2449,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2515,6 +2470,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2535,9 +2491,7 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2558,9 +2512,7 @@ "cpu": [ "arm" ], - "libc": [ - "musl" - ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2581,9 +2533,7 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2604,9 +2554,7 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2627,9 +2575,7 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2650,9 +2596,7 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2673,6 +2617,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2693,6 +2638,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2819,9 +2765,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2835,9 +2778,6 @@ "cpu": [ "arm" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2851,9 +2791,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2867,9 +2804,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2883,9 +2817,6 @@ "cpu": [ "loong64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2899,9 +2830,6 @@ "cpu": [ "loong64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2915,9 +2843,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2931,9 +2856,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2947,9 +2869,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2963,9 +2882,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2979,9 +2895,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2995,9 +2908,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3011,9 +2921,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6004,7 +5911,6 @@ "cpu": [ "arm" ], - "libc": "glibc", "license": "MIT", "optional": true, "os": [ @@ -6021,7 +5927,6 @@ "cpu": [ "arm64" ], - "libc": "glibc", "license": "MIT", "optional": true, "os": [ @@ -6038,7 +5943,6 @@ "cpu": [ "arm" ], - "libc": "musl", "license": "MIT", "optional": true, "os": [ @@ -6055,7 +5959,6 @@ "cpu": [ "arm64" ], - "libc": "musl", "license": "MIT", "optional": true, "os": [ @@ -6072,7 +5975,6 @@ "cpu": [ "riscv64" ], - "libc": "musl", "license": "MIT", "optional": true, "os": [ @@ -6089,7 +5991,6 @@ "cpu": [ "x64" ], - "libc": "musl", "license": "MIT", "optional": true, "os": [ @@ -6106,7 +6007,6 @@ "cpu": [ "riscv64" ], - "libc": "glibc", "license": "MIT", "optional": true, "os": [ @@ -6123,7 +6023,6 @@ "cpu": [ "x64" ], - "libc": "glibc", "license": "MIT", "optional": true, "os": [ @@ -9128,6 +9027,7 @@ "!riscv64", "!x64" ], + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -9141,6 +9041,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9157,6 +9058,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9173,6 +9075,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9189,6 +9092,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9205,6 +9109,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9221,6 +9126,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9237,7 +9143,7 @@ "cpu": [ "arm" ], - "libc": "glibc", + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9254,7 +9160,7 @@ "cpu": [ "arm64" ], - "libc": "glibc", + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9271,7 +9177,7 @@ "cpu": [ "arm" ], - "libc": "musl", + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9288,7 +9194,7 @@ "cpu": [ "arm64" ], - "libc": "musl", + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9305,7 +9211,7 @@ "cpu": [ "riscv64" ], - "libc": "musl", + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9322,7 +9228,7 @@ "cpu": [ "x64" ], - "libc": "musl", + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9339,7 +9245,7 @@ "cpu": [ "riscv64" ], - "libc": "glibc", + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9356,7 +9262,7 @@ "cpu": [ "x64" ], - "libc": "glibc", + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9370,6 +9276,7 @@ "version": "1.100.0", "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.100.0.tgz", "integrity": "sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==", + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9389,6 +9296,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9405,6 +9313,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ From 2eeb5dcfac2fd37c4f579471b2c7b9daf82c7030 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2026 14:05:55 +0000 Subject: [PATCH 11/38] jp-sync: update Avatar docs for PR#450 (avatar topic moved to layouts/) - Remove components/avatar.mdx (mirrors EN removal) - Add components/layouts/avatar.mdx (new comprehensive avatar topic, translated to Japanese) - Update components/toc.json: Avatar href changed from avatar.mdx to layouts/avatar.mdx - Update components/list.mdx: avatar links updated to layouts/avatar.mdx - Update components/stepper.mdx: avatar link updated to layouts/avatar.mdx - Update components/themes/misc/angular-material-theming.mdx: avatar link updated - Update components/themes/misc/bootstrap-theming.mdx: avatar link updated - Update components/tooltip.mdx: avatar links updated to layouts/avatar.mdx Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../src/content/jp/components/avatar.mdx | 299 ------------------ .../content/jp/components/layouts/avatar.mdx | 297 +++++++++++++++++ .../src/content/jp/components/list.mdx | 4 +- .../src/content/jp/components/stepper.mdx | 2 +- .../themes/misc/angular-material-theming.mdx | 2 +- .../themes/misc/bootstrap-theming.mdx | 2 +- .../src/content/jp/components/toc.json | 2 +- .../src/content/jp/components/tooltip.mdx | 4 +- 8 files changed, 305 insertions(+), 307 deletions(-) delete mode 100644 docs/angular/src/content/jp/components/avatar.mdx create mode 100644 docs/angular/src/content/jp/components/layouts/avatar.mdx diff --git a/docs/angular/src/content/jp/components/avatar.mdx b/docs/angular/src/content/jp/components/avatar.mdx deleted file mode 100644 index dd2ca84643..0000000000 --- a/docs/angular/src/content/jp/components/avatar.mdx +++ /dev/null @@ -1,299 +0,0 @@ ---- -title: Angular Avatar コンポーネント - MITライセンス -description: Ignite UI for Angular の Avatar コントロールは、プロファイル ボタンなどのアプリケーションのインスタンスに画像、マテリアル アイコン、またはイニシャルを追加できます。 -keywords: Angular Avatar コンポーネント, Angular Avatar コントロール, Ignite UI for Angular, Angular UI コンポーネント -license: MIT -_language: ja -llms: - description: "Ignite UI for Angular の Avatar コントロールは、プロファイル ボタンなどのアプリケーションのインスタンスに画像、マテリアル アイコン、またはイニシャルを追加できます。" ---- - -import DocsAside from 'igniteui-astro-components/components/mdx/DocsAside.astro'; -import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; -import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; - -# Angular Avatar (アバター) コンポーネントの概要 - -
-Angular Avatar component helps adding initials, images, or material icons to your application. -
- - -## Angular Avatar の例 - - - -
- -## Ignite UI for Angular Avatar を使用した作業の開始 - -Ignite UI for Angular Avatar コンポーネントを使用した作業を開始するには、Ignite UI for Angular をインストールする必要があります。既存の Angular アプリケーションで、以下のコマンドを入力します。 - -```cmd -ng add igniteui-angular -``` - -Ignite UI for Angular については、「[はじめに](/general/getting-started)」トピックをご覧ください。 - -次に、**app.module.ts** ファイルに `IgxAvatarModule` をインポートします。 - -```typescript -// app.module.ts - -... -import { IgxAvatarModule } from 'igniteui-angular/avatar'; -// import { IgxAvatarModule } from '@infragistics/igniteui-angular'; for licensed package - -@NgModule({ - ... - imports: [..., IgxAvatarModule], - ... -}) -export class AppModule {} -``` - -あるいは、`16.0.0` 以降、`IgxAvatarComponent` をスタンドアロンの依存関係としてインポートできます。 - -```typescript -// home.component.ts - -... -import { IgxAvatarComponent } from 'igniteui-angular/avatar'; -// import { IgxAvatarComponent } from '@infragistics/igniteui-angular'; for licensed package - -@Component({ - selector: 'app-home', - template: '', - styleUrls: ['home.component.scss'], - standalone: true, - imports: [IgxAvatarComponent] -}) -export class HomeComponent {} -``` - -Ignite UI for Angular Avatar モジュールまたはコンポーネントをインポートしたので、`igx-avatar` コンポーネントの基本構成を開始できます。 - -## Angular Avatar コンポーネントの使用 - -Ignite UI for Angular Avatar コンポーネントには、3 つの形状 (正方形、角丸、円) と 3 つのサイズ オプション (大、中、小) があります。イニシャル、画像、またはアイコンを表示できます。 - -### Avatar の形状 - - 属性の値を `square`、`rounded`、または `circle` に設定することで、アバターの形状を変更できます。デフォルトでは、アバターの形状は `square` です。 - -```html - -``` - -### イニシャルを表示するアバター - - ('John Smith' の場合 'JS') を使用した簡易なアバターを作成するには、以下のコードをコンポーネントのテンプレートに追加します。 - -```html - -``` - -アバターを丸形に設定し、サイズを大きくします。 - -```html - -``` - -`--ig-avatar-background` CSS 変数を使用して背景の色を変更できます。また、`color` プロパティを使用してイニシャルの色を設定します。 - -```scss -// avatar.component.scss - -igx-avatar { - --ig-avatar-background: #e41c77; - color: #000000; -} - -``` - - -`igx-avatar` コンポーネントの `roundShape` プロパティは廃止されました。代わりに 属性を使用する必要があります。 - - -以下は結果です。 - - - -### 画像を表示するアバター - -画像を表示するアバターを作成するには、 プロパティで画像ソースを設定します。 - -```html - - -``` - - -このコンポーネントはマテリアル アイコンを使用します。`index.html` に次のリンクを追加してください: `` - - -ここまでの内容が正しければ、以下のように表示されます。 - - - -### アイコンを表示するアバター - -アバターでアイコンを表示するには、 プロパティを設定します。現在、マテリアル アイコン セットのすべてのアイコンがサポートされます。 - -```html - - -``` - -以下は結果です。 - - - -## スタイル設定 - -### Avatar テーマのプロパティ マップ - -`$background` プロパティを変更すると、次の依存プロパティが自動的に更新されます。 - -| Primary Property | Dependent Property | Description | -| --- | --- | --- | -| **$background** | $color | The text color used for the avatar. | -| | $icon-color | The icon color used for the avatar. | - -Avatar のスタイル設定を始めるには、すべてのテーマ関数とコンポーネント ミックスインが存在する `index` ファイルをインポートする必要があります。 - -```scss -@use "igniteui-angular/theming" as *; - -// 重要: Ignite UI for Angular 13 より前のバージョンは、次を使用してください。 -// @import '~igniteui-angular/lib/core/styles/themes/index'; -``` - -最もシンプルな方法として、 を拡張し、`$background` および `$border-radius` パラメーターを指定して新しいテーマを作成します。`$color` (または `$icon-color`) は、指定された背景に対してよりコントラストの高い色 (黒または白) が自動的に設定されます。なお、`$border-radius` プロパティはアバターの が `rounded` に設定されている場合のみ適用されます。 - -次のマークアップを前提として: - -```html -
- -
-``` - -以下のアバター テーマを作成します。 - -```scss -$custom-avatar-theme: avatar-theme( - $background: #72da67, - $border-radius: 16px -); -``` - -最後にアバターのカスタム テーマを渡します。 - -```scss -.initials { - @include tokens($custom-avatar-theme); -} -``` - -ここまでの内容が正しければ、以下のように表示されます。 - - - -### Tailwind によるスタイル設定 - -カスタム Tailwind ユーティリティ クラスを使用して `avatar` をスタイル設定できます。まず [Tailwind を設定して](/themes/misc/tailwind-classes)ください。 - -グローバル スタイルシートに Tailwind をインポートした上で、以下のように必要なテーマ ユーティリティを適用します: - -```scss -@import "tailwindcss"; -... -@use 'igniteui-theming/tailwind/utilities/material.css'; -``` - -ユーティリティ ファイルには、`light` テーマと `dark` テーマの両方のバリエーションが含まれています。 - -- `light-*` クラスはライト テーマ用です。 -- `dark-*` クラスはダーク テーマ用です。 -- プレフィックスの後にコンポーネント名を追加します (例: `light-avatar`、`dark-avatar`)。 - -これらのクラスを適用すると、動的なテーマの計算が可能になります。そこから、`任意のプロパティ`を使用して、生成された CSS 変数をオーバーライドできます。コロンの後に、有効な CSS カラー形式 (HEX、CSS 変数、RGB など) を指定します。 - -プロパティの完全なリストは、 で確認できます。構文は次のとおりです: - -```html - - -``` - - -ユーティリティ クラスが優先されるようにするには、感嘆符 (`!`) が必要です。Tailwind はスタイルをレイヤーに適用しますが、これらのスタイルを重要としてマークしないと、コンポーネントのデフォルトのテーマによってオーバーライドしてしまいます。 - - -最終的に、avatar は次のようになります: - - - -### カスタム サイズ変更 - -`igx-avatar` を直接ターゲットとして `--size` 変数を使用することができます。 - -```scss -igx-avatar { - --size: 200px; -} -``` - -または、ユニバーサル変数 `--ig-avatar-size` を使用して、すべてのインスタンスをターゲットにすることもできます。 - -```html -
- -
-``` - -```scss -.my-app { - --ig-avatar-size: 200px; -} -``` - -size 属性が適用されていない場合は、事前定義されたサイズの 1 つを使用して、それを `--ig-size` 変数に割り当てることもできます。`--ig-size` に使用可能な値は、`--ig-size-small`、`--ig-size-medium`、`--ig-size-large` です。 - -```scss -igx-avatar { - --ig-size: var(--ig-size-small); -} -``` - -詳細については、[サイズ](/display-density)の記事をご覧ください。 - -
- -## API リファレンス - -
- -- - -## テーマの依存関係 - -- -- - -## その他のリソース - -
- -コミュニティに参加して新しいアイデアをご提案ください。 - -- [Ignite UI for Angular **フォーラム** (英語)](https://www.infragistics.com/community/forums/f/ignite-ui-for-angular) -- [Ignite UI for Angular **GitHub** (英語)](https://github.com/IgniteUI/igniteui-angular) diff --git a/docs/angular/src/content/jp/components/layouts/avatar.mdx b/docs/angular/src/content/jp/components/layouts/avatar.mdx new file mode 100644 index 0000000000..f9bf1ad16e --- /dev/null +++ b/docs/angular/src/content/jp/components/layouts/avatar.mdx @@ -0,0 +1,297 @@ +--- +title: "Angular Avatar コンポーネント | レイアウト | Infragistics" +description: "Angular Avatar コンポーネントを使用して、ユーザー、エンティティ、またはオブジェクトを画像、イニシャル、アイコン、またはカスタム コンテンツで表します。" +keywords: "Angular Avatar, アバター コンポーネント, プロフィール画像, イニシャル, Ignite UI for Angular, Infragistics" +last_updated: "2026-07-29" +license: MIT +mentionedTypes: ["Avatar", "Badge", "Icon"] +relatedComponents: ["Badge"] +_language: ja +llms: + description: "Ignite UI for Angular Avatar トピックでは、画像、イニシャル、アイコン、カスタム コンテンツ、形状、サイズ、スタイリング、アクセシビリティ ガイダンスを使用してユーザー、エンティティ、またはオブジェクトの ID をレンダリングする方法を示します。" +--- +import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; +import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; +import Anatomy from 'igniteui-astro-components/components/mdx/Anatomy.astro'; +import Faq from 'igniteui-astro-components/components/mdx/Faq.astro'; +import FaqItem from 'igniteui-astro-components/components/mdx/FaqItem.astro'; +import { Image } from 'astro:assets'; +import avatarAnatomy from '@xplat-images/anatomy-content-light/avatar-lt-a.png'; +import avatarDo from '@xplat-images/avatar/avatar_do1.png'; +import avatarDo2x from '@xplat-images/avatar/avatar_do1@2x.png'; +import avatarDoNot from '@xplat-images/avatar/avatar_do_not1.png'; +import avatarDoNot2x from '@xplat-images/avatar/avatar_dont1@2x.png'; + +# Avatar コンポーネント + +Ignite UI for Angular Avatar は、画像、イニシャル、またはカスタム コンテンツを使用してユーザー、エンティティ、またはオブジェクトを表します。 + +アバターを使用して、リスト、カード、プロフィール メニュー、アクティビティ フィードでコンパクトなビジュアル ID を提供します。 + +## ライブ デモ + + + +## 構造 + +アバターは、画像のセマンティクスを適用し、サポートされているコンテンツ パターンのいずれかをレンダリングする単一のホスト要素です。 + + + + + +1. 画像コンテナー: 画像コンテンツ タイプを表示します。
+2. アイコン コンテナー: アイコン コンテンツ タイプを表示します。
+3. イニシャル コンテナー: テキスト コンテンツ タイプを表示します。
+ +```text +igx-avatar[role="img"] // ホスト - アバターを公開 +└─ 優先順位順に以下のいずれか: + ├─ div.igx-avatar__image // `src` が設定されている場合 - 背景として画像をレンダリング + ├─ igx-icon // `icon` が設定されている場合 + ├─ span // `initials` が設定されている場合 - 最初の 2 文字 + └─ ng-content // カスタム プロジェクション コンテンツ +``` + +## 作業の開始 + +`` をレンダリングする前に Angular アバター コンポーネントをインポートします。Ignite UI for Angular をまだセットアップしていない場合は、最初に共有 [作業の開始](../general/getting-started.mdx) トピックを完了してください。 + +```ts +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +``` + +## 使用方法 + +デフォルト スロットに画像ソース、イニシャル、またはカスタム コンテンツを使用してアバターをレンダリングします。 + +### バリアント + +表示するコンテンツ ソースのみを設定します。Angular アバターは、最初に `src` をレンダリングし、次に `icon`、次に `initials` をレンダリングし、これらのいずれの入力も設定されていない場合はプロジェクションされたカスタム コンテンツにフォールバックします。 + +```html + + + + + +``` + + + +### 形状 + + を `square`、`rounded`、または `circle` に設定します。 + +```html + +``` + + + +### サイズ + +プリセット アバター サイズが必要な場合は、`--ig-size` を共有サイズ トークンのいずれかに設定します。 + +```html + +``` + + + +### 使用するべき場合と使用すべきでない場合 + +**使用するべき場合:** プロフィール画像、イニシャル、アイコンなど、UI が人物、組織、オブジェクト、またはアカウントの小さな表現を必要とする場合にアバターを使用します。繰り返される ID を簡単にスキャンできるように、同じ UI 領域内で一貫したアバター戦略を維持します。 + +**使用すべきでない場合:** エンティティを表す代わりにカウント、ステータス、または通知インジケーターを表示する必要がある場合は、[Badge](../inputs/badge.mdx) コンポーネントを使用します。ID とステータスの両方を一緒に表示する必要がある場合、バッジはアバターを装飾することもできます。 + +
+ + + + + + + + + + + + + +
使用するべき使用すべきでない
Angular Avatar の使用ガイダンスAngular Avatar の不使用ガイダンス
+
+ +## プロパティ + +アバターは、コンテンツと形状のための小さな入力セットを公開します。 + +| 名前 | 型 | デフォルト | 説明 | +| -- | -- | -- | -- | +| | `string` | n/a | アバターがレンダリングするアイコンを設定します。 | +| | `string` | n/a | アバターがレンダリングするテキスト イニシャルを設定します。 | +| | `"square" \| "rounded" \| "circle"` | `"square"` | アバターの形状を設定します。 | +| | `"small" \| "medium" \| "large"` | `"small"` | アバターのサイズを設定します。 | +| | `string` | n/a | 画像ソース URL を設定します。 | + +## スタイリング + + + +アバターの外観はテーマ変数とプラットフォーム固有のスタイリング フックを通じて制御されます。 + +トークン レベルの変更にはアバター CSS 変数を使用し、特定のレンダリング タイプや形状をターゲットにする必要がある場合は Angular ホスト クラスを使用します。 + +| 変数 | 変更内容 | +| -- | -- | +| `--ig-avatar-background` | アバターの背景色。 | +| `--ig-avatar-color` | テキストとイニシャルの色。 | +| `--ig-avatar-icon-color` | アイコンの色。 | +| `--ig-avatar-border-radius` | 丸みのあるアバターで使用される境界線の半径。 | +| `--ig-avatar-size` | アバターの幅と高さ。 | +| `--ig-size` | プリセット アバター サイズを導出するために使用する共有コンポーネント サイズ トークン。 | + +| セレクター | 説明 | +| -- | -- | +| `igx-avatar` | アバターのホスト要素。 | +| `.igx-avatar--rounded` | `shape` が `rounded` の場合に適用されます。 | +| `.igx-avatar--circle` | `shape` が `circle` の場合に適用されます。 | +| `.igx-avatar--image` | アバターが画像をレンダリングするときに適用されます。 | +| `.igx-avatar--icon` | アバターがアイコンをレンダリングするときに適用されます。 | +| `.igx-avatar--initials` | アバターがイニシャルをレンダリングするときに適用されます。 | +| `.igx-avatar__image` | 画像アバター要素。 | + +### Sass テーマ + +アプリケーションが Sass を通じて Ignite UI テーマをカスタマイズする場合は、 関数を使用します。 + +```scss +@use "igniteui-theming/sass/themes" as *; + +$custom-avatar-theme: avatar-theme( + $background: #72da67, + $border-radius: 16px, + $size: 3rem +); + +:root { + @include tokens($custom-avatar-theme); +} +``` + +### CSS 変数 + +Sass ビルド ステップなしでローカル スタイリングが必要な場合は、コンポーネント CSS 変数を直接設定します。 + +```css +igx-avatar { + --ig-avatar-background: var(--ig-success-500); + --ig-avatar-color: var(--ig-success-500-contrast); + --ig-avatar-border-radius: 20px; +} +``` + +### Tailwind によるスタイリング + +アプリケーションが Tailwind クラスを通じて Ignite UI コンポーネントをスタイリングする場合は、Angular Tailwind ユーティリティ構文を使用します。 + + + +## アクセシビリティ + +アバターは、アクセシブルな画像セマンティクスを持つ非インタラクティブな ID ビジュアルです。 + +### キーボード インタラクション + +アバターはフォーカスを受け取らず、キーボード インタラクションはありません。 + +| キー | アクション | +| -- | -- | +| n/a | アバターはキーボードによるインタラクティブ操作に対応していません。 | + +### スクリーン リーダー / ARIA + +アバターは画像のセマンティクスと `avatar` のデフォルトのアクセシブル ラベルで初期化されます。 + +- 画像アバターが ID を伝える場合、周囲のテキストを使用して表現される人物、エンティティ、またはオブジェクトを識別します。 +- 隣接するテキストがすでに同じエンティティを識別している場合、装飾的なアバターを冗長として扱います。 + +### アクセシビリティ コンプライアンス + +Infragistics は、[アクセシビリティ コンプライアンス](../interactivity/accessibility-compliance.mdx) トピックで、Section 508 および WCAG 2.1 ガイドライン領域における Ignite UI for Angular のアクセシビリティ サポートを文書化しています。 + +| 基準 | コンポーネントのコンプライアンス方法 | +| -- | -- | +| [1.1.1 非テキスト コンテンツ](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content) | アバターにはアクセシブル ラベルがあり、表現されるエンティティを識別する周囲のテキストと組み合わせることができます。 | +| [4.1.2 名前、役割、値](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value) | コンポーネントは `role="img"` とデフォルトのアクセシブル ラベルで初期化されます。 | + +責任範囲: + +- スタイルをオーバーライドするときに、アバターの背景とテキストまたはアイコンの色のコントラストを十分に保ちます。 +- 隣接するテキストがすでに人物またはエンティティの名前を示している場合、同じ ID のアナウンスを重複させないようにします。 + +- アバター画像が ID を伝える場合、近くのテキストが表現されるエンティティを識別していることを確認します。 + +## トラブルシューティング + +Avatar をインタラクティブまたはステータス コンポーネントとして扱う前に、このセクションを使用して境界と一般的な決定を確認してください。 + +### 既知の制限 + +アバターはビジュアル ID プリミティブであり、それ自体ではインタラクション、ステータス、または通知動作を追加しません。 + +- 表現されるエンティティがクリック可能でなければならない場合は、ボタンやリスト アイテムなどのインタラクティブなコンテナーを使用します。 +- ステータス、カウント、または通知インジケーターを表示する必要がある場合は、アバターにバッジを使用します。 + +## API リファレンス + +完全なアバター API サーフェスについては、これらの API リファレンスを使用してください。 + + + +## 依存関係 + +Sass スタイリング ワークフローは、 および API を使用します。 + +## その他のリソース + +サポートおよび関連する Ignite UI ドキュメントについては、これらのリソースを使用してください。 + +- [Ignite UI for Angular **フォーラム**](https://www.infragistics.com/community/forums/f/ignite-ui-for-angular) +- [Ignite UI for Angular **GitHub**](https://github.com/IgniteUI/igniteui-angular) + +## 関連コンポーネント + +ID をステータス、アクション、またはより豊富なレイアウトと組み合わせる必要がある場合は、これらの関連コンポーネントを使用してください。 + +- [Badge](../inputs/badge.mdx) - カウント、ステータス、または通知インジケーターを表示するには Badge を使用します。UI に ID とステータスの両方が必要な場合、Badge は Avatar を装飾できます。 + +## FAQ + + + + UI が人物、アカウント、組織、またはオブジェクトを表す必要がある場合に Avatar を使用します。UI がカウント、ステータス、または通知インジケーターを表示する必要がある場合は Badge を使用します。 + + + + いいえ。Avatar は非インタラクティブであり、それ自体ではフォーカスを受け取りません。表現されるエンティティがアクションを必要とする場合は、インタラクティブなコンポーネント内に配置してください。 + + + + アバター画像が特定のエンティティを識別する場合は、意味のある代替テキストを提供します。隣接するテキストがすでにそのエンティティの名前を示している場合、同じ ID のアナウンスを繰り返さないようにします。 + + diff --git a/docs/angular/src/content/jp/components/list.mdx b/docs/angular/src/content/jp/components/list.mdx index 2b291240f7..2431442d8f 100644 --- a/docs/angular/src/content/jp/components/list.mdx +++ b/docs/angular/src/content/jp/components/list.mdx @@ -18,7 +18,7 @@ Ignite UI for Angular List コンポーネントは項目の行を表示し、 ## Angular List の例 -次の例は、_name_ プロパティと _phone number_ プロパティを持つ連絡先が入力されたリストを表しています。 コンポーネントは、[`IgxAvatar`](/avatar) と [`IgxIcon`](/icon) を使用して、ユーザー エクスペリエンスを向上させ、**連絡先をお気に入りに追加**にアバター写真とさまざまなアイコンを設定する機能を公開します。さらに、リスト ビューは、フィルタリング パイプを使用して実現されたソート機能を公開します。 +次の例は、_name_ プロパティと _phone number_ プロパティを持つ連絡先が入力されたリストを表しています。 コンポーネントは、[`IgxAvatar`](layouts/avatar.mdx) と [`IgxIcon`](/icon) を使用して、ユーザー エクスペリエンスを向上させ、**連絡先をお気に入りに追加**にアバター写真とさまざまなアイコンを設定する機能を公開します。さらに、リスト ビューは、フィルタリング パイプを使用して実現されたソート機能を公開します。 @@ -205,7 +205,7 @@ public contacts = [{ ### アバターおよびアイコンの追加 -その他のコンポーネントを と共に使用してエクスペリエンスの向上や機能拡張が可能です。名前や電話番号の値の左に画像のアバターを表示できます。また、連絡先をお気に入りに追加するための星アイコンを右側に追加できます。要素を追加するには、[**IgxAvatar**](/avatar) および [**IgxIcon**](/icon) モジュールを app.module.ts ファイルにインポートします。 +その他のコンポーネントを と共に使用してエクスペリエンスの向上や機能拡張が可能です。名前や電話番号の値の左に画像のアバターを表示できます。また、連絡先をお気に入りに追加するための星アイコンを右側に追加できます。要素を追加するには、[**IgxAvatar**](layouts/avatar.mdx) および [**IgxIcon**](/icon) モジュールを app.module.ts ファイルにインポートします。 ```typescript // app.module.ts diff --git a/docs/angular/src/content/jp/components/stepper.mdx b/docs/angular/src/content/jp/components/stepper.mdx index 0776563843..c27ee7b9ad 100644 --- a/docs/angular/src/content/jp/components/stepper.mdx +++ b/docs/angular/src/content/jp/components/stepper.mdx @@ -256,7 +256,7 @@ Ignite UI for Angular Stepper では、タイトル、インジケーターな ステップのインジケーターのみを表示する場合は、 オプションを `indicator` に設定します。 -ステップ インジケーターはすべてのコンテンツをサポートしますが、サイズが常に **24 ピクセル**になるという制限があります。この点に注意して、ステップ インジケーターとして [IgxIconComponent](/icon) または [IgxAvatarComponent](/avatar) を使用することをお勧めします。 +ステップ インジケーターはすべてのコンテンツをサポートしますが、サイズが常に **24 ピクセル**になるという制限があります。この点に注意して、ステップ インジケーターとして [IgxIconComponent](/icon) または [IgxAvatarComponent](layouts/avatar.mdx) を使用することをお勧めします。 **Title (タイトル)** diff --git a/docs/angular/src/content/jp/components/themes/misc/angular-material-theming.mdx b/docs/angular/src/content/jp/components/themes/misc/angular-material-theming.mdx index 9bf1b5b5a0..915b65552d 100644 --- a/docs/angular/src/content/jp/components/themes/misc/angular-material-theming.mdx +++ b/docs/angular/src/content/jp/components/themes/misc/angular-material-theming.mdx @@ -417,7 +417,7 @@ $custom-mat-light-theme: mat.define-light-theme(( - [パレット](../sass/palettes.mdx) - [コンポーネント テーマ](../sass/component-themes.mdx) - [タイポグラフィ](../sass/typography.mdx) -- [Avatar コンポーネント](../../avatar.mdx) +- [Avatar コンポーネント](../../layouts/avatar.mdx) - [Button コンポーネント](../../button.mdx) - [Dialog コンポーネント](../../dialog.mdx) - [Icon コンポーネント](../../icon.mdx) diff --git a/docs/angular/src/content/jp/components/themes/misc/bootstrap-theming.mdx b/docs/angular/src/content/jp/components/themes/misc/bootstrap-theming.mdx index 0468a79346..92b63f123f 100644 --- a/docs/angular/src/content/jp/components/themes/misc/bootstrap-theming.mdx +++ b/docs/angular/src/content/jp/components/themes/misc/bootstrap-theming.mdx @@ -367,7 +367,7 @@ Ignite UI for Angular は、テーマごとに 4 つのデフォルト タイプ - [パレット](../sass/palettes.mdx) - [コンポーネント テーマ](../sass/component-themes.mdx) - [タイポグラフィ](../sass/typography.mdx) -- [Avatar コンポーネント](../../avatar.mdx) +- [Avatar コンポーネント](../../layouts/avatar.mdx) - [Button コンポーネント](../../button.mdx) - [Dialog コンポーネント](../../dialog.mdx) - [Icon コンポーネント](../../icon.mdx) diff --git a/docs/angular/src/content/jp/components/toc.json b/docs/angular/src/content/jp/components/toc.json index 76b65b25e1..9813cea063 100644 --- a/docs/angular/src/content/jp/components/toc.json +++ b/docs/angular/src/content/jp/components/toc.json @@ -2196,7 +2196,7 @@ }, { "name": "Avatar", - "href": "avatar.mdx" + "href": "layouts/avatar.mdx" }, { "name": "Expansion Panel", diff --git a/docs/angular/src/content/jp/components/tooltip.mdx b/docs/angular/src/content/jp/components/tooltip.mdx index a06725c76f..4f3990798e 100644 --- a/docs/angular/src/content/jp/components/tooltip.mdx +++ b/docs/angular/src/content/jp/components/tooltip.mdx @@ -85,7 +85,7 @@ Ignite UI for Angular Tooltip モジュールまたはディレクティブを ## Angular Tooltip の使用 -上記のようにシンプルなテキスト ツールチップを作成します。`IgxAvatarModule` をインポートして要素として [`IgxAvatar`](/avatar) を使用します。 +上記のようにシンプルなテキスト ツールチップを作成します。`IgxAvatarModule` をインポートして要素として [`IgxAvatar`](layouts/avatar.mdx) を使用します。 ```typescript // app.module.ts @@ -159,7 +159,7 @@ avatar をターゲットにして、 を活用し、マップの特定の場所について詳細な情報を提供します。単純な div を使用してマップを表示し、ツールチップのロゴに [`IgxAvatar`](/avatar)、マップの場所アイコンに [`IgxIcon`](/icon) を使用します。この目的のためには、各モジュールを取得する必要があります。 + を活用し、マップの特定の場所について詳細な情報を提供します。単純な div を使用してマップを表示し、ツールチップのロゴに [`IgxAvatar`](layouts/avatar.mdx)、マップの場所アイコンに [`IgxIcon`](/icon) を使用します。この目的のためには、各モジュールを取得する必要があります。 ```typescript // app.module.ts From f8bd08c217171d7483ed5cd834a67c0b5380f2d5 Mon Sep 17 00:00:00 2001 From: jsakamotoIGJP Date: Mon, 17 Aug 2026 13:06:08 +0900 Subject: [PATCH 12/38] docs(jp): refine avatar terminology and add missing JP avatar images --- .../content/jp/components/layouts/avatar.mdx | 60 +++++++++--------- .../anatomy-content-light/avatar-lt-a.png | Bin 0 -> 151792 bytes .../content/jp/images/avatar/avatar_do1.png | Bin 0 -> 1819 bytes .../jp/images/avatar/avatar_do1@2x.png | Bin 0 -> 4563 bytes .../jp/images/avatar/avatar_do_not1.png | Bin 0 -> 1828 bytes .../jp/images/avatar/avatar_dont1@2x.png | Bin 0 -> 5374 bytes 6 files changed, 30 insertions(+), 30 deletions(-) create mode 100644 docs/angular/src/content/jp/images/anatomy-content-light/avatar-lt-a.png create mode 100644 docs/angular/src/content/jp/images/avatar/avatar_do1.png create mode 100644 docs/angular/src/content/jp/images/avatar/avatar_do1@2x.png create mode 100644 docs/angular/src/content/jp/images/avatar/avatar_do_not1.png create mode 100644 docs/angular/src/content/jp/images/avatar/avatar_dont1@2x.png diff --git a/docs/angular/src/content/jp/components/layouts/avatar.mdx b/docs/angular/src/content/jp/components/layouts/avatar.mdx index f9bf1ad16e..86868c15a1 100644 --- a/docs/angular/src/content/jp/components/layouts/avatar.mdx +++ b/docs/angular/src/content/jp/components/layouts/avatar.mdx @@ -1,5 +1,5 @@ --- -title: "Angular Avatar コンポーネント | レイアウト | Infragistics" +title: "Angular Avatar コンポーネント | レイアウト | インフラジスティックス" description: "Angular Avatar コンポーネントを使用して、ユーザー、エンティティ、またはオブジェクトを画像、イニシャル、アイコン、またはカスタム コンテンツで表します。" keywords: "Angular Avatar, アバター コンポーネント, プロフィール画像, イニシャル, Ignite UI for Angular, Infragistics" last_updated: "2026-07-29" @@ -8,7 +8,7 @@ mentionedTypes: ["Avatar", "Badge", "Icon"] relatedComponents: ["Badge"] _language: ja llms: - description: "Ignite UI for Angular Avatar トピックでは、画像、イニシャル、アイコン、カスタム コンテンツ、形状、サイズ、スタイリング、アクセシビリティ ガイダンスを使用してユーザー、エンティティ、またはオブジェクトの ID をレンダリングする方法を示します。" + description: "Ignite UI for Angular Avatar トピックでは、画像、イニシャル、アイコン、カスタム コンテンツ、形状、サイズ、スタイル設定、アクセシビリティ ガイダンスを使用してユーザー、エンティティ、またはオブジェクトのアイデンティティをレンダリングする方法を示します。" --- import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; @@ -22,11 +22,11 @@ import avatarDo2x from '@xplat-images/avatar/avatar_do1@2x.png'; import avatarDoNot from '@xplat-images/avatar/avatar_do_not1.png'; import avatarDoNot2x from '@xplat-images/avatar/avatar_dont1@2x.png'; -# Avatar コンポーネント +# Avatar (アバター) コンポーネント Ignite UI for Angular Avatar は、画像、イニシャル、またはカスタム コンテンツを使用してユーザー、エンティティ、またはオブジェクトを表します。 -アバターを使用して、リスト、カード、プロフィール メニュー、アクティビティ フィードでコンパクトなビジュアル ID を提供します。 +アバターを使用して、リスト、カード、プロフィール メニュー、アクティビティ フィードでコンパクトな視覚的アイデンティティを提供します。 ## ライブ デモ @@ -113,17 +113,17 @@ import { IgxAvatarComponent } from 'igniteui-angular/avatar'; -### 使用するべき場合と使用すべきでない場合 +### 使用すべき場合と使用すべきでない場合 -**使用するべき場合:** プロフィール画像、イニシャル、アイコンなど、UI が人物、組織、オブジェクト、またはアカウントの小さな表現を必要とする場合にアバターを使用します。繰り返される ID を簡単にスキャンできるように、同じ UI 領域内で一貫したアバター戦略を維持します。 +**使用すべき場合:** プロフィール画像、イニシャル、アイコンなど、UI が人物、組織、オブジェクト、またはアカウントの小さな表現を必要とする場合にアバターを使用します。繰り返し表示されるアイデンティティを簡単に識別できるように、同じ UI 領域内で一貫したアバター戦略を維持します。 -**使用すべきでない場合:** エンティティを表す代わりにカウント、ステータス、または通知インジケーターを表示する必要がある場合は、[Badge](../inputs/badge.mdx) コンポーネントを使用します。ID とステータスの両方を一緒に表示する必要がある場合、バッジはアバターを装飾することもできます。 +**使用すべきでない場合:** エンティティを表す代わりにカウント、ステータス、または通知インジケーターを表示する必要がある場合は、[Badge](../inputs/badge.mdx) コンポーネントを使用します。アイデンティティとステータスの両方を一緒に表示する必要がある場合、バッジはアバターを装飾することもできます。
- + @@ -148,11 +148,11 @@ import { IgxAvatarComponent } from 'igniteui-angular/avatar'; | | `"small" \| "medium" \| "large"` | `"small"` | アバターのサイズを設定します。 | | | `string` | n/a | 画像ソース URL を設定します。 | -## スタイリング +## スタイル設定 - + -アバターの外観はテーマ変数とプラットフォーム固有のスタイリング フックを通じて制御されます。 +アバターの外観はテーマ変数とプラットフォーム固有のスタイル設定フックを通じて制御されます。 トークン レベルの変更にはアバター CSS 変数を使用し、特定のレンダリング タイプや形状をターゲットにする必要がある場合は Angular ホスト クラスを使用します。 @@ -195,7 +195,7 @@ $custom-avatar-theme: avatar-theme( ### CSS 変数 -Sass ビルド ステップなしでローカル スタイリングが必要な場合は、コンポーネント CSS 変数を直接設定します。 +Sass ビルド ステップなしでローカルでのスタイル設定が必要な場合は、コンポーネント CSS 変数を直接設定します。 ```css igx-avatar { @@ -205,15 +205,15 @@ igx-avatar { } ``` -### Tailwind によるスタイリング +### Tailwind によるスタイル設定 -アプリケーションが Tailwind クラスを通じて Ignite UI コンポーネントをスタイリングする場合は、Angular Tailwind ユーティリティ構文を使用します。 +アプリケーションが Tailwind クラスを通じて Ignite UI コンポーネントのスタイルを設定する場合は、Angular Tailwind ユーティリティ構文を使用します。 - + ## アクセシビリティ -アバターは、アクセシブルな画像セマンティクスを持つ非インタラクティブな ID ビジュアルです。 +アバターは、アクセシブルな画像セマンティクスを持つ非インタラクティブなアイデンティティ表示要素です。 ### キーボード インタラクション @@ -227,24 +227,24 @@ igx-avatar { アバターは画像のセマンティクスと `avatar` のデフォルトのアクセシブル ラベルで初期化されます。 -- 画像アバターが ID を伝える場合、周囲のテキストを使用して表現される人物、エンティティ、またはオブジェクトを識別します。 +- 画像アバターがアイデンティティを伝える場合、周囲のテキストを使用して表現される人物、エンティティ、またはオブジェクトを識別します。 - 隣接するテキストがすでに同じエンティティを識別している場合、装飾的なアバターを冗長として扱います。 -### アクセシビリティ コンプライアンス +### アクセシビリティ準拠 -Infragistics は、[アクセシビリティ コンプライアンス](../interactivity/accessibility-compliance.mdx) トピックで、Section 508 および WCAG 2.1 ガイドライン領域における Ignite UI for Angular のアクセシビリティ サポートを文書化しています。 +Infragistics は、[アクセシビリティ準拠](../interactivity/accessibility-compliance.mdx) トピックで、Section 508 および WCAG 2.1 ガイドライン領域における Ignite UI for Angular のアクセシビリティ サポートを文書化しています。 -| 基準 | コンポーネントのコンプライアンス方法 | +| 基準 | コンポーネントの準拠方法 | | -- | -- | | [1.1.1 非テキスト コンテンツ](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content) | アバターにはアクセシブル ラベルがあり、表現されるエンティティを識別する周囲のテキストと組み合わせることができます。 | | [4.1.2 名前、役割、値](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value) | コンポーネントは `role="img"` とデフォルトのアクセシブル ラベルで初期化されます。 | -責任範囲: +ユーザー側の責任: - スタイルをオーバーライドするときに、アバターの背景とテキストまたはアイコンの色のコントラストを十分に保ちます。 -- 隣接するテキストがすでに人物またはエンティティの名前を示している場合、同じ ID のアナウンスを重複させないようにします。 +- 隣接するテキストがすでに人物またはエンティティの名前を示している場合、同じアイデンティティのアナウンスを重複させないようにします。 -- アバター画像が ID を伝える場合、近くのテキストが表現されるエンティティを識別していることを確認します。 +- アバター画像がアイデンティティを伝える場合、近くのテキストが表現されるエンティティを識別していることを確認します。 ## トラブルシューティング @@ -252,7 +252,7 @@ Avatar をインタラクティブまたはステータス コンポーネント ### 既知の制限 -アバターはビジュアル ID プリミティブであり、それ自体ではインタラクション、ステータス、または通知動作を追加しません。 +アバターは視覚的なアイデンティティのプリミティブであり、それ自体ではインタラクション、ステータス、または通知動作を追加しません。 - 表現されるエンティティがクリック可能でなければならない場合は、ボタンやリスト アイテムなどのインタラクティブなコンテナーを使用します。 - ステータス、カウント、または通知インジケーターを表示する必要がある場合は、アバターにバッジを使用します。 @@ -265,20 +265,20 @@ Avatar をインタラクティブまたはステータス コンポーネント ## 依存関係 -Sass スタイリング ワークフローは、 および API を使用します。 +Sass スタイル設定ワークフローは、 および API を使用します。 ## その他のリソース サポートおよび関連する Ignite UI ドキュメントについては、これらのリソースを使用してください。 -- [Ignite UI for Angular **フォーラム**](https://www.infragistics.com/community/forums/f/ignite-ui-for-angular) -- [Ignite UI for Angular **GitHub**](https://github.com/IgniteUI/igniteui-angular) +- [Ignite UI for Angular **フォーラム** (英語)](https://www.infragistics.com/community/forums/f/ignite-ui-for-angular) +- [Ignite UI for Angular **GitHub** (英語)](https://github.com/IgniteUI/igniteui-angular) ## 関連コンポーネント -ID をステータス、アクション、またはより豊富なレイアウトと組み合わせる必要がある場合は、これらの関連コンポーネントを使用してください。 +アイデンティティをステータス、アクション、またはより豊富なレイアウトと組み合わせる必要がある場合は、これらの関連コンポーネントを使用してください。 -- [Badge](../inputs/badge.mdx) - カウント、ステータス、または通知インジケーターを表示するには Badge を使用します。UI に ID とステータスの両方が必要な場合、Badge は Avatar を装飾できます。 +- [Badge](../inputs/badge.mdx) - カウント、ステータス、または通知インジケーターを表示するには Badge を使用します。UI にアイデンティティとステータスの両方が必要な場合、Badge は Avatar を装飾できます。 ## FAQ @@ -292,6 +292,6 @@ ID をステータス、アクション、またはより豊富なレイアウ - アバター画像が特定のエンティティを識別する場合は、意味のある代替テキストを提供します。隣接するテキストがすでにそのエンティティの名前を示している場合、同じ ID のアナウンスを繰り返さないようにします。 + アバター画像が特定のエンティティを識別する場合は、意味のある代替テキストを提供します。隣接するテキストがすでにそのエンティティの名前を示している場合、同じアイデンティティのアナウンスを繰り返さないようにします。 diff --git a/docs/angular/src/content/jp/images/anatomy-content-light/avatar-lt-a.png b/docs/angular/src/content/jp/images/anatomy-content-light/avatar-lt-a.png new file mode 100644 index 0000000000000000000000000000000000000000..628c84a4d5b05057f03adcbc2eb724a98cae6ada GIT binary patch literal 151792 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

5SvUZ#&Q7qkzfr0tu^8;eyn-DV^9 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 I;*ITfMbbF7+-9z&Tvr;=5pv5l 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 Ud6ou5fBCmT4`QrUtLcpRFI!i&bpQYW literal 0 HcmV?d00001 diff --git a/docs/angular/src/content/jp/images/avatar/avatar_do_not1.png b/docs/angular/src/content/jp/images/avatar/avatar_do_not1.png new file mode 100644 index 0000000000000000000000000000000000000000..6d51576c235b8bbd74333609ded4f36cce167a79 GIT binary patch literal 1828 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 Date: Mon, 17 Aug 2026 10:06:15 +0300 Subject: [PATCH 13/38] update(*): skills-structure-content --- .ai/skills/CHANGELOG.md | 101 ++++++++ .ai/skills/README.md | 91 ++++++++ .ai/skills/igniteui-doc-topics/SKILL.md | 217 +++++------------- .../references/audit-rubric.md | 57 ++++- .../references/create-workflow.md | 98 ++++++++ .../references/diataxis-cheatsheet.md | 3 + .../references/house-style.md | 88 ++++++- .../igniteui-topic-frontmatter/SKILL.md | 183 ++++----------- .../references/audit-rules.md | 140 +++++++++++ .../references/report-format.md | 39 ++++ 10 files changed, 698 insertions(+), 319 deletions(-) create mode 100644 .ai/skills/CHANGELOG.md create mode 100644 .ai/skills/README.md create mode 100644 .ai/skills/igniteui-doc-topics/references/create-workflow.md create mode 100644 .ai/skills/igniteui-topic-frontmatter/references/audit-rules.md create mode 100644 .ai/skills/igniteui-topic-frontmatter/references/report-format.md diff --git a/.ai/skills/CHANGELOG.md b/.ai/skills/CHANGELOG.md new file mode 100644 index 0000000000..9ef8b6a260 --- /dev/null +++ b/.ai/skills/CHANGELOG.md @@ -0,0 +1,101 @@ +# igniteui doc-skill set · changelog + +## v3 · 2026-08-14 + +Restructures both skills to the routing-hub + references architecture used by the +`IgniteUI/igniteui-angular` repo skills (SKILL.md = router with a Task → Reference table; all +evolving rules live in `references/`). **No rule content changed** — v2's rules were moved, not +edited; two stale cross-pointers were fixed in the move. Completes D2-03 stage 2 (physical +deduplication) and adds the set-level README. Whole set bumped to v3 (uniform version line, +including content-unchanged files, per the blog-creator convention). + +### Changed + +| Change | File(s) | +|---|---| +| igniteui-topic-frontmatter split: SKILL.md becomes a router (scope, audit-first mode, task table, hard boundaries); the field checks + severity ladder move to `references/audit-rules.md`; report shape + apply procedure move to `references/report-format.md`. `description` unchanged (adapter byte-match preserved). | igniteui-topic-frontmatter/* | +| igniteui-doc-topics slimmed: SKILL.md keeps identity, two modes, compass, composite principle, task table, grounding boundaries. Create steps 1–7 (6a–6e) + the category/index structure move to `references/create-workflow.md`; the 5 audit-workflow steps move into `audit-rubric.md`. `description` unchanged. | igniteui-doc-topics/SKILL.md, references/create-workflow.md, references/audit-rubric.md | +| Dedup (D2-03 stage 2): the section→mode map is no longer restated in SKILL.md — it is the "Diátaxis mode" column of house-style's canonical section table; SKILL.md keeps only the one-section-one-mode rule and the concrete mode-bleed examples. The category blueprint now lives in house-style + create-workflow only. Stale pointers fixed (house-style intro pointed at a SKILL.md map that moved; body-support bullet pointed at "Create workflow step 4" which now lives in create-workflow.md). | igniteui-doc-topics/SKILL.md, references/house-style.md | +| Set-level README.md added: human-readable intent, file map, authority chain, and the five-step update procedure (edit references not routers; uniform version bump; adapter byte-match; changelog entry; resolve ‹VERIFY› by pre-committed outcome). | README.md | +| Adapters future-proofed: the enumerated reference-path list is replaced by the standing rule "resolve reference paths relative to the canonical skill directory", so adding/renaming references never requires an adapter edit. Descriptions untouched. | .claude/skills/*/SKILL.md | +| Set-wide version line: every file now carries `Version: v3 · 2026-08-14 · igniteui doc-skill set`, including content-unchanged house-style and diataxis-cheatsheet (the cheatsheet gains its first version line). | all files | + +### Unchanged + +All v2 rule substance (E1–E9 with D2 amendments, D2-01…11 fixes), all open ‹VERIFY› items and their +owners (see the v2 entry below), and both skill `description` fields. + +--- + +## v2 · 2026-08-14 + +Applies the D5 frontmatter patch v1 (E1–E9) as ratified by D2 (D2 review v1.1, 2026-08-14, transfer +matrix v1 Option A) with D2's amendments, plus the D2 "do now" wave. Three wait-line items were +pulled forward (D2-08, D2-09, D2-11) because the marginal cost inside a full edit pass was zero, +the same precedent as blog-creator v3. Finding IDs reference the D5 review (D5-22…31, patch edits +E1–E9) and the D2 review v1.1 (D2-01…12). + +Files changed: `igniteui-topic-frontmatter/SKILL.md`, `igniteui-doc-topics/SKILL.md`, +`igniteui-doc-topics/references/house-style.md`, `igniteui-doc-topics/references/audit-rubric.md`, +both `.claude/skills/*/SKILL.md` adapters. `diataxis-cheatsheet.md` is unchanged (no findings). + +### Applied + +| Finding | Change | File(s) | +|---|---|---| +| E1 / D5-24 + D2 amendment | Title rule split per doc set: xplat keeps `{ComponentTitle}`; Angular target `"Angular Component"` within ~60 query-relevant chars, no hand-coded suffixes pending `‹VERIFY: Angular layout title suffix behavior›`, with pre-committed outcomes for both branches (`\| Ignite UI` standardized if the layout appends nothing). Blog banned-phrase set merged in. | frontmatter SKILL.md | +| E2 / D5-26 | Description bar raised: definition-first ("X is a … that …"), not imperative CTA; complete sentences; no ellipsis truncation. | frontmatter SKILL.md, house-style | +| E3 / D5-23 + D2 amendment | `llms.description` defines the component, not the page: subject noun names product + component, no pronouns, no list-dumps, no page-referential phrasing; quotability test at accept time. One-definition rule added: llms.description ≈ H1 lead ≈ llms-manifest entry (`‹VERIFY: manifest source field›`). | frontmatter SKILL.md, house-style | +| E4 / D5-22 | New required check: cross-field consistency (title / description / llms.description / keywords / H1 / lead sentence tell one story, same entities, same capability list). | frontmatter SKILL.md, house-style | +| E5 / D5-25 | New required check: entity terminology in metadata, bound to the shared terminology table. | frontmatter SKILL.md | +| E6 / D5-27 | New required check: body support for every metadata claim; frontmatter generated from the finished body. | frontmatter SKILL.md, house-style | +| E7 / D5-28 | `keywords` coherence made testable: every keyword (or token-resolved form) appears in the body. | frontmatter SKILL.md | +| E8 / D5-30 | `mentionedTypes` scoped: Angular occurrences tolerated, not required, pending `‹VERIFY: does the Angular pipeline consume mentionedTypes?›`. | frontmatter SKILL.md | +| E9 / D5-31 | Schema linkage named in Scope: frontmatter bars are schema bars; FAQPage (if emitted) sources visible FAQ content verbatim (`‹VERIFY: schema pipeline nodes/fields›`). | frontmatter SKILL.md | +| E-10 (D2 §2) | Title character budget in Severity: non-query terms pushing query terms past ~60-char truncation = Error; query-relevant portion >~60 = Warning. | frontmatter SKILL.md | +| D2-01 | Contradiction fixed: reconciliation table no longer maps "Known Limitations" to Troubleshooting; drifted variants map to the required **Known Limitations** section, with the conditional Troubleshooting placement noted. | house-style | +| D2-02 | Create step 4 rewritten "Write frontmatter first" → "Scaffold frontmatter": convention-fixed fields before the body; description / llms.description / keywords / mentionedTypes / relatedComponents generated from the finished body, then the frontmatter skill's cross-field and body-support checks run. Resolves the companion-skill contradiction with E6 / matrix row 11. | doc-topics SKILL.md | +| D2-03 stage 1 | Single-sourcing declared: house-style "File format & frontmatter" is the normative field contract; both SKILL.mds reference it. Version lines added to all changed files; adapter `description` byte-match rule stated in both adapters and both canonicals. Shared field bars synced so no copy contradicts another. | all changed files | +| D2-04 / matrix row 5 | FAQ answer shape bound: 2–4 self-contained sentences quotable without the question; fan-out question patterns (licensing, version support, migration, accessibility, "is X right for") added as authoring guidance. Rubric A11 extended. | house-style, audit-rubric | +| D2-05 / matrix row 1 | Section leads name the component (and platform token): write-for-both rule 2 and rubric D3 extended. | house-style, audit-rubric | +| D2-06 / matrix row 10 | Quotability test given a check ID: new D13 (H1 lead, section leads, FAQ answers, llms.description). | audit-rubric | +| D2-07 / matrix row 8 | New E7: descriptive, entity-bearing anchor text on prose links; "click here"/bare URLs flagged. | audit-rubric | +| D2-08 / matrix row 7 (pulled forward) | New house-style section "Entity terminology (canonical names)", a governed copy of the blog terminology table with provenance line "source: blog-creator product-context v4 · 2026-08-14". New rubric B6 for body-side entity drift. | house-style, audit-rubric | +| D2-09 (pulled forward) | Table of contents added to house-style (>300-line reference, loaded on every create/audit). | house-style | +| D2-10 | Routing boundary sentences added to both skill descriptions (frontmatter-only work → frontmatter skill; body/structure work → doc-topics skill). Adapters updated to byte-match. | both SKILL.mds, both adapters | +| D2-11 (pulled forward) | Create step 6 split into passes 6a–6e; no rule content changed. | doc-topics SKILL.md | +| Matrix row 4 (pre-commitment) | Rubric B4 carries the pending `‹VERIFY: layout H1/framework adjacency›` with both pre-committed outcomes, so the answer resolves the rule mechanically. | audit-rubric | + +### Deliberately not applied + +- **D2-03 stage 2** (physical deduplication of the field contract out of the frontmatter skill's + audit rules): batched with the next structural SKILL.md edit; stage 1's authority declaration and + synced wording carry the interim. +- **D2-12** (verification-URL single-sourcing against RESOURCE-LIST): requires the RESOURCE-LIST + canonical-variant decision, which has no owner yet. +- **Canonical-link policy enforcement** (D5-29): the skill still refuses to invent canonicals; the + enforcement text lands only after the policy's two `‹VERIFY›` items are answered (D2 review §5). +- **Em-dash advisory** (matrix row 18): docs team's call; existing file style kept. +- **Matrix rows 4 / E1 branch resolution**: `‹VERIFY›` placeholders ship in the files, as the + convention intends; the pre-committed outcomes are written next to them. + +### Open verification items (owners) + +1. `‹VERIFY: Angular layout title suffix behavior›` — docs team. Resolves E1's branch and the + Severity rule's application to Angular titles. +2. `‹VERIFY: layout H1/framework adjacency, both doc sets›` — docs team. Resolves B4's direction. +3. `‹VERIFY: schema pipeline — node types, source fields, FAQPage presence›` — docs team. +4. `‹VERIFY: does the Angular pipeline consume mentionedTypes?›` — docs team. +5. `‹VERIFY: llms-manifest source field›` — docs team. Resolves the one-definition rule's third leg. +6. `‹VERIFY: what the layout emits when _canonicalLink is absent›` — docs team; if the answer is + "nothing", it preempts every queue (D2 review §5.1). +7. Canonical-link policy pattern — D2 (draft exists in D2 review §5), docs team implements. + +### Deploy + +1. Replace the four `.ai` files and two `.claude` adapters in one commit; `git diff` is the review + surface. +2. The adapter `description` fields must remain byte-identical to their canonicals — check on every + future edit (version lines are the interim control until a CI check exists). +3. Next steps per the D2 cut line: D5 step 2 diffs are superseded by this apply; skill-creator eval + loop (pre-patch snapshots exist in git history) after this wave merges. diff --git a/.ai/skills/README.md b/.ai/skills/README.md new file mode 100644 index 0000000000..72c1703bd7 --- /dev/null +++ b/.ai/skills/README.md @@ -0,0 +1,91 @@ +# Ignite UI doc-skill set — architecture and maintenance guide + +Version: v3 · 2026-08-14 · igniteui doc-skill set. This file is for humans; agents load the +SKILL.md files. Change history: `CHANGELOG.md`. + +## What this is + +Two agent skills that keep Ignite UI documentation topics uniform, verified, and quotable by AI +assistants: + +- **`igniteui-doc-topics`** — author or audit whole topics (component pages, concept overviews, + category indexes) against the Diátaxis-based house templates. +- **`igniteui-topic-frontmatter`** — audit and normalize YAML frontmatter only (SEO titles, meta + descriptions, `llms.description`, keywords, canonical links), audit-first, never touching the body. + +The `.claude/skills/` copies are **thin adapters** for Claude: they carry the same `name` and +`description` (the triggering surface) and redirect to the canonical `.ai/skills/` files. Other +agents can consume the `.ai` skills directly. + +## Design intent (why it is structured this way) + +**SKILL.md is a routing hub; references carry the substance.** This follows the same pattern as the +`IgniteUI/igniteui-angular` repo skills (e.g. `skills/igniteui-angular-components`): the SKILL.md +holds only identity, scope, hard boundaries, and a Task → Reference table; every rule that can +change over time lives in `references/`. Three reasons: + +1. **Progressive disclosure.** Agents always see the name + description; they load the SKILL.md + body when the skill triggers, and read only the reference files the task needs. Small router = + cheap trigger, precise loading. +2. **Future-proofing.** Rules evolve (new checks, answered ‹VERIFY› items, template revisions); + the router does not. Day-to-day maintenance touches only `references/*.md`, so SKILL.md diffs are + rare and reviewable, and the adapters in `.claude/` almost never need to change. +3. **Anti-drift.** Rules stated once, in one file, referenced everywhere else. The set learned this + the hard way (see CHANGELOG v2): the same contract stated in three places will disagree within a + week. + +## File map + +``` +.ai/skills/ +├── README.md ← this file (humans) +├── CHANGELOG.md ← every change, mapped to review finding IDs +├── igniteui-doc-topics/ +│ ├── SKILL.md ← router: modes, compass, composite principle, task table +│ └── references/ +│ ├── house-style.md ← THE normative source: blueprints, frontmatter contract, +│ │ naming, entity terminology, verification workflow, voice +│ ├── create-workflow.md ← authoring steps 1–7 + category/index structure +│ ├── audit-rubric.md ← audit workflow + checks A–F + report format +│ └── diataxis-cheatsheet.md ← the four modes + the compass (reasoning layer) +└── igniteui-topic-frontmatter/ + ├── SKILL.md ← router: scope, audit-first mode, task table, boundaries + └── references/ + ├── audit-rules.md ← field-by-field quality checks + severity ladder + └── report-format.md ← report shape + apply procedure + +.claude/skills/ +├── igniteui-doc-topics/SKILL.md ← adapter (description byte-matches canonical) +└── igniteui-topic-frontmatter/SKILL.md ← adapter (description byte-matches canonical) +``` + +**Authority chain:** where any two files differ, `house-style.md` wins on content rules (it is the +single normative field contract and template source); each skill's own references win on its +operational procedure (severities, report shapes, workflow order). The frontmatter skill reads +across into `igniteui-doc-topics/references/house-style.md` deliberately — one contract, two +consumers. + +## How to update the set + +1. **Edit the reference file**, not the router. New check → `audit-rules.md` or `audit-rubric.md`; + template change → `house-style.md`; workflow change → `create-workflow.md`. Touch a SKILL.md only + when scope, boundaries, or routing genuinely change. +2. **Bump the set version line in every file** (`Version: vN · date · igniteui doc-skill set`) — + all files move together, even content-unchanged ones. A mismatched version line is the drift + alarm; treat it as a stop sign. +3. **Keep adapter descriptions byte-identical** to the canonical `description` fields. If you + change a description, change it in both places in the same commit. +4. **Record the change in `CHANGELOG.md`** with what changed, why, and the finding/decision ID it + traces to. This set is maintained under review discipline; an untraceable edit is how the last + contradiction got in. +5. **Resolve ‹VERIFY› placeholders by editing, never by deleting.** Each open item is listed in the + changelog with an owner. When a verification is answered, apply its pre-committed outcome (they + are written next to the placeholders) and remove the placeholder in the same edit. + +## Provenance + +- The entity-terminology table in `house-style.md` is a governed copy of + `blog-creator product-context v4 · 2026-08-14`. When that table changes upstream, update the copy + in the same change. +- The rule substance was ratified through the D5 review (2026-08-14, findings D5-22…31) and the D2 + review v1.1 (findings D2-01…12, transfer matrix v1). The CHANGELOG maps every edit to those IDs. diff --git a/.ai/skills/igniteui-doc-topics/SKILL.md b/.ai/skills/igniteui-doc-topics/SKILL.md index a7399c8e7d..ca902ad9fe 100644 --- a/.ai/skills/igniteui-doc-topics/SKILL.md +++ b/.ai/skills/igniteui-doc-topics/SKILL.md @@ -11,14 +11,25 @@ description: >- UI — even if they just say "write docs for the X component" or "review this topic" without naming Diátaxis or the templates. Also use it when deciding what *kind* of documentation a page should be, or when a topic mixes tutorial / how-to / reference / explanation content that should be separated. + For frontmatter-only audits or metadata normalization, use the companion igniteui-topic-frontmatter + skill instead. --- # Ignite UI doc topics +Version: v3 · 2026-08-14 · igniteui doc-skill set. All set files carry this version line; before +editing any file, confirm the lines match across the set. The `.claude` adapter's `description` must +byte-match this file's `description`. Change log: `.ai/skills/CHANGELOG.md` · human-readable intent: +`.ai/skills/README.md`. + Write and audit Ignite UI documentation topics so every page has the same predictable shape — easy for developers to read and for AI assistants to answer from. The engine is **Diátaxis** (four documentation modes) applied through **Ignite UI's house templates**. +**This file is a routing hub only: no section blueprints, no field rules, no check lists live +here.** The templates and the API surface both change; never author or judge from memory — read the +reference files the task needs, then act. + ## Two modes of operation - **Create** — draft a new topic (component, concept/guide, or category/index) to the standard. @@ -27,18 +38,6 @@ documentation modes) applied through **Ignite UI's house templates**. Detect which from the request ("write/draft/create" → Create; "review/audit/check/fix/standardize" → Audit). If a topic file or content is supplied, default to Audit unless they ask for a rewrite. -## Reference files — load what the task needs - -- `references/diataxis-cheatsheet.md` — the four modes + the compass. Load when classifying a topic - or diagnosing mode-bleed. -- `references/house-style.md` — sections, order, naming, frontmatter, sample/token mechanics, both - doc sets. Load for **every** create or audit. -- `references/audit-rubric.md` — the checkable rules + report format. Load for **every** audit. - -Read `house-style.md` before writing or judging any topic — it carries the mechanical details -(frontmatter fields, ``/`` syntax, Angular-vs-xplat differences) that aren't -in this file. - ## Step 0 — Classify with the compass (always first) Before writing or auditing, decide what *kind* of documentation the page is, using the compass from @@ -47,162 +46,54 @@ the cheat-sheet: > **action or cognition?** × **acquisition (study) or application (work)?** > → tutorial · how-to · reference · explanation -- A **component page** is a *composite* (see below). -- A **concept / guide overview** is **explanation**. -- A **category / index overview** is **reference/navigation** (a map). -- A standalone **"How to …" article** is a **how-to guide** — keep it single-mode. - -If a request is ambiguous ("document X"), state which topic type you're producing and why, in one -line, before proceeding. +A **component page** is a *composite* (below). A **concept / guide overview** is **explanation**. +A **category / index overview** is **reference/navigation** (a map). A standalone **"How to …" +article** is a **how-to guide** — keep it single-mode. If a request is ambiguous ("document X"), +state which topic type you're producing and why, in one line, before proceeding. ## The composite-topic principle (the heart of this skill) -Pure Diátaxis says keep the four modes in **separate** documents. Ignite UI **component topics -deliberately don't** — one page carries a live demo, a how-to (Getting Started/Usage), -decision guidance in Usage's final Do/Don't subsection, and reference tables -(Properties/Methods/Events). That is fine **because each *section* owns exactly one mode.** The rule -that makes it work: +Pure Diátaxis keeps the four modes in separate documents. Ignite UI component topics deliberately +carry all four on one page — a live demo, how-to sections, decision guidance, reference tables. +That works **because each *section* owns exactly one mode**: > **One section, one mode. No mode-bleed.** Each section stays in its assigned Diátaxis mode; when a > second mode wants in, move it to the section that owns it and cross-link. -Section → mode map (full contents in `house-style.md`): - -| Section | Mode | Stays out of | -|---|---|---| -| Live Demo | demonstration (action) | prose/explanation | -| Anatomy: visual + DOM tree / skeleton | orientation (reference) | opinion, install steps | -| Getting Started, Usage | **how-to** | *why* explanations, exhaustive option lists | -| Getting Started → Prerequisites and Version Compatibility | reference / how-to | unverified support claims, migration history | -| Usage → Do/Don't | **explanation** | install steps, code, API detail | -| Properties / Methods / Events | **reference** | instructions, opinion | -| Styling (`### Sass Theming`, `### Tailwind`, …) | how-to (steps) + reference (tables) | conceptual essays | -| Accessibility | reference (keyboard/ARIA/compliance tables) | tutorials, marketing, unverified conformance claims | -| Troubleshooting | how-to (cause → fix) | background theory | -| Known Limitations | **reference** | troubleshooting fixes, tutorials, unverified claims | -| API References / Dependencies / Additional Resources / Related Components / FAQ | reference / navigation | new teaching | - -Concrete mode-bleed to catch: a *why* paragraph inside **Usage** (→ move to Do/Don't or a concept -topic, link back); "how to build X" prose inside **Properties** (→ move to Usage; keep the table -descriptive); an exhaustive option list written out in **Usage** prose (→ move to the table). The -cheat-sheet's "two classic confusions" section explains the reasoning. - -## Create workflow - -1. **Classify** (Step 0). Name the topic type. -2. **Pick the doc set & framework.** Angular set = its own file, plain prose. xplat set = one file - for React/WC/Blazor using `{Platform}`/`{ProductName}` tokens and ``. Load - the relevant details from `house-style.md`. -3. **Follow the verification workflow** in `house-style.md` before writing technical content. - Existing snippets and old prose are clues, not authority. For component topics, also inspect the - matching Indigo.Design component documentation under - `https://www.infragistics.com/products/indigo-design/help/components/` and use its component - structure as input for Usage subsection suggestions. -4. **Write frontmatter first** — apply the same metadata contract to every topic type, including - category/index topics: `title`, `description` (answer-shaped, ≤~160 chars), `keywords`, `license`, - `last_updated`, `llms.description`, and `mentionedTypes` (xplat). Use `relatedComponents` only - for component topics with close siblings. For xplat component topics, `title` uses the - `{ComponentTitle}` token convention. For xplat category/index topics, use a concise, - framework-neutral category title without `{Platform}` or `{ProductName}` tokens, for example - `title: "Grids and Tables"`. The site layout renders `last_updated`. -5. **Lay out the canonical sections** in order for that topic type, required ones always present. - Feature-specific content goes as sub-headings under **Usage**, never as new top-level sections. -6. **Fill each section in its mode.** Lead every section with one plain, specific sentence. Put - reference in tables. In **Usage**, add property-focused sub-sections so every public input is - shown with a minimal snippet; group only tightly coupled properties that form one behavior. Keep - existing useful subsections, then compare against Indigo.Design's component sections by meaning, - not by exact heading name, to suggest or add any missing runtime-relevant Usage subsections. - End **Usage** with `### Do/Don't`, using inline **When to use:** - and **When not to use:** labels rather than nested headings, plus the matching guidance image - from the Indigo.Design documentation or a `{/* TODO */}` marker when the asset is not available. - Add a required `## Live Demo` section - with exactly one top ``, then Usage samples only for distinct tasks (soft max 5/page). - Phrase Do/Don't and Troubleshooting as the reader's real questions. Include the required - `### Prerequisites and Version Compatibility` subsection under **Getting Started**, and the - required **Known Limitations**, **Related Components**, and **FAQ** sections in their canonical - positions. - For samples, use the shared Astro `Sample` component and verify its `src`, display props, and - descriptive `alt`. For Anatomy, import and use the shared Astro `Anatomy` component with a - verified anatomy image, name, description, and alt text; keep the verified DOM tree or skeleton - below it. For FAQ content, import and use the shared Astro `Faq` and `FaqItem` components. In slot mode, - set `indicatorPosition="end"` on every `FaqItem`, because the value on `Faq` does not flow into - slotted children. When auditing, flag plain FAQ headings or custom accordion markup and convert - each question/answer pair to an `FaqItem` while keeping the answer concise and component-specific. - A verified `### Known Limitations` subsection may live inside `## Troubleshooting` when the - limitations are directly related to the troubleshooting guidance; do not duplicate it as a - separate top-level section. -7. **Self-check against the rubric** before presenting — especially mode-bleed (C-checks) and - metadata (D-checks). Fix, then deliver the `.mdx`. - -### Category/index topics use a separate structure - -Do not apply the component-topic blueprint to a category or index page. A category overview is a -reference/navigation map, not a composite component page. Its structure is: - -Apply the common metadata contract to category/index topics as well. Their frontmatter must include -`title`, `description`, `keywords`, `license`, `last_updated`, `llms.description`, and -`mentionedTypes` when the xplat category references generated API types. The category `title` is -the plain category name only, without `{Platform}` or `{ProductName}` tokens; for example, -`title: "Grids and Tables"`. Keep platform and product tokens in the description, keywords, visible -heading, and prose where they are needed. Do not render `last_updated` as visible MDX text. - -1. `#` title followed by a concise introductory block: a clear category definition and, when needed, - brief context about its scope or purpose. -2. `## Key Features` immediately after the title and introductory block. Open with a short sentence, then present - the category's capabilities in a compact table with `Feature`, `Description`, and `Benefits` - columns when the content is naturally scannable. Use `## Types` or `## Members` as a top-level - navigation section when the category maps component types. Make `Types` the parent navigation - section and make each - concrete type, such as `{Platform} Data Grid`, `{Platform} List`, or `{Platform} Tree Grid`, a - separate navigable `###` subsection beneath it. Include a verified `` for every type - entry, together with a concise definition and verified link. Additional - feature groups can follow as subsections inside `Key Features`. -3. `## Next Steps`. -4. `## Accessibility`, with the same three verified subsections used by component topics. -5. `## API References`. -6. `## Additional Resources`. -7. `## FAQ`, using the shared Astro `Faq` and `FaqItem` components. - -Do not add component-only `When to Use`, `When Not to Use`, `Live Demo`, `Getting -Started`, `Usage`, `Properties`, `Accessibility`, or `Troubleshooting` sections -to the category introduction. Put selection guidance in the category definition or the relevant -type/member entry, and put each demo inside the entry it demonstrates. Supporting content such as -browser support, support options, licensing, and FAQ belongs after the navigation sections as -subsections of the page's main structure, not as additional top-level category sections. - -## Audit workflow - -1. **Classify** the topic and identify its doc set (Angular vs xplat) and type. -2. **Follow the verification workflow** in `house-style.md` before judging technical content. - Old snippets/prose are never the source of truth by themselves. For component topics, inspect the - matching Indigo.Design component documentation and compare its structure to the topic's Usage - subsections by semantic content, not heading text, before making Usage-coverage suggestions. -3. **Run every check** in `references/audit-rubric.md` — structure/order (A), naming (B), Diátaxis - mode integrity (C), metadata/AI-readiness and correctness (D), samples/links (E), formatting and - snippet currency (F). For mode integrity, run the compass on each section and flag drift. - For detailed frontmatter-only audits or normalization, use the companion - `igniteui-topic-frontmatter` skill; for full topic audits, apply only the basic metadata checks - here unless the user asks for frontmatter suggestions. -4. **Report** in the rubric's exact format: Verdict → Summary → Findings (each with Where / Issue / - Principle / Fix) → Quick wins. Order findings Error → Warning → Suggestion. -5. Keep every **Fix** concrete and applyable (the corrected heading, the sentence to move, the table - to add). If the topic is already clean, say so and note what it does well — don't invent problems. - -## Grounding notes - -- The live `vnext` repo is **pre-standardization**: expect drifted headings (`## Angular Rating - Example`, `## Configuration`) and a missing `relatedComponents` field. Author to the **target** - standard; audit against it while recognizing current reality. +The section → mode map is the "Diátaxis mode" column of the canonical section table in +`references/house-style.md`. Concrete mode-bleed to catch: a *why* paragraph inside **Usage** +(→ move to Do/Don't or a concept topic, link back); "how to build X" prose inside **Properties** +(→ move to Usage; keep the table descriptive); an exhaustive option list written out in **Usage** +prose (→ move to the table). The cheat-sheet's "two classic confusions" section explains the +reasoning. + +## Task → Reference file + +| Task | Reference file to read | +|---|---| +| Classifying a topic or a section; diagnosing mode-bleed | [`references/diataxis-cheatsheet.md`](./references/diataxis-cheatsheet.md) | +| **Every create or audit:** section order and blueprints (component, concept, category), frontmatter contract, naming reconciliation, entity terminology, sample/token/`` mechanics, verification workflow, voice, formatting | [`references/house-style.md`](./references/house-style.md) | +| **Every create:** the step-by-step authoring workflow (scaffold → sections → self-check), including the category/index structure | [`references/create-workflow.md`](./references/create-workflow.md) | +| **Every audit:** the audit workflow, all checkable rules (A–F), and the report format | [`references/audit-rubric.md`](./references/audit-rubric.md) | +| Detailed frontmatter-only audits or normalization | the companion [`igniteui-topic-frontmatter`](../igniteui-topic-frontmatter/SKILL.md) skill; for full topic audits, apply only the rubric's basic metadata checks unless the user asks for frontmatter suggestions | + +> **When in doubt, read more rather than fewer reference files.** The cost of an unnecessary read is +> negligible; the cost of a hallucinated API name or a drifted section heading is a broken page that +> poisons AI answers. + +## Grounding boundaries (apply in both modes) + - **Invent no verifiable identifier (zero-risk rule).** Never emit a guessed tag, class, package, - property, method, event, CSS part, or theming variable — a plausible-but-wrong name a reader copies is - worse than a visible gap. Use an identifier only when verified (typed API source, an existing topic, - or the user); otherwise write `‹VERIFY: …›`. For Properties/Methods/Events, emit the fixed column - headers plus a build-injection note and leave the rows to the generator. React/Blazor wrapper symbols - resolve to the `igc` core — prefer verified `igc` usage and mark unconfirmed wrapper names `‹VERIFY:…›`. - (Full detail in `house-style.md` → "Never fabricate API identifiers".) -- Prefer paraphrase and the standard section names over copying any existing topic's prose verbatim. -- **Write in one voice and verify every claim** (see house-style → *Voice & tone* and *Verify every - claim against the component*): instruct in the imperative/second person, and check every factual - statement — defaults, behavior, version support, DOM — against the MCP/API-doc source, the official - platform API docs, typed source when needed, or official framework docs before writing it or - recommending it as an edit. Don't "correct" prose into a plausible claim you haven't verified. + property, method, event, CSS part, theming variable, or ``/`` target — a + plausible-but-wrong name a reader copies is worse than a visible gap. Verified sources only; + otherwise write `‹VERIFY: …›`. Full detail: house-style → "Never fabricate API identifiers". +- **Verify every claim against the component** (defaults, behavior, version support, DOM) through + the verification workflow in house-style — MCP source first, then official platform API docs, + typed source, official framework docs. Existing topic prose and snippets are evidence to check, + never a source of truth. Don't "correct" prose into a plausible claim you haven't verified. +- **One voice:** imperative, second person, present tense; no marketing in instructional prose + (house-style → "Voice & tone"). +- The live `vnext` repo is **pre-standardization**: expect drifted headings and missing + `relatedComponents`. Author to the target standard; audit against it while recognizing current + reality. Prefer paraphrase and the standard section names over copying any existing topic's prose + verbatim. diff --git a/.ai/skills/igniteui-doc-topics/references/audit-rubric.md b/.ai/skills/igniteui-doc-topics/references/audit-rubric.md index c065d3f086..2a1c986d11 100644 --- a/.ai/skills/igniteui-doc-topics/references/audit-rubric.md +++ b/.ai/skills/igniteui-doc-topics/references/audit-rubric.md @@ -1,8 +1,29 @@ # Audit rubric -The checkable rules for **audit mode**, and the report format to produce. Every finding maps to a -concrete rule below (structure, naming, Diátaxis mode, or metadata) and to a fix. Detail lives in -`house-style.md`; the *why* behind mode findings lives in `diataxis-cheatsheet.md`. +Version: v3 · 2026-08-14 · igniteui doc-skill set. Before editing, confirm this version line against +`.ai/skills/CHANGELOG.md`. + +The audit workflow, the checkable rules for **audit mode**, and the report format to produce. Every +finding maps to a concrete rule below (structure, naming, Diátaxis mode, or metadata) and to a fix. +Detail lives in `house-style.md`; the *why* behind mode findings lives in `diataxis-cheatsheet.md`. + +## Audit workflow + +1. **Classify** the topic (SKILL.md Step 0) and identify its doc set (Angular vs xplat) and type. +2. **Follow the verification workflow** in `house-style.md` before judging technical content. + Old snippets/prose are never the source of truth by themselves. For component topics, inspect the + matching Indigo.Design component documentation and compare its structure to the topic's Usage + subsections by semantic content, not heading text, before making Usage-coverage suggestions. +3. **Run every check** below — structure/order (A), naming (B), Diátaxis mode integrity (C), + metadata/AI-readiness and correctness (D), samples/links (E), formatting and snippet currency (F). + For mode integrity, run the compass on each section and flag drift. For detailed frontmatter-only + audits or normalization, use the companion `igniteui-topic-frontmatter` skill; for full topic + audits, apply only the basic metadata checks here unless the user asks for frontmatter + suggestions. +4. **Report** in the exact format at the end of this file: Verdict → Summary → Findings (each with + Where / Issue / Principle / Fix) → Quick wins. Order findings Error → Warning → Suggestion. +5. Keep every **Fix** concrete and applyable (the corrected heading, the sentence to move, the table + to add). If the topic is already clean, say so and note what it does well — don't invent problems. ## Severity @@ -55,8 +76,9 @@ content for them. reference/how-to content that belongs in Getting Started, another Usage subsection, Properties, or Accessibility instead of do/don't guidance. - A11 (Warning) **FAQ** uses plain question headings or hand-written accordion markup instead of - the shared Astro `` / `` components, or does not keep each answer concise and - component-specific. + the shared Astro `` / `` components, does not keep each answer concise and + component-specific, or an answer is not 2–4 self-contained sentences quotable without its question + (dangling "it"/"this", no subject noun). - A12 (Warning) A slot-mode FAQ does not set `indicatorPosition="end"` on every ``; setting it only on `` does not affect slotted children. - A13 (Warning) A component topic uses a hand-written anatomy image block instead of the shared @@ -69,7 +91,17 @@ content for them. - B3 (Suggestion) Singular/plural or casing mismatch (`API Reference` → `API References`). - B4 (Warning) H1 carries a framework prefix or an "Overview" suffix → standard H1 is `‹Component› Component` (e.g. `# Angular Avatar Component Overview` → `# Avatar Component`). + Pending `‹VERIFY: layout H1/framework adjacency, both doc sets›`: if the layout renders the + framework/product adjacent to the H1 (template heading, breadcrumb, or HTML title), B4 stands as + written; if it does not, B4 reverses for the Angular set and the H1 carries the framework (the + head query is "angular ‹component› component"). Until answered, report B4 findings with this + dependency noted. - B5 (Warning) A **Usage** sub-heading repeats the component name (`### Avatar Shape` → `### Shape`). +- B6 (Warning) Body prose or a heading drifts from canonical entity naming (see house-style → + Entity terminology): "datagrid" as one word outside quoted API symbols, "grid component" as + subject noun, silent "table"/"data table" drift, product-name abbreviation drift ("IgniteUI", + "AppBuilder"), bare "grid" as a standalone entity name, or a sibling compound not fully qualified + (Tree Grid, Hierarchical Grid, Pivot Grid). ### C. Diátaxis mode integrity (mode-bleed) Run the compass on each section; flag content that has drifted out of the section's assigned mode. @@ -100,8 +132,12 @@ Run the compass on each section; flag content that has drifted out of the sectio - D1 (Warning) `relatedComponents` is set but **Usage**'s **Do/Don't** guidance doesn't name the specific sibling(s) by name and link them — or vice-versa, it names a sibling that isn't listed in `relatedComponents`. -- D2 (Warning) Missing/weak `description` or `llms.description` (not answer-shaped, or >~160 chars). -- D3 (Warning) Section opens with no plain lead sentence, or with empty boilerplate. +- D2 (Warning) Missing/weak `description` or `llms.description` (not answer-shaped, not + definition-first, page-referential ("This topic shows…"), or >~160 chars). The full field contract + lives in house-style → "File format & frontmatter"; for a field-by-field audit, hand off to the + companion `igniteui-topic-frontmatter` skill. +- D3 (Warning) Section opens with no plain lead sentence naming the component (or platform token), + or with empty boilerplate. - D4 (Warning) A section relies on "as mentioned above" / isn't self-contained. - D5 (Warning) Properties/Methods/Events appear hand-written rather than from the typed source. - D6 (Suggestion) Styling variables undocumented where the component is themeable. @@ -130,6 +166,10 @@ Run the compass on each section; flag content that has drifted out of the sectio source, a conformance-table row not traceable to behavior verified on the page or in source, an "N/A" filler row for an irrelevant criterion, or an invented testing/AT matrix or VPAT link. Fix: criterion-level rows tied to observable behavior, or `‹VERIFY:…›`. +- D13 (Warning) **Quotability** — run the quotability test on the H1 lead sentence, each section + lead, each FAQ answer, and `llms.description`: if an assistant answered the page's target query + (or the section's sub-query) today, is this the sentence it would quote? A surface where no + sentence passes is a finding; page-referential phrasing ("This topic shows how to…") never passes. ### E. Samples & links - E1 (Warning) `` missing an `alt`. @@ -143,6 +183,9 @@ Run the compass on each section; flag content that has drifted out of the sectio class (e.g. `ButtonBase`): the link renders (e.g. `IgrButtonBase`) but points nowhere. Verify the `type` appears as an `` target elsewhere in the doc set; link base-class members through the concrete component (`type="Button" member="href"`) instead. +- E7 (Warning) A prose link uses non-descriptive anchor text ("here", "click here", "this link", a + bare URL) instead of descriptive, entity-bearing anchor text ("Ignite UI Angular Data Grid + documentation"). `` covers API links; this check covers body links. ### F. Formatting & altitude - F1 (Suggestion) A `ul`/`ol` with a single item that should be a paragraph. diff --git a/.ai/skills/igniteui-doc-topics/references/create-workflow.md b/.ai/skills/igniteui-doc-topics/references/create-workflow.md new file mode 100644 index 0000000000..4d2b677c27 --- /dev/null +++ b/.ai/skills/igniteui-doc-topics/references/create-workflow.md @@ -0,0 +1,98 @@ +# Create workflow + +Version: v3 · 2026-08-14 · igniteui doc-skill set. Content carried from SKILL.md v2 unchanged; +restructured into this reference so the workflow can evolve without touching the router. Blueprints, +mechanics, and the frontmatter contract live in `house-style.md`; run the rubric self-check from +`audit-rubric.md` before delivering. + +## Steps + +1. **Classify** (Step 0 in SKILL.md). Name the topic type. +2. **Pick the doc set & framework.** Angular set = its own file, plain prose. xplat set = one file + for React/WC/Blazor using `{Platform}`/`{ProductName}` tokens and ``. Load + the relevant details from `house-style.md`. +3. **Follow the verification workflow** in `house-style.md` before writing technical content. + Existing snippets and old prose are clues, not authority. For component topics, also inspect the + matching Indigo.Design component documentation under + `https://www.infragistics.com/products/indigo-design/help/components/` and use its component + structure as input for Usage subsection suggestions. +4. **Scaffold frontmatter** — the metadata contract lives in `house-style.md` → "File format & + frontmatter"; this step orders the work, it does not restate the rules. Apply the contract to + every topic type, including category/index topics. + - **Before the body (fixed by convention):** `title` (xplat component topics use the + `{ComponentTitle}` token; xplat category/index topics use a concise, framework-neutral category + name without `{Platform}` or `{ProductName}` tokens, for example `title: "Grids and Tables"`; + Angular topics follow the title rule in the frontmatter skill), `license`, `last_updated` + (maintained by the topic workflow; the site layout renders it), and `tableOfContents` when used. + - **After the body is finished — generated from it, never from imagination:** `description`, + `llms.description`, `keywords`, `mentionedTypes` (xplat), and `relatedComponents` (component + topics with close siblings only). Then run the companion `igniteui-topic-frontmatter` skill's + cross-field consistency and body-support checks before delivery. +5. **Lay out the canonical sections** in order for that topic type, required ones always present. + Feature-specific content goes as sub-headings under **Usage**, never as new top-level sections. +6. **Fill each section in its mode**, in five passes: + - **6a — Leads and modes.** Lead every section with one plain, specific sentence that names the + component (and platform token where the set uses them). Keep each section in its assigned mode; + put reference content in tables. Phrase Do/Don't and Troubleshooting as the reader's real + questions. + - **6b — Usage coverage.** Add property-focused sub-sections so every public input is shown with + a minimal snippet; group only tightly coupled properties that form one behavior. Keep existing + useful subsections, then compare against Indigo.Design's component sections by meaning, not by + exact heading name, to suggest or add any missing runtime-relevant Usage subsections. + - **6c — Do/Don't.** End **Usage** with `### Do/Don't`, using inline **When to use:** + and **When not to use:** labels rather than nested headings, plus the matching guidance image + from the Indigo.Design documentation or a `{/* TODO */}` marker when the asset is not available. + - **6d — Required components.** Add a required `## Live Demo` section with exactly one top + ``, then Usage samples only for distinct tasks (soft max 5/page). For samples, use the + shared Astro `Sample` component and verify its `src`, display props, and descriptive `alt`. For + Anatomy, import and use the shared Astro `Anatomy` component with a verified anatomy image, + name, description, and alt text; keep the verified DOM tree or skeleton below it. For FAQ + content, import and use the shared Astro `Faq` and `FaqItem` components. In slot mode, set + `indicatorPosition="end"` on every `FaqItem`, because the value on `Faq` does not flow into + slotted children. When auditing, flag plain FAQ headings or custom accordion markup and convert + each question/answer pair to an `FaqItem` while keeping the answer concise and + component-specific. + - **6e — Required sections check.** Include the required `### Prerequisites and Version + Compatibility` subsection under **Getting Started**, and the required **Known Limitations**, + **Related Components**, and **FAQ** sections in their canonical positions. A verified + `### Known Limitations` subsection may live inside `## Troubleshooting` when the limitations + are directly related to the troubleshooting guidance; do not duplicate it as a separate + top-level section. +7. **Self-check against the rubric** (`audit-rubric.md`) before presenting — especially mode-bleed + (C-checks) and metadata (D-checks). Fix, then deliver the `.mdx`. + +## Category/index topics use a separate structure + +Do not apply the component-topic blueprint to a category or index page. A category overview is a +reference/navigation map, not a composite component page. Its structure is: + +Apply the common metadata contract to category/index topics as well. Their frontmatter must include +`title`, `description`, `keywords`, `license`, `last_updated`, `llms.description`, and +`mentionedTypes` when the xplat category references generated API types. The category `title` is +the plain category name only, without `{Platform}` or `{ProductName}` tokens; for example, +`title: "Grids and Tables"`. Keep platform and product tokens in the description, keywords, visible +heading, and prose where they are needed. Do not render `last_updated` as visible MDX text. + +1. `#` title followed by a concise introductory block: a clear category definition and, when needed, + brief context about its scope or purpose. +2. `## Key Features` immediately after the title and introductory block. Open with a short sentence, then present + the category's capabilities in a compact table with `Feature`, `Description`, and `Benefits` + columns when the content is naturally scannable. Use `## Types` or `## Members` as a top-level + navigation section when the category maps component types. Make `Types` the parent navigation + section and make each + concrete type, such as `{Platform} Data Grid`, `{Platform} List`, or `{Platform} Tree Grid`, a + separate navigable `###` subsection beneath it. Include a verified `` for every type + entry, together with a concise definition and verified link. Additional + feature groups can follow as subsections inside `Key Features`. +3. `## Next Steps`. +4. `## Accessibility`, with the same three verified subsections used by component topics. +5. `## API References`. +6. `## Additional Resources`. +7. `## FAQ`, using the shared Astro `Faq` and `FaqItem` components. + +Do not add component-only `When to Use`, `When Not to Use`, `Live Demo`, `Getting +Started`, `Usage`, `Properties`, `Accessibility`, or `Troubleshooting` sections +to the category introduction. Put selection guidance in the category definition or the relevant +type/member entry, and put each demo inside the entry it demonstrates. Supporting content such as +browser support, support options, licensing, and FAQ belongs after the navigation sections as +subsections of the page's main structure, not as additional top-level category sections. diff --git a/.ai/skills/igniteui-doc-topics/references/diataxis-cheatsheet.md b/.ai/skills/igniteui-doc-topics/references/diataxis-cheatsheet.md index 2ef9bceeac..17c8f3622e 100644 --- a/.ai/skills/igniteui-doc-topics/references/diataxis-cheatsheet.md +++ b/.ai/skills/igniteui-doc-topics/references/diataxis-cheatsheet.md @@ -1,5 +1,8 @@ # Diátaxis cheat-sheet +Version: v3 · 2026-08-14 · igniteui doc-skill set (content unchanged; version line added for the +set-wide match check). Before editing, confirm this version line against `.ai/skills/CHANGELOG.md`. + Condensed from https://diataxis.fr (tutorials, how-to, reference, explanation, compass). This is the *reasoning layer*. For how the four modes attach to Ignite UI sections, see `house-style.md`. Read this whenever you're unsure what kind of content a topic — or a single diff --git a/.ai/skills/igniteui-doc-topics/references/house-style.md b/.ai/skills/igniteui-doc-topics/references/house-style.md index b214eb1ba5..baaee48eaf 100644 --- a/.ai/skills/igniteui-doc-topics/references/house-style.md +++ b/.ai/skills/igniteui-doc-topics/references/house-style.md @@ -1,7 +1,30 @@ # Ignite UI house style +Version: v3 · 2026-08-14 · igniteui doc-skill set (content unchanged from v2; set-wide version +bump). Before editing, confirm this version line against `.ai/skills/CHANGELOG.md`. The "File format & frontmatter" section below is the **single normative +field contract** for the doc-skill set; the two SKILL.md files reference it rather than restating it. + The Ignite UI documentation conventions an authored or audited topic must follow. Pair this with -`diataxis-cheatsheet.md` (the *why*) and the section→mode map in `SKILL.md`. +`diataxis-cheatsheet.md` (the *why*); the section→mode map is the "Diátaxis mode" column of the +canonical section table below. + +## Contents + +- [Two doc sets](#two-doc-sets) +- [File format & frontmatter](#file-format--frontmatter) — the normative field contract +- [Per-framework mechanics](#per-framework-mechanics) +- [Never fabricate API identifiers (zero-risk rule)](#never-fabricate-api-identifiers-zero-risk-rule) +- [Verification workflow](#verification-workflow) +- [Component topic — canonical section order](#component-topic--canonical-section-order) — incl. FAQ + component, reference-table contract, Usage coverage, Indigo.Design suggestions, Live Demo contract, + `` configuration, Accessibility sub-structure +- [Overview topics](#overview-topics) — concept/guide and category/index blueprints +- [Naming reconciliation (drift → standard)](#naming-reconciliation-drift--standard) +- [Entity terminology (canonical names)](#entity-terminology-canonical-names) +- [Write-for-both-audiences rules](#write-for-both-audiences-rules-people--ai-assistants) +- [Formatting & altitude](#formatting--altitude) +- [Voice & tone](#voice--tone) +- [Verify every claim against the component](#verify-every-claim-against-the-component) > **Current vs target state.** The live `vnext` repo is *pre-standardization* — many topics use > drifted headings (e.g. `## Angular Rating Example`, `## Configuration`). This file describes the @@ -22,27 +45,45 @@ covers modules to import (Angular) or supporting components/themes required to r ## File format & frontmatter +**This section is the single normative field contract for the doc-skill set.** The companion +`igniteui-topic-frontmatter` skill audits against it and carries the audit procedure and severities; +`igniteui-doc-topics` Create step 4 orders the work. Where wording differs anywhere, this section +wins. + Topics are **Astro `.mdx`**. Frontmatter is YAML. Observed + target fields: ```yaml --- title: "{ComponentTitle}" # xplat component title; the layout appends the resolved product name -description: "…" # <=~160 chars, shaped as an answer ("X is a … that …") -keywords: "…" # comma-separated +description: "…" # <=~160 chars, definition-first ("X is a … that …"); complete sentences, never ellipsis-truncated +keywords: "…" # comma-separated; legacy/internal — every keyword appears in the body license: MIT mentionedTypes: ["Rating"] # xplat: API types referenced on the page llms: - description: "…" # AI-facing one-liner; the exact text an assistant uses to summarize + description: "…" # AI-facing one-liner; defines the component, not the page — the exact text an assistant quotes last_updated: "YYYY-MM-DD" # required for every topic; rendered by the site layout relatedComponents: [Toast, Banner] # TARGET field — drives the Usage Do/Don't trigger (see below) --- ``` - **`llms.description`** already exists in both sets and is high-value — write it as a crisp, - self-contained answer sentence. It is *not* optional filler. + self-contained answer sentence that **defines the component (or concept), never the page**: subject + noun names the product and component, no pronouns, no "This topic shows…". It is *not* optional + filler. The `llms.description`, the H1 lead sentence, and the site's llms-manifest entry should be + the same sentence or trivial variants of it: one definition, emitted everywhere the machine looks. +- **`description`** is definition-first ("The is a … that …"), not imperative task + phrasing ("Use X to …"); complete declarative sentences, written to fit <=~160 characters, never + truncated with an ellipsis. +- **Cross-field consistency:** `title`, `description`, `llms.description`, `keywords`, the H1, and + the lead sentence tell one story with the same entity names and the same capability list; the lead + sentence mirrors `llms.description`. +- **Body support:** every capability named in `description`, `llms.description`, or `keywords` is + supported by the finished body. Content-bearing fields are generated from the finished body, never + from imagination (see `create-workflow.md`, step 4). - **`title`** uses `"{ComponentTitle}"` for xplat topics because the layout appends the resolved product name to the HTML title. Do not add a framework-specific suffix or duplicate the framework in - the component phrase. + the component phrase. Angular-set titles follow the frontmatter skill's title rule + (`"Angular Component"`, query-relevant terms within ~60 characters). - **`relatedComponents`** is the revision-2 trigger and is **not yet in the repo**. When authoring to target, set it. When auditing, treat a missing-but-warranted value as a finding, and a set value with no **Usage** → **Do/Don't** guidance as a hard error. @@ -174,6 +215,13 @@ headings or hand-written accordion markup. Import `Faq` and `FaqItem` from children. Prefer slot mode so answers can contain normal MDX, links, code blocks, and other components. Keep the FAQ questions component-specific and concise; do not move troubleshooting content into the FAQ merely to populate it. + +Each answer is **2–4 self-contained sentences, quotable without its question**: restate the subject +noun, no dangling "it"/"this". Draw questions from the predictable fan-out for the component: +licensing/pricing, framework and version support, migration, accessibility, and +"is ‹Component› right for ‹use case›". An FAQ whose answers cannot stand alone is markup without +retrieval value — FAQ answers are among the most-quoted chunks on the page. + **When Not to Use trigger:** every component topic ends **Usage** with `### Do/Don't`. This subsection must include the matching guidance image from the Indigo.Design documentation before the guidance text. Use a repo-owned image import with ``; if the visual asset does not exist yet, leave a @@ -333,18 +381,40 @@ a single "Why {ProductName}" section — never thread it through instructional c | WAI-ARIA Support; Compliance; Section 508; Accessibility Statement | **`### Accessibility Compliance`** (under **Accessibility**) | | Best Practices; Do's and Don'ts; Guidelines; Recommendations | **Do/Don't** (as the final `###` under **Usage**) | | Theming (H2) | **Styling** (H2); the Sass approach becomes `### Sass Theming` under it | -| Known Limitations; Known Issues and Limitations; Limitations | **Troubleshooting** | +| Known Issues and Limitations; Limitations; Known Issues | **Known Limitations** (a required top-level section; it may live as `### Known Limitations` under **Troubleshooting** only when the limitations directly support that troubleshooting guidance — see section 12. Troubleshooting *fixes* found under a limitations heading move to **Troubleshooting**.) | | API; API Reference (singular) | **API References** | | Theming Dependencies | **Dependencies** | +## Entity terminology (canonical names) + +Source: blog-creator product-context v4 · 2026-08-14. This table is a governed copy: when the blog +set's terminology table changes, update this section in the same change and keep both version lines +aligned. Docs are the highest-authority entity signal the site emits — assistants consolidate +entities from repeated identical naming, and drift fragments the association. These names bind body +prose, headings, and frontmatter alike; the frontmatter skill audits the metadata side, rubric B6 +audits the body side. + +- Canonical component term: **"[Framework] Data Grid"** (title case): "Angular Data Grid", "React + Data Grid", "Web Components Data Grid", "Blazor Data Grid". Permitted shorthand after first + mention: "the Data Grid". In the xplat set, write it with the token: "{Platform} Data Grid". +- Sibling components are fixed compounds, always fully qualified: **Tree Grid, Hierarchical Grid, + Pivot Grid**. Bare "grid" only as a common noun inside feature phrases ("grid features", "bind the + grid to data"); never as the standalone entity name, never in titles or headings. +- Banned entity synonyms: "datagrid" (one word, except when quoting an API symbol), "grid component" + as subject noun, silent drift to "table"/"data table". Ecosystem synonyms stated once as an + explicit equivalence are fine ("row pinning (also known as frozen rows)"). +- Product names verbatim: "Ignite UI for Angular", "App Builder"; no abbreviation drift ("IgniteUI", + "AppBuilder") in prose. In the xplat set, prefer `{ProductName}` where the resolved product name is + meant. + ## Write-for-both-audiences rules (people + AI assistants) 1. **One job per section** — self-contained; no "as mentioned above." A section must make sense landed-on cold. -2. **Lead each section with one plain, specific sentence** before any table/code — skip empty boilerplate. +2. **Lead each section with one plain, specific sentence that names the component** (with the platform token where the set uses them) before any table/code — skip empty boilerplate. Sections are the retrieval chunks; a chunk that never names its subject is invisible to the query that should retrieve it. 3. **Use the standard section names everywhere** — "Accessibility" always means the same thing. 4. **Phrase guidance/troubleshooting as real questions** — When-Not-to-Use is the highest-value content for answer accuracy; name the sibling explicitly. 5. **Reference lives in tables**, generated from the typed source. -6. **Strong `description` / `llms.description`** — <~160 chars, answer-shaped. +6. **Strong `description` / `llms.description`** — <~160 chars, answer-shaped, definition-first; `llms.description` defines the component, not the page (full contract in "File format & frontmatter"). 7. **Document theming variables** — variable · what it changes, in **one table for all themes**. No default-value column: defaults are per-theme values that live in the generated API reference, not the topic. ## Formatting & altitude diff --git a/.ai/skills/igniteui-topic-frontmatter/SKILL.md b/.ai/skills/igniteui-topic-frontmatter/SKILL.md index 11ab3566a3..3b326e53d8 100644 --- a/.ai/skills/igniteui-topic-frontmatter/SKILL.md +++ b/.ai/skills/igniteui-topic-frontmatter/SKILL.md @@ -7,154 +7,57 @@ description: >- identity in Ignite UI Angular or xplat documentation topics. This skill is strictly frontmatter-only: audit first and provide suggestions for the user to choose from before changing anything; never edit topic body content, headings, prose, samples, code snippets, links, tables, or - section structure. + section structure. For anything touching body content, structure, headings, prose, or samples, use + the companion igniteui-doc-topics skill instead. --- # Ignite UI topic frontmatter -Audit Ignite UI documentation topic frontmatter so pages have modern, uniform metadata for SEO, -generated schema, and LLM-readable manifests without touching the topic body. - -## Scope - -Only inspect and discuss the YAML frontmatter block between the opening and closing `---`. +Version: v3 · 2026-08-14 · igniteui doc-skill set. All set files carry this version line; before +editing any file, confirm the lines match across the set. The `.claude` adapter's `description` must +byte-match this file's `description`. Change log: `.ai/skills/CHANGELOG.md` · human-readable intent: +`.ai/skills/README.md`. -Do not edit or rewrite: +Audit Ignite UI documentation topic frontmatter so pages have modern, uniform metadata for SEO, +generated schema, and LLM-readable manifests — without touching the topic body. -- H1/H2/H3 headings -- intro paragraphs or body prose -- samples, code snippets, API tables, or links outside frontmatter -- section order or topic structure +**This file is a routing hub only: no audit rules, no field shapes, and no report formats live +here.** The metadata contract is precise and versioned; never audit or normalize from memory — read +the reference files first, then act. -If a metadata issue depends on body content, cite the body content only as evidence and suggest a -frontmatter change. Leave the body unchanged. +## Scope and operating mode -## Operating mode +Only inspect and discuss the YAML frontmatter block between the opening and closing `---`. Never +edit or rewrite headings, body prose, samples, code snippets, API tables, links outside frontmatter, +or section order. If a metadata issue depends on body content, cite the body only as evidence and +suggest a frontmatter change. -This skill is **audit-first**. +This skill is **audit-first**: 1. Read the topic's frontmatter. -2. Audit it against the rules below. -3. Return categorized findings and concrete replacement suggestions. -4. Stop. Do not edit the file until the user explicitly selects what to change. - -When the user later asks to apply selected suggestions, edit only the frontmatter fields involved in -those selected suggestions. - -## Doc sets - -- Angular topics live under `docs/angular/src/content//components/`. -- xplat topics live under `docs/xplat/src/content//components/` and may use tokens such as - `{Platform}`, `{ProductName}`, `{ComponentTitle}`, and `{ComponentKeywords}`. - -Keep valid platform tokens in xplat frontmatter. Do not replace them with a single concrete -framework name unless the topic itself is framework-specific. - -For xplat component metadata, avoid repeating the framework identity in the same field. The xplat -site layout already appends the resolved product name to the HTML title, so use -`title: "{ComponentTitle}"` and do not add `| {ProductName}` in topic frontmatter. Use `{ProductName}` in -`description` and `llms.description` when the resolved product name identifies the platform, and use -`{Platform}` in `keywords` or when the field genuinely needs the shorter platform label. - -## Expected fields - -Common fields: - -```yaml ---- -title: "..." -description: "..." -keywords: "..." -license: MIT -last_updated: "YYYY-MM-DD" -llms: - description: "..." ---- -``` - -Additional fields when relevant: - -```yaml -mentionedTypes: ["ComponentType"] -relatedComponents: [SiblingComponent] -_canonicalLink: "{environment:dvUrl}/components/..." -tableOfContents: - minHeadingLevel: 2 - maxHeadingLevel: 3 -``` - -The xplat component topic standard requires `last_updated`. Other optional fields should be -recommended only when the topic type or existing repo pattern warrants them. - -## Audit rules - -### Required quality checks - -- **Title:** present, concise, and topic-specific. All component topics use - `title: "{ComponentTitle}"` because the xplat site layout appends the resolved product name to the - HTML title. Do not add a framework-specific product suffix or duplicate the framework/platform in - the component phrase. Avoid "complete guide", "ultimate guide", - "try for free", and other marketing phrases. -- **Description:** present, about 140-160 characters when practical, answer-first, and specific - enough to stand alone in search results and generated schema. Avoid marketing calls to action. -- **`llms.description`:** present and more answer-shaped than the meta description. It should be a - single self-contained sentence that says what the topic/component is and what it helps developers - do. Prefer this over keyword stuffing. -- **Framework/package clarity:** frontmatter must not blur Angular, React, Web Components, and - Blazor APIs. Angular topics should identify Ignite UI for Angular when needed. xplat topics should - use `{Platform}` / `{ProductName}` tokens instead of hard-coded single-framework wording. -- **`license`:** present when the topic belongs to a doc set that uses license frontmatter. -- **`mentionedTypes`:** xplat component topics should list the concrete API types linked or - discussed by the page. Do not invent API type names; if unsure, flag as a verification issue. -- **`relatedComponents`:** recommend only for close sibling components that should affect Do/Don't - guidance. Do not add generic category neighbors just to fill the field. -- **`keywords`:** treat as legacy/internal metadata, not an SEO optimization surface. Keep it - coherent if present, but do not spend effort keyword-stuffing. If the repo later drops `keywords`, - remove it only when the user asks or a repo-level policy exists. -- **`_canonicalLink`:** do not invent. Flag inconsistent or suspicious canonical links, but require - an explicit canonical policy or nearby precedent before suggesting a replacement. -- **`last_updated`:** required for component topics. Use the `YYYY-MM-DD` format and keep the value - maintained by the topic workflow or another clear source of truth. - -### Severity - -- **Error:** missing required frontmatter for the doc set, malformed YAML, or metadata that clearly - misidentifies the component/framework. -- **Warning:** weak, inconsistent, misleading, too-long, or marketing-heavy metadata. -- **Suggestion:** polish, consistency improvements, optional fields, or policy-dependent changes. - -## Report format - -Use this shape: - -```md -# Frontmatter Audit: - -**Verdict:** -**Summary:** <1-2 sentences about the highest-value metadata fixes.> - -## Findings -### · -- **Field:** `` -- **Issue:** -- **Suggestion:** - -## Suggested Frontmatter Changes -| Field | Current | Suggested | Reason | -|---|---|---|---| -| `description` | ... | ... | ... | - -No file changes were made. Tell me which suggestions to apply. -``` - -If there are no issues, say that the frontmatter conforms and do not invent changes. - -## Applying selected suggestions - -When the user explicitly asks to apply one or more suggestions: - -1. Re-read the file. -2. Modify only the YAML frontmatter block. -3. Preserve unrelated frontmatter fields and field order where practical. -4. Do not edit body content after the closing `---`. -5. Run a focused diff check when available. +2. Read the reference files below, then audit against them. +3. Return categorized findings and concrete replacement suggestions in the standard report format. +4. Stop. Do not edit the file until the user explicitly selects what to change; then follow the + apply procedure in the report-format reference. + +## Task → Reference file + +| Task | Reference file to read | +|---|---| +| Any audit or normalization: field-by-field quality checks, doc-set/token rules, severity ladder | [`references/audit-rules.md`](./references/audit-rules.md) | +| The normative field contract — which fields exist, their shapes and quality bars (authoritative where wording differs) | [`../igniteui-doc-topics/references/house-style.md`](../igniteui-doc-topics/references/house-style.md) → "File format & frontmatter" | +| Canonical component/product naming for metadata values | [`../igniteui-doc-topics/references/house-style.md`](../igniteui-doc-topics/references/house-style.md) → "Entity terminology" | +| Producing the audit report; applying user-selected suggestions | [`references/report-format.md`](./references/report-format.md) | + +> **When in doubt, read more rather than fewer.** A missed field rule doesn't just weaken one page: +> docs metadata is the strongest entity signal the site emits, and drift fragments it. + +## Hard boundaries + +- **Never invent a canonical link.** Flag inconsistent or suspicious `_canonicalLink` values, but + require an explicit canonical policy or nearby precedent before suggesting a replacement. +- **Never invent API type names** for `mentionedTypes`; if unsure, flag as a verification issue. +- **Unresolved facts stay visible.** Use `‹VERIFY: …›` placeholders; never replace uncertainty with + a plausible value. +- **No edits before explicit user selection.** Findings and suggestions first, changes only on + request, and only to the fields the user selected. diff --git a/.ai/skills/igniteui-topic-frontmatter/references/audit-rules.md b/.ai/skills/igniteui-topic-frontmatter/references/audit-rules.md new file mode 100644 index 0000000000..3c43ab7590 --- /dev/null +++ b/.ai/skills/igniteui-topic-frontmatter/references/audit-rules.md @@ -0,0 +1,140 @@ +# Frontmatter audit rules + +Version: v3 · 2026-08-14 · igniteui doc-skill set. Content carried from SKILL.md v2 unchanged; +restructured into this reference so rules can evolve without touching the router. The normative +field contract lives in `../../igniteui-doc-topics/references/house-style.md` → "File format & +frontmatter"; where wording differs, house-style wins. + +## Doc sets and tokens + +- Angular topics live under `docs/angular/src/content//components/`. +- xplat topics live under `docs/xplat/src/content//components/` and may use tokens such as + `{Platform}`, `{ProductName}`, `{ComponentTitle}`, and `{ComponentKeywords}`. + +Keep valid platform tokens in xplat frontmatter. Do not replace them with a single concrete +framework name unless the topic itself is framework-specific. + +For xplat component metadata, avoid repeating the framework identity in the same field. The xplat +site layout already appends the resolved product name to the HTML title, so use +`title: "{ComponentTitle}"` and do not add `| {ProductName}` in topic frontmatter. Use `{ProductName}` in +`description` and `llms.description` when the resolved product name identifies the platform, and use +`{Platform}` in `keywords` or when the field genuinely needs the shorter platform label. + +## Expected fields + +Common fields: + +```yaml +--- +title: "..." +description: "..." +keywords: "..." +license: MIT +last_updated: "YYYY-MM-DD" +llms: + description: "..." +--- +``` + +Additional fields when relevant: + +```yaml +mentionedTypes: ["ComponentType"] +relatedComponents: [SiblingComponent] +_canonicalLink: "{environment:dvUrl}/components/..." +tableOfContents: + minHeadingLevel: 2 + maxHeadingLevel: 3 +``` + +The xplat component topic standard requires `last_updated`. Other optional fields should be +recommended only when the topic type or existing repo pattern warrants them. + +## Schema linkage + +Frontmatter feeds the generated page schema, so its quality bars are schema quality bars: +`description` should be usable verbatim as the schema description, and any FAQ schema the pipeline +emits must source its question/answer pairs verbatim from the visible FAQ content, never from +synthesized text (``). + +## Required quality checks + +- **Title:** present, concise, topic-specific, and shaped as the query a developer would type. + - **xplat component topics:** `title: "{ComponentTitle}"`; the xplat site layout appends the + resolved product name to the HTML title. Do not add a framework-specific product suffix or + duplicate the framework/platform in the component phrase. + - **Angular topics:** the Angular set has no tokens. Target shape: `"Angular Component"`, + aiming for <=60 characters of query-relevant terms. Do not hand-code category or brand suffixes + (`| Layouts | Infragistics`) in frontmatter unless the layout verifiably appends nothing + (``); suffixes are the layout's job, and hand-coded + ones spend title characters on non-query terms or double-brand the rendered title. Pre-committed + outcomes for that verification: if the layout appends a suffix, hand-coded suffixes are Errors + and titles strip to `"Angular Component"`; if it appends nothing, one short uniform + brand suffix (`| Ignite UI`) is standardized by convention, never improvised per page. + - Avoid "complete guide", "ultimate guide", "try for free", and other marketing phrases; also avoid + the blog-standard banned set ("revolutionary", "seamless", "game-changing", "best-in-class" + without a stated basis). +- **Description:** present, about 140-160 characters when practical, answer-first, and specific + enough to stand alone in search results and generated schema. Declarative and definition-first + ("The is a ... that ..."), not imperative task phrasing ("Use X to ..."), which is a + soft call to action. Complete sentences only: write to fit; never truncate with an ellipsis. Avoid + marketing calls to action. +- **`llms.description`:** present and more answer-shaped than the meta description: a single + self-contained sentence, <=~160 characters, that defines the **component** (or the concept the + topic covers) and what it does. It must survive verbatim extraction: the subject noun names the + product and component ("The Ignite UI for Angular Avatar is a component that ..."); no pronouns, + no capability list-dumps, and never page-referential phrasing ("This topic shows how to ..."): an + assistant answering "what is the {framework} {component}" quotes a definition of the component, + not a description of the page. Quotability test before accepting the value: is this the sentence + an assistant would quote for that query today? Prefer this over keyword stuffing. The + `llms.description`, the H1 lead sentence, and the site's llms-manifest entry for the page should + be the same sentence or trivial variants of it: one definition, emitted everywhere the machine + looks (``). +- **Entity terminology:** metadata uses the canonical component and product names from the shared + terminology table (house-style → "Entity terminology"; source: blog-creator product-context v4): + "[Framework] Data Grid" casing, fixed compounds (Tree Grid, Hierarchical Grid, Pivot Grid), + product names verbatim ("Ignite UI for Angular", not "IgniteUI"), and no banned synonyms + ("datagrid" as one word except when quoting an API symbol, "grid component" as subject noun, + silent drift to "table"/"data table"). Repeated identical entity phrasing across topics is the + point: assistants consolidate entities from it, and drift fragments the association. +- **Framework/package clarity:** frontmatter must not blur Angular, React, Web Components, and + Blazor APIs. Angular topics should identify Ignite UI for Angular when needed. xplat topics should + use `{Platform}` / `{ProductName}` tokens instead of hard-coded single-framework wording. +- **`license`:** present when the topic belongs to a doc set that uses license frontmatter. +- **`mentionedTypes`:** xplat component topics should list the concrete API types linked or + discussed by the page. Do not invent API type names; if unsure, flag as a verification issue. + Angular-set usage is currently unscoped (``): until answered, treat Angular occurrences as tolerated, not required, and do + not recommend adding the field to Angular topics. +- **`relatedComponents`:** recommend only for close sibling components that should affect Do/Don't + guidance. Do not add generic category neighbors just to fill the field. +- **`keywords`:** treat as legacy/internal metadata, not an SEO optimization surface. Coherence + test if present: every keyword (or its token-resolved form) appears in the topic body; flag + aspirational terms that appear nowhere. Do not spend effort keyword-stuffing. If the repo later + drops `keywords`, remove it only when the user asks or a repo-level policy exists. +- **`_canonicalLink`:** do not invent. Flag inconsistent or suspicious canonical links, but require + an explicit canonical policy or nearby precedent before suggesting a replacement. +- **`last_updated`:** required for component topics. Use the `YYYY-MM-DD` format and keep the value + maintained by the topic workflow or another clear source of truth. +- **Cross-field consistency:** `title`, `description`, `llms.description`, and `keywords` must tell + one story with the same entity names and the same capability list, and must agree with the H1 and + the lead sentence (which the house style requires to mirror `llms.description`). Cite the H1/lead + only as evidence; suggest the frontmatter change (or flag the body mismatch for the doc-topics + skill). A capability named in one surface and absent from another (e.g. metadata says + "images, initials, icons" while the lead says "an image, initials, or custom content") is a + finding: Warning by default, Error when the mismatch misidentifies what the component supports. +- **Body support:** every capability, feature, or claim named in `description`, `llms.description`, + or `keywords` must be supported by the topic body (frontmatter is generated from the finished + body, never from imagination). Cite the body as evidence only; when a metadata claim has no body + support, suggest removing or rewording the metadata, or flag the body gap for the doc-topics + skill: do not choose silently which side is wrong. + +## Severity + +- **Error:** missing required frontmatter for the doc set, malformed YAML, metadata that clearly + misidentifies the component/framework, or a title whose non-query terms (brand/category suffixes, + marketing words) push the query terms past the ~60-character truncation point. +- **Warning:** weak, inconsistent, misleading, too-long, or marketing-heavy metadata; a title whose + query-relevant portion exceeds ~60 characters. +- **Suggestion:** polish, consistency improvements, optional fields, or policy-dependent changes. diff --git a/.ai/skills/igniteui-topic-frontmatter/references/report-format.md b/.ai/skills/igniteui-topic-frontmatter/references/report-format.md new file mode 100644 index 0000000000..e1913543de --- /dev/null +++ b/.ai/skills/igniteui-topic-frontmatter/references/report-format.md @@ -0,0 +1,39 @@ +# Audit report format and apply procedure + +Version: v3 · 2026-08-14 · igniteui doc-skill set. Content carried from SKILL.md v2 unchanged. + +## Report format + +Use this shape: + +```md +# Frontmatter Audit: + +**Verdict:** +**Summary:** <1-2 sentences about the highest-value metadata fixes.> + +## Findings +### · +- **Field:** `` +- **Issue:** +- **Suggestion:** + +## Suggested Frontmatter Changes +| Field | Current | Suggested | Reason | +|---|---|---|---| +| `description` | ... | ... | ... | + +No file changes were made. Tell me which suggestions to apply. +``` + +If there are no issues, say that the frontmatter conforms and do not invent changes. + +## Applying selected suggestions + +When the user explicitly asks to apply one or more suggestions: + +1. Re-read the file. +2. Modify only the YAML frontmatter block. +3. Preserve unrelated frontmatter fields and field order where practical. +4. Do not edit body content after the closing `---`. +5. Run a focused diff check when available. From f6672a624bf919bbc2e32666518db1d61ac3ac71 Mon Sep 17 00:00:00 2001 From: Stamen Stoychev Date: Mon, 17 Aug 2026 14:31:02 +0300 Subject: [PATCH 14/38] fix(*): adding google tag manager artifacts for tracking (#492) --- src/integration.ts | 13 ++++++++++++- src/lib/platform-context.ts | 25 +++++++++++++++++++++++++ src/middleware.ts | 26 +++++++++++++++++++++++--- 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/src/integration.ts b/src/integration.ts index dc3bbbf0ad..4feb91f694 100644 --- a/src/integration.ts +++ b/src/integration.ts @@ -60,6 +60,7 @@ import { import { buildSidebarFromToc } from './sidebar'; import { getPlatformHead } from './platform'; import type { HeadEntry, PlatformKey, NavLang } from './platform.ts'; +import { getGtmContainerId } from './lib/platform-context.js'; import { remarkEnvVars } from './plugins/remark-env-vars'; import { remarkMdLinks } from './plugins/remark-md-links'; import { remarkHtmlTransforms } from './plugins/remark-html-transforms'; @@ -667,6 +668,16 @@ export function createDocsSite(options: CreateDocsSiteOptions = {} as CreateDocs process.env.DOCS_PLATFORM = platform; } + // Google Tag Manager — first in , as high as possible after the + // mandatory charset/viewport/title tags rendered by DocsLayout. Container ID + // is resolved per build mode (production vs. staging/development); see + // `getGtmContainerId()` for the resolution order. + const gtmContainerId = getGtmContainerId(); + const gtmHead: HeadEntry[] = [{ + tag: 'script', + content: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','${gtmContainerId}');`, + }]; + // Platform CDN entries come first so site-specific `head` entries can override. const platformHead = platform ? getPlatformHead(platform, navLang) : []; @@ -755,7 +766,7 @@ export function createDocsSite(options: CreateDocsSiteOptions = {} as CreateDocs productLinks, packages, selectedPackage, - head: [...platformHead, ...codeViewHead, ...head], + head: [...gtmHead, ...platformHead, ...codeViewHead, ...head], }), ...(base ? [createBasePrependIntegration(base)] : []), ...extraIntegrations, diff --git a/src/lib/platform-context.ts b/src/lib/platform-context.ts index 454023e092..6525a2e8e1 100644 --- a/src/lib/platform-context.ts +++ b/src/lib/platform-context.ts @@ -262,3 +262,28 @@ export function getEnvVars(): Record { return _env!; } + +/** Built-in Google Tag Manager container IDs, keyed by build mode. */ +const GTM_CONTAINER_ID_DEFAULTS: Record = { + production: 'GTM-T65CF7', + staging: 'GTM-NCKNPN', + development: 'GTM-NCKNPN', +}; + +/** + * Resolves the Google Tag Manager container ID for the current build. + * + * Resolution order: + * 1. `GTM_CONTAINER_ID` env var — explicit override. + * 2. `GTMContainerId` in the resolved `environment.json` (per-mode, per-locale). + * 3. Built-in default for the current build mode — production vs. staging/development. + */ +export function getGtmContainerId(): string { + if (process.env.GTM_CONTAINER_ID) return process.env.GTM_CONTAINER_ID; + + const fromEnvJson = getEnvVars().GTMContainerId; + if (fromEnvJson) return fromEnvJson; + + const mode = getBuildMode(); + return GTM_CONTAINER_ID_DEFAULTS[mode] ?? GTM_CONTAINER_ID_DEFAULTS.development; +} diff --git a/src/middleware.ts b/src/middleware.ts index 7e5b123fef..7dcf116d4a 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,8 +1,28 @@ import { defineMiddleware } from 'astro:middleware'; -import { getPlatformContext, getEnvVars } from './lib/platform-context.js'; +import { getPlatformContext, getEnvVars, getGtmContainerId } from './lib/platform-context.js'; -export const onRequest = defineMiddleware((ctx, next) => { +export const onRequest = defineMiddleware(async (ctx, next) => { ctx.locals.platformContext = getPlatformContext(); ctx.locals.envVars = getEnvVars(); - return next(); + + const response = await next(); + + // Only rewrite HTML documents — skip .md/.txt/.xml endpoints and static assets. + const contentType = response.headers.get('content-type') ?? ''; + if (!contentType.includes('text/html')) return response; + + const html = await response.text(); + if (!/]*>/i.test(html)) return response; + + const gtmNoscript = ``; + const updated = html.replace(/]*)>/i, `${gtmNoscript}`); + + const headers = new Headers(response.headers); + headers.delete('content-length'); + + return new Response(updated, { + status: response.status, + statusText: response.statusText, + headers, + }); }); From 397274b007da0f9d44bba7e91a09b0aee2874a54 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 14:32:10 +0300 Subject: [PATCH 15/38] [jp-sync] Sync JP avatar xplat topic with EN updates (#495) * feat(docs): sync JP avatar xplat topic with EN updates Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(docs): update terminology in avatar component documentation for clarity * fix(docs): update terminology in avatar component documentation for consistency --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: norikois <33947244+norikois@users.noreply.github.com> --- .../content/jp/components/layouts/avatar.mdx | 614 ++++++++++++++---- 1 file changed, 500 insertions(+), 114 deletions(-) diff --git a/docs/xplat/src/content/jp/components/layouts/avatar.mdx b/docs/xplat/src/content/jp/components/layouts/avatar.mdx index 8a96d06f89..bf089fb685 100644 --- a/docs/xplat/src/content/jp/components/layouts/avatar.mdx +++ b/docs/xplat/src/content/jp/components/layouts/avatar.mdx @@ -1,81 +1,105 @@ --- -title: "{Platform} Avatar | レイアウト コントロール | インフラジスティックス" -description: インフラジスティックスの {Platform} Avatar コンポーネントを使用して、画像、アイコン、またはイニシャルを表示します。 -keywords: avatar, layout, {ProductName}, Infragistics, アバター, レイアウト, インフラジスティックス +title: "{Platform} Avatar Component | レイアウト | インフラジスティックス" +description: "{Platform} Avatar コンポーネントを使用して、画像、イニシャル、アイコン、またはカスタム コンテンツでユーザー、エンティティ、またはオブジェクトを表現します。" +keywords: "{Platform} Avatar, avatar component, profile image, initials, {ProductName}, Infragistics, アバター, プロフィール画像, イニシャル, インフラジスティックス" +last_updated: "2026-07-29" license: MIT -mentionedTypes: ["Avatar"] +mentionedTypes: ["Avatar", "Badge", "Icon"] +relatedComponents: ["Badge"] _language: ja llms: - description: "{ProductName} Avatar コンポーネントで画像、アイコン、またはイニシャルを表示し、サイズや形状を設定する方法を説明します。" + description: "{ProductName} Avatar トピックでは、画像、イニシャル、アイコン、カスタム コンテンツ、形状、サイズ、スタイリング、アクセシビリティ ガイダンスを使用してユーザー、エンティティ、またはオブジェクトの識別情報をレンダリングする方法について説明します。" --- import PlatformBlock from 'igniteui-astro-components/components/mdx/PlatformBlock.astro'; import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; +import Anatomy from 'igniteui-astro-components/components/mdx/Anatomy.astro'; +import Faq from 'igniteui-astro-components/components/mdx/Faq.astro'; +import FaqItem from 'igniteui-astro-components/components/mdx/FaqItem.astro'; +import { Image } from 'astro:assets'; +import avatarAnatomy from '@xplat-images/anatomy-content-light/avatar-lt-a.png'; +import avatarDo from '@xplat-images/avatar/avatar_do1.png'; +import avatarDo2x from '@xplat-images/avatar/avatar_do1@2x.png'; +import avatarDoNot from '@xplat-images/avatar/avatar_do_not1.png'; +import avatarDoNot2x from '@xplat-images/avatar/avatar_dont1@2x.png'; -# {Platform} Avatar (アバター) +# Avatar コンポーネント -{ProductName} アバターは、アプリケーションでイニシャル、画像、またはアイコンを表示するのに役立ちます。 +{ProductName} Avatar は、画像、イニシャル、またはカスタム コンテンツでユーザー、エンティティ、またはオブジェクトを表現します。 -## {Platform} Icon Avatar の例 +リスト、カード、プロフィール メニュー、アクティビティ フィードでコンパクトなビジュアル アイデンティティを提供するためにアバターを使用します。 - +## ライブ デモ + -## 使用方法 - - - -まず、次のコマンドを実行して {ProductName} npm パッケージをインストールする必要があります。 - -```cmd -npm install {PackageWebComponents} -``` + - + -まず、次のコマンドを実行して、対応する {ProductName} npm パッケージをインストールする必要があります: + -```cmd -npm install igniteui-react -``` + -次に、以下のように、 と必要な CSS をインポートする必要があります: +## アナトミー -```tsx -import { IgrAvatar } from 'igniteui-react'; -import 'igniteui-webcomponents/themes/light/bootstrap.css'; -``` +アバターは、画像セマンティクスを適用してサポートされているコンテンツ パターンのいずれかをレンダリングする単一のホスト要素です。 + - + - +1. 画像コンテナー: 画像コンテンツ タイプを表示します。
+2. アイコン コンテナー: アイコン コンテンツ タイプを表示します。
+3. イニシャル コンテナー: テキスト コンテンツ タイプを表示します。
-```csharp -// in Program.cs file + -builder.Services.AddIgniteUIBlazor(typeof(IgbAvatarModule)); +```text +igc-avatar[role="img"] // host - exposes the avatar +└─ div[part="base"] // avatar wrapper + ├─ span[part="initials"] // rendered when `initials` is set + ├─ slot // rendered when `initials` is not set + └─ img[part="image"] // rendered while `src` is set and loads ``` - - -また、追加の CSS ファイルをリンクして、スタイルを コンポーネントに適用する必要があります。以下は、**Blazor Web Assembly** プロジェクトの **wwwroot/index.html** ファイルまたは **Blazor Server** プロジェクトの **Pages/_Host.cshtml** ファイルに配置する必要があります: + -```razor - +```text +igx-avatar[role="img"] // host - exposes the avatar +└─ one of, by priority: + ├─ div.igx-avatar__image // `src` set - image painted as a background + ├─ igx-icon // `icon` set + ├─ span // `initials` set - first two characters + └─ ng-content // custom projected content ``` - +## はじめに + +アバター コンポーネントを使用する前に登録してください。{ProductName} をまだセットアップしていない場合は、共通の[作業の開始](../general-getting-started.mdx)トピックを最初に完了してください。 + ```ts import { defineComponents, IgcAvatarComponent } from 'igniteui-webcomponents'; @@ -84,39 +108,69 @@ defineComponents(IgcAvatarComponent); -{ProductName} の完全な概要については、[作業の開始](../general-getting-started.mdx)トピックを参照してください。 + - は、画像、イニシャル、またはアイコンを含むその他のコンテンツを表示できます。 の宣言は次のように簡単です。 +`` をレンダリングする前に Angular アバター コンポーネントをインポートしてください。{ProductName} をまだセットアップしていない場合は、共通の[作業の開始](../general/getting-started.mdx)トピックを最初に完了してください。 - - -```html - +```ts +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; ``` +アバターをレンダリングする前に React ラッパーとテーマ スタイルシートをインポートしてください。{ProductName} をまだセットアップしていない場合は、共通の[作業の開始](../general-getting-started.mdx)トピックを最初に完了してください。 + ```tsx - +import { IgrAvatar } from 'igniteui-react'; +import 'igniteui-webcomponents/themes/light/bootstrap.css'; ``` +`Program.cs` でアバター モジュールを登録し、テーマ スタイルシートをホスト ページに追加してください。{ProductName} をまだセットアップしていない場合は、共通の[作業の開始](../general-getting-started.mdx)トピックを最初に完了してください。 + +```csharp +builder.Services.AddIgniteUIBlazor(typeof(IgbAvatarModule)); +``` + ```razor - + ``` -アバターには、コンテキストに基づいてさまざまなコンテンツを描画できるようにするいくつかの属性があります。アバターの境界にコンテンツを表示する最も基本的な方法は、開始タグと終了タグの間にコンテンツを提供することです。 +## 使用方法 + +デフォルト スロットに画像ソース、イニシャル、またはカスタム コンテンツを指定してアバターをレンダリングします。 + +### バリアント + + + +表示するコンテンツ ソースのみを設定します。アバターは が設定されている場合にそれをレンダリングし、そうでない場合はデフォルト スロット コンテンツをレンダリングします。また、 が設定されて正常に読み込まれている間は画像要素もレンダリングします。 + + + + + +表示するコンテンツ ソースのみを設定します。Angular アバターは、`src`、次に `icon`、次に `initials` の順でレンダリングし、これらの入力が設定されていない場合はプロジェクションされたカスタム コンテンツにフォールバックします。 + + ```html + + + + + @@ -124,11 +178,30 @@ defineComponents(IgcAvatarComponent); + + +```html + + + + + +``` + + + ```tsx + + + + - + ``` @@ -137,6 +210,12 @@ defineComponents(IgcAvatarComponent); ```razor + + + + @@ -144,18 +223,34 @@ defineComponents(IgcAvatarComponent); -### イニシャル + + + + + + + + + + + + +### 形状 - 属性が設定されている場合、アバターのすべての子要素は無視され、この属性に渡された文字列が表示されます。 + を `square`、`rounded`、または `circle` に設定します。 ```html - + +``` - - - + + + + +```html + ``` @@ -163,9 +258,7 @@ defineComponents(IgcAvatarComponent); ```tsx - - - + ``` @@ -173,109 +266,402 @@ defineComponents(IgcAvatarComponent); ```razor - - - - - + ``` - + -### 画像 + - 属性に静的アセットに有効な URL が割り当てられている場合、アバターは画像を表示することもできます。その場合、 値は無視され、子要素は描画されません。 + - + -```html - - - -``` + - +### サイズ -```tsx - - - +プリセット アバター サイズが必要な場合は、`--ig-size` を共通サイズ トークンのいずれかに設定します。 + + + +```css +igc-avatar { + --ig-size: var(--ig-size-large); +} ``` - + -```razor - - - +```html + ``` - + -### 形状 + -アバターは、`circle`、`rounded`、`square` の 3 つの形状をサポートしています。アバターの形状は `square` であり、 属性を介して変更できます。 + - + -### サイズ + -形状とは別に、アバターのサイズも `--ig-size` CSS 変数を利用して変更できます。サポートされているサイズは、`small` (デフォルト)、`medium`、`large` です。次のコード スニペットは、異なるコンポーネント サイズを使用する方法を示しています。 + -```css -igc-avatar { - --ig-size: var(--ig-size-large); +### 推奨事項 + +**使用する場合:** プロフィール画像、イニシャル、またはアイコンなど、UI が人物、組織、オブジェクト、またはアカウントのコンパクトな表現を必要とする場合にアバターを使用します。繰り返し表示される識別情報が簡単にスキャンできるように、同じ UI 領域内で一貫したアバター戦略を維持してください。 + + + +**使用しない場合:** 対象を表現する代わりにカウント、ステータス、または通知インジケーターを表示する必要がある場合は、[Badge](../inputs/badge.mdx) コンポーネントを使用してください。Badge は、識別情報とステータスの両方を表示する必要がある場合にアバターを装飾することもできます。 + + + + + +**使用しない場合:** 対象を表現する代わりにカウント、ステータス、または通知インジケーターを表示する必要がある場合は、[Badge](../inputs/badge.mdx) コンポーネントを使用してください。Badge は、識別情報とステータスの両方を表示する必要がある場合にアバターを装飾することもできます。 + + + +

+
使用するべき使用すべき 使用すべきでない
+ + + + + + + + + + + + +
推奨非推奨
{Platform} Avatar do guidance{Platform} Avatar don't guidance
+
+ +## プロパティ + +アバターは、コンテンツと形状のための小さな入力セットを公開します。 + + + +| 名前 | 型 | デフォルト | 説明 | +| -- | -- | -- | -- | +| | `string` | n/a | 画像アバターの代替テキストを設定します。 | +| | `string` | n/a | 画像が表示されない場合にレンダリングされるテキスト イニシャルを設定します。 | +| | `"square" \| "rounded" \| "circle"` | `"square"` | アバターの形状を設定します。 | +| | `string` | n/a | 画像ソース URL を設定します。 | + + + + + +| 名前 | 型 | デフォルト | 説明 | +| -- | -- | -- | -- | +| | `string` | n/a | アバターがレンダリングするアイコンを設定します。 | +| | `string` | n/a | アバターがレンダリングするテキスト イニシャルを設定します。 | +| | `"square" \| "rounded" \| "circle"` | `"square"` | アバターの形状を設定します。 | +| | `"small" \| "medium" \| "large"` | `"small"` | アバターのサイズを設定します。 | +| | `string` | n/a | 画像ソース URL を設定します。 | + + + +## スタイル設定 + + + + + + + + + + + + + +アバターの外観は、テーマ変数とプラットフォーム固有のスタイリング フックで制御されます。 + + + +トークン レベルの変更にはアバター CSS 変数を使用し、レンダリングされたラッパー、画像、アイコン、またはイニシャルをターゲットにする必要がある場合は CSS パーツを使用します。 + +| 変数 | 変更内容 | +| -- | -- | +| `--ig-avatar-background` | アバターの背景色。 | +| `--ig-avatar-color` | テキストとイニシャルの色。 | +| `--ig-avatar-icon-color` | スロット アイコンの色。 | +| `--ig-avatar-border-radius` | 丸みのあるアバターに使用されるボーダー半径。 | +| `--ig-avatar-size` | アバターの幅と高さ。 | +| `--ig-size` | プリセット アバター サイズの導出に使用される共通コンポーネント サイズ トークン。 | + +| CSS パーツ | 説明 | +| -- | -- | +| `base` | アバター ラッパー。 | +| `icon` | アイコン ラッパー。 | +| `initials` | イニシャル ラッパー。 | +| `image` | 画像要素。 | + + + + + +トークン レベルの変更にはアバター CSS 変数を使用し、特定のレンダリング タイプや形状をターゲットにする必要がある場合は Angular ホスト クラスを使用します。 + +| 変数 | 変更内容 | +| -- | -- | +| `--ig-avatar-background` | アバターの背景色。 | +| `--ig-avatar-color` | テキストとイニシャルの色。 | +| `--ig-avatar-icon-color` | アイコンの色。 | +| `--ig-avatar-border-radius` | 丸みのあるアバターに使用されるボーダー半径。 | +| `--ig-avatar-size` | アバターの幅と高さ。 | +| `--ig-size` | プリセット アバター サイズの導出に使用される共通コンポーネント サイズ トークン。 | + +| セレクター | 説明 | +| -- | -- | +| `igx-avatar` | アバター ホスト要素。 | +| `.igx-avatar--rounded` | `shape` が `rounded` の場合に適用されます。 | +| `.igx-avatar--circle` | `shape` が `circle` の場合に適用されます。 | +| `.igx-avatar--image` | アバターが画像をレンダリングする場合に適用されます。 | +| `.igx-avatar--icon` | アバターがアイコンをレンダリングする場合に適用されます。 | +| `.igx-avatar--initials` | アバターがイニシャルをレンダリングする場合に適用されます。 | +| `.igx-avatar__image` | 画像アバター要素。 | + + + +### Sass テーマ + +Sass を使用してアプリケーションが Ignite UI テーマをカスタマイズする場合は、 関数を使用します。 + +```scss +@use "igniteui-theming/sass/themes" as *; + +$custom-avatar-theme: avatar-theme( + $background: #72da67, + $border-radius: 16px, + $size: 3rem +); + +:root { + @include tokens($custom-avatar-theme); } ``` - - -### スタイル設定 +### CSS 変数 - コンポーネントはいくつかの CSS パーツを公開し、スタイルを完全に制御できるようにします。 +Sass ビルド ステップなしでローカル スタイリングが必要な場合は、コンポーネント CSS 変数を直接設定します。 -|名前|説明| -|--|--| -| `base` | アバターの基本ラッパー。 | -| `initials` | アバターのイニシャル ラッパー。 | -| `image` | アバターの画像ラッパー。 | -| `icon` | アバターのアイコン ラッパー。 | + ```css igc-avatar { --ig-avatar-background: var(--ig-success-500); + --ig-avatar-color: var(--ig-success-500-contrast); + --ig-avatar-border-radius: 20px; } igc-avatar::part(base) { - --size: 60px; - color: var(--ig-success-500-contrast); - border-radius: 20px; + border: 2px solid var(--ig-success-700); +} +``` + + + + + +```css +igx-avatar { + --ig-avatar-background: var(--ig-success-500); + --ig-avatar-color: var(--ig-success-500-contrast); + --ig-avatar-border-radius: 20px; } ``` - + + +### Tailwind を使用したスタイル設定 + + +Ignite UI コンポーネント トークンと共にユーティリティ ファーストのレイアウト スタイリングが必要な場合は、{ProductName} Avatar で Tailwind ユーティリティ クラスを使用します。 + + + + + + + +アプリケーションが Tailwind クラスを通じて Ignite UI コンポーネントをスタイリングする場合は、Angular Tailwind ユーティリティ構文を使用します。 + + + + + +## アクセシビリティ + +アバターは、アクセス可能な画像セマンティクスを持つ非インタラクティブな識別ビジュアルです。 + +### キーボード インタラクション + +アバターはフォーカスを受け取らず、キーボード インタラクションはありません。 + +| キー | アクション | +| -- | -- | +| n/a | アバターはキーボードでのインタラクションをサポートしません。 | + +### スクリーン リーダー / ARIA + +アバターは画像セマンティクスと `avatar` のデフォルト アクセス可能ラベルで初期化されます。 + + + +- `src` 画像が特定の人物、エンティティ、またはオブジェクトを表す場合は `alt` を設定します。 +- プロジェクションされたカスタム コンテンツに別のアクセス可能名が必要な場合は、明示的な `aria-label` を追加します。 +- 隣接するテキストが同じ対象を既に識別している場合は、装飾的なアバターを冗長として扱います。 + + + + + +- 画像アバターが識別情報を伝える場合は、周囲のテキストで表現される人物、エンティティ、またはオブジェクトを識別します。 +- 隣接するテキストが同じ対象を既に識別している場合は、装飾的なアバターを冗長として扱います。 + + + +### アクセシビリティ コンプライアンス + +インフラジスティックスは、Section 508 および WCAG 2.1 ガイドライン領域の {ProductName} アクセシビリティ サポートを[アクセシビリティ コンプライアンス](../interactivity/accessibility-compliance.mdx)トピックに記載しています。 + + + +| 基準 | コンポーネントの準拠方法 | +| -- | -- | +| [1.1.1 非テキスト コンテンツ](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content) | アバターにはアクセス可能なラベルがあり、画像アバターは `alt` を通じて特定の代替テキストを受け取ることができます。 | +| [4.1.2 名前、役割、値](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value) | コンポーネントは画像セマンティクスで初期化され、コンテンツ関連の ARIA 情報を公開します。 | + + + + + +| 基準 | コンポーネントの準拠方法 | +| -- | -- | +| [1.1.1 非テキスト コンテンツ](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content) | アバターにはアクセス可能なラベルがあり、表現される対象を識別する周囲のテキストと組み合わせることができます。 | +| [4.1.2 名前、役割、値](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value) | コンポーネントは `role="img"` とデフォルトのアクセス可能なラベルで初期化されます。 | + + + +ユーザーの責務: + +- スタイルをオーバーライドする場合は、アバターの背景とテキストまたはアイコンの色の間に十分なコントラストを確保してください。 +- 隣接するテキストが既に同じ人物またはエンティティを識別している場合は、同じ識別情報のアナウンスが重複しないようにしてください。 + + + +- アバターが識別情報を伝える場合は、説明的なラベルまたは `alt` テキストを提供してください。 + + + + + +- アバター画像が識別情報を伝える場合は、近くのテキストで表現される対象が識別されていることを確認してください。 + + + +## トラブルシューティング + +このセクションを使用して、Avatar をインタラクティブまたはステータス コンポーネントとして扱う前に境界と一般的な決定事項を確認してください。 + +### 既知の制限 + +アバターはビジュアル識別プリミティブであり、単独ではインタラクション、ステータス、または通知動作を追加しません。 + +- 表現される対象がクリック可能である必要がある場合は、ボタンやリスト アイテムなどのインタラクティブなコンテナーを使用してください。 +- ステータス、カウント、または通知インジケーターを表示する必要がある場合は、アバターとともに Badge を使用してください。 ## API リファレンス -
+完全なアバター API サーフェスについては、これらの API リファレンスを使用してください。 + + + + + + + + + + + + + + + +## 依存関係 + + + +スロット アイコンには、 コンポーネントの登録またはインポートが必要です。 + + + + + +アバターはデフォルトの外観に共通テーマ スタイルシートも使用します。 + + + + + +Sass スタイリング ワークフローでは、 および API を使用します。 + + ## その他のリソース +サポートおよび関連する Ignite UI ドキュメントについては、これらのリソースを使用してください。 + - [{ProductName} **フォーラム (英語)**]({ForumsLink}) - [{ProductName} **GitHub (英語)**]({GithubLink}) + +## 関連コンポーネント + +識別情報をステータス、アクション、またはより豊富なレイアウトと組み合わせる必要がある場合は、これらの関連コンポーネントを使用してください。 + + + +- [Badge](../inputs/badge.mdx) - カウント、ステータス、または通知インジケーターを表示するには Badge を使用してください。UI が識別情報とステータスの両方を必要とする場合、Badge は Avatar を装飾することができます。 + + + + + +- [Badge](../inputs/badge.mdx) - カウント、ステータス、または通知インジケーターを表示するには Badge を使用してください。UI が識別情報とステータスの両方を必要とする場合、Badge は Avatar を装飾することができます。 + + + +## FAQ + + + + UI が人物、アカウント、組織、またはオブジェクトを表現する必要がある場合は Avatar を使用します。UI がカウント、ステータス、または通知インジケーターを表示する必要がある場合は Badge を使用します。 + + + + いいえ。Avatar は非インタラクティブであり、単独ではフォーカスを受け取りません。表現される対象にアクションが必要な場合は、インタラクティブなコンポーネント内に配置してください。 + + + + アバター画像が特定の対象を識別する場合は、意味のある代替テキストを提供してください。隣接するテキストが既にその対象を識別している場合は、同じ識別情報を繰り返さないようにしてください。 + + From 48f74b00df69177c78a7df9547063cb33e6806d9 Mon Sep 17 00:00:00 2001 From: Copilot Date: Mon, 17 Aug 2026 16:32:18 +0300 Subject: [PATCH 16/38] fix: render GTM fallback without buffering responses (#493) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ChronosSF <2188411+ChronosSF@users.noreply.github.com> --- src/components/GtmNoscript.astro | 9 +++++++++ src/middleware.ts | 26 +++----------------------- src/pages/[...slug].astro | 2 ++ src/pages/index.astro | 2 ++ src/routes/[...slug].astro | 2 ++ 5 files changed, 18 insertions(+), 23 deletions(-) create mode 100644 src/components/GtmNoscript.astro diff --git a/src/components/GtmNoscript.astro b/src/components/GtmNoscript.astro new file mode 100644 index 0000000000..37acb09c4a --- /dev/null +++ b/src/components/GtmNoscript.astro @@ -0,0 +1,9 @@ +--- +import { getGtmContainerId } from '../lib/platform-context.js'; + +const containerId = getGtmContainerId(); +--- + + + + diff --git a/src/middleware.ts b/src/middleware.ts index 7dcf116d4a..7e5b123fef 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,28 +1,8 @@ import { defineMiddleware } from 'astro:middleware'; -import { getPlatformContext, getEnvVars, getGtmContainerId } from './lib/platform-context.js'; +import { getPlatformContext, getEnvVars } from './lib/platform-context.js'; -export const onRequest = defineMiddleware(async (ctx, next) => { +export const onRequest = defineMiddleware((ctx, next) => { ctx.locals.platformContext = getPlatformContext(); ctx.locals.envVars = getEnvVars(); - - const response = await next(); - - // Only rewrite HTML documents — skip .md/.txt/.xml endpoints and static assets. - const contentType = response.headers.get('content-type') ?? ''; - if (!contentType.includes('text/html')) return response; - - const html = await response.text(); - if (!/]*>/i.test(html)) return response; - - const gtmNoscript = ``; - const updated = html.replace(/]*)>/i, `${gtmNoscript}`); - - const headers = new Headers(response.headers); - headers.delete('content-length'); - - return new Response(updated, { - status: response.status, - statusText: response.statusText, - headers, - }); + return next(); }); diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro index 1a9180f1ff..3822278f04 100644 --- a/src/pages/[...slug].astro +++ b/src/pages/[...slug].astro @@ -3,6 +3,7 @@ import { getCollection, render } from 'astro:content'; import DocsLayout from 'igniteui-astro-components/layouts/DocsLayout.astro'; import DocsSidebar from 'igniteui-astro-components/components/DocsSidebar/DocsSidebar.astro'; import DocsToc from 'igniteui-astro-components/components/DocsToc.astro'; +import GtmNoscript from '../components/GtmNoscript.astro'; export async function getStaticPaths() { const docs = await getCollection('docs'); @@ -31,6 +32,7 @@ const currentSlug = entry.id.replace(/\.(md|mdx)$/i, ''); --- + diff --git a/src/pages/index.astro b/src/pages/index.astro index dd9d49257c..6e9b329836 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,8 +1,10 @@ --- import DocsLayout from 'igniteui-astro-components/layouts/DocsLayout.astro'; +import GtmNoscript from '../components/GtmNoscript.astro'; --- +

Ignite UI for Angular

diff --git a/src/routes/[...slug].astro b/src/routes/[...slug].astro index 2457cb55fa..5147ce0f97 100644 --- a/src/routes/[...slug].astro +++ b/src/routes/[...slug].astro @@ -4,6 +4,7 @@ import DocsLayout from 'igniteui-astro-components/layouts/DocsLayout.astro'; import DocsSidebar from 'igniteui-astro-components/components/DocsSidebar/DocsSidebar.astro'; import DocsToc from 'igniteui-astro-components/components/DocsToc.astro'; import Head from '../components/overrides/Head.astro'; +import GtmNoscript from '../components/GtmNoscript.astro'; import '../components/mdx/ApiReferences/ApiReferences.scss'; export async function getStaticPaths() { @@ -34,6 +35,7 @@ const currentSlug = entry.id.replace(/\.(md|mdx)$/i, ''); --- + From 5efc79371170208b3fec2be71e7db37aafba09e2 Mon Sep 17 00:00:00 2001 From: Simeon Simeonoff Date: Tue, 18 Aug 2026 14:42:03 +0300 Subject: [PATCH 17/38] docs(avatar): use platform-specific theming imports --- .../content/en/components/layouts/avatar.mdx | 2 +- .../content/en/components/layouts/avatar.mdx | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/docs/angular/src/content/en/components/layouts/avatar.mdx b/docs/angular/src/content/en/components/layouts/avatar.mdx index 89ca220df9..d0e1cd89bb 100644 --- a/docs/angular/src/content/en/components/layouts/avatar.mdx +++ b/docs/angular/src/content/en/components/layouts/avatar.mdx @@ -179,7 +179,7 @@ Use the avatar CSS variables for token-level changes and Angular host classes wh Use the function when your application customizes Ignite UI themes through Sass. ```scss -@use "igniteui-theming/sass/themes" as *; +@use "igniteui-angular/theming" as *; $custom-avatar-theme: avatar-theme( $background: #72da67, diff --git a/docs/xplat/src/content/en/components/layouts/avatar.mdx b/docs/xplat/src/content/en/components/layouts/avatar.mdx index 6ec5d86460..8d72187d33 100644 --- a/docs/xplat/src/content/en/components/layouts/avatar.mdx +++ b/docs/xplat/src/content/en/components/layouts/avatar.mdx @@ -443,6 +443,8 @@ Use the avatar CSS variables for token-level changes and Angular host classes wh Use the function when your application customizes Ignite UI themes through Sass. + + ```scss @use "igniteui-theming/sass/themes" as *; @@ -457,6 +459,26 @@ $custom-avatar-theme: avatar-theme( } ``` + + + + +```scss +@use "igniteui-angular/theming" as *; + +$custom-avatar-theme: avatar-theme( + $background: #72da67, + $border-radius: 16px, + $size: 3rem +); + +:root { + @include tokens($custom-avatar-theme); +} +``` + + + ### CSS Variables Set component CSS variables directly when you need local styling without a Sass build step. From 48813003776f6056a4b2b382e6b8f599cfb67160 Mon Sep 17 00:00:00 2001 From: Radoslav Mirchev <52001020+radomirchev@users.noreply.github.com> Date: Wed, 19 Aug 2026 13:42:56 +0300 Subject: [PATCH 18/38] Apply suggestions from code review Co-authored-by: Radoslav Mirchev <52001020+radomirchev@users.noreply.github.com> --- .ai/skills/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/.ai/skills/CHANGELOG.md b/.ai/skills/CHANGELOG.md index 9ef8b6a260..6e2a692fd0 100644 --- a/.ai/skills/CHANGELOG.md +++ b/.ai/skills/CHANGELOG.md @@ -17,7 +17,6 @@ including content-unchanged files, per the blog-creator convention). | igniteui-doc-topics slimmed: SKILL.md keeps identity, two modes, compass, composite principle, task table, grounding boundaries. Create steps 1–7 (6a–6e) + the category/index structure move to `references/create-workflow.md`; the 5 audit-workflow steps move into `audit-rubric.md`. `description` unchanged. | igniteui-doc-topics/SKILL.md, references/create-workflow.md, references/audit-rubric.md | | Dedup (D2-03 stage 2): the section→mode map is no longer restated in SKILL.md — it is the "Diátaxis mode" column of house-style's canonical section table; SKILL.md keeps only the one-section-one-mode rule and the concrete mode-bleed examples. The category blueprint now lives in house-style + create-workflow only. Stale pointers fixed (house-style intro pointed at a SKILL.md map that moved; body-support bullet pointed at "Create workflow step 4" which now lives in create-workflow.md). | igniteui-doc-topics/SKILL.md, references/house-style.md | | Set-level README.md added: human-readable intent, file map, authority chain, and the five-step update procedure (edit references not routers; uniform version bump; adapter byte-match; changelog entry; resolve ‹VERIFY› by pre-committed outcome). | README.md | -| Adapters future-proofed: the enumerated reference-path list is replaced by the standing rule "resolve reference paths relative to the canonical skill directory", so adding/renaming references never requires an adapter edit. Descriptions untouched. | .claude/skills/*/SKILL.md | | Set-wide version line: every file now carries `Version: v3 · 2026-08-14 · igniteui doc-skill set`, including content-unchanged house-style and diataxis-cheatsheet (the cheatsheet gains its first version line). | all files | ### Unchanged From b8f4a94c25f2a6ccb1a2062c3296e8eb161183ad Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 19 Aug 2026 17:09:58 +0300 Subject: [PATCH 19/38] Merge pull request #501 from IgniteUI/copilot/fix-gtm-container-id-jp-builds Fix incorrect GTM container IDs in xplat JP builds --- src/integration.ts | 3 +++ src/lib/platform-context.ts | 35 ++++++++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/integration.ts b/src/integration.ts index 4feb91f694..6dde2c2160 100644 --- a/src/integration.ts +++ b/src/integration.ts @@ -667,6 +667,9 @@ export function createDocsSite(options: CreateDocsSiteOptions = {} as CreateDocs if (platform) { process.env.DOCS_PLATFORM = platform; } + // Locale for getEnvVars() and getGtmContainerId(). Must be set before the + // getGtmContainerId() call below — getEnvVars() caches on first read. + process.env.LANG_CODE = navLang; // Google Tag Manager — first in , as high as possible after the // mandatory charset/viewport/title tags rendered by DocsLayout. Container ID diff --git a/src/lib/platform-context.ts b/src/lib/platform-context.ts index 6525a2e8e1..92cfd188d1 100644 --- a/src/lib/platform-context.ts +++ b/src/lib/platform-context.ts @@ -263,11 +263,29 @@ export function getEnvVars(): Record { return _env!; } -/** Built-in Google Tag Manager container IDs, keyed by build mode. */ -const GTM_CONTAINER_ID_DEFAULTS: Record = { - production: 'GTM-T65CF7', - staging: 'GTM-NCKNPN', - development: 'GTM-NCKNPN', +/** Container IDs for one locale. `development` doubles as the fallback for unknown modes. */ +type GtmContainerIds = { + development: string; + staging: string; + production: string; + [mode: string]: string | undefined; +}; + +/** + * Built-in Google Tag Manager container IDs keyed by locale and build mode. + * `en` is required: it is the fallback for locales without their own set (e.g. `kr`). + */ +const GTM_CONTAINER_ID_DEFAULTS: { en: GtmContainerIds; [lang: string]: GtmContainerIds | undefined } = { + en: { + production: 'GTM-T65CF7', + staging: 'GTM-NCKNPN', + development: 'GTM-WLXLBZD', + }, + jp: { + production: 'GTM-KVNSWJ', + staging: 'GTM-WLWSDK', + development: 'GTM-NNHVMC7', + }, }; /** @@ -276,7 +294,7 @@ const GTM_CONTAINER_ID_DEFAULTS: Record = { * Resolution order: * 1. `GTM_CONTAINER_ID` env var — explicit override. * 2. `GTMContainerId` in the resolved `environment.json` (per-mode, per-locale). - * 3. Built-in default for the current build mode — production vs. staging/development. + * 3. Built-in default for the current locale and build mode. */ export function getGtmContainerId(): string { if (process.env.GTM_CONTAINER_ID) return process.env.GTM_CONTAINER_ID; @@ -284,6 +302,9 @@ export function getGtmContainerId(): string { const fromEnvJson = getEnvVars().GTMContainerId; if (fromEnvJson) return fromEnvJson; + // LANG_CODE is set by createDocsSite() from the resolved navLang. + const lang = process.env.LANG_CODE ?? 'en'; const mode = getBuildMode(); - return GTM_CONTAINER_ID_DEFAULTS[mode] ?? GTM_CONTAINER_ID_DEFAULTS.development; + const localeDefaults = GTM_CONTAINER_ID_DEFAULTS[lang] ?? GTM_CONTAINER_ID_DEFAULTS.en; + return localeDefaults[mode] ?? localeDefaults.development; } From b63cca5326f4a2d803ede66ee4a9374b99a6a7e6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 17:14:03 +0300 Subject: [PATCH 20/38] jp-sync: fix DateTimeInput ApiLink pkg attribute in date-picker.mdx (#482) Sync Japanese date-picker.mdx with English fix from PR #479: - Replace with in two places (format section and increment/decrement section). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../src/content/jp/components/scheduling/date-picker.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/xplat/src/content/jp/components/scheduling/date-picker.mdx b/docs/xplat/src/content/jp/components/scheduling/date-picker.mdx index e757836051..072177ef5d 100644 --- a/docs/xplat/src/content/jp/components/scheduling/date-picker.mdx +++ b/docs/xplat/src/content/jp/components/scheduling/date-picker.mdx @@ -359,13 +359,13 @@ prefix スロットと suffix スロットを使用すると、Input のメイ は、フォーカスされていないときにピッカーの入力を書式設定するために使用されます。 が指定されていない場合、ピッカーは をその として使用します。 -これらの詳細については、 の形式セクションを参照してください。 +これらの詳細については、 の形式セクションを参照してください。 ### 増加および減少 - は、 メソッドと メソッドを公開します。これらは両方とも から取得され、現在設定されている日付の特定の を増加および減少するために使用できます。 + は、 メソッドと メソッドを公開します。これらは両方とも から取得され、現在設定されている日付の特定の を増加および減少するために使用できます。 From b34fe6debcbe0cde9a4dece31fcf35580b6d089b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Aug 2026 07:27:14 +0000 Subject: [PATCH 21/38] docs(jp): sync avatar.mdx theming changes for 22.1.0 Wrap existing Sass code block in PlatformBlock for WebComponents/React/Blazor and add Angular-specific PlatformBlock with igniteui-angular/theming import. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../content/jp/components/layouts/avatar.mdx | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/xplat/src/content/jp/components/layouts/avatar.mdx b/docs/xplat/src/content/jp/components/layouts/avatar.mdx index bf089fb685..3fc25a9c17 100644 --- a/docs/xplat/src/content/jp/components/layouts/avatar.mdx +++ b/docs/xplat/src/content/jp/components/layouts/avatar.mdx @@ -444,6 +444,8 @@ igc-avatar { Sass を使用してアプリケーションが Ignite UI テーマをカスタマイズする場合は、 関数を使用します。 + + ```scss @use "igniteui-theming/sass/themes" as *; @@ -458,6 +460,26 @@ $custom-avatar-theme: avatar-theme( } ``` + + + + +```scss +@use "igniteui-angular/theming" as *; + +$custom-avatar-theme: avatar-theme( + $background: #72da67, + $border-radius: 16px, + $size: 3rem +); + +:root { + @include tokens($custom-avatar-theme); +} +``` + + + ### CSS 変数 Sass ビルド ステップなしでローカル スタイリングが必要な場合は、コンポーネント CSS 変数を直接設定します。 From b1c0b15e6af1133ba61413b1452c74d6f51587d0 Mon Sep 17 00:00:00 2001 From: jsakamotoIGJP Date: Fri, 21 Aug 2026 13:45:05 +0900 Subject: [PATCH 22/38] docs(jp): complete circular-progress translation and fix broken PlatformBlocks --- .../jp/components/circular-progress.mdx | 29 ++--- .../components/inputs/circular-progress.mdx | 100 +++++++----------- 2 files changed, 53 insertions(+), 76 deletions(-) diff --git a/docs/angular/src/content/jp/components/circular-progress.mdx b/docs/angular/src/content/jp/components/circular-progress.mdx index c09ddfd34b..be6dcce866 100644 --- a/docs/angular/src/content/jp/components/circular-progress.mdx +++ b/docs/angular/src/content/jp/components/circular-progress.mdx @@ -1,11 +1,11 @@ --- title: Angular Circular Progress コンポーネント - MITライセンス -description: Ignite UI for Angular Circular Progress インジケーター コンポーネントは、丸形で進行状況を表示し、カスタマイズできるコンポーネントです。 +description: Ignite UI for Angular Circular Progress インジケーター コンポーネントは、円形で進行状況を表示し、カスタマイズできるコンポーネントです。 keywords: Angular Circular Progress コンポーネント, Angular Circular Progress コントロール, Ignite UI for Angular, UI コントロール, Angular ウィジェット, web ウィジェット, UI ウィジェット, Angular, ネイティブ Angular コンポーネント スイート, ネイティブ Angular コントロール, Angular UI コンポーネント license: MIT _language: ja llms: - description: "Ignite UI for Angular Circular Progress インジケーター コンポーネントは、丸形で進行状況を表示し、カスタマイズできるコンポーネントです。" + description: "Ignite UI for Angular Circular Progress インジケーター コンポーネントは、円形で進行状況を表示し、カスタマイズできるコンポーネントです。" --- import DocsAside from 'igniteui-astro-components/components/mdx/DocsAside.astro'; @@ -15,7 +15,7 @@ import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; # Angular Circular Progress (円形プログレス) コンポーネントの概要

-The Ignite UI for Angular Circular Progress Indicator component provides a visual indicator of an application’s process as it changes. The circular indicator updates its appearance as its state changes. +Ignite UI for Angular Circular Progress Indicator コンポーネントは、変化していくアプリケーションの進行状況を表す視覚的なインジケーターです。円形インジケーターは状態の変更に応じて表示を更新します。
## Angular Circular Progress の例 @@ -86,22 +86,25 @@ Ignite UI for Angular Progress Bar モジュールまたはディレクティブ ``` -その後、ブラウザ上でデモサンプルを確認することができます。 +その後、ブラウザー上でデモ サンプルを確認できます。 **igx-circular-bar** は、各ステップに `{currentValue: 65, previousValue: 64}` のようなオブジェクトを出力する イベントを発生します。 + + 値が定義されていない場合、進行状況は更新サイクルごとにデフォルトで ** 値の 1%** ずつ増加します。更新の間隔を変更するには、 値を定義する必要があります。 + -### 不確定のプログレス +### 不確定状態のプログレス -正確に決定していないプロセスをトラックしたい場合、 プロパティを `true` に設定できます。 +進行状況を正確に把握できない処理を表示する場合、 入力プロパティを `true` に設定できます。 ```html ``` -円形のプログレスバーのテキストを非表示にするには、 プロパティを `false` に設定します。 +円形プログレス バーのテキストを非表示にするには、 プロパティを `false` に設定します。 結果は以下のようになります。 @@ -112,7 +115,7 @@ Ignite UI for Angular Progress Bar モジュールまたはディレクティブ ### ダイナミック プログレス -ボタンなどの外部コントロールを使用して進行の値を動的に変更できます。これを実現するには、値をクラス プロパティにバインドします。 +ボタンなどの外部コントロールを使用して進行状況の値を動的に変更できます。これを実現するには、値をクラス プロパティにバインドします。 ```html
@@ -133,7 +136,7 @@ Ignite UI for Angular Progress Bar モジュールまたはディレクティブ
``` - + このコンポーネントはマテリアル アイコンを使用します。`index.html` に次のリンクを追加してください: `` @@ -182,7 +185,7 @@ export class HomeComponent { ### グラデーション プログレス プログレス バーをカスタマイズする方法の 1 つとして、単色の代わりにカラー グラデーションを使用する方法があります。 -これは、 ディレクティブを使用する、もしくは、カスタム テーマを実装することにより実行できます (カスタム テーマは 2 つまでの色経由点 (color stop) をサポートします)。 +これには 2 つの方法があります。 ディレクティブを使用する方法と、カスタム テーマを実装する方法です (カスタム テーマは 2 つまでの色経由点 (color stop) をサポートします)。 カスタム テーマを使用して 2 つの色経由点のみを含むグラデーションを作成するには、色のリストを作成し、それを `$fill-color-default` テーマ パラメーターに渡す必要があります。 @@ -194,9 +197,9 @@ $custom-theme: progress-circular-theme( ); ``` -円形のプログレス バーのスタイル設定については、[`スタイル設定セクション`](#スタイル設定) を参照してください。 +円形プログレス バーのスタイル設定については、[`スタイル設定セクション`](#スタイル設定) を参照してください。 -3つ以上の色経由点を持つグラデーションを提供するには、`igx-circular-bar` の `ng-template` でディレクティブを使用する必要があります。 +3 つ以上の色経由点を持つグラデーションを提供するには、`igx-circular-bar` の `ng-template` でディレクティブを使用する必要があります。 ```html
@@ -233,7 +236,7 @@ $custom-theme: progress-circular-theme( ## スタイル設定 -円形のプログレスバーのスタイル設定は、すべてのテーマ関数とコンポーネント ミックスインが存在する `index` ファイルをインポートする必要があります。 +円形プログレス バーのスタイル設定を開始するには、すべてのテーマ関数と `tokens()` ミックスインがエクスポートされている `index` ファイルをインポートする必要があります。 ```scss @use "igniteui-angular/theming" as *; diff --git a/docs/xplat/src/content/jp/components/inputs/circular-progress.mdx b/docs/xplat/src/content/jp/components/inputs/circular-progress.mdx index 5bc4769063..8d4c1b8b90 100644 --- a/docs/xplat/src/content/jp/components/inputs/circular-progress.mdx +++ b/docs/xplat/src/content/jp/components/inputs/circular-progress.mdx @@ -7,7 +7,7 @@ mentionedTypes: ["CircularProgress", "CircularGradient"] namespace: Infragistics.Controls _language: ja llms: - description: "{ProductName} Circular Progress Indicator コンポーネントは、変更でアプリケーションの進行状況を表す視覚的なインジケーターです。" + description: "{ProductName} Circular Progress Indicator コンポーネントは、変化していくアプリケーションの進行状況を表す視覚的なインジケーターです。" --- import DocsAside from 'igniteui-astro-components/components/mdx/DocsAside.astro'; import PlatformBlock from 'igniteui-astro-components/components/mdx/PlatformBlock.astro'; @@ -15,23 +15,18 @@ import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; - # {Platform} Circular Progress (円形プログレス) の概要 -{ProductName} Circular Progress Indicator コンポーネントは、変更でアプリケーションの進行状況を表す視覚的なインジケーターです。丸形インジケーターは状態変更で外観を更新します。 +{ProductName} Circular Progress Indicator コンポーネントは、変化していくアプリケーションの処理状況を視覚的に表示します。この円形インジケーターは、状態の変化に応じて表示を更新します。 ## {Platform} Circular Progress の例 - - ## 使用方法 - - まず、次のコマンドを実行して {ProductName} をインストールする必要があります: ```cmd @@ -47,16 +42,12 @@ import 'igniteui-webcomponents/themes/light/bootstrap.css'; defineComponents(IgcCircularProgressComponent); ``` -{ProductName} の完全な概要については、[作業の開始](../general-getting-started.mdx)トピックを参照してください。 - +{ProductName} の完全な概要については、[**作業の開始**](../general-getting-started.mdx)トピックを参照してください。 - - - まず、次のコマンドを実行して、対応する {ProductName} npm パッケージをインストールする必要があります: ```cmd @@ -73,12 +64,8 @@ IgrCircularProgressModule.register(); - - - - を使用する前に、次のように登録する必要があります: ```csharp @@ -95,7 +82,6 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbCircularProgressModule)); - の使用を開始する最も簡単な方法は次のとおりです: @@ -146,18 +132,13 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbCircularProgressModule)); ```razor - ``` - -### 不確定のプログレス - -正確に決定されていないプロセスをトラックしたい場合、 プロパティを設定できます。また、 プロパティを設定することで、{ProductName} のデフォルトのラベルを非表示にし、公開された プロパティを介して進行状況インジケーターのデフォルトのラベルをカスタマイズできます。 +``` -```tsx -### Indeterminate Progress +### 不確定状態のプログレス -If you want to track a process that is not determined precisely, you can set the property. Also, you can hide the default label of the {ProductName} by setting the property and customize the progress indicator default label via the exposed `LabelFormat` property. +進行状況を正確に把握できない処理を表示する場合、 プロパティを設定できます。また、 プロパティを設定することで、{ProductName} のデフォルトのラベルを非表示にし、 プロパティを使用して進行状況インジケーターのデフォルトのラベルをカスタマイズできます。 @@ -183,16 +164,13 @@ If you want to track a process that is not determined precisely, you can set the -The following sample demonstrates the above configuration: - - +次のサンプルは、上記の構成を示しています: + +### アニメーション期間 - -### Animation Duration - -You can use the property on the component to specify how long the animation cycle should take in milliseconds. + コンポーネントの プロパティを使用して、アニメーション サイクルにかかる時間をミリ秒単位で指定できます。 @@ -218,17 +196,14 @@ You can use the which defines the gradient stops. - - - +### グラデーション プログレス +`gradient` スロットと、グラデーション ストップを定義する コンポーネントを使用して、プログレス バーが単色ではなくカラー グラデーションを使用するようにカスタマイズできます。 + -For each defined as gradient slot of {ProductName} a [SVG stop](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/stop) element would be created. The values passed as `color`, `offset` and `opacity` would be set as stop-color, offset and stop-opacity of the SVG element without further validations. +{ProductName} の `gradient` スロットとして定義された ごとに、[SVG stop](https://developer.mozilla.org/ja/docs/Web/SVG/Element/stop) 要素が作成されます。`color`、`offset`、`opacity` に指定した値は、追加の検証なしに SVG 要素の `stop-color`、`offset`、`stop-opacity` 属性として設定されます。 @@ -270,28 +245,27 @@ For each defined as gradient slot +## スタイル設定 -## Styling - -The component exposes CSS parts for almost all of its inner elements: + コンポーネントは、その内部要素のほとんどすべての CSS パーツを公開します。 -|Name|Description| +|名前|説明| |--|--| -| `svg` | The progress SVG element. | -| `gradient_start` | The progress linear-gradient start color. | -| `gradient_end` | The progress linear-gradient end color. | -| `track` | The progress ring's track area. | -| `fill` | The progress indicator area. | -| `label` | The progress label. | -| `value` | The progress label value. | -| `indeterminate` | The progress indeterminate state. | -| `primary` | The progress indicator primary state. | -| `danger` | The progress indicator error state. | -| `warning` | The progress indicator warning state. | -| `info` | The progress indicator info state. | -| `success` | The progress indicator success state. | - -Using this CSS parts we have almost full control over the Circular Progress styling. +| `svg` | 進行状況の SVG 要素。 | +| `gradient_start` | 進行状況の linear-gradient の開始色。 | +| `gradient_end` | 進行状況の linear-gradient の終了色。 | +| `track` | プログレス リングのトラック領域。 | +| `fill` | 進行状況インジケーター領域。 | +| `label` | 進行状況ラベル。 | +| `value` | 進行状況ラベルの値。 | +| `indeterminate` | 進行状況の indeterminate 状態。 | +| `primary` | 進行状況インジケーターの primary 状態。 | +| `danger` | 進行状況インジケーターの error 状態。 | +| `warning` | 進行状況インジケーターの warning 状態。 | +| `info` | 進行状況インジケーターの info 状態。 | +| `success` | 進行状況インジケーターの success 状態。 | + +この CSS パーツを使用すると、Circular Progress のスタイルをほぼ完全に制御できます。 ```css @@ -311,14 +285,14 @@ igc-circular-progress::part(track) { ``` - + -## API References +## API リファレンス -## Additional Resources +## その他のリソース -- [{ProductName} **Forums**]({ForumsLink}) -- [{ProductName} **GitHub**]({GithubLink}) +- [{ProductName} **フォーラム (英語)**]({ForumsLink}) +- [{ProductName} **GitHub (英語)**]({GithubLink}) From a767fc3d4f4285fe4ca93cef633d32ddd4a9eedd Mon Sep 17 00:00:00 2001 From: Hristo Hristov <57346540+Hristo313@users.noreply.github.com> Date: Mon, 24 Aug 2026 16:09:37 +0300 Subject: [PATCH 23/38] feat(docs): update button-group topics (#468) --- .../content/en/components/button-group.mdx | 368 -------- .../src/content/en/components/list.mdx | 2 +- .../en/components/themes/roundness.mdx | 2 +- .../src/content/en/components/toc.json | 2 +- .../button-group-lt-a.png | Bin 0 -> 50786 bytes .../images/button-group/button-group-do-1.png | Bin 0 -> 3631 bytes .../images/button-group/button-group-do-2.png | Bin 0 -> 3086 bytes .../images/button-group/button-group-do-3.png | Bin 0 -> 4629 bytes .../button-group/button-group-do-not-1.png | Bin 0 -> 3332 bytes .../button-group/button-group-do-not-2.png | Bin 0 -> 3602 bytes .../button-group/button-group-do-not-3.png | Bin 0 -> 4403 bytes .../images/button-group/button-group-do-1.png | Bin 0 -> 3631 bytes .../images/button-group/button-group-do-2.png | Bin 0 -> 3086 bytes .../images/button-group/button-group-do-3.png | Bin 0 -> 4629 bytes .../button-group/button-group-do-not-1.png | Bin 0 -> 3332 bytes .../button-group/button-group-do-not-2.png | Bin 0 -> 3602 bytes .../button-group/button-group-do-not-3.png | Bin 0 -> 4403 bytes .../en/components/inputs/button-group.mdx | 801 +++++++++++++++++- docs/xplat/src/content/en/toc.json | 9 +- 19 files changed, 774 insertions(+), 410 deletions(-) delete mode 100644 docs/angular/src/content/en/components/button-group.mdx create mode 100644 docs/angular/src/content/en/images/anatomy-content-light/button-group-lt-a.png create mode 100644 docs/angular/src/content/en/images/button-group/button-group-do-1.png create mode 100644 docs/angular/src/content/en/images/button-group/button-group-do-2.png create mode 100644 docs/angular/src/content/en/images/button-group/button-group-do-3.png create mode 100644 docs/angular/src/content/en/images/button-group/button-group-do-not-1.png create mode 100644 docs/angular/src/content/en/images/button-group/button-group-do-not-2.png create mode 100644 docs/angular/src/content/en/images/button-group/button-group-do-not-3.png create mode 100644 docs/xplat/src/assets/images/button-group/button-group-do-1.png create mode 100644 docs/xplat/src/assets/images/button-group/button-group-do-2.png create mode 100644 docs/xplat/src/assets/images/button-group/button-group-do-3.png create mode 100644 docs/xplat/src/assets/images/button-group/button-group-do-not-1.png create mode 100644 docs/xplat/src/assets/images/button-group/button-group-do-not-2.png create mode 100644 docs/xplat/src/assets/images/button-group/button-group-do-not-3.png diff --git a/docs/angular/src/content/en/components/button-group.mdx b/docs/angular/src/content/en/components/button-group.mdx deleted file mode 100644 index 32b168dd5f..0000000000 --- a/docs/angular/src/content/en/components/button-group.mdx +++ /dev/null @@ -1,368 +0,0 @@ ---- -title: Angular Button Group Component – Ignite UI for Angular | Infragistics | MIT license -description: Provides button group functionality to developers and also allows horizontal/vertical alignment, single/multiple selection with toggling. -keywords: Ignite UI for Angular, UI controls, Angular widgets, web widgets, UI widgets, Angular, Native Angular Components Suite, Native Angular Controls, Native Angular Components Library, Angular Button Group components, Angular Button Group controls, Angular Buttons components, Angular Buttons controls -license: MIT -llms: - description: "Angular Button Group component is used to organize buttons into styled button groups with horizontal/vertical alignment, single/multiple selection and toggling." ---- - -import DocsAside from 'igniteui-astro-components/components/mdx/DocsAside.astro'; -import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; -import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; - -# Angular Button Group Component Overview - -
-Angular Button Group component is used to organize buttons into styled button groups with horizontal/vertical alignment, single/multiple selection and toggling. -
- -## Angular Button Group Example - - - -
- -## Getting Started with Ignite UI for Angular Button Group - -To get started with the Ignite UI for Angular Button Group component, first you need to install Ignite UI for Angular. In an existing Angular application, type the following command: - -```cmd -ng add igniteui-angular -``` - -For a complete introduction to the Ignite UI for Angular, read the [_getting started_](/general/getting-started) topic. - -The next step is to import the `IgxButtonGroupModule` in your **app.module.ts** file. - -```typescript -// app.module.ts - -... -import { IgxButtonGroupModule } from 'igniteui-angular/button-group'; -// import { IgxButtonGroupModule } from '@infragistics/igniteui-angular'; for licensed package - -@NgModule({ - ... - imports: [..., IgxButtonGroupModule], - ... -}) -export class AppModule {} -``` - -Alternatively, as of `16.0.0` you can import the `IgxButtonGroupComponent` as a standalone dependency, or use the [`IGX_BUTTON_GROUP_DIRECTIVES`](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/button-group/src/button-group/public_api.ts) token to import the component and all of its supporting components and directives. - -```typescript -// home.component.ts - -... -import { IGX_BUTTON_GROUP_DIRECTIVES } from 'igniteui-angular/button-group'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -// import { IGX_BUTTON_GROUP_DIRECTIVES, IgxIconComponent } from '@infragistics/igniteui-angular'; for licensed package - -@Component({ - selector: 'app-home', - template: ` - - - - - - - `, - styleUrls: ['home.component.scss'], - standalone: true, - imports: [IGX_BUTTON_GROUP_DIRECTIVES, IgxIconComponent] - /* or imports: [IgxButtonGroupComponent, IgxButtonDirective, IgxIconComponent] */ -}) -export class HomeComponent {} -``` - - -This component uses Material Icons. Add the following link to your `index.html`: `` - - -Now that you have the Ignite UI for Angular Button Group module or directives imported, you can start with a basic configuration of the `igx-buttongroup` and its buttons. - -## Using for Angular Button Group Component - -### Add Button Group - -Use the selector to wrap your buttons and display them into a button group. If you want a button to be selected by default, use the `selected` property: - -```html -{/* sample.component.html */} - - - - - - -``` - -## Examples - -### Alignment - -Use the input property to set the orientation of the buttons in the button group. - -```typescript -//sample.component.ts -import { ButtonGroupAlignment } from 'igniteui-angular/button-group'; -// import { ButtonGroupAlignment } from '@infragistics/igniteui-angular'; for licensed package - -... -public alignment = ButtonGroupAlignment.vertical; -... -``` - -```html -{/* sample.component.html */} - - - - - - -``` - - - -
- -### Selection - -In order to configure the `igx-buttongroup` selection, you could use its property. This property accepts the following three modes: - -- **single** - default selection mode of the button group. A single button can be selected/deselected by the user. -- **singleRequired** - mimics a radio group behavior. Only one button can be selected and once initial selection is made, deselection is not possible through user interaction. -- **multi** - multiple buttons in the group can be selected and deselected. - -The sample below demonstrates the exposed `igx-buttongroup` selection modes: - - - -### Size - -The `--ig-size` CSS custom property can be used to control the size of the button group. - -```scss -/* sample.component.scss */ -igx-buttongroup { - --ig-size: var(--ig-size-small); -} -``` - -```html -{/* sample.component.html */} - -``` - - - -### Custom toggle buttons - -Use the input property to set an array of customized buttons in the button group. - -```typescript -// sample.component.ts - -interface IButton { - ripple?: string; - label?: string; - disabled?: boolean; - togglable?: boolean; - selected?: boolean; - color?: string; - icon?: string; -} - -class ToggleButton { - private ripple: string; - private label: string; - private disabled: boolean; - private togglable: boolean; - private selected: boolean; - private color: string; - private icon: string; - - constructor(obj?: IButton) { - this.ripple = obj.ripple || 'gray'; - this.label = obj.label; - this.selected = obj.selected || false; - this.togglable = obj.togglable || true; - this.disabled = obj.disabled || false; - this.color = obj.color; - this.icon = obj.icon; - } -} -... -public bordersButtons: ToggleButton[]; - -public ngOnInit() { - this.bordersButtons = [ - new ToggleButton({ - icon: 'border_top', - selected: true - }), - new ToggleButton({ - icon: 'border_right', - selected: false - }), - new ToggleButton({ - icon: 'border_bottom', - selected: false - }), - new ToggleButton({ - icon: 'border_left', - selected: false - }) - ]; -} -... -``` - -```html -{/* sample.component.html */} - -``` - - - -## Styling - -### Button Group Theme Property Map - -When you set a value for the `$item-background` property, all related dependent properties listed in the table below are automatically updated to maintain visual consistency. The table shows which properties are affected when you customize the primary property. - -| Primary Property | Dependent Property | Description | -| --- | --- | --- | -| **$item-background** | $item-hover-background | The hover background color for items. | -| | $item-selected-background | The selected item background color. | -| | $item-focused-background | The focused item background color. | -| | $disabled-background-color | The disabled item background color. | -| | $item-border-color | The border color for items. | -| | $item-text-color | The text color for items. | -| | $idle-shadow-color | The idle shadow color for items. | -| **$item-hover-background** | $item-selected-hover-background | The selected item hover background color. | -| | $item-focused-hover-background | The focused hover background color. | -| | $item-hover-text-color | The text color for hovered items. | -| | $item-hover-icon-color | The icon color for hovered items. | -| **$item-selected-background** | $item-selected-focus-background | The selected item focus background color. | -| | $disabled-selected-background | The disabled selected background color. | -| | $item-selected-text-color | The text color for selected items. | -| | $item-selected-icon-color | The icon color for selected items. | -| | $item-selected-hover-text-color | The text color for selected hover items. | -| | $item-selected-hover-icon-color | The icon color for selected hover items. | -| **$item-border-color** | $item-hover-border-color | The border color for hovered items. | -| | $item-focused-border-color | The border color for focused items. | -| | $item-selected-border-color | The border color for selected items. | -| | $item-selected-hover-border-color | The border color for selected hover items. | -| | $item-disabled-border | The border color for disabled items. | -| | $disabled-selected-border-color | The border color for disabled selected items. | - -To get started with styling the button group, we need to import the `index` file, where all the theme functions and the `tokens()` mixin are exported: - -```scss -@use "igniteui-angular/theming" as *; - -// IMPORTANT: Prior to Ignite UI for Angular version 13 use: -// @import '~igniteui-angular/lib/core/styles/themes/index'; -``` - -Following the simplest approach, we create a new theme that extends the and specifying just the `$item-background`. Based on this value, the theme will automatically compute appropriate state colors, contrast foregrounds, and borders for the button group. Of course, you're still free to override any of the theme parameters with custom values if needed. - -```scss -$custom-button-group: button-group-theme( - $item-background: #57a5cd, -); -``` - -As seen, the `button-group-theme` exposes some useful parameters for basic styling of its items. If you want to drill deeper and change some button specific parameters, you can create a new theme that extends the `button-theme` and scope it under the respective button group class. - -The last step is to include the component's theme. - -```scss -:host { - @include tokens($custom-button-group); -} -``` - -### Demo - - - -### Styling with Tailwind - -You can style the `button-group` using our custom Tailwind utility classes. Make sure to [set up Tailwind](/themes/misc/tailwind-classes) first. - -Along with the tailwind import in your global stylesheet, you can apply the desired theme utilities as follows: - -```scss -@import "tailwindcss"; -... -@use 'igniteui-theming/tailwind/utilities/material.css'; -``` - -The utility file includes both `light` and `dark` theme variants. - -- Use `light-*` classes for the light theme. -- Use `dark-*` classes for the dark theme. -- Append the component name after the prefix, e.g., `light-button-group`, `dark-button-group`. - -Once applied, these classes enable dynamic theme calculations. From there, you can override the generated CSS variables using `arbitrary properties`. After the colon, provide any valid CSS color format (HEX, CSS variable, RGB, etc.). - -You can find the full list of properties in the . The syntax is as follows: - -```html - -... - -``` - - -The exclamation mark(`!`) is required to ensure the utility class takes precedence. Tailwind applies styles in layers, and without marking these styles as important, they will get overridden by the component’s default theme. - - -At the end your button group should look like this: - - - -## API References -
-- -- -- -- -## Theming Dependencies - -- -- -- - -## Additional Resources - -
- -Our community is active and always welcoming to new ideas. - -- [Ignite UI for Angular **Forums**](https://www.infragistics.com/community/forums/f/ignite-ui-for-angular) -- [Ignite UI for Angular **GitHub**](https://github.com/IgniteUI/igniteui-angular) diff --git a/docs/angular/src/content/en/components/list.mdx b/docs/angular/src/content/en/components/list.mdx index 9291575d95..bbc09c7109 100644 --- a/docs/angular/src/content/en/components/list.mdx +++ b/docs/angular/src/content/en/components/list.mdx @@ -300,7 +300,7 @@ toggleFavorite(item: IgxListItem) { } ``` -Let's also allow the user to choose the size of the list by using the `--ig-size` CSS custom property. We will do this by importing the `IgxButtonGroupModule` and using the [**IgxButtonGroup**](/button-group) to display all size values. This way whenever one gets selected, we will update the **size** of the list. +Let's also allow the user to choose the size of the list by using the `--ig-size` CSS custom property. We will do this by importing the `IgxButtonGroupModule` and using the [**IgxButtonGroup**](/components/inputs/button-group) to display all size values. This way whenever one gets selected, we will update the **size** of the list. ```typescript // app.module.ts diff --git a/docs/angular/src/content/en/components/themes/roundness.mdx b/docs/angular/src/content/en/components/themes/roundness.mdx index b0ef36f9cc..36eb3f72e4 100644 --- a/docs/angular/src/content/en/components/themes/roundness.mdx +++ b/docs/angular/src/content/en/components/themes/roundness.mdx @@ -20,7 +20,7 @@ Many Ignite UI components have predefined minimum and maximum border-radius valu When you set `--ig-radius-factor` to 0, the component uses its minimum border-radius and will appear more block-like with sharp corners. When set to 1, the component uses its maximum predefined border-radius and will appear rounded. Here is a list of the components that have predefined minimum and maximum border-radius values and can be modified using the `--ig-radius-factor` variable:
-• [Action Strip](/action-strip) • [Button](/button) • [Button Group](/button-group) • [Calendar](/calendar) • [Card](/card) • [Carousel](/carousel) • [Checkbox](/checkbox) • [Chip](/chip) • [Combo](/combo) • [Date Picker](/date-picker) • [Date Range Picker](/date-range-picker) • [Grid](/grid/grid) • [Input Group](/input-group) • [Linear Progress](/linear-progress) • [List](/list) • [Month Picker](/month-picker) • [Navigation Drawer](/navdrawer) • [Radio](/radio-button) • [Ripple](/ripple) • [Snackbar](/snackbar) • [Switch](/switch) • [Toast](/toast) +• [Action Strip](/action-strip) • [Button](/button) • [Button Group](/components/inputs/button-group) • [Calendar](/calendar) • [Card](/card) • [Carousel](/carousel) • [Checkbox](/checkbox) • [Chip](/chip) • [Combo](/combo) • [Date Picker](/date-picker) • [Date Range Picker](/date-range-picker) • [Grid](/grid/grid) • [Input Group](/input-group) • [Linear Progress](/linear-progress) • [List](/list) • [Month Picker](/month-picker) • [Navigation Drawer](/navdrawer) • [Radio](/radio-button) • [Ripple](/ripple) • [Snackbar](/snackbar) • [Switch](/switch) • [Toast](/toast) ## Usage diff --git a/docs/angular/src/content/en/components/toc.json b/docs/angular/src/content/en/components/toc.json index 056691d8fc..cee884ad7d 100644 --- a/docs/angular/src/content/en/components/toc.json +++ b/docs/angular/src/content/en/components/toc.json @@ -1954,7 +1954,7 @@ }, { "name": "Button Group", - "href": "button-group.mdx" + "href": "inputs/button-group.mdx" }, { "name": "Icon Button", diff --git a/docs/angular/src/content/en/images/anatomy-content-light/button-group-lt-a.png b/docs/angular/src/content/en/images/anatomy-content-light/button-group-lt-a.png new file mode 100644 index 0000000000000000000000000000000000000000..d4990ae354c3a622c615bb2f2d667270212651b2 GIT binary patch literal 50786 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/angular/src/content/en/images/button-group/button-group-do-2.png b/docs/angular/src/content/en/images/button-group/button-group-do-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c79b1461443002de50f3f0b79e685970bafb1e GIT binary patch literal 3086 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 U3(ck;|MDYXW`s3-fxa5|AGc5T6#xJL literal 0 HcmV?d00001 diff --git a/docs/angular/src/content/en/images/button-group/button-group-do-3.png b/docs/angular/src/content/en/images/button-group/button-group-do-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2f016de185fc758bfec5d4b2cfef034a95fbb837 GIT binary patch literal 4629 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 literal 0 HcmV?d00001 diff --git a/docs/angular/src/content/en/images/button-group/button-group-do-not-1.png b/docs/angular/src/content/en/images/button-group/button-group-do-not-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4634972692b05cfebc3e86d4eff2b3db8ebd2e59 GIT binary patch literal 3332 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 H*CPJ~+kaZP literal 0 HcmV?d00001 diff --git a/docs/angular/src/content/en/images/button-group/button-group-do-not-2.png b/docs/angular/src/content/en/images/button-group/button-group-do-not-2.png new file mode 100644 index 0000000000000000000000000000000000000000..585f7ff91c43063874f2940a838100db539e78c2 GIT binary patch literal 3602 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 literal 0 HcmV?d00001 diff --git a/docs/angular/src/content/en/images/button-group/button-group-do-not-3.png b/docs/angular/src/content/en/images/button-group/button-group-do-not-3.png new file mode 100644 index 0000000000000000000000000000000000000000..68d4a04dc5d0ae7c5acaccc208e8731ac0fae91b GIT binary patch literal 4403 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 literal 0 HcmV?d00001 diff --git a/docs/xplat/src/assets/images/button-group/button-group-do-1.png b/docs/xplat/src/assets/images/button-group/button-group-do-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4acaf050a953149d93c710d214654e653dbb8205 GIT binary patch literal 3631 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 literal 0 HcmV?d00001 diff --git a/docs/xplat/src/assets/images/button-group/button-group-do-2.png b/docs/xplat/src/assets/images/button-group/button-group-do-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c79b1461443002de50f3f0b79e685970bafb1e GIT binary patch literal 3086 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 U3(ck;|MDYXW`s3-fxa5|AGc5T6#xJL literal 0 HcmV?d00001 diff --git a/docs/xplat/src/assets/images/button-group/button-group-do-3.png b/docs/xplat/src/assets/images/button-group/button-group-do-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2f016de185fc758bfec5d4b2cfef034a95fbb837 GIT binary patch literal 4629 zcmbW4XH-*Nm&a*B=%H5yL_wqqQJRzlq$pjaL@5E30HRW*C?E+51nJTR2~ChD(m_Ca z6LJysp-2;fNEbqfF!6n6W&~g9DR#r=z2z=H_Mu0&#qNyt=x&ySqCw zGP1e3SzcZ~Gc!|DQ`6GYvcA6F+uOUfwY9Xg)YH@R<;$0fii+CWS}YbjKR=(5k+9j+@#Dvjfq{WvyDNp0?_JvbzkdCimzP&xUr##Pv2A`B5)zV-kTAXV zqxolN!k4VaU7;Ulo7Ba)BB`i2v<-EkmH`v1Q+>v?P%7PF-t;hb8>ay+^-n1;W9kIF za!N?{ET{Lbo?HA4nT?ZRf)gNT%3L$TzbP3*SJDe}X6Q+D|F(X^F#2x=<)Fe##KHNn zjGP^#+d$9*Zi>B|$OtDqEB+%M6j^;maqOyvPcNr8<8tccY5fH$e1=$X2DyI|$dILroZoq{yGA|AUC&(m&tFvuoM3D@aWt2lHC|krKrB$$s zq0H4P{W?;kYUn3a2;!R6K$%6__-u9d!PB5Z94*f~{`Yyf?BZP4cf|C|l*&I+sLy}b zoPgK=wW&GY73niB+jdwZ^EIdV~X1gt;&?xFN3l3@-Dedzb)I5 z6r`b{wEZ(2+E5Ez8=c>*I!Pn;XO^``N=N$@pE<3>UQKp09DHRe=B`UyW_~KUT*vMu z@0pml-|frRbMty#M!K?l(OL2GLO&!I!L_sNt+QWyWIEBPBGRmkv))@?`fEMh8Zp{h z6H+;)I6uth*i?ID5^T4$dG0V6MgGqB3w}C+(R_MZaJyA)QW&w4?7wZ5+AuQ|(k*lv z-x1(pIe08GcU7gQWbC`FKyDe1^=3(0y5dQ9iMjUu5t4U(Bm4{I*M*&;(7Pv6@_v(k z_^I!c&$Bj0|Jn)iZ*G}nZ+cLdtH7d*zzAP6mhm0om8zMw-zO952TS#i5fy5JSk*im z8dd?76BVNxa-DhI<-*R`luF3krH4x@5dsoP^%zv#L$~x%uiYwkg>?J;*{ZxOFn*js zyZ9}M*BF$4lbXxToG+}cr!b*Ucy;MfXFM|bw)r>!59;f}d>a85P&=o36TzERd0z<{ z@sXpS@mY#6^*d<$NkgRxIYTrXy)Q}22qNxVP!I#?%Cc!*%$_o&nqVjPg6zshIWn#< zW^>3oA+@NFk3C+5aWpRXi#Tpo+Dbm1j8pkC4&cC^=yLe@{ZC(d3h{%C#;=@a1o0(u zo@o14?a8NxpMdN0NNVG-YcOlsT?k;J>9q)s1SG>=8>_yPl^{);R^F)$ONzv|;_%kR z2RhXpjZUg^*L)xLMuF9yU}}{kYEs^@oJfiq2&f&pK`0Pow12}G5Z(EGNRcG@s*uGF z^jzhE4uycC5L3>>ntZ6|E~Vh(Br|oa?Qn{u8=o#Y5i4Hfe?5?BrvU|Mc4KjMz=iM&X=$DN55>MG&9h$HQyw&ibZx(v#QM_vG;%=dadI%ITb1 z_|Ok{qO|$Xbg&ane z=vj??2=wR8QO4#Y&5}ZXQi9G~wV0N8>52Qb8h z{!6JO`dZ?I<(a`!?`k8}>G!GgFj(GCr*g)I59mULr#FaqC6M_B?4Lz-kfv<{!7cVs zB*&&LND!)zq5g%Z5vf{y3A6{&^MrRF1i)Hr;0ycSs`#=v*F<6fXqWU#N1P5EyY>>O zyMXNd5~%#+cd{6yCQ1IHZ-DJBs7|R2ei$R^8;~G!zWSIP<&A7OrVq;(+`71#Dh~0= zdkpK@pb>hIE(U2hvVbu>`$lJcV{j2LPz`{Mw8bp~tl2gVYFLZ_HFSo&x!1-Ow5NY~ zkt7yTNI2I8R=bvFf0Nj2W6MWkfp*9Yg-JXO)FUc9H@TC#W;7t2AxR?8uK=ik^Q0I~ zrW7D}1|56*19mRl&<`fw5hR75FF6RysU$T`RVyH1n&5M$Jr8M8-c!f4EqE*<`;W-?ZJVm9`uOX|Bosgsa5Ocv(3q9AH#WnhlNkSwG*k}b zn}VEzTd2}SK;=Av(YOa2O2D_C>QOn$G2;u?s?%^!lg4&Kif+~#Ru0t6)fkZx|r+^ z2S#{{G%_1lF5C7aN;VZJ#ai@7y-T}A+8^Cp6Ob=jlpTDNIIXuMl6`1ZZ$|cgG?o1E zEX#?CgZc9iRt&%znmVrt>kz3Al)hdOjV`Tt+j8aE$2MknX7e1+b+@CLg(BoT{+s9A zVzmSJ8c~;CO(B+A2gKmu!z1~{b-6ouetH^(i_-P8s3V78H{xFaUM`}j;>fpJH}e+M z&GVP8)c9Crs>VJE!<-YlT!JnX;&}2AOyzD(6u{S<;j<`<)53T4XZK`AU+d3GIyZjm z&99wlVd-I^D?h3FOY`VQJnI^5$VEs8_YE#%8c7j^$6|j;Q6|uLrtHP8-MpnoZt4O+ zhpgltv%Mr*OXV>Th=cs`;2F2IGihIuuSc{x(?lD(F5lj_hsMc5SUK-7*n$FEs9u8I%G%hHx3Rs?HXqp z6VFy&`)Y;sxzG9>q)k=@j&phjN zhs2^}Rfui6d2S7*MQ*t4Np#$e>g>nlTZnMvg!L;TWtVnBBFG5Ij7&nRKQpd=)nqC?qh)3eD50V@OiQ_KA(WKNA{WV3t`pPY9Q}LmslTUYe2{ZU`nys(2<7N7gw{ z4#Ur;55%t-f6#GsS2Q3M+8;RwBki2%qlOBByB8ZL>~b9(HetdTwSj?^60!#f%RBOW;JBtCJh?EY~2`Y29`MO}pc_}vGsp{0&ahcyxpQD!zm>TqhW|XOtj6Jyw z_vEK{ihxa^wUHUvaOOT8@~M#IE!7udKL-`ANe|gRO^lmTKm@lcGuDnvOREi>Q{?gK zeRw8Um{|%Mr6;i(aqlAExHRZ&7oC{S+^~WQ)5f*XuLm5pvTNcSN}2!?Wz<>UMv;NGkEheXppW?3=EBZ_nMoqZ+L6&Y@k%j4EKPz=aI4%v`DT>K zg_mk=@bpR;+k-o1w+*B&EHW=n#Dcx!RL|az45w+cIC#V`Hk4WAXFm|qfgF3 zqWkxy`d?8cGZb8R{WaG2oRjTEh~~AVLsA0!>cG~lng;FGy?l^^f$q1_6isOfcN|fK zkXLh1G8D&*nS8mz^4%TwRBdxK=zM&GrQ#CbabJ&sREdes;ueCzLv20?5pSX(o1BZc zTdE#(@C?ZtsK2A1>ebUI?rjZj1W6{c8OEKXSLJECIdykD-gH>h1g<*aR_rsr2CFO& zTtIGHzj;&t6)S(0?}ZFi1dX`8lz-I)_soN5~k8mio_qQ1tXKJ+nLi3ZC6r?SEYndrxaP vEdQ?kf3!eD<-#8hm~>jBB=axg|4oi*z`4)Wulxly{L^oE!$h|n<{17T!cpAX literal 0 HcmV?d00001 diff --git a/docs/xplat/src/assets/images/button-group/button-group-do-not-1.png b/docs/xplat/src/assets/images/button-group/button-group-do-not-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4634972692b05cfebc3e86d4eff2b3db8ebd2e59 GIT binary patch literal 3332 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 H*CPJ~+kaZP literal 0 HcmV?d00001 diff --git a/docs/xplat/src/assets/images/button-group/button-group-do-not-2.png b/docs/xplat/src/assets/images/button-group/button-group-do-not-2.png new file mode 100644 index 0000000000000000000000000000000000000000..585f7ff91c43063874f2940a838100db539e78c2 GIT binary patch literal 3602 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 literal 0 HcmV?d00001 diff --git a/docs/xplat/src/assets/images/button-group/button-group-do-not-3.png b/docs/xplat/src/assets/images/button-group/button-group-do-not-3.png new file mode 100644 index 0000000000000000000000000000000000000000..68d4a04dc5d0ae7c5acaccc208e8731ac0fae91b GIT binary patch literal 4403 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 literal 0 HcmV?d00001 diff --git a/docs/xplat/src/content/en/components/inputs/button-group.mdx b/docs/xplat/src/content/en/components/inputs/button-group.mdx index a61151ce6a..32d1dfc9e5 100644 --- a/docs/xplat/src/content/en/components/inputs/button-group.mdx +++ b/docs/xplat/src/content/en/components/inputs/button-group.mdx @@ -1,40 +1,110 @@ --- -title: "{Platform} Button Group Component | {ProductName}" -description: Get started with the {Platform} Button Group Component - series of {Platform} Toggle Buttons, exposing features such as layout and selection. +title: "Button Group" +description: The {ProductName} Button Group component organizes related toggle buttons and supports horizontal or vertical alignment, single or multiple selection, and toggling. keywords: "{Platform}, UI controls, web widgets, UI widgets, {Platform} Button Group Components, Infragistics" mentionedTypes: ["ToggleButton", "ButtonGroup"] +relatedComponents: [ToggleButton] license: MIT +last_updated: "2026-07-28" llms: - description: "The {Platform} Button Group component is used to organize ToggleButton's into styled button groups with horizontal/vertical alignment, single/multiple selection and toggling." + description: "The {ProductName} Button Group organizes related toggle buttons into a group with horizontal or vertical alignment, single or multiple selection, and toggling." --- import DocsAside from 'igniteui-astro-components/components/mdx/DocsAside.astro'; import PlatformBlock from 'igniteui-astro-components/components/mdx/PlatformBlock.astro'; import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; +import Anatomy from 'igniteui-astro-components/components/mdx/Anatomy.astro'; +import Faq from 'igniteui-astro-components/components/mdx/Faq.astro'; +import FaqItem from 'igniteui-astro-components/components/mdx/FaqItem.astro'; +import { Image } from 'astro:assets'; +import buttonGroupAnatomy from '@xplat-images/anatomy-content-light/button-group-lt-a.png'; +import buttonGroupDo1 from '@xplat-images/button-group/button-group-do-1.png'; +import buttonGroupDo2 from '@xplat-images/button-group/button-group-do-2.png'; +import buttonGroupDo3 from '@xplat-images/button-group/button-group-do-3.png'; +import buttonGroupDoNot1 from '@xplat-images/button-group/button-group-do-not-1.png'; +import buttonGroupDoNot2 from '@xplat-images/button-group/button-group-do-not-2.png'; +import buttonGroupDoNot3 from '@xplat-images/button-group/button-group-do-not-3.png'; + +# Button Group Component +The {Platform} Button Group component is used to organize 's into styled button groups with horizontal/vertical alignment, single/multiple selection and toggling. -# {Platform} Button Group Overview +## Live Demo -The {Platform} Button Group component is used to organize 's into styled button groups with horizontal/vertical alignment, single/multiple selection and toggling. + -## {Platform} Button Example + - + + -## Usage + + - +## Anatomy + +The {Platform} Button Group organizes related Toggle Buttons into a single group with a shared container and individual button items. + + + + + +1. Container: Wraps the button's contents.
+2. Icon: Adds context to the button. Could be left, right, left and right or only icon.
+3. Label: The textual content that describes the button’s action to the user.
+ +The {Platform} Button Group contains Toggle Buttons, and each button can contain an icon and a label. + +```text +Button Group +└── Toggle Button + ├── Icon + └── Label +``` + +## Getting Started + + + +To use the {Platform} Button Group, follow the [{ProductName} Getting Started](/general/getting-started) topic for the basic project setup, then register the component for your target platform. + + + + + +To use the {Platform} Button Group, follow the [{ProductName} Getting Started](../general-getting-started.mdx) topic for the basic project setup, then register the component for your target platform. + + + +### Prerequisites and Version Compatibility + +Use a supported version of the {ProductName} package for your target framework. Keep the framework package, the Button Group package, and the theme package on the same release version. + -First, you need to install the {ProductName} by running the following command: +For Web Components using the **{PackageWebComponents}** package, install the package: ```cmd npm install {PackageWebComponents} ``` -You will then need to import the , its necessary CSS, and register its module, like so: +Then import the , its theme CSS, and register the component: ```ts import { defineComponents, IgcButtonGroupComponent } from "igniteui-webcomponents"; @@ -45,18 +115,15 @@ defineComponents(IgcButtonGroupComponent); - - - -First, you need to the install the corresponding {ProductName} npm package by running the following command: +For React using the **igniteui-react** package, install the package: ```cmd npm install igniteui-react ``` -You will then need to import the and its necessary CSS, like so: +Then import the Button Group wrapper and its theme CSS: ```tsx import { IgrButtonGroup } from 'igniteui-react'; @@ -65,12 +132,9 @@ import 'igniteui-webcomponents/themes/light/bootstrap.css'; - - - -Before using the , you need to register it as follows: +For Blazor using the **IgniteUI.Blazor** package, register the Button Group module as follows: ```csharp // in Program.cs file @@ -78,7 +142,7 @@ Before using the , you need to register builder.Services.AddIgniteUIBlazor(typeof(IgbButtonGroupModule)); ``` -You will also need to link an additional CSS file to apply the styling to the component. The following needs to be placed in the **wwwroot/index.html** file in a **Blazor Web Assembly** project or the **Pages/_Host.cshtml** file in a **Blazor Server** project: +Then link the additional CSS file in the **wwwroot/index.html** file for a **Blazor WebAssembly** project or in the **Pages/_Host.cshtml** file for a **Blazor Server** project: ```razor @@ -86,12 +150,80 @@ You will also need to link an additional CSS file to apply the styling to the
+ + +For Angular using the **igniteui-angular** package, install the package: + +```cmd +ng add igniteui-angular +``` + +Then import `IgxButtonGroupModule` in an NgModule application, or import `IGX_BUTTON_GROUP_DIRECTIVES` and the required standalone components in the component `imports` collection. + +```ts +import { IGX_BUTTON_GROUP_DIRECTIVES } from 'igniteui-angular/button-group'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +For a complete introduction to Ignite UI for Angular, read the [**Getting Started**](/general/getting-started) topic. + + + +The simplest way to start using the is as follows: + + + +```html + +``` + + + + + +```tsx + +``` + + + + + +```razor + +``` + + + + -For a complete introduction to the {ProductName}, read the [**Getting Started**](../general-getting-started.mdx) topic. +```html + +``` + + + +## Usage -Now that you have the {ProductName} Button Group imported, you can start with a basic configuration of the and its buttons. +Use the to wrap your components. To select a button by default, use the attribute: -Use the selector to wrap your s and display them into a button group. If you want a button to be selected by default, use the attribute: + + +```html + + + + + +``` + + @@ -171,25 +303,70 @@ Use the selector to wrap your -## Examples - ### Alignment -Use the property to set the orientation of the buttons in the button group. - +The Button Group supports horizontal and vertical layouts. Use the property to set the orientation of the buttons in the group. + + + +For Angular, set the `alignment` input with the `ButtonGroupAlignment` enum: + +```ts +import { ButtonGroupAlignment } from 'igniteui-angular/button-group'; + +public alignment = ButtonGroupAlignment.vertical; +``` + +```html + + + + + + +``` + + + + + + + + + ### Selection -In order to configure the {ProductName} selection, you could use its property. This property accepts the following three modes: +In order to configure the {ProductName} selection, use its platform-specific selection property. For Angular, use . For React, Web Components, and Blazor, use . The available modes are: - **single** - default selection mode of the button group. A single button can be selected/deselected by the user. - **single-required** - mimics a radio group behavior. Only one button can be selected and once initial selection is made, deselection is not possible through user interaction. - **multiple** - multiple buttons in the group can be selected and deselected. The sample below demonstrates the exposed selection modes: - + + +The Angular selection modes are `single`, `singleRequired`, and `multi`. + +Set the Angular `selectionMode` input to configure the selection behavior: + +```html + + + + + +``` + + + + + + + + A could be marked as selected via its attribute or through the attribute: @@ -263,16 +440,461 @@ A could be marked as selected via its Setting attribute is mandatory for using the property of the . +### States + +Each button in the group supports enabled and disabled variants, which can also be selected or not selected. Use the state behavior provided by the contained components. + + + + + + + + + + + + + +### Interaction States + +The enabled buttons in the group support idle, hover, and focused interaction states. Use the state behavior provided by the contained components. + + + + + + + + + + + + + +### Layout Template + +Each button can use text, an icon, or both. Keep the content style consistent across the group, and use the button content APIs to control the icon and label shown in each button. + + + + + + + + + + + + + +### Custom Toggle Buttons + + + +For Angular, use the `values` input to provide an array of customized buttons. Each item can define properties such as `label`, `icon`, `selected`, `disabled`, and `togglable`. + +Define the button values in the component class: + +```ts +interface IButton { + label?: string; + icon?: string; + disabled?: boolean; + togglable?: boolean; + selected?: boolean; + color?: string; +} + +public bordersButtons: IButton[] = [ + { icon: 'border_top', selected: true }, + { icon: 'border_right' }, + { icon: 'border_bottom' }, + { icon: 'border_left' } +]; +``` + +```html + +``` + +See the Angular Button Group sample for the complete `values` model and configuration. + + + + + + + +For Web Components, use individual Toggle Buttons to create a custom Button Group. Each button can define its own value, icon, label, selected state, and disabled state. + +Register the Button Group and Toggle Button components: + +```ts +import { defineComponents, IgcButtonGroupComponent, IgcToggleButtonComponent, IgcIconComponent } from 'igniteui-webcomponents'; + +defineComponents(IgcButtonGroupComponent, IgcToggleButtonComponent, IgcIconComponent); +``` + +Then define the custom buttons in markup: + +```html + + + + + + + + + + + +``` + + + + + + + +For React, use individual Toggle Buttons to create a custom Button Group. Each button can define its own value, icon, label, selected state, and disabled state. + +Import the Button Group, Toggle Button, and Icon components: + +```tsx +import { IgrButtonGroup, IgrToggleButton, IgrIcon } from 'igniteui-react'; +``` + +Then define the custom buttons in JSX: + +```tsx + + + + + + + + + + + +``` + + + + + + + +For Blazor, use individual Toggle Buttons to create a custom Button Group. Each button can define its own value, icon, label, selected state, and disabled state. + +Register the Button Group module in `Program.cs`: + +```csharp +builder.Services.AddIgniteUIBlazor(typeof(IgbButtonGroupModule)); +``` + +Then define the custom buttons in Razor markup: + +```razor + + + + + + + + + + + +``` + + + + + ### Size The `--ig-size` CSS custom property can be used to control the size of the button group. - + + +```scss +igx-buttongroup { + --ig-size: var(--ig-size-small); +} +``` + +```html + +``` + + + + + + + +```tsx + + +``` + + + + + +```html + +``` + + + + + +```razor + +``` + + + + + + + + +### Do/Don't + +**When to use:** Use a Button Group to organize related toggle actions where users may select one or more options. + +**When not to use:** Do not use a Button Group for unrelated actions or for a single toggle action; use a standalone instead. + +
+ + + + + + + + + + + + + + + + + + + + + +
DoDon't
Button Group do example 1Button Group don't example 1
Button Group do example 2Button Group don't example 2
Button Group do example 3Button Group don't example 3
+
+ +## Properties + +The Button Group properties are generated from the component API reference. + +The property rows are injected from the typed API source during the documentation build. + +| Name | Type | Default | Description | +| --- | --- | --- | --- | +| | `ButtonGroupAlignment` | `horizontal` | Sets the orientation of the buttons in the group. | +| | `ButtonGroupSelection` | `single` | Sets the selection mode for the buttons in the group. | +| | `string[]` | `[]` | Gets or sets the values of the selected buttons. Each Toggle Button must have a unique `value`. | ## Styling -The component exposes `group` CSS part that allows us to style the button group container. -Also, the s provide `toggle` CSS part that could be used to style the button element. + + +The Angular Button Group theme exposes Sass parameters for the group items and their interaction states. Changing a primary theme property updates its related state properties to keep the component visually consistent. + +### Sass Theming + +Use the Angular theme system to customize the Button Group consistently with the rest of your application. + +Import the Angular theming functions before creating a custom Button Group theme: + +```scss +@use "igniteui-angular/theming" as *; +``` + +Create a theme with `button-group-theme` and include it in the component scope: + +```scss +$custom-button-group: button-group-theme( + $item-background: #57a5cd, +); + +:host { + @include tokens($custom-button-group); +} +``` + +### CSS Variables + +Use the Angular theme tokens to customize the Button Group item colors and interaction states. The primary Sass parameters listed below update their related state tokens. + +| Primary property | Dependent property | Description | +| --- | --- | --- | +| `$item-background` | `$item-hover-background` | Hover background for items. | +| | `$item-selected-background` | Selected item background. | +| | `$item-focused-background` | Focused item background. | +| | `$disabled-background-color` | Disabled item background. | +| | `$item-border-color` | Default item border color. | +| | `$item-text-color` | Default item text color. | +| | `$idle-shadow-color` | Idle item shadow color. | +| `$item-hover-background` | `$item-selected-hover-background` | Selected item hover background. | +| | `$item-focused-hover-background` | Focused hover background. | +| | `$item-hover-text-color` | Hovered item text color. | +| | `$item-hover-icon-color` | Hovered item icon color. | +| `$item-selected-background` | `$item-selected-focus-background` | Selected item focus background. | +| | `$disabled-selected-background` | Disabled selected background. | +| | `$item-selected-text-color` | Selected item text color. | +| | `$item-selected-icon-color` | Selected item icon color. | +| | `$item-selected-hover-text-color` | Selected hovered item text color. | +| | `$item-selected-hover-icon-color` | Selected hovered item icon color. | +| `$item-border-color` | `$item-hover-border-color` | Hovered item border color. | +| | `$item-focused-border-color` | Focused item border color. | +| | `$item-selected-border-color` | Selected item border color. | +| | `$item-selected-hover-border-color` | Selected hovered item border color. | +| | `$item-disabled-border` | Disabled item border color. | +| | `$disabled-selected-border-color` | Disabled selected border color. | + +### Style Parts + +Use the following CSS parts to target the Button Group and its contained Toggle Buttons: + +| Part | Component | What it styles | +| --- | --- | --- | +| `group` | | The Button Group container. | +| `toggle` | | An individual Toggle Button. | + +### Custom Styling + +The following example changes the group background and padding, and changes the text color of the contained Toggle Buttons: + +| Selector | Declaration | Effect | +| --- | --- | --- | +| `igx-button-group::part(group)` | `background-color`, `padding` | Changes the Button Group container background and spacing. | +| `igx-toggle-button::part(toggle)` | `color` | Changes the text color of an individual Toggle Button. | + +```css +igx-button-group::part(group) { + background-color: var(--ig-primary-500); + padding: 8px; +} + +igx-toggle-button::part(toggle) { + color: var(--ig-secondary-300); +} +``` + + + +### Styling with Tailwind + +You can style the Angular Button Group with the Ignite UI Tailwind utility classes. First, [set up Tailwind](/themes/misc/tailwind-classes), then import the utility file in the global stylesheet: + +```scss +@import "tailwindcss"; +@use 'igniteui-theming/tailwind/utilities/material.css'; +``` + +Use `light-button-group` or `dark-button-group` for the corresponding theme and override generated CSS variables with arbitrary properties: + +```html + + +``` + +The exclamation mark (`!`) makes the utility class important so it takes precedence over the component theme. + + + + + + + +The {Platform} Button Group uses CSS parts to style the group container and the individual Toggle Buttons. Use the `group` part on the Button Group and the `toggle` part on each Toggle Button to customize their appearance. + +### Sass Theming + +Use the {ProductName} theme system to style the Button Group consistently with the rest of your application. + +Import the theming functions before creating a custom Button Group theme: + +```scss +@use "igniteui-theming" as *; +``` + +Create a theme with `button-group-theme` and include it in the global stylesheet. The `$item-background` parameter is used as the base for the related interaction-state colors. Override additional parameters when you need more control over the Button Group appearance: + +```scss +$custom-button-group: button-group-theme( + $item-background: #57a5cd, +); + +igc-button-group { + @include button-group($custom-button-group); +} +``` + +The same theme applies to Web Components directly and to the underlying `igc-button-group` element rendered by the React and Blazor wrappers. + +### CSS Variables + +Use the following CSS variables to customize the Button Group item colors and interaction states. Set them on the Button Group element to apply the styles to its contained Toggle Buttons: + +| Primary property | Dependent property | Description | +| --- | --- | --- | +| `$item-background` | `$item-hover-background` | Hover background for items. | +| | `$item-selected-background` | Selected item background. | +| | `$item-focused-background` | Focused item background. | +| | `$disabled-background-color` | Disabled item background. | +| | `$item-border-color` | Default item border color. | +| | `$item-text-color` | Default item text color. | +| | `$idle-shadow-color` | Idle item shadow color. | +| `$item-hover-background` | `$item-selected-hover-background` | Selected item hover background. | +| | `$item-focused-hover-background` | Focused hover background. | +| | `$item-hover-text-color` | Hovered item text color. | +| | `$item-hover-icon-color` | Hovered item icon color. | +| `$item-selected-background` | `$item-selected-focus-background` | Selected item focus background. | +| | `$disabled-selected-background` | Disabled selected background. | +| | `$item-selected-text-color` | Selected item text color. | +| | `$item-selected-icon-color` | Selected item icon color. | +| | `$item-selected-hover-text-color` | Selected hovered item text color. | +| | `$item-selected-hover-icon-color` | Selected hovered item icon color. | +| `$item-border-color` | `$item-hover-border-color` | Hovered item border color. | +| | `$item-focused-border-color` | Focused item border color. | +| | `$item-selected-border-color` | Selected item border color. | +| | `$item-selected-hover-border-color` | Selected hovered item border color. | +| | `$item-disabled-border` | Disabled item border color. | +| | `$disabled-selected-border-color` | Disabled selected border color. | + +### Style Parts + +Use the following CSS parts to target the Button Group and its contained Toggle Buttons: + +| Part | Component | What it styles | +| --- | --- | --- | +| `group` | | The Button Group container. | +| `toggle` | | An individual Toggle Button. | + +### Custom Styling + +The following example changes the group background and padding, and changes the text color of the contained Toggle Buttons: + +| Selector | Declaration | Effect | +| --- | --- | --- | +| `igc-button-group::part(group)` | `background-color`, `padding` | Changes the Button Group container background and spacing. | +| `igc-toggle-button::part(toggle)` | `color` | Changes the text color of an individual Toggle Button. | ```css igc-button-group::part(group) { @@ -285,15 +907,126 @@ igc-toggle-button::part(toggle) { } ``` - + + +### Styling with Tailwind + +You can style the {Platform} Button Group with the custom Tailwind utility classes from `igniteui-theming`. Make sure to [set up Tailwind](/themes/tailwind) first, then import the Ignite UI utilities in your global stylesheet: + +```css +@import "tailwindcss"; +@import "igniteui-theming/tailwind/utilities/material.css"; +``` + + + +```jsx + +``` + + + + +```html + +``` + + + + + +```razor + +``` + + + +The exclamation mark (`!`) gives the Tailwind utility precedence over the Button Group's default theme styles. + + + + + +## Accessibility + +The Button Group groups related Toggle Buttons while preserving the interaction and accessible state of each button. Provide meaningful content for every button and choose a selection mode that matches the intended interaction. + +### Keyboard Interaction + +The {Platform} Button Group follows the keyboard behavior of its Toggle Buttons. Use the keyboard interaction provided by the contained buttons and verify the focus order and selection behavior for the configured selection mode. + +| Interaction | Expected behavior | +| --- | --- | +| Keyboard focus | The user can reach the contained Toggle Buttons according to their focus behavior. | +| Toggle Button interaction | The focused button changes its selected state according to the configured selection mode. | + +### Screen Readers / ARIA + +Use clear labels for every {Platform} Toggle Button so assistive technology users can identify each option and its selected state. When an icon does not provide an accessible name, provide an appropriate text label or accessible name for the button. + +### Accessibility Compliance + +Verify the rendered {Platform} Button Group against the accessibility requirements of the application. Check the button names, focus order, selected state announcements, and behavior for the configured selection mode in the target framework. + +## Troubleshooting + +The {Platform} Button Group troubleshooting guidance follows a problem, cause, and fix format for common selection issues. + +### Why does selectedItems not select a button? + +Ensure every Toggle Button has a unique `value` attribute. The `selectedItems` property depends on those values. + +### Known Limitations + +The {Platform} Button Group coordinates Toggle Buttons but does not replace their individual labels or accessible names. + +- Selection behavior depends on the configured `selection` mode. +- The `selectedItems` property depends on unique `value` attributes on the contained Toggle Buttons. +- The Button Group does not provide labels or icons for its buttons; define the content of each Toggle Button separately. ## API References + +The {Platform} Button Group API reference provides the complete API surface for the component and its related Toggle Button functionality. + + +## Dependencies + +The {Platform} Button Group requires the platform package and its theme stylesheet. The examples also use Toggle Button, Icon, and Ripple components. + ## Additional Resources +Use the following {Platform} resources for API details and project support: + - [{ProductName} **Forums**]({ForumsLink}) - [{ProductName} **GitHub**]({GithubLink}) + +## Related Components + +The {Platform} Button Group is built from selectable Toggle Buttons. Use the following related component when you need an individual toggle action instead of a group: + +- + +## FAQ + +These frequently asked questions cover common {Platform} Button Group selection, content, and setup scenarios. + + + + +The Button Group supports `single`, `single-required`, and `multiple` selection modes. Use the `selection` property to choose the mode that matches the interaction you need. + + + +Assign a unique `value` to every and set the corresponding values through the Button Group's `selectedItems` property. + + + +Yes. Add an icon to each and keep the button content consistent across the group. + + + diff --git a/docs/xplat/src/content/en/toc.json b/docs/xplat/src/content/en/toc.json index 2d3207de85..5839d7ff38 100644 --- a/docs/xplat/src/content/en/toc.json +++ b/docs/xplat/src/content/en/toc.json @@ -2432,7 +2432,8 @@ }, { "name": "Badge", - "href": "inputs/badge.mdx" + "href": "inputs/badge.mdx", + "updated": true }, { "exclude": [ @@ -2442,11 +2443,9 @@ "href": "inputs/button.mdx" }, { - "exclude": [ - "Angular" - ], "name": "Button Group", - "href": "inputs/button-group.mdx" + "href": "inputs/button-group.mdx", + "updated": true }, { "exclude": [ From 86068c38751a9be84dd9c44383b5756eb3e66b12 Mon Sep 17 00:00:00 2001 From: jsakamotoIGJP Date: Tue, 25 Aug 2026 11:26:33 +0900 Subject: [PATCH 24/38] docs(jp): align avatar xplat translation with Angular version --- .../content/jp/components/layouts/avatar.mdx | 136 +++++++++--------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/docs/xplat/src/content/jp/components/layouts/avatar.mdx b/docs/xplat/src/content/jp/components/layouts/avatar.mdx index 3fc25a9c17..1f9b240f93 100644 --- a/docs/xplat/src/content/jp/components/layouts/avatar.mdx +++ b/docs/xplat/src/content/jp/components/layouts/avatar.mdx @@ -1,6 +1,6 @@ --- title: "{Platform} Avatar Component | レイアウト | インフラジスティックス" -description: "{Platform} Avatar コンポーネントを使用して、画像、イニシャル、アイコン、またはカスタム コンテンツでユーザー、エンティティ、またはオブジェクトを表現します。" +description: "{Platform} Avatar コンポーネントを使用して、ユーザー、エンティティ、またはオブジェクトを画像、イニシャル、アイコン、またはカスタム コンテンツで表します。" keywords: "{Platform} Avatar, avatar component, profile image, initials, {ProductName}, Infragistics, アバター, プロフィール画像, イニシャル, インフラジスティックス" last_updated: "2026-07-29" license: MIT @@ -8,7 +8,7 @@ mentionedTypes: ["Avatar", "Badge", "Icon"] relatedComponents: ["Badge"] _language: ja llms: - description: "{ProductName} Avatar トピックでは、画像、イニシャル、アイコン、カスタム コンテンツ、形状、サイズ、スタイリング、アクセシビリティ ガイダンスを使用してユーザー、エンティティ、またはオブジェクトの識別情報をレンダリングする方法について説明します。" + description: "{ProductName} Avatar トピックでは、画像、イニシャル、アイコン、カスタム コンテンツ、形状、サイズ、スタイル設定、アクセシビリティ ガイダンスを使用してユーザー、エンティティ、またはオブジェクトのアイデンティティをレンダリングする方法を示します。" --- import PlatformBlock from 'igniteui-astro-components/components/mdx/PlatformBlock.astro'; import Sample from 'igniteui-astro-components/components/mdx/Sample.astro'; @@ -23,11 +23,11 @@ import avatarDo2x from '@xplat-images/avatar/avatar_do1@2x.png'; import avatarDoNot from '@xplat-images/avatar/avatar_do_not1.png'; import avatarDoNot2x from '@xplat-images/avatar/avatar_dont1@2x.png'; -# Avatar コンポーネント +# Avatar (アバター) コンポーネント -{ProductName} Avatar は、画像、イニシャル、またはカスタム コンテンツでユーザー、エンティティ、またはオブジェクトを表現します。 +{ProductName} Avatar は、画像、イニシャル、またはカスタム コンテンツを使用してユーザー、エンティティ、またはオブジェクトを表します。 -リスト、カード、プロフィール メニュー、アクティビティ フィードでコンパクトなビジュアル アイデンティティを提供するためにアバターを使用します。 +アバターを使用して、リスト、カード、プロフィール メニュー、アクティビティ フィードでコンパクトな視覚的アイデンティティを提供します。 ## ライブ デモ @@ -43,16 +43,16 @@ import avatarDoNot2x from '@xplat-images/avatar/avatar_dont1@2x.png';
-## アナトミー +## 構造 -アバターは、画像セマンティクスを適用してサポートされているコンテンツ パターンのいずれかをレンダリングする単一のホスト要素です。 +アバターは、画像のセマンティクスを適用し、サポートされているコンテンツ パターンのいずれかをレンダリングする単一のホスト要素です。 + +1. ドット インジケーター: ステータスや新しい更新を示すために使用される小さなバッジ ドットです。
+2. アイコン: ステータスやアクションの種類を表します。
+3. コンテナー: アイコンやラベルを保持してスタイルを適用するバッジの形状です。
+4. ラベル: バッジ内に表示されるテキストまたは数字です。
+ +このコンポーネントは、`base` CSS パーツ内にコンテンツをレンダリングします。テキストやその他のインライン コンテンツにはコンポーネントのデフォルト スロットを使用してください。`dot` が有効になっている場合、バッジはコンテンツのないインジケーターとしてレンダリングされます。 + +```text + +└── ::part(base) + └── default slot content + +``` +## 作業の開始 -まず、次のコマンドを実行して {ProductName} をインストールする必要があります。 +{Platform} Badge を使用するには、まず [{ProductName} の作業の開始](../general-getting-started.mdx) トピックに従って基本的なプロジェクトのセットアップを行い、その後、対象プラットフォーム用にコンポーネントを登録してください。 + +### 前提条件とバージョンの互換性 + +対象フレームワークでサポートされているバージョンの {ProductName} パッケージを使用してください。フレームワーク パッケージ、Badge パッケージ、テーマ パッケージは同じリリース バージョンに揃えてください。以下の例では、各コード ブロックで使用されているフレームワークとパッケージを明記しているため、周囲のページ コンテキストなしで読んでもスニペットが自己完結的になっています。 + + + +**{PackageWebComponents}** パッケージを使用する Web Components の場合は、パッケージをインストールします: ```cmd npm install {PackageWebComponents} ``` -次に、以下のように、 とそれに必要な CSS をインポートし、そのモジュールを登録する必要があります: +次に、以下のように 、そのテーマ CSS をインポートし、コンポーネントを登録する必要があります: ```ts import { defineComponents, IgcBadgeComponent } from "igniteui-webcomponents"; @@ -45,23 +101,17 @@ import 'igniteui-webcomponents/themes/light/bootstrap.css'; defineComponents(IgcBadgeComponent); ``` -{ProductName} の完全な概要については、[作業の開始](../general-getting-started.mdx)トピックを参照してください。 - - - - - -まず、次のコマンドを実行して、対応する {ProductName} npm パッケージをインストールする必要があります: +**igniteui-react** パッケージを使用する React の場合は、パッケージをインストールします: ```cmd npm install igniteui-react ``` -次に、以下のように、 と必要な CSS をインポートする必要があります: +次に、以下のように Badge のラッパーとそのテーマ CSS をインポートする必要があります: ```tsx import { IgrBadge } from 'igniteui-react'; @@ -70,13 +120,9 @@ import 'igniteui-webcomponents/themes/light/bootstrap.css'; - - - - - を使用する前に、次のように登録する必要があります。 +**IgniteUI.Blazor** パッケージを使用する Blazor の場合は、次のように Badge モジュールを登録します: ```csharp // in Program.cs file @@ -84,20 +130,42 @@ import 'igniteui-webcomponents/themes/light/bootstrap.css'; builder.Services.AddIgniteUIBlazor(typeof(IgbBadgeModule)); ``` -また、追加の CSS ファイルをリンクして、スタイルを コンポーネントに適用する必要があります。以下は、**Blazor Web Assembly** プロジェクトの **wwwroot/index.html** ファイルまたは **Blazor Server** プロジェクトの **Pages/_Host.cshtml** ファイルに配置する必要があります: +また、スタイルを コンポーネントに適用するために、追加の CSS ファイルをリンクする必要があります。以下は、**Blazor Web Assembly** プロジェクトの **wwwroot/index.html** ファイル、または **Blazor Server** プロジェクトの **Pages/_Host.cshtml** ファイルに配置してください: ```razor ``` - + + +**igniteui-angular** パッケージを使用する Angular の場合は、パッケージをインストールします: + +```cmd +npm install igniteui-angular +``` + +次に、Badge コンポーネントをインポートします: + +```ts +import { IgxBadgeComponent } from 'igniteui-angular/badge'; +``` + +コンポーネントの `imports` コレクションに `IgxBadgeComponent` を追加し、テンプレートで `igx-badge` 要素を使用します。 の使用を開始する最も簡単な方法は次のとおりです: +```html + +``` + + + + の使用を開始する最も簡単な方法は次のとおりです: + ```html ``` @@ -120,16 +188,224 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbBadgeModule)); -## 例 +## 使用方法 + +{Platform} Badge を使用して、他のコンポーネントと並べて短いステータス、カテゴリ、カウント、または通知インジケーターを表示します。 + + + +デモ サンプルがどのように作成されているかを見てみましょう。これは、アバターの上にシンプルな success バッジを表示する例です。これを実現するには、`IgxAvatarModule` を `IgxBadgeModule` とともにインポートします: + +```typescript +import { IgxBadgeModule } from 'igniteui-angular/badge'; +import { IgxAvatarModule } from 'igniteui-angular/avatar'; +``` + +両方のモジュールをコンポーネントの `imports` コレクションに追加するか、スタンドアロン コンポーネントをインポートします。次に、コンポーネントをテンプレートに追加します: + +```html +
+ + +
+``` + +相対位置指定のラッパーを使用して、バッジをアバターの上に配置します: + +```scss +.wrapper { + position: relative; + margin-top: 15px; +} + +igx-badge { + position: absolute; + bottom: 0; + left: 28px; +} +``` + +### タイプ + +バッジは、数字やアイコンなど、さまざまな種類のコンテンツを持つことができます。 + +`[value]` 入力を使用して、バッジ内にテキストや数値のカウントを表示します: + +```html + +``` + +`[icon]` 入力を使用して、バッジ内にアイコンを表示します: + +```html + +``` + +`[icon]` と `[value]` の両方が設定されている場合、バッジは両方を同時に表示します: + +```html + +``` + +コンテンツを子要素として直接指定することもできます。アイコンとテキストの両方を子要素として指定する場合は、正しいパディングを保つためにテキストをラップしてください: + +```html + + bluetooth + Bluetooth + +``` + + + +#### アイコン +Material Icons に加えて、Angular Badge は Material Icons Extended やその他のカスタム アイコン セットをサポートします。`IgxIconService` でカスタム アイコンを登録し、その名前とアイコン セットを指定します: + +```ts +this._iconService.addSvgIconFromText(heartMonitor.name, heartMonitor.value, 'imx-icons'); +``` + +```html + +``` + + + +#### ドット + +Ignite UI for Angular Badge は、 属性を設定することで、通知用の最小限のドット インジケーターとしてレンダリングすることもできます。ドット バッジはコンテンツをサポートしませんが、アウトライン表示が可能で、利用可能なすべてのドット タイプ (例: `primary`、`success`、`info`) を使用できます。 + +コンテンツのない最小限の通知インジケーターをレンダリングするには、 属性を設定します: + +```html + +``` + + + +### サイズ + +`--size` CSS 変数でバッジのサイズを制御します。`16px` より小さいテキスト バッジの場合は、フォント サイズと行の高さも調整してください: + +```scss +igx-badge { + --size: 12px; + + font-size: calc(var(--size) / 2); + line-height: normal; +} +``` + + + +### 形状 + +バッジの形状は、 属性を使用して `rounded` (デフォルト) または `square` に設定できます。 + +```html + +``` + + + +バッジの形状が `square` の場合、`--border-radius` CSS 変数を使用してカスタムのボーダー半径を設定することでさらにカスタマイズできます。 + +### バリアント + +Angular Badge は、Primary、Info、Success、Warn、Error の種類をサポートします。 属性を設定して種類を選択します。 + +```html + +``` + + + +
+ + -### バリエーション +次の例は、Avatar 上に表示される success バッジを示しています。プラットフォーム固有のパッケージから Badge と Avatar コンポーネントをインポートし、相対位置指定のラッパー内に Badge を配置します。 -{ProductName} バッジは、いくつかの事前定義されたスタイルのバリエーションをサポートします。サポートされている値 `primary` (デフォルト)、`info`、`success`、`warning`、または `danger` のいずれかを 属性に割り当てることにより、バリエーションを変更できます。 + + +```tsx +import { IgrAvatar, IgrBadge } from 'igniteui-react'; +import 'igniteui-webcomponents/themes/light/bootstrap.css'; +``` + +コンポーネントを JSX に追加します: + +```tsx +
+ + +
+``` + +
+ + + +```ts +import { defineComponents, IgcAvatarComponent, IgcBadgeComponent } from 'igniteui-webcomponents'; +import 'igniteui-webcomponents/themes/light/bootstrap.css'; + +defineComponents(IgcAvatarComponent, IgcBadgeComponent); +``` + +コンポーネントを HTML に追加します: + +```html +
+ + +
+``` + +
+ + + +`Program.cs` で Avatar と Badge のモジュールを登録します: + +```csharp +builder.Services.AddIgniteUIBlazor(typeof(IgbAvatarModule), typeof(IgbBadgeModule)); +``` + +コンポーネントを Razor マークアップに追加します: + +```razor +
+ + +
+``` + +
+ +相対位置指定のラッパーを使用して、バッジを Avatar の上に配置します: + +```css +.wrapper { + position: relative; + margin-top: 15px; +} +``` + +
+ + + +### タイプ + +{ProductName} Badge は、数字やアイコンなど、さまざまな種類のコンテンツを持つことができます。 + + プロパティを使用して、バッジ内にテキストや数値のカウントを表示します: ```tsx - +12 ``` @@ -137,7 +413,7 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbBadgeModule)); ```html - +12 ``` @@ -145,18 +421,174 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbBadgeModule)); ```razor - +12 +``` + + + +コンテンツを子要素として直接指定することもできます。アイコンとテキストの両方を子要素として指定する場合は、正しいパディングを保つためにテキストをラップしてください。 + + + +```tsx + + + Bluetooth + +``` + + + + + +```html + + + Bluetooth + +``` + + + + + +```razor + + + Bluetooth + +``` + + + + + +#### アイコン + +バッジの子コンテンツとしてアイコンを追加します: + + + +```tsx + + + +``` + + + + + +```html + + + +``` + + + + + +```razor + + + ``` - +カスタム アイコンの場合は、プラットフォームのアイコン サービスにアイコンを登録し、バッジの子コンテンツとしてレンダリングします。 -バッジにカスタム背景色が `--background-color` CSS 変数で設定されていても、バリアントの色が常に優先され、バッジに適用されます。 +たとえば、バッジで使用する前に SVG アイコンを登録します: + + + +```ts +import { registerIconFromText } from 'igniteui-webcomponents'; + +registerIconFromText( + 'heart-monitor', + '', + 'custom' +); +``` + + + + + +```razor +@code { + private IgbIcon icon; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && icon != null) + { + await icon.EnsureReady(); + await icon.RegisterIconFromTextAsync( + "heart-monitor", + "", + "custom"); + } + } +} +``` + + + + + +#### ドット + +{ProductName} Badge は、 属性を設定することで、通知用の最小限のドット インジケーターとしてレンダリングすることもできます。ドット バッジはコンテンツをサポートしませんが、アウトライン表示が可能で、利用可能なすべてのドット タイプ (例: `primary`、`success`、`info`) を使用できます。 + +コンテンツのない最小限の通知インジケーターをレンダリングするには、 属性を設定します: + + + +```tsx + +``` + + + + + +```html + +``` + + + + + +```razor + +``` + + + + + +### サイズ + +`--size` CSS 変数でバッジのサイズを制御します。`16px` より小さいテキスト バッジの場合は、フォント サイズと行の高さも調整してください: + +```css +igc-badge { + --size: 12px; + + font-size: calc(var(--size) / 2); + line-height: normal; +} +``` + + ### 形状 -バッジ コンポーネントは、`rounded` (デフォルト) および `square` 形状をサポートします。これらの値は、 属性に割り当てることができます。 +バッジ コンポーネントは、`rounded` (デフォルト) と `square` の形状をサポートします。これらの値は 属性に割り当てることができます。 @@ -182,18 +614,22 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbBadgeModule)); - + + + バッジの形状が `square` の場合、`--border-radius` CSS 変数を使用してカスタムのボーダー半径を設定することでさらにカスタマイズできます。 -### アウトライン + + +### バリアント -バッジには、 属性を設定すると、周囲に控えめなボーダーを表示することもできます。 +{ProductName} Badge は、いくつかの事前定義されたスタイルのバリアント (Primary、Info、Success、Warn、Error) をサポートします。サポートされている値 `primary`、`info`、`success`、`warning`、`danger` のいずれかを 属性に割り当てます。 ```tsx - + ``` @@ -201,7 +637,7 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbBadgeModule)); ```html - + ``` @@ -209,23 +645,23 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbBadgeModule)); ```razor - + ``` - + -アウトライン バッジのボーダーの色は、`--border-color` CSS 変数を使用してカスタマイズすることもできます。 + -### Dot +### アウトライン -{ProductName} Badge コンポーネントは、 属性を設定することで、通知用の最小限のドット インジケーターとして表示することもできます。ドット バッジはコンテンツをサポートしませんが、アウトライン表示が可能で、利用可能なすべてのドット タイプ (例: primary、success、info など) を使用できます。 + 属性を設定すると、バッジの周囲に控えめなボーダーを表示することもできます。 ```tsx - + ``` @@ -233,7 +669,7 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbBadgeModule)); ```html - + ``` @@ -241,18 +677,123 @@ builder.Services.AddIgniteUIBlazor(typeof(IgbBadgeModule)); ```razor - + +``` + + + + + +```html + ``` - + + + + + + + + + + +アウトライン バッジのボーダー カラーは、`--border-color` CSS 変数を使用してカスタマイズすることもできます。 + + + +### 使用すべき場合と使用すべきでない場合 + +**使用すべき場合:** バッジを使用して、他のコンポーネントと並べて短いステータス、カテゴリ、カウント、または通知の状態を伝えます。インジケーターに表示テキストが不要な場合は `dot` を使用します。 + +**使用すべきでない場合:** アクションのための主要なコントロールとして、フォームの検証メッセージの代わりとして、またはバッジのコンテンツ、周囲のコンテキスト、アクセシブルなラベルからステータスを理解できない場合に、バッジを使用しないでください。 + +
+ + + + + + + + + + + + + +
使用すべき使用すべきでない
Badge used with an Avatar and a text labelBadge examples used without a surrounding interface element
+
+ +## プロパティ + +{Platform} Badge は、コンテンツ、外観、インジケーターの動作を制御するためのプラットフォーム固有のプロパティを公開します。 + + + +Angular Badge は、次のプロパティを公開します。完全な型定義については、API リファレンスを参照してください。 + +| 名前 | 型 | デフォルト | 説明 | +| --- | --- | --- | --- | +| | boolean | `false` | バッジをコンテンツのないドット インジケーターとしてレンダリングします。 | +| | boolean | `false` | バッジの周囲にアウトラインを表示します。 | +| | BadgeShape | `rounded` | バッジの形状を設定します。 | +| | BadgeType | `default` | Angular Badge のスタイルの種類を設定します。 | +| | string | — | カスタム CSS クラスを適用します。 | + + + + + +React Badge は、次のプロパティを公開します。 + +| 名前 | 型 | デフォルト | 説明 | +| --- | --- | --- | --- | +| | boolean | `false` | バッジをドット インジケーターとしてレンダリングします。 | +| | boolean | `false` | バッジの周囲にアウトラインを表示します。 | +| | BadgeShape | `rounded` | バッジの形状を設定します。 | +| | StyleVariant | `primary` | バッジのスタイルのバリアントを設定します。 | + + + + + +Web Components Badge は、次のプロパティを公開します。 + +| 名前 | 型 | デフォルト | 説明 | +| --- | --- | --- | --- | +| | boolean | `false` | バッジをドット インジケーターとしてレンダリングします。 | +| | boolean | `false` | バッジの周囲にアウトラインを表示します。 | +| | BadgeShape | `rounded` | バッジの形状を設定します。 | +| | StyleVariant | `primary` | バッジのスタイルのバリアントを設定します。 | +| | CSSResult | — | カスタム スタイルを適用します。 | + + + +Blazor Badge は、次のプロパティを公開します。 + +| 名前 | 型 | デフォルト | 説明 | +| --- | --- | --- | --- | +| | boolean | `false` | バッジをドット インジケーターとしてレンダリングします。 | +| | boolean | `false` | バッジの周囲にアウトラインを表示します。 | +| | BadgeShape | `rounded` | バッジの形状を設定します。 | +| | StyleVariant | `primary` | バッジのスタイルのバリアントを設定します。 | + + ## スタイル設定 - コンポーネントは、すべてのスタイル プロパティを変更するために使用できる `base` CSS パーツを公開します。 +{Platform} Badge は、 コンポーネントの `base` CSS パーツと、ドキュメント化されたスタイル設定変数を使用して外観をカスタマイズします。 + +### Sass テーマ + +{ProductName} のテーマ システムを使用して、アプリケーションの他の部分と一貫性のあるスタイルでバッジをスタイル設定します。 + +### CSS 変数 ```css igc-badge::part(base) { @@ -261,16 +802,164 @@ igc-badge::part(base) { } ``` - +| 変数 | 変更内容 | +| --- | --- | +| `--background-color` | バッジの背景色。 | +| `--border-radius` | バッジの角の半径。 | +| `--border-color` | アウトライン バッジのボーダー カラー。 | +### スタイル パーツ +| パーツ | スタイル対象 | +| --- | --- | +| `base` | バッジのルート要素。 | + + + + +### Tailwind によるスタイル設定 + +カスタムの Tailwind ユーティリティ クラスを使用してバッジをスタイル設定できます。事前に [Tailwind をセットアップ](/themes/tailwind) してください。 + +グローバル スタイルシートで Tailwind をインポートするとともに、ユーティリティ ファイルをインクルードします: + +```scss +@import "tailwindcss"; +@use 'igniteui-theming/tailwind/utilities/material.css'; +``` + +ライトおよびダーク テーマ バリアントには `light-badge` と `dark-badge` を使用します。生成された CSS 変数は、任意のプロパティでオーバーライドできます: + +```html + + +``` + +感嘆符 (`!`) により、ユーティリティ クラスがコンポーネントのデフォルト テーマより優先されるようになります。 + + + + + + + + + +### Tailwind によるスタイル設定 + +`igniteui-theming` のカスタム Tailwind ユーティリティ クラスを使用してバッジをスタイル設定できます。事前に [Tailwind をセットアップ](/themes/tailwind) し、その後グローバル スタイルシートで Ignite UI ユーティリティをインポートしてください: + +```css +@import "tailwindcss"; +@import "igniteui-theming/tailwind/utilities/material.css"; +``` + + + +```jsx + +``` + + + + + +```html + +``` + + + + + +```razor + +``` + + + +感嘆符 (`!`) により、Tailwind ユーティリティがバッジのデフォルトのテーマ スタイルより優先されます。 + + + + + +## アクセシビリティ + +{Platform} Badge は視覚的なステータスを伝えるものであり、そのステータスが重要な場合は、意味のあるテキストまたは周囲のアクセシブルなコンテキストを持つ必要があります。 + +### キーボード インタラクション + +バッジは視覚的なステータス インジケーターであり、インタラクティブなキーボード操作は提供しません。バッジが装飾する要素のフォーカス動作に従ってアクセスされます。 + +### スクリーン リーダー / ARIA + +バッジが支援技術では他に得られない情報を伝える場合は、周囲のコンポーネントに意味のある表示コンテンツまたはアクセシブルなラベルを提供してください。特定の周囲のコントロールについて、実際のアナウンス内容を確認してください。 + +### アクセシビリティ準拠 + +このコンポーネントのアクセシビリティ準拠は、製品の公式アクセシビリティ ステートメントおよびレンダリングされる使用状況のコンテキストに対して検証する必要があります。 + +## トラブルシューティング + +{Platform} Badge のトラブルシューティング ガイダンスは、一般的なスタイルおよびコンテンツの問題について、問題 → 原因 → 対処法の形式で構成されています。 + +### カスタムの背景色を設定してもバッジが変わらないのはなぜですか? + +選択した `variant` は `--background-color` CSS 変数よりも優先されます。カスタムの背景色を使用するには、独自の背景色を適用するバリアントを設定しないようにしてください。 + +### ドット バッジにコンテンツが表示されないのはなぜですか? + +`dot` プロパティはバッジを最小限のインジケーターとしてレンダリングし、コンテンツをサポートしません。テキストやその他のインライン コンテンツを表示する必要がある場合は、通常のバッジを使用してください。 + +### 既知の制限 + +{Platform} Badge には、次のプラットフォームに依存しない制限があります。 + +- ドット バッジはインジケーターのみであり、テキストやアイコンを表示できません。 +- バッジのスタイルおよびバリアント/種類の名前は、Angular とその他のサポートされているフレームワーク間で異なります。属性をフレームワーク間でそのままコピーせず、このページのプラットフォーム固有の例と API リンクを使用してください。 +- バッジは視覚的なステータス インジケーターであり、単体でキーボード インタラクションを提供しません。 ## API リファレンス -
+{Platform} Badge の API リファレンスには、対象プラットフォームの完全に検証された API サーフェスが記載されています。 + + +## 依存関係 + +{Platform} Badge は、視覚的なスタイルを適用するためにテーマ スタイルシートを必要とします。フレームワーク固有のセットアップについては、**作業の開始** を参照してください。 ## その他のリソース +以下のリソースでは、{Platform} Badge に関する追加のガイダンスとプロジェクトのサポートを提供します。 + - [{ProductName} **フォーラム (英語)**]({ForumsLink}) - [{ProductName} **GitHub (英語)**]({GithubLink}) + +## 関連コンポーネント + +{Platform} Badge は、ステータス インジケーターが他の視覚的要素に属する場合、Avatar などの関連コンポーネントと組み合わせて使用されることが一般的です。 + +- [Avatar](../layouts/avatar.mdx) - Avatar と Badge を組み合わせてステータス インジケーターを表示します。 + +## FAQ + +これらの FAQ は、{Platform} Badge の一般的なコンテンツ、インジケーター、パッケージの選択について説明します。 + + + + + はい。**使用方法** に示されているプラットフォーム固有の value と icon の API を使用してください。コンテンツを子要素として直接指定する場合は、アイコンとテキストをコンポーネントのデフォルトのコンテンツ領域内に保持してください。 + + + + プラットフォーム固有の `dot` プロパティまたは属性を設定します。ドット バッジは、意図的にテキストやその他のコンテンツなしでレンダリングされます。 + + + + Angular には `igniteui-angular`、React には `igniteui-react`、Web Components には `igniteui-webcomponents`、Blazor には `IgniteUI.Blazor` を使用してください。関連する Ignite UI パッケージは同じリリース バージョンに揃えてください。 + + + From 61103d448aaf81d22233fb008445e996ca511c2e Mon Sep 17 00:00:00 2001 From: jsakamotoIGJP Date: Tue, 25 Aug 2026 14:24:35 +0900 Subject: [PATCH 29/38] docs(jp): correct badge href in Angular toc.json after xplat move --- docs/angular/src/content/jp/components/toc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/angular/src/content/jp/components/toc.json b/docs/angular/src/content/jp/components/toc.json index 9813cea063..a99226fdfb 100644 --- a/docs/angular/src/content/jp/components/toc.json +++ b/docs/angular/src/content/jp/components/toc.json @@ -2010,7 +2010,7 @@ }, { "name": "Badge", - "href": "badge.mdx", + "href": "inputs/badge.mdx", "updated": false }, { From 836d2f638078bff4f08c2da5e849eb7b3d463901 Mon Sep 17 00:00:00 2001 From: jsakamotoIGJP Date: Tue, 25 Aug 2026 15:03:51 +0900 Subject: [PATCH 30/38] docs(jp): add missing Angular JP images for badge anatomy and do/don't --- .../images/anatomy-content-light/badge-lt-a.png | Bin 0 -> 39071 bytes .../jp/images/badge/badge-do-n\320\276t.png" | Bin 0 -> 4555 bytes .../src/content/jp/images/badge/badge-do.png | Bin 0 -> 21505 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/angular/src/content/jp/images/anatomy-content-light/badge-lt-a.png create mode 100644 "docs/angular/src/content/jp/images/badge/badge-do-n\320\276t.png" create mode 100644 docs/angular/src/content/jp/images/badge/badge-do.png diff --git a/docs/angular/src/content/jp/images/anatomy-content-light/badge-lt-a.png b/docs/angular/src/content/jp/images/anatomy-content-light/badge-lt-a.png new file mode 100644 index 0000000000000000000000000000000000000000..7318080d955b79bac3b12cf25c0f0e9b748c6471 GIT binary patch literal 39071 zcmeFZ^;?sD*atjOKtM$$CB0R;q)`M^M5P;Kqr1CPP~e6MC`dQT=F-Ax; zCN*NjdkyaAIo|glcz=304vuTPu5X^#d4A6PE<#P^%}sI!au5h~Q~vEM4G@S#9|R(L zcAW&c^Hq?<8n}=-ztwXCfp`@O|5tLQ5(FPfi{w>V+kCKNKo{(o(rH<1N$;%CbsXV$!bhF+t{RO zIFdOqmGY_OB#=lbE8mFthpa1EqV_JNl26a8zi$?MEPxT6jAcW=POyC4f?W~LNS1nN zBck#HSA6c9K|>F$5|r<5kUHJ3W>O`%ZAp~`Rc7)^zQ0--Q=KYdUDrLG7x-exDWo3V z!EVJ`RrevS=`=~Ixx3o@AZaEe@G7Cd8|P!fMa_n~{03be1J!9xQ{7k?n}H=iv1QDu zTMSuSqjJ)uS;kD9@I^ZkB09n~{-<`upR%etLq`Ef-^qGyX0)StGTgE4;^9h2D}jQo zZD5y4TC)X=<(X`PUPq%+QUi*~$2jo{@a((Rv>br$# z^vb(vfw=EXxIS)qDxmqx716_p(&Y@f7~kss<@hIR8|C+#OH6sdD&cb%GjiRo2fBbH zTJ-VdZ4O->5M{pWeJXJU(XA zazU1`%NdTc3KKSWD3c`WCui+MYTn=nIo)lAi7_Xk7@$2J2 z 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 literal 0 HcmV?d00001 diff --git a/docs/angular/src/content/jp/images/badge/badge-do.png b/docs/angular/src/content/jp/images/badge/badge-do.png new file mode 100644 index 0000000000000000000000000000000000000000..b8374e9278b07edaba14db761f443baaa07885d7 GIT binary patch literal 21505 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 literal 0 HcmV?d00001 From d95e8659b6c54ce911f67ea3b4c0eedd041615cd Mon Sep 17 00:00:00 2001 From: jsakamotoIGJP Date: Tue, 25 Aug 2026 15:14:24 +0900 Subject: [PATCH 31/38] docs(jp): fix toc.json exclude flag blocking Angular tailwind sync --- docs/xplat/src/content/jp/toc.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/xplat/src/content/jp/toc.json b/docs/xplat/src/content/jp/toc.json index 1ab6d6bfd4..9c26c7e51e 100644 --- a/docs/xplat/src/content/jp/toc.json +++ b/docs/xplat/src/content/jp/toc.json @@ -2767,9 +2767,6 @@ "href": "themes/styles.mdx" }, { - "exclude": [ - "Angular" - ], "name": "カスタム Tailwind クラス", "href": "themes/tailwind.mdx", "new": true From 942459e1bd74fc717d2dac513902ffd609dfc903 Mon Sep 17 00:00:00 2001 From: jsakamotoIGJP Date: Tue, 25 Aug 2026 15:14:52 +0900 Subject: [PATCH 32/38] docs(jp): fix Angular-specific getting-started link in badge topic --- docs/xplat/src/content/jp/components/inputs/badge.mdx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/xplat/src/content/jp/components/inputs/badge.mdx b/docs/xplat/src/content/jp/components/inputs/badge.mdx index 0cc3b7ebc6..27011abc50 100644 --- a/docs/xplat/src/content/jp/components/inputs/badge.mdx +++ b/docs/xplat/src/content/jp/components/inputs/badge.mdx @@ -78,8 +78,18 @@ import badgeDoNot from '@xplat-images/badge/badge-do-nоt.png'; ## 作業の開始 + + +{Platform} Badge を使用するには、まず [{ProductName} の作業の開始](../general/getting-started.mdx) トピックに従って基本的なプロジェクトのセットアップを行い、その後、対象プラットフォーム用にコンポーネントを登録してください。 + + + + + {Platform} Badge を使用するには、まず [{ProductName} の作業の開始](../general-getting-started.mdx) トピックに従って基本的なプロジェクトのセットアップを行い、その後、対象プラットフォーム用にコンポーネントを登録してください。 + + ### 前提条件とバージョンの互換性 対象フレームワークでサポートされているバージョンの {ProductName} パッケージを使用してください。フレームワーク パッケージ、Badge パッケージ、テーマ パッケージは同じリリース バージョンに揃えてください。以下の例では、各コード ブロックで使用されているフレームワークとパッケージを明記しているため、周囲のページ コンテキストなしで読んでもスニペットが自己完結的になっています。 From 742450358e6ea5f38810796178f4caf875d204d1 Mon Sep 17 00:00:00 2001 From: norikois <33947244+norikois@users.noreply.github.com> Date: Tue, 25 Aug 2026 15:20:15 +0900 Subject: [PATCH 33/38] docs(jp): improve overlay service documentation clarity and fix typos --- docs/angular/src/content/jp/components/overlay.mdx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/angular/src/content/jp/components/overlay.mdx b/docs/angular/src/content/jp/components/overlay.mdx index 7c5c96d54a..06f752c223 100644 --- a/docs/angular/src/content/jp/components/overlay.mdx +++ b/docs/angular/src/content/jp/components/overlay.mdx @@ -18,10 +18,11 @@ import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; オーバーレイ サービスはアプリケーションの前景にコンテンツを動的な描画をサポートします。描画するコンテンツおよび描画方法 (配置、アニメーション、スクロールおよびクリック動作など) を構成できます。 このオーバーレイ サービスは Toggle ディレクティブと完全に統合されています。
+
## Angular Overlay の例 - +
@@ -32,7 +33,7 @@ import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; ```typescript import { Inject } from '@angular/core' -import { IgxOverlayService } from `igniteui-angular`; +import { IgxOverlayService } from 'igniteui-angular'; ... @@ -137,7 +138,7 @@ Overlay サービスの メソッドに渡し、IDを生成します。次に、提供された ID で メソッドを呼び出し、カードをモーダル コンテナーで DOM にアタッチします。 +以下のデモでは、[IgxCard](/card#angular-card-の例) コンポーネントをオーバーレイ サービスの メソッドに渡し、IDを生成します。次に、提供された ID で メソッドを呼び出し、カードをモーダル コンテナーで DOM にアタッチします。 @@ -147,11 +148,11 @@ Overlay サービスの メソッドは 型のオブジェクトを受け取ります。このオブジェクトはコンテンツの表示方法を構成します。このオブジェクトが指定されていない場合、Overlay サービスは渡されたコンテンツを描画するためにデフォルト設定を使用します。 -たとえば、コンテンツを要素に相対的に配置するには、オーバーレイの メソッドに別の と ( など) を渡します。コンポーネントの表示方法を構成するには、最初に オブジェクトを作成します。 +たとえば、コンテンツを要素に相対的に配置するには、オーバーレイの メソッドに別の と ( など) を渡します。コンポーネントの表示方法を構成するには、最初に オブジェクトを作成します。 ```typescript // my-overlay-component.component.ts -// import the ConnectedPositioningStategy class +// import the ConnectedPositioningStrategy class import { ConnectedPositioningStrategy } from 'igniteui-angular/core'; // import { ConnectedPositioningStrategy } from '@infragistics/igniteui-angular'; for licensed package ... @@ -219,7 +220,7 @@ const connectedOverlaySettings = IgxOverlayService.createRelativeOverlaySettings ```typescript // my-overlay-component.component.ts -// add an import for the definion of ConnectedPositioningStategy class +// add an import for the definion of ConnectedPositioningStrategy class import { ConnectedPositioningStrategy } from 'igniteui-angular/core'; // import { ConnectedPositioningStrategy } from '@infragistics/igniteui-angular'; for licensed package From f711b31b7ac16330372a71328c6e85632f11d550 Mon Sep 17 00:00:00 2001 From: norikois <33947244+norikois@users.noreply.github.com> Date: Tue, 25 Aug 2026 16:21:14 +0900 Subject: [PATCH 34/38] docs(jp): correct typo in overlay service documentation regarding positionStrategy --- docs/angular/src/content/jp/components/overlay.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/angular/src/content/jp/components/overlay.mdx b/docs/angular/src/content/jp/components/overlay.mdx index 06f752c223..b4a97e0482 100644 --- a/docs/angular/src/content/jp/components/overlay.mdx +++ b/docs/angular/src/content/jp/components/overlay.mdx @@ -148,7 +148,7 @@ Overlay サービスの メソッドは 型のオブジェクトを受け取ります。このオブジェクトはコンテンツの表示方法を構成します。このオブジェクトが指定されていない場合、Overlay サービスは渡されたコンテンツを描画するためにデフォルト設定を使用します。 -たとえば、コンテンツを要素に相対的に配置するには、オーバーレイの メソッドに別の と ( など) を渡します。コンポーネントの表示方法を構成するには、最初に オブジェクトを作成します。 +たとえば、コンテンツを要素に相対的に配置するには、オーバーレイの メソッドに別の と ( など) を渡します。コンポーネントの表示方法を構成するには、最初に オブジェクトを作成します。 ```typescript // my-overlay-component.component.ts From 705119c30984df7928d73267b52ed5f650e3e8f4 Mon Sep 17 00:00:00 2001 From: Ivan Minchev Date: Tue, 25 Aug 2026 16:01:21 +0300 Subject: [PATCH 35/38] chore(skills): sync adapter descriptions with canonical skills --- .claude/skills/igniteui-doc-topics/SKILL.md | 17 ++++++++++++----- .../skills/igniteui-topic-frontmatter/SKILL.md | 3 ++- .codex/skills/igniteui-doc-topics/SKILL.md | 17 ++++++++++++----- .../skills/igniteui-topic-frontmatter/SKILL.md | 3 ++- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/.claude/skills/igniteui-doc-topics/SKILL.md b/.claude/skills/igniteui-doc-topics/SKILL.md index 479d47443e..9b576d481e 100644 --- a/.claude/skills/igniteui-doc-topics/SKILL.md +++ b/.claude/skills/igniteui-doc-topics/SKILL.md @@ -1,11 +1,18 @@ --- name: igniteui-doc-topics description: >- - Author or audit Ignite UI documentation topics: component pages, how-to guides, conceptual - overviews, and category indexes for both the Angular doc set and the cross-platform React / Web - Components / Blazor doc set. Use this whenever someone asks to write, draft, create, review, audit, - fix, or standardize a documentation topic, tutorial, guide, reference page, or concept overview for - Ignite UI. + Author or audit Ignite UI documentation topics — component pages, how-to guides, conceptual + overviews, and category indexes — for both the Angular doc set and the cross-platform (React / + Web Components / Blazor) doc set. Applies the Diátaxis framework mapped onto Ignite UI's house + templates: canonical section order, fixed heading names, frontmatter (including `llms.description` + and the `relatedComponents` trigger), `.mdx` sample embeds, and per-framework token/PlatformBlock + mechanics. Use this whenever someone asks to write, draft, create, review, audit, fix, or + standardize a documentation topic, tutorial, guide, reference page, or concept overview for Ignite + UI — even if they just say "write docs for the X component" or "review this topic" without naming + Diátaxis or the templates. Also use it when deciding what *kind* of documentation a page should be, + or when a topic mixes tutorial / how-to / reference / explanation content that should be separated. + For frontmatter-only audits or metadata normalization, use the companion igniteui-topic-frontmatter + skill instead. --- # Ignite UI doc topics adapter diff --git a/.claude/skills/igniteui-topic-frontmatter/SKILL.md b/.claude/skills/igniteui-topic-frontmatter/SKILL.md index cdbdaa626a..6688366685 100644 --- a/.claude/skills/igniteui-topic-frontmatter/SKILL.md +++ b/.claude/skills/igniteui-topic-frontmatter/SKILL.md @@ -7,7 +7,8 @@ description: >- identity in Ignite UI Angular or xplat documentation topics. This skill is strictly frontmatter-only: audit first and provide suggestions for the user to choose from before changing anything; never edit topic body content, headings, prose, samples, code snippets, links, tables, or - section structure. + section structure. For anything touching body content, structure, headings, prose, or samples, use + the companion igniteui-doc-topics skill instead. --- # Ignite UI topic frontmatter adapter diff --git a/.codex/skills/igniteui-doc-topics/SKILL.md b/.codex/skills/igniteui-doc-topics/SKILL.md index f55d37c3fd..7e7bbe9e97 100644 --- a/.codex/skills/igniteui-doc-topics/SKILL.md +++ b/.codex/skills/igniteui-doc-topics/SKILL.md @@ -1,11 +1,18 @@ --- name: igniteui-doc-topics description: >- - Author or audit Ignite UI documentation topics: component pages, how-to guides, conceptual - overviews, and category indexes for both the Angular doc set and the cross-platform React / Web - Components / Blazor doc set. Use this whenever someone asks to write, draft, create, review, audit, - fix, or standardize a documentation topic, tutorial, guide, reference page, or concept overview for - Ignite UI. + Author or audit Ignite UI documentation topics — component pages, how-to guides, conceptual + overviews, and category indexes — for both the Angular doc set and the cross-platform (React / + Web Components / Blazor) doc set. Applies the Diátaxis framework mapped onto Ignite UI's house + templates: canonical section order, fixed heading names, frontmatter (including `llms.description` + and the `relatedComponents` trigger), `.mdx` sample embeds, and per-framework token/PlatformBlock + mechanics. Use this whenever someone asks to write, draft, create, review, audit, fix, or + standardize a documentation topic, tutorial, guide, reference page, or concept overview for Ignite + UI — even if they just say "write docs for the X component" or "review this topic" without naming + Diátaxis or the templates. Also use it when deciding what *kind* of documentation a page should be, + or when a topic mixes tutorial / how-to / reference / explanation content that should be separated. + For frontmatter-only audits or metadata normalization, use the companion igniteui-topic-frontmatter + skill instead. --- # Ignite UI doc topics adapter diff --git a/.codex/skills/igniteui-topic-frontmatter/SKILL.md b/.codex/skills/igniteui-topic-frontmatter/SKILL.md index 1420e738cc..ed0906c3de 100644 --- a/.codex/skills/igniteui-topic-frontmatter/SKILL.md +++ b/.codex/skills/igniteui-topic-frontmatter/SKILL.md @@ -7,7 +7,8 @@ description: >- identity in Ignite UI Angular or xplat documentation topics. This skill is strictly frontmatter-only: audit first and provide suggestions for the user to choose from before changing anything; never edit topic body content, headings, prose, samples, code snippets, links, tables, or - section structure. + section structure. For anything touching body content, structure, headings, prose, or samples, use + the companion igniteui-doc-topics skill instead. --- # Ignite UI topic frontmatter adapter From 671b1083f1e6bc36dc91278c063e7e8071b32a6d Mon Sep 17 00:00:00 2001 From: Stamen Stoychev Date: Tue, 25 Aug 2026 17:03:14 +0300 Subject: [PATCH 36/38] feat(*): upgrading to astro 7.2.2 and rewiring md implementation to satteri (#503) * feat(*): upgrading to astro 7.2.2 and rewiring md implementation to satteri * fix(*): updating all versions for security, no override installation, satteri --------- Co-authored-by: Viktor Kombov <75325639+viktorkombov@users.noreply.github.com> --- docs/angular/package.json | 6 +- docs/xplat/package.json | 9 +- package-lock.json | 5706 ++++++++++-------- package.json | 26 +- src/integration.ts | 146 +- src/plugins/rehype-api-references-grid.ts | 155 +- src/plugins/rehype-strip-empty-paragraphs.ts | 38 +- src/plugins/remark-env-vars.ts | 46 +- src/plugins/remark-html-transforms.ts | 36 +- src/plugins/remark-md-links.ts | 70 +- 10 files changed, 3599 insertions(+), 2639 deletions(-) diff --git a/docs/angular/package.json b/docs/angular/package.json index 4b531ed97f..c9b3014c82 100644 --- a/docs/angular/package.json +++ b/docs/angular/package.json @@ -35,10 +35,10 @@ "node": ">=22.12.0" }, "dependencies": { - "astro": "^6.1.6", + "astro": "^7.2.2", "docs-template": "file:../../", - "igniteui-astro-components": "0.0.30", - "sharp": "^0.34.2" + "igniteui-astro-components": "1.0.2", + "sharp": "^0.35.3" }, "devDependencies": { "cross-env": "^7.0.3", diff --git a/docs/xplat/package.json b/docs/xplat/package.json index a0dff05e71..8fa2b2ecf7 100644 --- a/docs/xplat/package.json +++ b/docs/xplat/package.json @@ -25,7 +25,6 @@ "dev:react:jp": "npm run generate:react:jp && cross-env PLATFORM=React astro dev --port 4332", "dev:webcomponents:jp": "npm run generate:webcomponents:jp && cross-env PLATFORM=WebComponents astro dev --port 4333", "dev:blazor:jp": "npm run generate:blazor:jp && cross-env PLATFORM=Blazor astro dev --port 4334", - "build:angular": "npm run generate:angular && cross-env PLATFORM=Angular NODE_OPTIONS=--max-old-space-size=4096 astro build --outDir=../../dist/angular", "build:react": "npm run generate:react && cross-env PLATFORM=React NODE_OPTIONS=--max-old-space-size=4096 astro build --outDir=../../dist/react", "build:webcomponents": "npm run generate:webcomponents && cross-env PLATFORM=WebComponents NODE_OPTIONS=--max-old-space-size=4096 astro build --outDir=../../dist/wc", @@ -34,7 +33,6 @@ "build:react:jp": "npm run generate:react:jp && cross-env PLATFORM=React NODE_OPTIONS=--max-old-space-size=4096 astro build --outDir=../../dist/react-jp", "build:webcomponents:jp": "npm run generate:webcomponents:jp && cross-env PLATFORM=WebComponents NODE_OPTIONS=--max-old-space-size=4096 astro build --outDir=../../dist/wc-jp", "build:blazor:jp": "npm run generate:blazor:jp && cross-env PLATFORM=Blazor NODE_OPTIONS=--max-old-space-size=4096 astro build --outDir=../../dist/blazor-jp", - "build-staging:angular": "cross-env PLATFORM=Angular DOCS_ENV=staging NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 npm run build:angular", "build-staging:react": "cross-env PLATFORM=React DOCS_ENV=staging NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 npm run build:react", "build-staging:webcomponents": "cross-env PLATFORM=WebComponents DOCS_ENV=staging NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 npm run build:webcomponents", @@ -51,7 +49,6 @@ "build-production:react:jp": "cross-env PLATFORM=React NODE_ENV=production npm run build:react:jp", "build-production:webcomponents:jp": "cross-env PLATFORM=WebComponents NODE_ENV=production npm run build:webcomponents:jp", "build-production:blazor:jp": "cross-env PLATFORM=Blazor NODE_ENV=production npm run build:blazor:jp", - "preview:angular": "cross-env PLATFORM=Angular astro preview --outDir=../../dist/angular --port 4331", "preview:react": "cross-env PLATFORM=React astro preview --outDir=../../dist/react --port 4332", "preview:webcomponents": "cross-env PLATFORM=WebComponents astro preview --outDir=../../dist/wc --port 4333", @@ -65,10 +62,10 @@ "node": ">=22.12.0" }, "dependencies": { - "astro": "^6.1.6", + "astro": "^7.2.2", "docs-template": "file:../../", - "igniteui-astro-components": "0.0.30", - "sharp": "^0.34.2" + "igniteui-astro-components": "1.0.2", + "sharp": "^0.35.3" }, "devDependencies": { "cross-env": "^10.1.0", diff --git a/package-lock.json b/package-lock.json index 0091fc92d5..dc86737fb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,25 +12,28 @@ "docs/xplat" ], "dependencies": { - "astro-seo-schema": "^6.0.0", + "@astrojs/markdown-satteri": "^0.3.5", + "astro-seo-schema": "^7.0.0", "gray-matter": "^4.0.3", - "igniteui-astro-components": "0.0.30", - "igniteui-theming": "^25.0.2", - "igniteui-webcomponents": "^7.2.4", + "igniteui-astro-components": "1.0.2", + "igniteui-theming": "^26.0.1", + "igniteui-webcomponents": "^7.3.0-beta.1", "js-yaml": "^4.1.1", "jsdom": "^29.0.1", "pagefind": "^1.5.2", + "satteri": "^0.9.5", + "sharp": "0.35.3", "turndown": "^7.2.4", "turndown-plugin-gfm": "^1.0.2" }, "devDependencies": { - "@astrojs/mdx": "^6.0.0", + "@astrojs/mdx": "^7.0.5", "@astrojs/ts-plugin": "^1.10.7", "@types/jsdom": "^28.0.1", - "astro": "^6.1.6", + "astro": "^7.2.2", "cross-env": "^10.1.0", "cspell": "^9.2.2", - "markdownlint-cli": "^0.48.0", + "markdownlint-cli": "^0.49.1", "sass-embedded": "^1.98.0", "typescript": "^5.4.0" }, @@ -38,18 +41,18 @@ "node": ">=22.12.0" }, "peerDependencies": { - "@astrojs/mdx": ">=5", - "astro": ">=6" + "@astrojs/mdx": ">=7", + "astro": ">=7" } }, "docs/angular": { "name": "angular-docs", "version": "1.0.0", "dependencies": { - "astro": "^6.1.6", + "astro": "^7.2.2", "docs-template": "file:../../", - "igniteui-astro-components": "0.0.30", - "sharp": "^0.34.2" + "igniteui-astro-components": "1.0.2", + "sharp": "^0.35.3" }, "devDependencies": { "cross-env": "^7.0.3", @@ -81,10 +84,10 @@ "name": "xplat-docs", "version": "0.0.1", "dependencies": { - "astro": "^6.1.6", + "astro": "^7.2.2", "docs-template": "file:../../", - "igniteui-astro-components": "0.0.30", - "sharp": "^0.34.2" + "igniteui-astro-components": "1.0.2", + "sharp": "^0.35.3" }, "devDependencies": { "cross-env": "^10.1.0", @@ -149,218 +152,769 @@ "dev": true, "license": "MIT" }, - "node_modules/@astrojs/internal-helpers": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.0.tgz", - "integrity": "sha512-Ry2R3VPeIN4uPCSA4xQc+e+vsJXkalKpEbDc07hV+a/o5Bs2N/s/uDcPJH/05L19DKh9tAy7e6JM3YZ6Cxfezw==", + "node_modules/@astrojs/compiler-binding": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.4.0.tgz", + "integrity": "sha512-x2RjDUuWfwLNtc3mjAdSRInwqh/rqbLar9cm/5FOMbHvmYZB7yfKewzSclAxWjIZsypJDXv1lhaP2WG+P8TK3g==", "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.4", - "@types/mdast": "^4.0.4", - "js-yaml": "^4.1.1", - "picomatch": "^4.0.4", - "retext-smartypants": "^6.2.0", - "shiki": "^4.0.2", - "smol-toml": "^1.6.0", - "unified": "^11.0.5" + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@astrojs/compiler-binding-darwin-arm64": "0.4.0", + "@astrojs/compiler-binding-darwin-x64": "0.4.0", + "@astrojs/compiler-binding-linux-arm64-gnu": "0.4.0", + "@astrojs/compiler-binding-linux-arm64-musl": "0.4.0", + "@astrojs/compiler-binding-linux-x64-gnu": "0.4.0", + "@astrojs/compiler-binding-linux-x64-musl": "0.4.0", + "@astrojs/compiler-binding-wasm32-wasi": "0.4.0", + "@astrojs/compiler-binding-win32-arm64-msvc": "0.4.0", + "@astrojs/compiler-binding-win32-x64-msvc": "0.4.0" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-arm64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.4.0.tgz", + "integrity": "sha512-ZVUwHundaQyFNjE6uoa0usaC0WOCitDCLS/4mdb4rOiJXwVUuKJBMxI5WMzXLWmamsXtK/Z//ifLXvV5Yeh4Hw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@astrojs/markdown-remark": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.2.0.tgz", - "integrity": "sha512-+YxmVQu1Bd+MFfSzjq1rOJvD9+nIOJzz5YIIhdIH01RrxRkKbyKoEgyIqP3yv51MhzMDgd79QaPv+kCVPT8vHw==", + "node_modules/@astrojs/compiler-binding-darwin-x64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.4.0.tgz", + "integrity": "sha512-FI6G8AY8u6fR1SI/QRR5yGMwtvZwP34CDmZpZ5HwJGa50UM1VISTLhqkhV4a476pmgd25X1Aur2dqw6hUnrlKA==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@astrojs/internal-helpers": "0.10.0", - "@astrojs/prism": "4.0.2", - "github-slugger": "^2.0.0", - "hast-util-from-html": "^2.0.3", - "hast-util-to-text": "^4.0.2", - "mdast-util-definitions": "^6.0.0", - "rehype-raw": "^7.0.0", - "rehype-stringify": "^10.0.1", - "remark-gfm": "^4.0.1", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.1.2", - "remark-smartypants": "^3.0.2", - "unified": "^11.0.5", - "unist-util-remove-position": "^5.0.0", - "unist-util-visit": "^5.1.0", - "unist-util-visit-parents": "^6.0.2", - "vfile": "^6.0.3" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@astrojs/mdx": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-6.0.3.tgz", - "integrity": "sha512-+4P3ZvwsRAqAbBgY+uZMewFo3ficlIBPZfu/Luk+v4ia/ZOuFhpsw7r+7672uT2Fc1UPdp7yW0eU5egvSq0wbw==", - "dev": true, + "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.4.0.tgz", + "integrity": "sha512-lB9gLFJK7m82EnjaU8nlRBEfcwGNeHidW3sSjODTUjMNaoewVuUz9fwwdY5M4jiSXIqWLH3yl6TX8FTDKA74Sw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@astrojs/internal-helpers": "0.10.0", - "@astrojs/markdown-remark": "7.2.0", - "@mdx-js/mdx": "^3.1.1", - "acorn": "^8.16.0", - "es-module-lexer": "^2.0.0", - "estree-util-visit": "^2.0.0", - "hast-util-to-html": "^9.0.5", - "piccolore": "^0.1.3", - "rehype-raw": "^7.0.0", - "remark-gfm": "^4.0.1", - "remark-smartypants": "^3.0.2", - "source-map": "^0.7.6", - "unist-util-visit": "^5.1.0", - "vfile": "^6.0.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=22.12.0" - }, - "peerDependencies": { - "@astrojs/markdown-satteri": "0.3.0", - "astro": "^6.4.0" - }, - "peerDependenciesMeta": { - "@astrojs/markdown-satteri": { - "optional": true - } + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@astrojs/prism": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz", - "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==", + "node_modules/@astrojs/compiler-binding-linux-arm64-musl": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.4.0.tgz", + "integrity": "sha512-HPbvWqbxFxyaoQJhLxCaSjtYBx9KBo7JGVzEFZCmMl968a2PsSH0UfiODYgYPXofTOIsIH2aoCcrHXML0IA3ig==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], "license": "MIT", - "dependencies": { - "prismjs": "^1.30.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=22.12.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@astrojs/telemetry": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.2.tgz", - "integrity": "sha512-j8DNruA8ors99Al39RYZPJK4DC1bKkoNm93mAMuBhY9TCNC4R8n1q7ovFnJ5qhGh5Lsh7pa1gpQVpYpsJPeTHQ==", + "node_modules/@astrojs/compiler-binding-linux-x64-gnu": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.4.0.tgz", + "integrity": "sha512-tQKolMxoJ/+0AmLWm1PmJ/i+z3i10ZU1bNuVjEDulCf48azEMtUNjTZgHJ5MPtpYRNc7dlETr8QujUfduzoC7Q==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "ci-info": "^4.4.0", - "dset": "^3.1.4", - "is-docker": "^4.0.0", - "is-wsl": "^3.1.1", - "which-pm-runs": "^1.1.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "18.20.8 || ^20.3.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@astrojs/ts-plugin": { - "version": "1.10.10", - "resolved": "https://registry.npmjs.org/@astrojs/ts-plugin/-/ts-plugin-1.10.10.tgz", - "integrity": "sha512-US1czRBD43THzzwSyWJwPRX9VDBYbHmJKnpJAsmqT7Uun5UYvcMNNOfDyZxp5bKTNiApvA8HrjwUhYso8CE2Iw==", - "dev": true, + "node_modules/@astrojs/compiler-binding-linux-x64-musl": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.4.0.tgz", + "integrity": "sha512-5v5YymudsxMHp3NBLCS8BUlu5CRqeLtWD9cKS/4nIhIEHCbpz9okmVV6I0HWqmBAPhWYcDa3vw/vltYPrOQCTA==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], "license": "MIT", - "dependencies": { - "@astrojs/compiler": "^2.13.1", - "@astrojs/yaml2ts": "^0.2.4", - "@jridgewell/sourcemap-codec": "^1.5.5", - "@volar/language-core": "~2.4.28", - "@volar/typescript": "~2.4.28", - "semver": "^7.7.4", - "vscode-languageserver-textdocument": "^1.0.12" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@astrojs/yaml2ts": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.4.tgz", - "integrity": "sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==", - "dev": true, + "node_modules/@astrojs/compiler-binding-wasm32-wasi": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.4.0.tgz", + "integrity": "sha512-m/phuH3x3PREvv1OnkM44NoPh4MatUadix1fB1u5SvMLCyDTUZykDJbKnWf1cjnYmHdlB8HcjTjl6JrCqAIXcw==", + "cpu": [ + "wasm32" + ], "license": "MIT", + "optional": true, "dependencies": { - "yaml": "^2.8.3" + "@napi-rs/wasm-runtime": "^1.2.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.4.0.tgz", + "integrity": "sha512-B9zYf3okEY83kM8gydlpH2BHP00w4ifxPqlYlWrgTwuD6wnkrJDCwBlgy1q31cERjCJRXN1lrE2VmkLvFjv/6g==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "node_modules/@astrojs/compiler-binding-win32-x64-msvc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.4.0.tgz", + "integrity": "sha512-zB0Nrv0dGc0zZWPGDRmmETTPhDRqyZjAjk+gWMlVrJX5U89obpB3VUUE1ZiHxOCN5LQojeLK6O8L/dnoHolvNQ==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "node_modules/@astrojs/compiler-rs": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.4.0.tgz", + "integrity": "sha512-koVikeon1kreEy+/JzLQRy3vzHHQVOjycs4degg4vFufKApZOwMZvSSAEztYNhmcQVfNVsVZZI4cEge3cexAbQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.8" - }, - "bin": { - "parser": "bin/babel-parser.js" + "@astrojs/compiler-binding": "0.4.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=22.12.0" } }, - "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "node_modules/@astrojs/internal-helpers": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.4.tgz", + "integrity": "sha512-nozZSy/mKYLqe4YrqbKtdOszedAfXYCtw3wZ0d+CAjz4GqQ4L9rl1ltIL5BlgwmYVinJg/RZ0MgGuWOdlyRZlA==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "js-yaml": "^4.3.0", + "picomatch": "^4.0.4", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "unified": "^11.0.5" } }, - "node_modules/@bramus/specificity": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", - "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "node_modules/@astrojs/markdown-remark": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.2.4.tgz", + "integrity": "sha512-MvspGMynWKAjTe4/lTUdmBPHIFKNVLTCF6UlyWGogTGzNrTvjD+D4n48k7h8swxsEPKHK2TwxkZO7uoaCv1Pow==", "license": "MIT", "dependencies": { - "css-tree": "^3.0.0" - }, - "bin": { - "specificity": "bin/cli.js" + "@astrojs/internal-helpers": "0.10.4", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.1.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" } }, - "node_modules/@bufbuild/protobuf": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.13.0.tgz", - "integrity": "sha512-acq7c49vxfm1ggJ95P70TX7ABDM0vxr1SYD3BB0o0jnBLB4OAqeHyKuN+cD3w80gXEDQ2zxHpR6CUeA+O/aU9g==", - "license": "(Apache-2.0 AND BSD-3-Clause)" - }, - "node_modules/@capsizecss/unpack": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", - "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==", + "node_modules/@astrojs/markdown-satteri": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.3.8.tgz", + "integrity": "sha512-n8ItpFTCmlDsVR5+rwDmehSf+jFCYLWmZiisZNGuF7xILqYhsVeBfcha4qgS2Seq3fAc9Tm58ZVrvqFQ6RQgRQ==", "license": "MIT", "dependencies": { - "fontkitten": "^1.0.3" - }, - "engines": { - "node": ">=18" + "@astrojs/internal-helpers": "0.10.4", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "satteri": "^0.10.3" } }, - "node_modules/@clack/core": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz", - "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==", - "license": "MIT", - "dependencies": { + "node_modules/@astrojs/markdown-satteri/node_modules/@bruits/satteri-darwin-arm64": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.10.5.tgz", + "integrity": "sha512-27KTVl4TJkVahMy/ohyA7qd4938G5UNneFUz/PsScYfpIhj0IVAS23mpcJXdPF44sa6nva198lmV/cKIb2YPyA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@bruits/satteri-darwin-x64": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.10.5.tgz", + "integrity": "sha512-IjnLe3nKspq6qaeqGgjT7MT8VrTV74yWRlaag7ZdNsI8TDAYZ0iPxMCo+9KQZHUk5EyVB+reBI/PFWL5KuFw9Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@bruits/satteri-linux-arm64-gnu": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.10.5.tgz", + "integrity": "sha512-glkYXZCJywjP13v67eAyAMSJdF+ncvEbYvgi/wOtffL9tQ27lr/zsyzUfgs+ovjJ9d8JNQKiXeiArJcX8PJL9w==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@bruits/satteri-linux-arm64-musl": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.10.5.tgz", + "integrity": "sha512-yWdgG1g17Nh2QyGVlFUxGRa3FEFwiMcpZEyMNWkbM3deC94cmVc+/i9OuyFpdKuWo3GkgoCtYVOoxk1uCnCZIA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@bruits/satteri-linux-x64-gnu": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.10.5.tgz", + "integrity": "sha512-FVaLoPT1fBgGl0J+AYebyyXJYBachGl8Oyyrf1lye4RTqCB4S0Gwkj1uM9RJyThUOvx5VUmAT1CnNh1SFHA+kw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@bruits/satteri-linux-x64-musl": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.10.5.tgz", + "integrity": "sha512-EHpVAx2bqW3GINHTKkljtxVfQmVDGWIuwOYOP5YghTj+0PkBa2o8oKPRtQ9Kbsr1Fye8jtUcDjhwj2jMNugZKg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@bruits/satteri-wasm32-wasi": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.10.5.tgz", + "integrity": "sha512-ypz8c/Zmipxp4IoeDa228Gstv6TLzVmNs3yC6wKCoNSOjx1iwpgzu87Y3hTkXFdwChVGU85qeUDuOIarGUZQLw==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@bruits/satteri-win32-arm64-msvc": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.10.5.tgz", + "integrity": "sha512-siTV88nb0LRqNpkL2gXboqCwVdq95sLtzMHS1/3eONV2gLbB3NAK46wmSMvCO/yquBvI2lvaFIfd8P12ecsxBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@bruits/satteri-win32-x64-msvc": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.10.5.tgz", + "integrity": "sha512-C3IfPvfvMXmlzBxaMPKFS1XiuV9pu2mC7YqkPk7PSvTgPZ8gbdASIpHpztDLvTTQjqZ0z1Ol8tK5X+V6XXC0wQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@astrojs/markdown-satteri/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@astrojs/markdown-satteri/node_modules/satteri": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.10.5.tgz", + "integrity": "sha512-Ao1LKpAEa9Wdg0otgbVKViZHEq9ebdXe4DMrp3s9vQAU0HNIuHnFEuMuOcm0ZIXyV0Yzxj91NvhLpvXZJO/5ZQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.5", + "@types/hast": "^3.0.5", + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3" + }, + "optionalDependencies": { + "@bruits/satteri-darwin-arm64": "0.10.5", + "@bruits/satteri-darwin-x64": "0.10.5", + "@bruits/satteri-linux-arm64-gnu": "0.10.5", + "@bruits/satteri-linux-arm64-musl": "0.10.5", + "@bruits/satteri-linux-x64-gnu": "0.10.5", + "@bruits/satteri-linux-x64-musl": "0.10.5", + "@bruits/satteri-wasm32-wasi": "0.10.5", + "@bruits/satteri-win32-arm64-msvc": "0.10.5", + "@bruits/satteri-win32-x64-msvc": "0.10.5" + } + }, + "node_modules/@astrojs/mdx": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-7.0.8.tgz", + "integrity": "sha512-RNuwq2ccTSi7NX9YqlR0noaWoVdOrZuJvdfWXotAzdhMVB0b0zEMLnNU+xar7le0GwTMlTObD/QAu8jeHA/3nA==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.10.4", + "@astrojs/markdown-remark": "7.2.4", + "@mdx-js/mdx": "^3.1.1", + "acorn": "^8.16.0", + "es-module-lexer": "^2.0.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.5", + "piccolore": "^0.1.3", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.6", + "unist-util-visit": "^5.1.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "@astrojs/markdown-satteri": "^0.3.1", + "astro": "^7.0.0" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-satteri": { + "optional": true + } + } + }, + "node_modules/@astrojs/prism": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz", + "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.3.tgz", + "integrity": "sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.4.0", + "dset": "^3.1.4", + "is-docker": "^4.0.0", + "package-manager-detector": "^1.6.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/ts-plugin": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@astrojs/ts-plugin/-/ts-plugin-1.10.11.tgz", + "integrity": "sha512-W7Fmbaw81mcecFgJWgfY8FX7G7nCiooiakgd8ZAVprglEo81W2HzXh2I+okmAorCZLICl4PeEELkpGzrEXze4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.1", + "@astrojs/yaml2ts": "^0.2.4", + "@jridgewell/sourcemap-codec": "^1.5.5", + "@volar/language-core": "~2.4.28", + "@volar/typescript": "~2.4.28", + "semver": "^7.7.4", + "vscode-languageserver-textdocument": "^1.0.12" + } + }, + "node_modules/@astrojs/yaml2ts": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.4.tgz", + "integrity": "sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==", + "dev": true, + "license": "MIT", + "dependencies": { + "yaml": "^2.8.3" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@bruits/satteri-darwin-arm64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.9.5.tgz", + "integrity": "sha512-iw4nZgx9v30lWo/MTngQqi1pI78KI0DnkSm+lVJGYdmPLgAyDNJigVhpG42/Iq55A6c1Ll8q66ljyyRiQUxwow==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-darwin-x64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.9.5.tgz", + "integrity": "sha512-6T26Z5Kf3cFW2PSlk9p7zT7yVxvuBSiJvYyz9u8KjYwMTqZyIDOj2wDyNpxKV4+6yUVG7rddq2QwvG/8LJA2+Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-gnu": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.9.5.tgz", + "integrity": "sha512-u51id17uJwNEMK9nBlICsq6U31c+XVqQueVBkwRIzZG+gMpS8TOJctt5h5Wz33Z8xnMdTd+adtACVz0yHgGuOA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-musl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.9.5.tgz", + "integrity": "sha512-v39HxiwGC5Rqm01HksP6+5Y+xKLPlsuVFgIgpEAo+SiQ22c+mJVhS3u7Z6ePAKdhL5NJoK1xq70kLz3L13AhpQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-gnu": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.9.5.tgz", + "integrity": "sha512-F3uO8uFp3pAP5ZGXttwvh57GS7s0lL953tnNdyI2gRyP4kOOkp6pyGojNJzCjkDvWI2Cvb9iNrKok3aqQPauAw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-musl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.9.5.tgz", + "integrity": "sha512-bicEqglLlz++mWyADaZoP0JY20s4vDfLjaPYgQqC+NI4zZLTOOg1T4GB8aqtc822Pqji8SQBmSrTb7CrP8i08Q==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-wasm32-wasi": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.9.5.tgz", + "integrity": "sha512-zauAuMwfPnKPUkd4AFixRFpXdgKwP2mKgxrIIo2gJzW0/ZneF9dbHnLkojSpaBnCCp7VUL1hIi5WWZvB1CqmAQ==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-win32-arm64-msvc": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.9.5.tgz", + "integrity": "sha512-SrfE7NEsgZjBvU3c+RR6oQRu0ToXY5uVJEbieXEF0YTctIV2zAVlbaMjWLts074QCgh3a+XHWkR/lWh2VH2LUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@bruits/satteri-win32-x64-msvc": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.9.5.tgz", + "integrity": "sha512-5Kw9ZAtTGS8WHizyn+CJhjjfIQrw+7jcZodpmpXJjefnO15M8UexIi6JR2E5thyvsmHyhL6ZDDMUNR4bKJPd4g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.14.0.tgz", + "integrity": "sha512-C3UGsiCwSprE2NKIIFA3hCDlpXTMCAXRZuEVp88L1GY36Y41+rYL5fryE+nOFhp4p4JPQvdV8PQ4DWgHgeTE+w==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", + "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@clack/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz", + "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==", + "license": "MIT", + "dependencies": { "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" }, @@ -572,9 +1126,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-cpp": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-7.0.2.tgz", - "integrity": "sha512-dfbeERiVNeqmo/npivdR6rDiBCqZi3QtjH2Z0HFcXwpdj6i97dX1xaKyK2GUsO/p4u1TOv63Dmj5Vm48haDpuA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-7.1.0.tgz", + "integrity": "sha512-rcjycobioQUd9Jm/Y1n8U+sq6ytpZ0iV8AYIo+vyEFfutC5x7g6hL6Fh3bCdh6IporGHRqfEutGK/4sfopD2ZA==", "dev": true, "license": "MIT" }, @@ -649,9 +1203,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.13.tgz", - "integrity": "sha512-00rpydUxKNWY2xxrSx+h46aNWLvbkJdd57SsnEFt24fbs1fROhXZ6XSQu+gQz/zNuiCvFi4Ro3ej9DLbEdWQmQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.2.0.tgz", + "integrity": "sha512-5PmCHv+AhY0LVNo3bE1FdRKMmw1esKj83GPwLymnVPYNtlI2Jf6y27EjC0azg4zny5keWmku0GQiMf55Fi+qeA==", "dev": true, "license": "CC BY-SA 4.0" }, @@ -712,9 +1266,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-golang": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.26.tgz", - "integrity": "sha512-YKA7Xm5KeOd14v5SQ4ll6afe9VSy3a2DWM7L9uBq4u3lXToRBQ1W5PRa+/Q9udd+DTURyVVnQ+7b9cnOlNxaRg==", + "version": "6.0.27", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.27.tgz", + "integrity": "sha512-rRDb2JL8EefaezHGTEclKXCs4eMOS0q/datk94Lm7KQOhlGlzS9FDVZiR1/guh0o+iJCmejQuf5NR2FQeQSWsg==", "dev": true, "license": "MIT" }, @@ -733,9 +1287,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-html": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.15.tgz", - "integrity": "sha512-GJYnYKoD9fmo2OI0aySEGZOjThnx3upSUvV7mmqUu8oG+mGgzqm82P/f7OqsuvTaInZZwZbo+PwJQd/yHcyFIw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.16.tgz", + "integrity": "sha512-9B6/Cpb5YVcYgsEAlKudun1yd4ONllYS/ZibKLYea2apPR+l2vQdARnPrP9kTqa7NUNfRKl7m9Fb6k9rjimnow==", "dev": true, "license": "MIT" }, @@ -803,22 +1357,22 @@ "license": "MIT" }, "node_modules/@cspell/dict-markdown": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.17.tgz", - "integrity": "sha512-H8bAxih6U8NOnSPL7R8My+tqjaB4tmnJTjERuz4zYqmf+cH+5xshX3UVgKlwWFcyjsYfv/zEDuRdMctQv1q6HQ==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.18.tgz", + "integrity": "sha512-KLRSwVrwKDz4n7bl2XQjzvaBZbGgx5QKkP5Ok1b24xaO3TpXsLhAbAn1mItvFlI2tF6Rkt83iYjQcYppywuf5Q==", "dev": true, "license": "MIT", "peerDependencies": { "@cspell/dict-css": "^4.1.2", - "@cspell/dict-html": "^4.0.15", + "@cspell/dict-html": "^4.0.16", "@cspell/dict-html-symbol-entities": "^4.0.5", "@cspell/dict-typescript": "^3.2.3" } }, "node_modules/@cspell/dict-monkeyc": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.12.tgz", - "integrity": "sha512-MN7Vs11TdP5mbdNFQP5x2Ac8zOBm97ARg6zM5Sb53YQt/eMvXOMvrep7+/+8NJXs0jkp70bBzjqU4APcqBFNAw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.1.0.tgz", + "integrity": "sha512-mc/hgvSy/emOIYtc8kuVEaLUlnaERunfAubfJ5plUXq6s0A69bcukJzUzSt9C0UTCwS28641ILRPv80m3L9QbA==", "dev": true, "license": "MIT" }, @@ -830,9 +1384,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.43", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.43.tgz", - "integrity": "sha512-H2gYwtu59dNO9662Uq0usfuhyNd7lZJE1C61a/UXcpRyWWSrTo2Bz+vwGYp1bXZ1LmjXadqvwJ8ArFlGdiadNQ==", + "version": "5.2.47", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.47.tgz", + "integrity": "sha512-r5ePbkmRtpMwiv+MHd6be1xIRLuXoEwaSLIZLu3mY+qtPVo0LUj/kVl4YeIxHONiwyef75zqS3gnT+s5UF7diQ==", "dev": true, "license": "MIT" }, @@ -858,9 +1412,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.29", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.29.tgz", - "integrity": "sha512-OnEt1a35iuQzc2Ize1qU/43ZyF10urRKAm+mlTz++vnAgDLBHpKfWakpSK50nyL5/1WvyQ8BaMjb52MBLEpTeA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.4.0.tgz", + "integrity": "sha512-49Eju/a97V6ExAeMJDM2Tk4jsYr0pm+kQzqQrKLAZdrRd6VrLIgseI481EQSmgoVkPPdsuwK1xj9ZlpDQIF4qg==", "dev": true, "license": "MIT", "dependencies": { @@ -875,9 +1429,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-ruby": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.1.1.tgz", - "integrity": "sha512-LHrp84oEV6q1ZxPPyj4z+FdKyq1XAKYPtmGptrd+uwHbrF/Ns5+fy6gtSi7pS+uc0zk3JdO9w/tPK+8N1/7WUA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.1.2.tgz", + "integrity": "sha512-f6Slf11N91ittf71AWlfVVG9GZPezVRBfcMPCTNTWhUsY/VEspkBRZYDhPXjV4df3jqHy5YJs8nlsFcFVF/bMA==", "dev": true, "license": "MIT" }, @@ -903,9 +1457,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.2.4.tgz", - "integrity": "sha512-z6y/TGH3QNf5wB4pVvN/P3GfFEW/Whf6QAekNsIn06VKl95dnamfpkPWqV8rEtCixQFaKalb5+y9hRQXH3XQ1g==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.4.1.tgz", + "integrity": "sha512-tY88gnOWj2ax6h+i7BjU7dIH1f3fvY4WypS0a+TpjBgXC318AdOMmy0zK1SzxGNOjhWJfCeCZNVoLFM/DuOG4g==", "dev": true, "license": "MIT" }, @@ -1013,9 +1567,9 @@ } }, "node_modules/@csstools/color-helpers": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.0.tgz", - "integrity": "sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.1.tgz", + "integrity": "sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==", "funding": [ { "type": "github", @@ -1055,9 +1609,9 @@ } }, "node_modules/@csstools/css-color-parser": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.10.tgz", - "integrity": "sha512-UZhQLIUyJaaMepqehrCODwCg2KW25vFvLWBmqYFaPclYvvxzj/sG8LBOhBFCp11i9uE7t1EyS+RAoV9tztPFyw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.2.0.tgz", + "integrity": "sha512-5+5LEmFuY1AjXdYhmgjTJogtQnP1evJ1zrBZGUNZ0thkpwnnmKxcHdAMn/OtFjAb25zA+jKDVYVRl+5G7rjv1A==", "funding": [ { "type": "github", @@ -1070,7 +1624,7 @@ ], "license": "MIT", "dependencies": { - "@csstools/color-helpers": "^6.1.0", + "@csstools/color-helpers": "^6.1.1", "@csstools/css-calc": "^3.3.0" }, "engines": { @@ -1104,9 +1658,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz", - "integrity": "sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.8.tgz", + "integrity": "sha512-CpMLjAvwQg3BL5S0IeqsZNMH7EQrEWi0kLKOC13ZBF0ZwERiLWlibNPJr8G1kdU3Ms/r2KiNrF81pUh2HwAHdg==", "funding": [ { "type": "github", @@ -1146,12 +1700,35 @@ "node": ">=20.19.0" } }, - "node_modules/@emnapi/runtime": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", - "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "node_modules/@emnapi/core": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz", + "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", + "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -1164,9 +1741,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ "ppc64" ], @@ -1180,9 +1757,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ "arm" ], @@ -1196,9 +1773,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ "arm64" ], @@ -1212,9 +1789,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" ], @@ -1228,9 +1805,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ "arm64" ], @@ -1244,9 +1821,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ "x64" ], @@ -1260,9 +1837,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" ], @@ -1276,9 +1853,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" ], @@ -1292,9 +1869,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" ], @@ -1308,9 +1885,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" ], @@ -1324,9 +1901,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ "ia32" ], @@ -1340,9 +1917,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ "loong64" ], @@ -1356,9 +1933,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ "mips64el" ], @@ -1372,9 +1949,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ "ppc64" ], @@ -1388,9 +1965,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ "riscv64" ], @@ -1404,9 +1981,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ "s390x" ], @@ -1420,9 +1997,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ "x64" ], @@ -1436,9 +2013,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", "cpu": [ "arm64" ], @@ -1452,9 +2029,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ "x64" ], @@ -1468,9 +2045,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", "cpu": [ "arm64" ], @@ -1484,9 +2061,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ "x64" ], @@ -1500,9 +2077,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", "cpu": [ "arm64" ], @@ -1516,9 +2093,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ "x64" ], @@ -1532,9 +2109,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ "arm64" ], @@ -1548,9 +2125,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ "ia32" ], @@ -1564,9 +2141,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" ], @@ -1648,478 +2225,92 @@ "url": "https://github.com/sponsors/ayuhito" } }, - "node_modules/@hono/node-server": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.0.tgz", - "integrity": "sha512-XovyyCCnBzW+zKu+z/zq8hwNs4KOR5rEMAOxo2f40Q5xoOI37IMm6MIg2COOUtUApo0i6850MTBKH2u4QLGIqg==", - "license": "MIT", - "engines": { - "node": ">=20" - }, - "peerDependencies": { - "hono": "^4" - } - }, - "node_modules/@img/colour": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", - "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", - "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", - "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", - "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", - "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", - "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", - "cpu": [ - "riscv64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", - "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", - "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", - "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", - "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", - "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", - "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", - "cpu": [ - "ppc64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-riscv64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", - "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", - "cpu": [ - "riscv64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", - "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@hono/node-server": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.1.tgz", + "integrity": "sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==", + "license": "MIT", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": ">=20" }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.4" + "peerDependencies": { + "hono": "^4" } }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", - "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + "node": ">=18" } }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", - "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", - "cpu": [ - "x64" - ], + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", + "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==", "license": "Apache-2.0", "optional": true, "os": [ - "linux" + "freebsd" ], + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.4" } }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", - "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", - "cpu": [ - "wasm32" - ], + "node_modules/@img/sharp-freebsd-wasm32/node_modules/@img/sharp-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", + "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.7.0" + "@emnapi/runtime": "^1.11.1" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", - "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", + "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==", "cpu": [ - "arm64" + "wasm32" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "Apache-2.0", "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "dependencies": { + "@img/sharp-wasm32": "0.35.3" }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", - "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", - "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "node_modules/@img/sharp-webcontainers-wasm32/node_modules/@img/sharp-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", + "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@emnapi/runtime": "^1.11.1" + }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -2137,16 +2328,6 @@ "integrity": "sha512-VHb0ALPMTlgKjM6yIxxoQNnpKyUKLD04VzeQdsiXkMqkvYlAHxq9glGLmgbb889/1GsohSOAjvQYoiBppXFqrQ==", "license": "BSD-3-Clause" }, - "node_modules/@lit-labs/virtualizer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@lit-labs/virtualizer/-/virtualizer-2.1.1.tgz", - "integrity": "sha512-JWxMwnlouLdwpw8spLTuax53WMnSP3xt0dCyxAS7GJr5Otda9MGgR/ghAdfwhSY75TmjbE1T2TqChwoGCw3ggw==", - "license": "BSD-3-Clause", - "dependencies": { - "lit": "^3.2.0", - "tslib": "^2.0.3" - } - }, "node_modules/@lit/context": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@lit/context/-/context-1.1.6.tgz", @@ -2169,7 +2350,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -2249,23 +2429,25 @@ } } }, - "node_modules/@napi-rs/lzma-linux-x64-gnu": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", - "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", - "cpu": [ - "x64" - ], - "libc": [ - "glibc" - ], + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.3.tgz", + "integrity": "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==", "license": "MIT", "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, "engines": { - "node": "^22.20 || ^24.12 || >=25" + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" } }, "node_modules/@oslojs/encoding": { @@ -2274,6 +2456,15 @@ "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", "license": "MIT" }, + "node_modules/@oxc-project/types": { + "version": "0.146.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.146.0.tgz", + "integrity": "sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, "node_modules/@pagefind/darwin-arm64": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.5.2.tgz", @@ -2407,7 +2598,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2428,7 +2618,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2449,7 +2638,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2470,7 +2658,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2491,7 +2678,9 @@ "cpu": [ "arm" ], - "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2512,7 +2701,9 @@ "cpu": [ "arm" ], - "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -2533,7 +2724,9 @@ "cpu": [ "arm64" ], - "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2554,7 +2747,9 @@ "cpu": [ "arm64" ], - "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -2575,7 +2770,9 @@ "cpu": [ "x64" ], - "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -2596,7 +2793,9 @@ "cpu": [ "x64" ], - "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -2617,7 +2816,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2638,7 +2836,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2652,38 +2849,10 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", - "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", - "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.5.tgz", + "integrity": "sha512-DLe/i+l8ynIBY7XEQ191TeZvCoowIGa18R+dIV30GW7DiOtp74i/xX8hs8GUjW5ARV7VZuie3d6AumSmCwbeRA==", "cpu": [ "arm" ], @@ -2691,12 +2860,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", - "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.5.tgz", + "integrity": "sha512-zXcwKlQApYAOELHd8PwKDFkagYF9Wy4e0RJ+0qnzl9Pjnpj75TEG8ufv40p2J7kCEfwZAsNiuzRIyNNMWT38ig==", "cpu": [ "arm64" ], @@ -2704,12 +2876,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", - "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.5.tgz", + "integrity": "sha512-dK4QakI42nzWgJT5sm4y4y/O//D4OxM75/cH28RLV+nzIN9AY+YsbuUVrUTjlLjXR6vpyxFbSsbmNuJ6BP9sww==", "cpu": [ "arm64" ], @@ -2717,12 +2892,15 @@ "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", - "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.5.tgz", + "integrity": "sha512-fqSALaUu1Wjd1nK2uW2kJDWdLCc8lx1IcY+MTY26Aurfdx19anlzhqXOgCFbBFQnlFDTn4TC1/7Nz4Bl2mLP3A==", "cpu": [ "x64" ], @@ -2730,25 +2908,15 @@ "optional": true, "os": [ "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", - "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", - "cpu": [ - "arm64" ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", - "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.5.tgz", + "integrity": "sha512-/vCnNxlkxs9tKxNDcyWUePpJ/PgTzxIaVhoM5SmG8UV+GR/IcPam4VYxi7GIMo7PSDuNqlJqvprqii9NqqVCMw==", "cpu": [ "x64" ], @@ -2756,25 +2924,15 @@ "optional": true, "os": [ "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", - "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", - "cpu": [ - "arm" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", - "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.5.tgz", + "integrity": "sha512-abk0NLA519LxRCszmbE0jYKuQ9YPocOXTiOXOo6Yr+YAT95VH+PtqYAjOJvGKt3viEd/x4qzabAlwd5bHOOARg==", "cpu": [ "arm" ], @@ -2782,168 +2940,129 @@ "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", - "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", - "cpu": [ - "arm64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", - "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.5.tgz", + "integrity": "sha512-Y7eALiJ8lr0M2HH103Js+g7V34wf6snlpZLAsHI90uLhr3PVlNsbFVAXJC9d/V6BnPyKtpSwI+NcB/RLxsQxuA==", "cpu": [ "arm64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", - "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", - "cpu": [ - "loong64" + "libc": [ + "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", - "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", - "cpu": [ - "loong64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", - "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.5.tgz", + "integrity": "sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA==", "cpu": [ - "ppc64" + "arm64" + ], + "libc": [ + "musl" ], "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", - "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.5.tgz", + "integrity": "sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA==", "cpu": [ "ppc64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", - "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", - "cpu": [ - "riscv64" + "libc": [ + "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", - "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", - "cpu": [ - "riscv64" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", - "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.5.tgz", + "integrity": "sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ==", "cpu": [ "s390x" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", - "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.5.tgz", + "integrity": "sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", - "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.5.tgz", + "integrity": "sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA==", "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", - "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", - "cpu": [ - "x64" ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", - "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.5.tgz", + "integrity": "sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw==", "cpu": [ "arm64" ], @@ -2951,12 +3070,15 @@ "optional": true, "os": [ "openharmony" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", - "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.5.tgz", + "integrity": "sha512-vGbruD5zquhoc8D9SViXgN2FBJtNdTyQ4DtG+SWiEGlJiAzoKcZ2xp+xuXCffhubVdt0NJlTZqkeRuERy7g8Cw==", "cpu": [ "arm64" ], @@ -2964,25 +3086,15 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", - "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", - "cpu": [ - "ia32" ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", - "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.5.tgz", + "integrity": "sha512-e/SXpgISz+IoqVcSSI0rx/d/he8zqLex+/rCWpnHpmVfmPIUjag9H6P7zotf0gJHwPUhQxZ/mF8tr6acebT9yw==", "cpu": [ "x64" ], @@ -2990,29 +3102,25 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", - "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", - "cpu": [ - "x64" ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "license": "MIT" }, "node_modules/@shikijs/core": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.1.tgz", - "integrity": "sha512-VeR2CY6Nn9/WbisoYLOQZ7HZOnwTrpBuOw4wExjqLnBCi62BNWynBUO6K2uPIASPFJwAv7cX1fUu+LrPlSstcw==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.3.tgz", + "integrity": "sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==", "license": "MIT", "dependencies": { - "@shikijs/primitive": "4.4.1", - "@shikijs/types": "4.4.1", + "@shikijs/primitive": "4.4.3", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5", "hast-util-to-html": "^9.0.5" @@ -3022,12 +3130,12 @@ } }, "node_modules/@shikijs/engine-javascript": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.1.tgz", - "integrity": "sha512-6U4lJBh8LTvIkEVqRHv/rr3ruwtO6IweFQt1ME1ntHJMGHS+6N86vfYGO1o8c/DtOCTia2lfhdQBtBrps1sDfQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.3.tgz", + "integrity": "sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" }, @@ -3036,12 +3144,12 @@ } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.1.tgz", - "integrity": "sha512-p23RugMKss0r5DAtRJW1yAXUDl60JvhQYV20yuxei//26JyDSJefV3umyWzzwep2weblMnJGDYahuti6XkcMgA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.3.tgz", + "integrity": "sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2" }, "engines": { @@ -3049,24 +3157,24 @@ } }, "node_modules/@shikijs/langs": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.1.tgz", - "integrity": "sha512-xb2kCMloBCIraIy2fS5MW0t/BxVY3q2nDyQKBoeSeq6KNrQbShHetCFlw2n35fGIJ6t3+hXDLQogP5ir9O9bvA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.3.tgz", + "integrity": "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1" + "@shikijs/types": "4.4.3" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/primitive": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.1.tgz", - "integrity": "sha512-ko2OfDoG89YuQ7xL5LtcQiWKb7NIv1Ephb7g48TVU198OzAMLC8lXVEwaJGHK4sUMYrfAGJDqYmNLOLiW/Kz8w==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.3.tgz", + "integrity": "sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" }, @@ -3075,21 +3183,21 @@ } }, "node_modules/@shikijs/themes": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.1.tgz", - "integrity": "sha512-wudOaoFro+/Zl9gQv2W1Ur5XlVduqvTuYLI483Xi0wgc1A+cy1hfB2r6ac6ufBgF+ID7KJEW7L41MHrzQ4wH+w==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.3.tgz", + "integrity": "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.1" + "@shikijs/types": "4.4.3" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.1.tgz", - "integrity": "sha512-GOwCLQDHM5EjGUWNPrhzJbr6JP8V/Dx/CDVkWvbZ1Avw5JFnNUckrgbLmE07qtg4WlW7Q7QFndhjIkeU9XMPvw==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.3.tgz", + "integrity": "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -3105,6 +3213,16 @@ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "license": "MIT" }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/debug": { "version": "4.1.13", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", @@ -3124,7 +3242,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "*" @@ -3172,7 +3289,6 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz", "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==", - "dev": true, "license": "MIT" }, "node_modules/@types/ms": { @@ -3191,9 +3307,9 @@ } }, "node_modules/@types/node": { - "version": "26.1.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz", - "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.3.0.tgz", + "integrity": "sha512-L3fgrnchriRC2ExBflb8j4uZZURHZfQsmQeyVzhjcHW4kkwVyo8/0h1B2MVzMTrYUJYu6G7EWs14hW/L9putqw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3278,7 +3394,6 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3291,7 +3406,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -3330,14 +3444,26 @@ } } }, + "node_modules/am-i-vibing": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.4.0.tgz", + "integrity": "sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==", + "license": "MIT", + "dependencies": { + "process-ancestry": "^0.1.0" + }, + "bin": { + "am-i-vibing": "dist/cli.mjs" + } + }, "node_modules/angular-docs": { "resolved": "docs/angular", "link": true }, "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, "license": "MIT", "engines": { @@ -3347,6 +3473,21 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -3408,56 +3549,55 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", - "dev": true, "license": "MIT", "bin": { "astring": "bin/astring" } }, "node_modules/astro": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/astro/-/astro-6.4.8.tgz", - "integrity": "sha512-KK5lX90uU9EeVaTjINyj3sy9/NFXVa59aowaqbWBDDKLXZh4rr7GwIaCFYVetE22MJtsCNFerQXn0vlCLmpP/Q==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/astro/-/astro-7.2.6.tgz", + "integrity": "sha512-qzT4tAhgHYX/6/MUGslAkF0PVkM4WNsMw2A1GrbfA9cXp68hmdqF3f7MuF5rRFvwQbjowqjOf90ao9whfgV5mw==", "license": "MIT", "dependencies": { - "@astrojs/compiler": "^4.0.0", - "@astrojs/internal-helpers": "0.10.0", - "@astrojs/markdown-remark": "7.2.0", - "@astrojs/telemetry": "3.3.2", + "@astrojs/compiler-rs": "^0.4.0", + "@astrojs/internal-helpers": "0.10.4", + "@astrojs/markdown-satteri": "0.3.8", + "@astrojs/telemetry": "3.3.3", "@capsizecss/unpack": "^4.0.0", "@clack/prompts": "^1.1.0", "@oslojs/encoding": "^1.1.0", - "@rollup/pluginutils": "^5.3.0", + "am-i-vibing": "^0.4.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "ci-info": "^4.4.0", "clsx": "^2.1.1", "common-ancestor-path": "^2.0.0", - "cookie": "^1.1.1", + "cookie": "^2.0.1", "devalue": "^5.8.1", - "diff": "^8.0.3", + "diff": "^9.0.0", "dset": "^3.1.4", "es-module-lexer": "^2.0.0", - "esbuild": "^0.27.3", + "esbuild": "^0.28.0", + "find-process": "^2.1.1", "flattie": "^1.1.1", "fontace": "~0.4.1", "get-tsconfig": "5.0.0-beta.4", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", - "js-yaml": "^4.1.1", + "js-yaml": "^4.3.0", "jsonc-parser": "^3.3.1", - "magic-string": "^0.30.21", + "magic-string": "^1.0.0", "magicast": "^0.5.2", "mrmime": "^2.0.1", - "neotraverse": "^0.6.18", + "neotraverse": "^1.0.1", "obug": "^2.1.1", "p-limit": "^7.3.0", "p-queue": "^9.1.0", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.4", - "rehype": "^13.0.2", "semver": "^7.7.4", "shiki": "^4.0.2", "smol-toml": "^1.6.0", @@ -3466,11 +3606,9 @@ "tinyexec": "^1.0.4", "tinyglobby": "^0.2.15", "ultrahtml": "^1.6.0", - "unifont": "~0.7.4", - "unist-util-visit": "^5.1.0", + "unifont": "~0.7.5", "unstorage": "^1.17.5", - "vfile": "^6.0.3", - "vite": "^7.3.2", + "vite": "^8.0.13", "vitefu": "^1.1.2", "xxhash-wasm": "^1.1.0", "yargs-parser": "^22.0.0", @@ -3489,25 +3627,27 @@ "url": "https://opencollective.com/astrodotbuild" }, "optionalDependencies": { - "sharp": "^0.34.0" + "sharp": "^0.34.0 || ^0.35.0" + }, + "peerDependencies": { + "@astrojs/markdown-remark": "7.2.4" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-remark": { + "optional": true + } } }, "node_modules/astro-seo-schema": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/astro-seo-schema/-/astro-seo-schema-6.0.0.tgz", - "integrity": "sha512-6Etg+9zu7XdlUa40BIZrZP3vd+lReeJ1rNgT8Jer+1bPyGdrA/itQwJOhIkX+t5PadVwTmpt6xZouDycrZys6w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/astro-seo-schema/-/astro-seo-schema-7.0.0.tgz", + "integrity": "sha512-icG6vL2pKNf7WBI03JxZYn6gQiLASxq/U3JVv27roaPJ+WH0p3sats9mMInzp6x40G1mVdLLoAEUObmKY1If+A==", "license": "MIT", "peerDependencies": { - "astro": "^6.0.0", + "astro": "^7.0.0", "schema-dts": "^1.1.0" } }, - "node_modules/astro/node_modules/@astrojs/compiler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-4.0.0.tgz", - "integrity": "sha512-eouss7G8ygdZqHuke033VMcVw5HTZUu+PXd/h06DGDUg/jt5btPYPqh66ENWw/mU78rBrf/oeC4oqoBwMtDMNA==", - "license": "MIT" - }, "node_modules/axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", @@ -3571,9 +3711,9 @@ } }, "node_modules/body-parser/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "license": "MIT", "engines": { "node": ">=18" @@ -3729,7 +3869,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -3796,19 +3935,41 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "dev": true, "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/colorjs.io": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", - "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/colorjs.io": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.7.1.tgz", + "integrity": "sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==", + "devOptional": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/color" + } + }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -3823,7 +3984,6 @@ "version": "14.0.3", "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", - "dev": true, "license": "MIT", "engines": { "node": ">=20" @@ -3875,12 +4035,12 @@ } }, "node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">=22" }, "funding": { "type": "opencollective", @@ -4146,16 +4306,16 @@ } }, "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" }, "funding": { "url": "https://github.com/sponsors/fb55" @@ -4175,9 +4335,9 @@ } }, "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", "license": "BSD-2-Clause", "engines": { "node": ">= 6" @@ -4318,9 +4478,9 @@ } }, "node_modules/devalue": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.0.tgz", - "integrity": "sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.1.tgz", + "integrity": "sha512-+17vil3EVQRzvtDJSFuTWEb8XJRvXqAiV3qZyQWD398QeXUa6CxsUyMdD1fxzEhUrd4FojitFz7lhIHBTlV4fw==", "license": "MIT" }, "node_modules/devlop": { @@ -4337,9 +4497,9 @@ } }, "node_modules/diff": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", - "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", + "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -4489,9 +4649,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", - "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", "license": "MIT" }, "node_modules/es-object-atoms": { @@ -4510,7 +4670,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -4527,7 +4686,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -4541,9 +4699,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -4553,32 +4711,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" } }, "node_modules/escape-html": { @@ -4616,7 +4774,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -4630,7 +4787,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -4647,7 +4803,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "dev": true, "license": "MIT", "funding": { "type": "opencollective", @@ -4658,7 +4813,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -4673,7 +4827,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -4689,7 +4842,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -4704,7 +4856,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -4738,9 +4889,9 @@ } }, "node_modules/eventsource-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", - "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -4790,9 +4941,9 @@ } }, "node_modules/express-rate-limit": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.1.tgz", - "integrity": "sha512-0D493aP61w0TJ2A0wy27riRsO7FMQ7FK+KUHOKCSfPvYo0R55aiC6emCVgFUeShH0fq0ICPVzNcgoS+BsbXQCA==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.2.tgz", + "integrity": "sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==", "license": "MIT", "dependencies": { "debug": "^4.4.3", @@ -4874,9 +5025,9 @@ } }, "node_modules/fast-uri": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", - "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz", + "integrity": "sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==", "funding": [ { "type": "github", @@ -4936,6 +5087,48 @@ "url": "https://opencollective.com/express" } }, + "node_modules/find-process": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/find-process/-/find-process-2.1.1.tgz", + "integrity": "sha512-SrQDx3QhlmHM90iqn9rdjCQcw/T+WlpOkHFsjoRgB+zTpDfltNA1VSNYeYELwhUTJy12UFxqjWhmhOrJc+o4sA==", + "license": "MIT", + "dependencies": { + "chalk": "~4.1.2", + "commander": "^14.0.3", + "loglevel": "^1.9.2" + }, + "bin": { + "find-process": "dist/cjs/bin/find-process.js" + } + }, + "node_modules/find-process/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/find-process/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/flatted": { "version": "3.4.4", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", @@ -5351,7 +5544,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -5403,7 +5595,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -5493,9 +5684,9 @@ } }, "node_modules/hono": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.0.tgz", - "integrity": "sha512-jhunvfHWxd7J5EFfSgH4xsYJzSe/lfqbUCxiyyeaQasUsXeEHXtzVid+7EOGByc5JnFa23SSFL3Y2RV/z1T+eQ==", + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.4.tgz", + "integrity": "sha512-AGEwKIyRMHRv1t8Wjwa3LHxQ61X5CqrdFT+4BRNTpqS5aJNnpl5WLjADb7vFlJzI/8uK7T5QLVApCMQKNa3LgQ==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -5572,103 +5763,28 @@ } }, "node_modules/igniteui-astro-components": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/igniteui-astro-components/-/igniteui-astro-components-0.0.30.tgz", - "integrity": "sha512-rNorqGrJ460iWlWoQPSrXrk+EvMjgWklIQGK3cjllLk077asbreEA9YvjfYRHUI97SAjps0pb05wTSG5wLlwWg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/igniteui-astro-components/-/igniteui-astro-components-1.0.2.tgz", + "integrity": "sha512-5GXQPl+94na8d+RdKicfWtDyNrbGrIGYN8RQijTpgPKCb9sXs3RVWe+jx/ccOnCRm1CXg+Uvv0lt5dK3nUKHqg==", "license": "MIT", - "workspaces": [ - "playground" - ], "dependencies": { + "@astrojs/markdown-satteri": "^0.3.5", + "@astrojs/mdx": "^7.0.7", "@fontsource-variable/instrument-sans": "^5.2.8", "@fontsource-variable/inter": "^5.2.8", "@fontsource-variable/jetbrains-mono": "^5.2.8", + "github-slugger": "^2.0.0", "jsdom": "^29.0.1", - "shiki": "^3.23.0" + "satteri": "^0.9.5", + "shiki": "^4.3.0" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24.0.0" + "node": ">=22.12.0" }, "peerDependencies": { - "astro": "^5.0.0 || ^6.0.0", - "igniteui-webcomponents": "^7.2.4" - } - }, - "node_modules/igniteui-astro-components/node_modules/@shikijs/core": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", - "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.5" - } - }, - "node_modules/igniteui-astro-components/node_modules/@shikijs/engine-javascript": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", - "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^4.3.4" - } - }, - "node_modules/igniteui-astro-components/node_modules/@shikijs/engine-oniguruma": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", - "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/igniteui-astro-components/node_modules/@shikijs/langs": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", - "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0" - } - }, - "node_modules/igniteui-astro-components/node_modules/@shikijs/themes": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", - "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0" - } - }, - "node_modules/igniteui-astro-components/node_modules/@shikijs/types": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", - "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/igniteui-astro-components/node_modules/shiki": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", - "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", - "license": "MIT", - "dependencies": { - "@shikijs/core": "3.23.0", - "@shikijs/engine-javascript": "3.23.0", - "@shikijs/engine-oniguruma": "3.23.0", - "@shikijs/langs": "3.23.0", - "@shikijs/themes": "3.23.0", - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "astro": "^7.0.0", + "igniteui-theming": "^26.0.1", + "igniteui-webcomponents": "^7.3.0-beta.1" } }, "node_modules/igniteui-i18n-core": { @@ -5686,9 +5802,9 @@ } }, "node_modules/igniteui-theming": { - "version": "25.2.0", - "resolved": "https://registry.npmjs.org/igniteui-theming/-/igniteui-theming-25.2.0.tgz", - "integrity": "sha512-bXRN379/vL05cDQl12jLABXALo+cXdD9zeYTlwURoEq1GrCkriYQnSqgwWmD/UdN/9Jc2MaMbsuXuYRZq5F71w==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/igniteui-theming/-/igniteui-theming-26.1.0.tgz", + "integrity": "sha512-12qUYBBahI8mjpSSrSTUB8ZIklqiroNoft/MQK6lZ0uLx9jO6CX9hGvfmJSClPGGEvAMrhLUYbvXPUOT5Hscgg==", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.28.0", @@ -5715,6 +5831,12 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/igniteui-theming/node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "license": "MIT" + }, "node_modules/igniteui-theming/node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -5911,6 +6033,7 @@ "cpu": [ "arm" ], + "libc": "glibc", "license": "MIT", "optional": true, "os": [ @@ -5927,6 +6050,7 @@ "cpu": [ "arm64" ], + "libc": "glibc", "license": "MIT", "optional": true, "os": [ @@ -5943,6 +6067,7 @@ "cpu": [ "arm" ], + "libc": "musl", "license": "MIT", "optional": true, "os": [ @@ -5959,6 +6084,7 @@ "cpu": [ "arm64" ], + "libc": "musl", "license": "MIT", "optional": true, "os": [ @@ -5975,6 +6101,7 @@ "cpu": [ "riscv64" ], + "libc": "musl", "license": "MIT", "optional": true, "os": [ @@ -5991,6 +6118,7 @@ "cpu": [ "x64" ], + "libc": "musl", "license": "MIT", "optional": true, "os": [ @@ -6007,6 +6135,7 @@ "cpu": [ "riscv64" ], + "libc": "glibc", "license": "MIT", "optional": true, "os": [ @@ -6023,6 +6152,7 @@ "cpu": [ "x64" ], + "libc": "glibc", "license": "MIT", "optional": true, "os": [ @@ -6090,13 +6220,12 @@ } }, "node_modules/igniteui-webcomponents": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/igniteui-webcomponents/-/igniteui-webcomponents-7.2.4.tgz", - "integrity": "sha512-h5hrroBn0kSYCYpj5OH4sKXkFZvdOeqpYnNTKMB5PsqsWexhQICkH5xKjDDj3VPbd135OvzWX5XQN0Nclj2qAQ==", + "version": "7.3.0-beta.1", + "resolved": "https://registry.npmjs.org/igniteui-webcomponents/-/igniteui-webcomponents-7.3.0-beta.1.tgz", + "integrity": "sha512-AUZO4l0GahTAcJEQSZglHH2ataQ/fdp4PsDNoQmjEYSuj/7m3eH4+2XRkowaYeZ5PcKS96W2NxdxncOTK50TNg==", "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.0", - "@lit-labs/virtualizer": "^2.1.0", + "@floating-ui/dom": "^1.8.0", "@lit/context": "^1.1.0", "igniteui-i18n-core": "^1.0.5", "lit": "^3.3.0" @@ -6105,11 +6234,11 @@ "node": ">=22" }, "peerDependencies": { - "dompurify": "^3.3.0", + "dompurify": "^3.4.0", "igniteui-i18n-resources": "^1.0.5", - "marked": "^17.0.0", + "marked": "^18.0.0", "marked-shiki": "^1.2.0", - "shiki": "^3.20.0" + "shiki": "^4.3.0" }, "peerDependenciesMeta": { "dompurify": { @@ -6216,13 +6345,12 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", - "dev": true, "license": "MIT" }, "node_modules/ip-address": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.4.0.tgz", - "integrity": "sha512-oSK96Grm3aP6OrS263xVxbNDGVL7rzBtYdpGqlDG8iQdoenDoTs/nkki+DflYbAEE8Xl6o5YxhxlrKvI3nqKXQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz", + "integrity": "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==", "license": "MIT", "engines": { "node": ">= 12" @@ -6250,7 +6378,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -6261,7 +6388,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dev": true, "license": "MIT", "dependencies": { "is-alphabetical": "^2.0.0", @@ -6276,7 +6402,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -6320,58 +6445,24 @@ "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "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==", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", + "optional": true, "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "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==", + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-plain-obj": { @@ -6411,21 +6502,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-wsl": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", - "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6433,9 +6509,9 @@ "license": "ISC" }, "node_modules/jose": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.8.tgz", - "integrity": "sha512-Bsdjwm3Qsd/P0jR+BHDe3LytDfY7WBq2HmCCLIwuVRHMuEC9ae7/R474GIUdF1NgCyZjzVo/A9DOiOBtXq8ZoQ==", + "version": "6.2.10", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.10.tgz", + "integrity": "sha512-iiW7J9qRFlGxvCOIBDBDxFePQSn7ZMAnrYGhrrOo6siO/MIqwfyilLR27pkfDgUk+raLuzADS8A3S/KLBisc0g==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -6567,6 +6643,267 @@ "node": ">=0.10.0" } }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/linkify-it": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", @@ -6618,6 +6955,19 @@ "@types/trusted-types": "^2.0.2" } }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -6638,9 +6988,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.2.tgz", + "integrity": "sha512-veT/+7iXrXzT39XnEN4lOxtNl72dMgJ8Lp+5Bd6YcMSWpb0n0MjBM8Uuooi6jgJr8dhUW2swQgBmoZVMni5SVg==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" @@ -6661,7 +7011,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=16" @@ -6671,15 +7020,25 @@ } }, "node_modules/markdown-it": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", - "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.0.tgz", + "integrity": "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", + "entities": "^4.5.0", + "linkify-it": "^5.0.2", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" @@ -6699,9 +7058,9 @@ } }, "node_modules/markdownlint": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.40.0.tgz", - "integrity": "sha512-UKybllYNheWac61Ia7T6fzuQNDZimFIpCg2w6hHjgV1Qu0w1TV0LlSgryUGzM0bkKQCBhy2FDhEELB73Kb0kAg==", + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.41.1.tgz", + "integrity": "sha512-qHKeU2E1bdyNAT077go2FVTNXvYcktN5IHtF6XyeD1l0PClxzSp2tUApAV14ORI8DGX4H9bNKZEzelZp4qn8IA==", "dev": true, "license": "MIT", "dependencies": { @@ -6713,59 +7072,79 @@ "micromark-extension-gfm-table": "2.1.1", "micromark-extension-math": "3.1.0", "micromark-util-types": "2.0.2", - "string-width": "8.1.0" + "string-width": "8.2.1" }, "engines": { - "node": ">=20" + "node": ">=22" }, "funding": { "url": "https://github.com/sponsors/DavidAnson" } }, "node_modules/markdownlint-cli": { - "version": "0.48.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.48.0.tgz", - "integrity": "sha512-NkZQNu2E0Q5qLEEHwWj674eYISTLD4jMHkBzDobujXd1kv+yCxi8jOaD/rZoQNW1FBBMMGQpuW5So8B51N/e0A==", + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.49.1.tgz", + "integrity": "sha512-qpYqJbSYf3jv57bdnFmCaZ/Wlu6IYHp2b6SOKrKBJ7OnPrDHIKmx4NERWH49QH9viTI6yO6raVDDn5nrf60VQQ==", "dev": true, "license": "MIT", "dependencies": { - "commander": "~14.0.3", + "commander": "~15.0.0", "deep-extend": "~0.6.0", - "ignore": "~7.0.5", - "js-yaml": "~4.1.1", + "ignore": "~7.0.6", + "js-yaml": "~5.2.1", "jsonc-parser": "~3.3.1", "jsonpointer": "~5.0.1", - "markdown-it": "~14.1.1", - "markdownlint": "~0.40.0", - "minimatch": "~10.2.4", - "run-con": "~1.3.2", - "smol-toml": "~1.6.0", - "tinyglobby": "~0.2.15" + "markdown-it": "~14.3.0", + "markdownlint": "~0.41.1", + "minimatch": "~10.2.5", + "run-con": "~1.3.3", + "smol-toml": "~1.7.0", + "tinyglobby": "~0.2.17" }, "bin": { "markdownlint": "markdownlint.js" }, "engines": { - "node": ">=20" + "node": ">=22" + } + }, + "node_modules/markdownlint-cli/node_modules/commander": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", + "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.12.0" } }, "node_modules/markdownlint-cli/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.3.tgz", + "integrity": "sha512-n+mUVyUX5bVv7G/G2zyIHOhdxfuU1dY2NOFzTQUWiMUbFss8b57NFlgCCaggU78wSw5KVS9cllzeLyzyR+n5nw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "js-yaml": "bin/js-yaml.mjs" } }, "node_modules/markdownlint-cli/node_modules/smol-toml": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz", - "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.2.tgz", + "integrity": "sha512-pXFZ9B2WinEPzxWkMmlYE/oYx2BP+qLrE95wP8tCuK901uLSMGdCb6QSr82z+wnhXkG4+cO+OMLbZB2Cn+97zw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -6944,7 +7323,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "dev": true, "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^2.0.0", @@ -6962,7 +7340,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -6981,7 +7358,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -7006,7 +7382,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -7362,7 +7737,6 @@ "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==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -7389,7 +7763,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -7412,7 +7785,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "dev": true, "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" @@ -7426,7 +7798,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.0.0", @@ -7447,7 +7818,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -7512,7 +7882,6 @@ "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==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -7741,7 +8110,6 @@ "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==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -7959,9 +8327,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", - "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", @@ -7977,18 +8345,38 @@ } }, "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/neotraverse": { - "version": "0.6.18", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", - "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-1.0.1.tgz", + "integrity": "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==", "license": "MIT", "engines": { "node": ">= 10" @@ -8035,1440 +8423,1901 @@ "node": ">=0.10.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.12.tgz", + "integrity": "sha512-65S/5gk9YSsaRjcyf7Nfa6h/d3E8/1gslpXfI4W7Dxn/oap8IKRuNT5VXkLQ1YFKIEg4apRY4Pj6aiwFzrDdmw==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "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==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.1.tgz", + "integrity": "sha512-0trZaiG7Y7kN/Egy9a8j47t9osC0Tch4PaIWd9yGF6bvmlk7muExRvGNYb8sXBwEKMoNKsbNN9P8EefuQekE4Q==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.2.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz", + "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz", + "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==", + "license": "MIT" + }, + "node_modules/pagefind": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.5.2.tgz", + "integrity": "sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==", + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "optionalDependencies": { + "@pagefind/darwin-arm64": "1.5.2", + "@pagefind/darwin-x64": "1.5.2", + "@pagefind/freebsd-x64": "1.5.2", + "@pagefind/linux-arm64": "1.5.2", + "@pagefind/linux-x64": "1.5.2", + "@pagefind/windows-arm64": "1.5.2", + "@pagefind/windows-x64": "1.5.2" + } + }, + "node_modules/parent-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", + "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" + "engines": { + "node": ">=20.19.0" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { - "node": ">= 0.4" - }, + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/obug": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", - "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", "license": "MIT", "engines": { - "node": ">=12.20.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/ofetch": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", - "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "license": "MIT", - "dependencies": { - "destr": "^2.0.5", - "node-fetch-native": "^1.6.7", - "ufo": "^1.6.1" + "engines": { + "node": ">=16.20.0" } }, - "node_modules/ohash": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">= 0.8" + "node": "^10 || ^12 || >=14" } }, - "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==", - "license": "ISC", - "dependencies": { - "wrappy": "1" + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/oniguruma-parser": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", - "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", - "license": "MIT" + "node_modules/process-ancestry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz", + "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/oniguruma-to-es": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", - "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", "license": "MIT", - "dependencies": { - "oniguruma-parser": "^0.12.2", - "regex": "^6.1.0", - "regex-recursion": "^6.0.2" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/p-limit": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.1.tgz", - "integrity": "sha512-0trZaiG7Y7kN/Egy9a8j47t9osC0Tch4PaIWd9yGF6bvmlk7muExRvGNYb8sXBwEKMoNKsbNN9P8EefuQekE4Q==", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { - "yocto-queue": "^1.2.1" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.10" } }, - "node_modules/p-queue": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz", - "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.4", - "p-timeout": "^7.0.0" - }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/p-timeout": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", - "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=20" + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/package-manager-detector": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz", - "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==", + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", "license": "MIT" }, - "node_modules/pagefind": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.5.2.tgz", - "integrity": "sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==", + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", - "bin": { - "pagefind": "lib/runner/bin.cjs" + "engines": { + "node": ">= 0.6" }, - "optionalDependencies": { - "@pagefind/darwin-arm64": "1.5.2", - "@pagefind/darwin-x64": "1.5.2", - "@pagefind/freebsd-x64": "1.5.2", - "@pagefind/linux-arm64": "1.5.2", - "@pagefind/linux-x64": "1.5.2", - "@pagefind/windows-arm64": "1.5.2", - "@pagefind/windows-x64": "1.5.2" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/parent-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", - "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", - "dev": true, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "callsites": "^3.1.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", - "dev": true, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" + "engines": { + "node": ">= 20.19.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-latin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", - "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", "license": "MIT", "dependencies": { - "@types/nlcst": "^2.0.0", - "@types/unist": "^3.0.0", - "nlcst-to-string": "^4.0.0", - "unist-util-modify-children": "^4.0.0", - "unist-util-visit-children": "^3.0.0", + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", - "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", "license": "MIT", "dependencies": { - "entities": "^8.0.0" + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/parse5/node_modules/entities": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", - "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=20.19.0" + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "regex-utilities": "^2.3.0" } }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "dependencies": { + "regex-utilities": "^2.3.0" } }, - "node_modules/piccolore": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", - "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", - "license": "ISC" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" }, - "node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", "license": "MIT", - "engines": { - "node": ">=16.20.0" + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/postcss": { - "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", - "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", "license": "MIT", "dependencies": { - "nanoid": "^3.3.16", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" }, - "engines": { - "node": "^10 || ^12 || >=14" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/property-information": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", - "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" }, - "engines": { - "node": ">= 0.10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, + "node_modules/remark-smartypants": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.3.tgz", + "integrity": "sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==", "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.15.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", - "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", - "license": "BSD-3-Clause", "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" }, "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.0.0" } }, - "node_modules/radix3": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", - "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", - "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/unified" } }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/readdirp": { + "node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node": ">=8" } }, - "node_modules/recma-build-jsx": { + "node_modules/resolve-pkg-maps": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", - "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", - "dev": true, + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "vfile": "^6.0.0" + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/recma-jsx": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", - "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", - "dev": true, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", "license": "MIT", "dependencies": { - "acorn-jsx": "^5.0.0", - "estree-util-to-js": "^2.0.0", - "recma-parse": "^1.0.0", - "recma-stringify": "^1.0.0", + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/recma-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", - "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", - "dev": true, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "esast-util-from-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/recma-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", - "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", - "dev": true, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-to-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", - "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "node_modules/rolldown": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.5.tgz", + "integrity": "sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA==", "license": "MIT", "dependencies": { - "regex-utilities": "^2.3.0" + "@oxc-project/types": "=0.146.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.5", + "@rolldown/binding-android-arm64": "1.2.5", + "@rolldown/binding-darwin-arm64": "1.2.5", + "@rolldown/binding-darwin-x64": "1.2.5", + "@rolldown/binding-freebsd-x64": "1.2.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.5", + "@rolldown/binding-linux-arm64-gnu": "1.2.5", + "@rolldown/binding-linux-arm64-musl": "1.2.5", + "@rolldown/binding-linux-ppc64-gnu": "1.2.5", + "@rolldown/binding-linux-s390x-gnu": "1.2.5", + "@rolldown/binding-linux-x64-gnu": "1.2.5", + "@rolldown/binding-linux-x64-musl": "1.2.5", + "@rolldown/binding-openharmony-arm64": "1.2.5", + "@rolldown/binding-win32-arm64-msvc": "1.2.5", + "@rolldown/binding-win32-x64-msvc": "1.2.5" } }, - "node_modules/regex-recursion": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { - "regex-utilities": "^2.3.0" + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-con": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.3.tgz", + "integrity": "sha512-Lb7OKM9aaykzyoNiHGhSVCjZsvbyy6qDMp2vDXL+MoCfz3GfNJtHYH7uYsU3QNMyInBk++xx+EZ8xZ8Sxs5fNQ==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~7.0.0", + "minimist": "^1.2.8", + "strip-json-comments": "~3.1.1" + }, + "bin": { + "run-con": "cli.js" + } + }, + "node_modules/run-con/node_modules/ini": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-7.0.0.tgz", + "integrity": "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" } }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, - "node_modules/rehype": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", - "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "node_modules/sass": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.103.1.tgz", + "integrity": "sha512-9icZURbP51S6S0QGoyaeqk9uB06GNWxsFYWfH5RgpFgqK5FA8tJcM3AdVxrZEVJ7dz+L87nG95gBKf4VuaMHGw==", "license": "MIT", + "optional": true, "dependencies": { - "@types/hast": "^3.0.0", - "rehype-parse": "^9.0.0", - "rehype-stringify": "^10.0.0", - "unified": "^11.0.0" + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, - "node_modules/rehype-parse": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", - "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "node_modules/sass-embedded": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.103.1.tgz", + "integrity": "sha512-UVIuFZPzz+4DXYbHzQ5gKaKkyP2IH3Sc/WoF63N2V7QIfnC2E9UpQAtiKlCVJTfBe43HRgHDBLnXpZkYAEBsNQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-from-html": "^2.0.0", - "unified": "^11.0.0" + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.7.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.103.1", + "sass-embedded-android-arm": "1.103.1", + "sass-embedded-android-arm64": "1.103.1", + "sass-embedded-android-riscv64": "1.103.1", + "sass-embedded-android-x64": "1.103.1", + "sass-embedded-darwin-arm64": "1.103.1", + "sass-embedded-darwin-x64": "1.103.1", + "sass-embedded-linux-arm": "1.103.1", + "sass-embedded-linux-arm64": "1.103.1", + "sass-embedded-linux-musl-arm": "1.103.1", + "sass-embedded-linux-musl-arm64": "1.103.1", + "sass-embedded-linux-musl-riscv64": "1.103.1", + "sass-embedded-linux-musl-x64": "1.103.1", + "sass-embedded-linux-riscv64": "1.103.1", + "sass-embedded-linux-x64": "1.103.1", + "sass-embedded-unknown-all": "1.103.1", + "sass-embedded-win32-arm64": "1.103.1", + "sass-embedded-win32-x64": "1.103.1" } }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "node_modules/sass-embedded-all-unknown": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.103.1.tgz", + "integrity": "sha512-MwX2ap06TbImAqlbnH6EndgBBejk6Eq2QB6Ae2hukCn9wmXf9cRu27um3mz3tyB4oJOOku0xfHqFH/+ckYj6YA==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], "license": "MIT", + "optional": true, "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "sass": "1.103.1" } }, - "node_modules/rehype-recma": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", - "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", - "dev": true, + "node_modules/sass-embedded-android-arm": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.103.1.tgz", + "integrity": "sha512-p36WHpsu5HEo2+NVNbI2Nmb8VgVH0xwOQyzghvZhF7ikGCzEVYI5BP28vHUZlCcgj2TUvMEJKI2lV336a+F/sg==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "hast-util-to-estree": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/rehype-stringify": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", - "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "node_modules/sass-embedded-android-arm64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.103.1.tgz", + "integrity": "sha512-jBXWMksyz55XeLOWvQs64BqiG5DcqflmMxcvMoA2oHtQT/7XZ02hBn502qpcF/q8Qd+qqG/hU5ccM+hGXrbQZw==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "node_modules/sass-embedded-android-riscv64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.103.1.tgz", + "integrity": "sha512-rzrH7RNntk0rx+zCE9xOiAIUt37D1cQKvFfcoX0xiePdGbNHBN8DWKaWN9vaCRfbgKCmxPjevzaqFNI/G/8E1A==", + "cpu": [ + "riscv64" + ], "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/remark-mdx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", - "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", - "dev": true, + "node_modules/sass-embedded-android-x64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.103.1.tgz", + "integrity": "sha512-EQglAJXJutuIcqgZf7YOwzao2ND6ow/OgqN+cM48/Qaeb6AimYmZiUJmM9FFcmS3Q2n1k6/2OU3l3Hlin7bFpw==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.103.1.tgz", + "integrity": "sha512-rlaBeCul8pLbDRKdBAxdDxSBwFU5fbX42ci6CxW2Vbs34jWTMQ72+nE2v2KkGGce+JnYbb7UV6xDP/4uDWWi+w==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/remark-rehype": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "node_modules/sass-embedded-darwin-x64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.103.1.tgz", + "integrity": "sha512-VSKFfhI//AOct6ppFmAaSH7tlW2LOFECMGs77jIoWf0ZjvGch/3sc9lUTTdIaYIOnTS4qpZck+8OcI2D0G92QA==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/remark-smartypants": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.3.tgz", - "integrity": "sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==", + "node_modules/sass-embedded-linux-arm": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.103.1.tgz", + "integrity": "sha512-tJRLPUtBwXHTnBnG7I39gQvCLreuOHLLCMyKHPR1hQ7aFNwiZjADYzKMRQPNMUqti/Os9z+6I7V13FqgQHfuzg==", + "cpu": [ + "arm" + ], + "libc": "glibc", "license": "MIT", - "dependencies": { - "retext": "^9.0.0", - "retext-smartypants": "^6.0.0", - "unified": "^11.0.4", - "unist-util-visit": "^5.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.103.1.tgz", + "integrity": "sha512-rC+80/Xr9svo0ka2Zr/sjD+N1zEHTw2Urm/nsEjaVp5HSH2i22jwhTKTIqie2OLl6ti+qdYnbI0sSfxOYRtgrg==", + "cpu": [ + "arm64" + ], + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.103.1.tgz", + "integrity": "sha512-N8L/kgVzXpnH+8d6ErIzqvb0l8kHODR3OfPaf0Azw6DOLGtEjwDRUbHno+G7iogGzyPOjKsM8OdyqHJj/bpTdw==", + "cpu": [ + "arm" + ], + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.103.1.tgz", + "integrity": "sha512-jMgG/C/VMo7+ShMFdk0xjJmQmYkj1PbJu/yrQiaQHpuo5pE2G+vnkEgsuM5EM3lTQ4MbMfnf715qy1fkbNPiUQ==", + "cpu": [ + "arm64" + ], + "libc": "musl", "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.103.1.tgz", + "integrity": "sha512-LZm8rEvI6sKU87qPOlODsYeAs7CmWy0B4ShYkjG4OMcGCcV4Ffxn25XW4TFqmruThITQvJ8WT+WGblzdoxYgbA==", + "cpu": [ + "riscv64" + ], + "libc": "musl", "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.103.1.tgz", + "integrity": "sha512-rmKzgk4t6RpaDhSefbbnk5yrA4pk1nHlVhJECGay8yMfzK8eglATeY9fzPgt89xCuQk6rkOiy11e+m8tLYOW5Q==", + "cpu": [ + "x64" + ], + "libc": "musl", "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=14.0.0" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.103.1.tgz", + "integrity": "sha512-xydQmtxla31uMrmN6z+mAogVGdEMDmkUElVq2+udomX/TPZDYJBkApEyJl237M2VLWVv29v1N4U4i2Z4xa7SDA==", + "cpu": [ + "riscv64" + ], + "libc": "glibc", "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/retext": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", - "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "node_modules/sass-embedded-linux-x64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.103.1.tgz", + "integrity": "sha512-Rln1oWm0MWKzzemOgQWrRFzfVBARwS9qxAidZPpCQHSohzPnWizFkmY1CUJad/YJNsA7sscueMdX63OEvxoM8w==", + "cpu": [ + "x64" + ], + "libc": "glibc", "license": "MIT", - "dependencies": { - "@types/nlcst": "^2.0.0", - "retext-latin": "^4.0.0", - "retext-stringify": "^4.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/retext-latin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", - "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "node_modules/sass-embedded-unknown-all": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.103.1.tgz", + "integrity": "sha512-p7kI4US8+n+YguKczXh+4KcodJnk+8cwv+QFdvMaz3OfPrdHV0EnhPsaVDWD9qXb1XXCEdUhpp6vQwGk3eKc3A==", "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], "dependencies": { - "@types/nlcst": "^2.0.0", - "parse-latin": "^7.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "sass": "1.103.1" } }, - "node_modules/retext-smartypants": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", - "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "node_modules/sass-embedded-win32-arm64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.103.1.tgz", + "integrity": "sha512-/0renOj3SpZGu4TA8CZJ6qZbTxGZk1khkPfiBTmV1uFB40ESYM5VsdXNj76P07bsAjIj9X2fCjTafLQFLSd9Nw==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@types/nlcst": "^2.0.0", - "nlcst-to-string": "^4.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/retext-stringify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", - "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "node_modules/sass-embedded-win32-x64": { + "version": "1.103.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.103.1.tgz", + "integrity": "sha512-fIg60j9u5YlLUU3W8FvySMR4HHIo9R12HHFQTW7njyQ8nXqgR+t+XfCzGJloQka8g583BlAfu31Q76Ljr5o+9g==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@types/nlcst": "^2.0.0", - "nlcst-to-string": "^4.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/rollup": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", - "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "node_modules/satteri": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.9.5.tgz", + "integrity": "sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==", "license": "MIT", "dependencies": { - "@types/estree": "1.0.9" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "@types/estree-jsx": "^1.0.5", + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3" }, "optionalDependencies": { - "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.62.4", - "@rollup/rollup-android-arm64": "4.62.4", - "@rollup/rollup-darwin-arm64": "4.62.4", - "@rollup/rollup-darwin-x64": "4.62.4", - "@rollup/rollup-freebsd-arm64": "4.62.4", - "@rollup/rollup-freebsd-x64": "4.62.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", - "@rollup/rollup-linux-arm-musleabihf": "4.62.4", - "@rollup/rollup-linux-arm64-gnu": "4.62.4", - "@rollup/rollup-linux-arm64-musl": "4.62.4", - "@rollup/rollup-linux-loong64-gnu": "4.62.4", - "@rollup/rollup-linux-loong64-musl": "4.62.4", - "@rollup/rollup-linux-ppc64-gnu": "4.62.4", - "@rollup/rollup-linux-ppc64-musl": "4.62.4", - "@rollup/rollup-linux-riscv64-gnu": "4.62.4", - "@rollup/rollup-linux-riscv64-musl": "4.62.4", - "@rollup/rollup-linux-s390x-gnu": "4.62.4", - "@rollup/rollup-linux-x64-gnu": "4.62.4", - "@rollup/rollup-linux-x64-musl": "4.62.4", - "@rollup/rollup-openbsd-x64": "4.62.4", - "@rollup/rollup-openharmony-arm64": "4.62.4", - "@rollup/rollup-win32-arm64-msvc": "4.62.4", - "@rollup/rollup-win32-ia32-msvc": "4.62.4", - "@rollup/rollup-win32-x64-gnu": "4.62.4", - "@rollup/rollup-win32-x64-msvc": "4.62.4", - "fsevents": "~2.3.2" + "@bruits/satteri-darwin-arm64": "0.9.5", + "@bruits/satteri-darwin-x64": "0.9.5", + "@bruits/satteri-linux-arm64-gnu": "0.9.5", + "@bruits/satteri-linux-arm64-musl": "0.9.5", + "@bruits/satteri-linux-x64-gnu": "0.9.5", + "@bruits/satteri-linux-x64-musl": "0.9.5", + "@bruits/satteri-wasm32-wasi": "0.9.5", + "@bruits/satteri-win32-arm64-msvc": "0.9.5", + "@bruits/satteri-win32-x64-msvc": "0.9.5" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "license": "ISC", "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">= 18" + "node": ">=v12.22.7" } }, - "node_modules/run-con": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.3.tgz", - "integrity": "sha512-Lb7OKM9aaykzyoNiHGhSVCjZsvbyy6qDMp2vDXL+MoCfz3GfNJtHYH7uYsU3QNMyInBk++xx+EZ8xZ8Sxs5fNQ==", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "node_modules/schema-dts": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", + "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~7.0.0", - "minimist": "^1.2.8", - "strip-json-comments": "~3.1.1" + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" }, - "bin": { - "run-con": "cli.js" + "engines": { + "node": ">=4" } }, - "node_modules/run-con/node_modules/ini": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-7.0.0.tgz", - "integrity": "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w==", - "dev": true, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + "node": ">=10" } }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "license": "Apache-2.0", + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", "dependencies": { - "tslib": "^2.1.0" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.100.0.tgz", - "integrity": "sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==", + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", - "optional": true, "dependencies": { - "chokidar": "^5.0.0", - "immutable": "^5.1.5", - "source-map-js": ">=0.6.2 <2.0.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, - "bin": { - "sass": "sass.js" + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", + "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" }, "engines": { - "node": ">=20.19.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@parcel/watcher": "^2.4.1" + "@img/sharp-darwin-arm64": "0.35.3", + "@img/sharp-darwin-x64": "0.35.3", + "@img/sharp-freebsd-wasm32": "0.35.3", + "@img/sharp-libvips-darwin-arm64": "1.3.2", + "@img/sharp-libvips-darwin-x64": "1.3.2", + "@img/sharp-libvips-linux-arm": "1.3.2", + "@img/sharp-libvips-linux-arm64": "1.3.2", + "@img/sharp-libvips-linux-ppc64": "1.3.2", + "@img/sharp-libvips-linux-riscv64": "1.3.2", + "@img/sharp-libvips-linux-s390x": "1.3.2", + "@img/sharp-libvips-linux-x64": "1.3.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2", + "@img/sharp-libvips-linuxmusl-x64": "1.3.2", + "@img/sharp-linux-arm": "0.35.3", + "@img/sharp-linux-arm64": "0.35.3", + "@img/sharp-linux-ppc64": "0.35.3", + "@img/sharp-linux-riscv64": "0.35.3", + "@img/sharp-linux-s390x": "0.35.3", + "@img/sharp-linux-x64": "0.35.3", + "@img/sharp-linuxmusl-arm64": "0.35.3", + "@img/sharp-linuxmusl-x64": "0.35.3", + "@img/sharp-webcontainers-wasm32": "0.35.3", + "@img/sharp-win32-arm64": "0.35.3", + "@img/sharp-win32-ia32": "0.35.3", + "@img/sharp-win32-x64": "0.35.3" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/sass-embedded": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.100.0.tgz", - "integrity": "sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@bufbuild/protobuf": "^2.5.0", - "colorjs.io": "^0.5.0", - "immutable": "^5.1.5", - "rxjs": "^7.4.0", - "supports-color": "^8.1.1", - "sync-child-process": "^1.0.2", - "varint": "^6.0.0" + "node_modules/sharp/node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", + "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" }, - "bin": { - "sass": "dist/bin/sass.js" + "funding": { + "url": "https://opencollective.com/libvips" }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.2" + } + }, + "node_modules/sharp/node_modules/@img/sharp-darwin-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", + "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "sass-embedded-all-unknown": "1.100.0", - "sass-embedded-android-arm": "1.100.0", - "sass-embedded-android-arm64": "1.100.0", - "sass-embedded-android-riscv64": "1.100.0", - "sass-embedded-android-x64": "1.100.0", - "sass-embedded-darwin-arm64": "1.100.0", - "sass-embedded-darwin-x64": "1.100.0", - "sass-embedded-linux-arm": "1.100.0", - "sass-embedded-linux-arm64": "1.100.0", - "sass-embedded-linux-musl-arm": "1.100.0", - "sass-embedded-linux-musl-arm64": "1.100.0", - "sass-embedded-linux-musl-riscv64": "1.100.0", - "sass-embedded-linux-musl-x64": "1.100.0", - "sass-embedded-linux-riscv64": "1.100.0", - "sass-embedded-linux-x64": "1.100.0", - "sass-embedded-unknown-all": "1.100.0", - "sass-embedded-win32-arm64": "1.100.0", - "sass-embedded-win32-x64": "1.100.0" + "@img/sharp-libvips-darwin-x64": "1.3.2" } }, - "node_modules/sass-embedded-all-unknown": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.100.0.tgz", - "integrity": "sha512-auFtXY/kwYILmSVjtBDwyj0axcLbYYiffOKWoaXHnI5bsYwiRbBh3EneR1rpbX2ZIZCrwX93i5pxKLTZF/662Q==", + "node_modules/sharp/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", + "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==", "cpu": [ - "!arm", - "!arm64", - "!riscv64", - "!x64" + "arm64" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, - "dependencies": { - "sass": "1.100.0" + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/sass-embedded-android-arm": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.100.0.tgz", - "integrity": "sha512-70f3HgX2pFNmzpGQ86n5e6QfWn2fP4QUQGfFQK0P1XH73ZLIzLo2YqygrGKGKeeqtc5eU2Wl1/xQzhzuKnO4kw==", + "node_modules/sharp/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", + "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", + "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==", "cpu": [ "arm" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "android" + "linux" ], - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/sass-embedded-android-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.100.0.tgz", - "integrity": "sha512-W+Ru9JwTnfU0UX3jSZcbqFdtKFMcYdfFwytc57h2DgnqCOIiAqI2E06mABZBZC+r3LwXCBuS5GbXAGeVgvVDkA==", + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", + "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==", "cpu": [ "arm64" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "android" + "linux" ], - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/sass-embedded-android-riscv64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.100.0.tgz", - "integrity": "sha512-icU3o0V/uCSytSpf+tX5Lf51BvyQEbLzDUJfUi9etSauYBGHpPKkdtdZH0si4v98phq11Kl8rSV1SggksxF1Hg==", + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", + "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", + "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==", "cpu": [ "riscv64" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "android" + "linux" ], - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/sass-embedded-android-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.100.0.tgz", - "integrity": "sha512-mevF9VQk6gEYByy8+jusaHGmd7Usb2ytX/DsEOd0JtOGCtcf1kh575xJ6OUBDIcJ15uLnbau/0iy1eP6WVBvWA==", + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", + "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", + "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==", "cpu": [ "x64" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "android" + "linux" ], - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/sass-embedded-darwin-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.100.0.tgz", - "integrity": "sha512-1PVlYi61POo93IT/FfrG1mc1tAHxeSTyUALF2aOFmXGWjVXr3bQzEQiBGCOvQbj/ix+5hNyXFXcEMEyKvtUJJA==", + "node_modules/sharp/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", + "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==", "cpu": [ "arm64" ], - "dev": true, - "license": "MIT", + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "darwin" + "linux" ], - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/sass-embedded-darwin-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.100.0.tgz", - "integrity": "sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==", + "node_modules/sharp/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", + "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==", "cpu": [ "x64" ], - "dev": true, - "license": "MIT", + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "darwin" + "linux" ], - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/sass-embedded-linux-arm": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.100.0.tgz", - "integrity": "sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==", + "node_modules/sharp/node_modules/@img/sharp-linux-arm": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", + "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==", "cpu": [ "arm" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.2" } }, - "node_modules/sass-embedded-linux-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.100.0.tgz", - "integrity": "sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==", + "node_modules/sharp/node_modules/@img/sharp-linux-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", + "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==", "cpu": [ "arm64" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.2" } }, - "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.100.0.tgz", - "integrity": "sha512-sl0JgbGloPyJg66XXx5UDSDScZ0oU85DpMQU4JU/sCUCFj1Z8zZ69SJWKTCNE4/jwnce7WI2zPCV5AG+RHOZJw==", + "node_modules/sharp/node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", + "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==", "cpu": [ - "arm" + "ppc64" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.2" } }, - "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.100.0.tgz", - "integrity": "sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==", + "node_modules/sharp/node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", + "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==", "cpu": [ - "arm64" + "riscv64" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.2" } }, - "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.100.0.tgz", - "integrity": "sha512-ShvI0Kx04mwoCARwZ0UjiT97isQvzO80tAt91zmFyHLN9kelc/IrQi940farSm2xQVPCKdeVyeG0ekBsokSpYQ==", + "node_modules/sharp/node_modules/@img/sharp-linux-s390x": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", + "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==", "cpu": [ - "riscv64" + "s390x" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.2" } }, - "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.100.0.tgz", - "integrity": "sha512-TDBCRWNuS4RDLQXvRc1gjZlWiWTWaWGp0Bwu/IKwJxov81lsvrCs3TihTyNXtW7V5aoN4Ky3r0QOkNb3mwmBnA==", + "node_modules/sharp/node_modules/@img/sharp-linux-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", + "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==", "cpu": [ "x64" ], - "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.2" } }, - "node_modules/sass-embedded-linux-riscv64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.100.0.tgz", - "integrity": "sha512-j4ENJGOheO+fm3j/yorLxCjBP6/XskrZx7dTLlT+lXYwN/qqCqoA/gsNLI0McS3DFM6GBwPiffzWsdWS8t6sEQ==", + "node_modules/sharp/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", + "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==", "cpu": [ - "riscv64" + "arm64" ], - "dev": true, - "license": "MIT", + "libc": [ + "musl" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" } }, - "node_modules/sass-embedded-linux-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.100.0.tgz", - "integrity": "sha512-0vUSN8j0WGtCJIOPh//EmUvYGHW0QOe5iul8qyhPk50MAcw49MA0r34AhftjDdx94ILPF6vApFs0gwHPQRlpVA==", + "node_modules/sharp/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", + "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==", "cpu": [ "x64" ], - "dev": true, - "license": "MIT", + "libc": [ + "musl" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-unknown-all": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.100.0.tgz", - "integrity": "sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "!android", - "!darwin", - "!linux", - "!win32" - ], - "dependencies": { - "sass": "1.100.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.2" } }, - "node_modules/sass-embedded-win32-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.100.0.tgz", - "integrity": "sha512-iE+yxj+hUXwwbqpHkXxgAWTzeRfcWxJ7SSTQEPMk48lwq3oCrWLlz5sQuWHbuTK/i0GKQfROdP+hOmPi89yjUg==", + "node_modules/sharp/node_modules/@img/sharp-win32-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", + "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==", "cpu": [ "arm64" ], - "dev": true, - "license": "MIT", + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=14.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/sass-embedded-win32-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.100.0.tgz", - "integrity": "sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==", + "node_modules/sharp/node_modules/@img/sharp-win32-ia32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", + "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==", "cpu": [ - "x64" + "ia32" ], - "dev": true, - "license": "MIT", + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sax": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", - "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" - } - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/schema-dts": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", - "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" + "node": "^20.9.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/libvips" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/sharp": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.2", - "semver": "^7.7.3" - }, + "node_modules/sharp/node_modules/@img/sharp-win32-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", + "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.5", - "@img/sharp-darwin-x64": "0.34.5", - "@img/sharp-libvips-darwin-arm64": "1.2.4", - "@img/sharp-libvips-darwin-x64": "1.2.4", - "@img/sharp-libvips-linux-arm": "1.2.4", - "@img/sharp-libvips-linux-arm64": "1.2.4", - "@img/sharp-libvips-linux-ppc64": "1.2.4", - "@img/sharp-libvips-linux-riscv64": "1.2.4", - "@img/sharp-libvips-linux-s390x": "1.2.4", - "@img/sharp-libvips-linux-x64": "1.2.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", - "@img/sharp-libvips-linuxmusl-x64": "1.2.4", - "@img/sharp-linux-arm": "0.34.5", - "@img/sharp-linux-arm64": "0.34.5", - "@img/sharp-linux-ppc64": "0.34.5", - "@img/sharp-linux-riscv64": "0.34.5", - "@img/sharp-linux-s390x": "0.34.5", - "@img/sharp-linux-x64": "0.34.5", - "@img/sharp-linuxmusl-arm64": "0.34.5", - "@img/sharp-linuxmusl-x64": "0.34.5", - "@img/sharp-wasm32": "0.34.5", - "@img/sharp-win32-arm64": "0.34.5", - "@img/sharp-win32-ia32": "0.34.5", - "@img/sharp-win32-x64": "0.34.5" } }, "node_modules/shebang-command": { @@ -9493,17 +10342,17 @@ } }, "node_modules/shiki": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.1.tgz", - "integrity": "sha512-rFP+iYKzjLEIqiMiKANhARqiAbk4deDhWnBtnUO/K0D0dPxMGDH4N0FVfBY/VeI+lPrV4wNGCHQZp7EOr7NNBw==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.3.tgz", + "integrity": "sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==", "license": "MIT", "dependencies": { - "@shikijs/core": "4.4.1", - "@shikijs/engine-javascript": "4.4.1", - "@shikijs/engine-oniguruma": "4.4.1", - "@shikijs/langs": "4.4.1", - "@shikijs/themes": "4.4.1", - "@shikijs/types": "4.4.1", + "@shikijs/core": "4.4.3", + "@shikijs/engine-javascript": "4.4.3", + "@shikijs/engine-oniguruma": "4.4.3", + "@shikijs/langs": "4.4.3", + "@shikijs/themes": "4.4.3", + "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" }, @@ -9590,9 +10439,9 @@ "license": "MIT" }, "node_modules/smol-toml": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz", - "integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz", + "integrity": "sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==", "license": "BSD-3-Clause", "engines": { "node": ">= 18" @@ -9605,7 +10454,6 @@ "version": "0.7.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">= 12" @@ -9646,14 +10494,14 @@ } }, "node_modules/string-width": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", - "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", "dev": true, "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.3.0", - "strip-ansi": "^7.1.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { "node": ">=20" @@ -9718,7 +10566,6 @@ "version": "1.1.21", "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", - "dev": true, "license": "MIT", "dependencies": { "style-to-object": "1.0.14" @@ -9728,7 +10575,6 @@ "version": "1.0.14", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", - "dev": true, "license": "MIT", "dependencies": { "inline-style-parser": "0.2.7" @@ -9750,18 +10596,18 @@ } }, "node_modules/svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz", - "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.1.0.tgz", + "integrity": "sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==", "license": "MIT", "dependencies": { "commander": "^11.1.0", - "css-select": "^5.1.0", + "css-select": "^6.0.0", "css-tree": "^3.0.1", - "css-what": "^6.1.0", + "css-what": "^7.0.0", "csso": "^5.0.5", "picocolors": "^1.1.1", - "sax": "^1.5.0" + "sax": "1.6.1" }, "bin": { "svgo": "bin/svgo.js" @@ -9851,21 +10697,21 @@ } }, "node_modules/tldts": { - "version": "7.4.10", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.10.tgz", - "integrity": "sha512-GgouD1B+sWwvkaEq8vXC15DjQitxbvs12oIXELpconwm+Tg3zfcEv4jgzq3vtKverDXsg3VI8aRgNL2Nra0Iog==", + "version": "7.4.11", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.11.tgz", + "integrity": "sha512-aBiNayCfTQxuIJBm06M+xR14cYaYlDlSXZbgsnKzKNxDKUVq7KFwTjwBSsb7m9Y5xO8WfPnBc63WaYFMTGlvqw==", "license": "MIT", "dependencies": { - "tldts-core": "^7.4.10" + "tldts-core": "^7.4.11" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.4.10", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.10.tgz", - "integrity": "sha512-KnQjp53ZekKgm/r3l+u8kJGGzYgrWdP8+Mql7a4vijh2WE0IrZWspQj/TpTxDho/YxO+AnOZnIjQcCD+q6iJsw==", + "version": "7.4.11", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.11.tgz", + "integrity": "sha512-CW3WN2rIIE/Of21mulhgnGOwoDyEFNygyIBOONSdyAuSATgMMUCpLeUlB+E8sAwA5xRV9hYPl+kyZ9citHCaKg==", "license": "MIT" }, "node_modules/toidentifier": { @@ -9965,9 +10811,9 @@ } }, "node_modules/type-is/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "license": "MIT", "engines": { "node": ">=18" @@ -10052,14 +10898,23 @@ } }, "node_modules/unifont": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", - "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.5.tgz", + "integrity": "sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==", "license": "MIT", "dependencies": { "css-tree": "^3.1.0", - "ofetch": "^1.5.1", - "ohash": "^2.0.11" + "ohash": "^2.0.11", + "undici": "^8.0.0" + } + }, + "node_modules/unifont/node_modules/undici": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.10.0.tgz", + "integrity": "sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ==", + "license": "MIT", + "engines": { + "node": ">=22.19.0" } }, "node_modules/unist-util-find-after": { @@ -10120,7 +10975,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -10362,17 +11216,16 @@ } }, "node_modules/vite": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", - "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", + "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", "license": "MIT", "dependencies": { - "esbuild": "^0.27.0 || ^0.28.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.26", + "rolldown": "~1.2.4", + "tinyglobby": "^0.2.17" }, "bin": { "vite": "bin/vite.js" @@ -10388,9 +11241,10 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", - "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", @@ -10403,13 +11257,16 @@ "@types/node": { "optional": true }, - "jiti": { + "@vitejs/devtools": { "optional": true }, - "less": { + "esbuild": { "optional": true }, - "lightningcss": { + "jiti": { + "optional": true + }, + "less": { "optional": true }, "sass": { @@ -10462,9 +11319,9 @@ "license": "MIT" }, "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.2.0.tgz", + "integrity": "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==", "dev": true, "license": "MIT" }, @@ -10537,15 +11394,6 @@ "node": ">= 8" } }, - "node_modules/which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 0dc63bda63..2762e6a0a2 100644 --- a/package.json +++ b/package.json @@ -147,36 +147,34 @@ "check-html-links:report": "node scripts/check-html-links.mjs --md=reports/html-links-report.md" }, "dependencies": { - "astro-seo-schema": "^6.0.0", + "@astrojs/markdown-satteri": "^0.3.5", + "astro-seo-schema": "^7.0.0", "gray-matter": "^4.0.3", - "igniteui-astro-components": "0.0.30", - "igniteui-theming": "^25.0.2", - "igniteui-webcomponents": "^7.2.4", + "igniteui-astro-components": "1.0.2", + "igniteui-theming": "^26.0.1", + "igniteui-webcomponents": "^7.3.0-beta.1", "js-yaml": "^4.1.1", "jsdom": "^29.0.1", "pagefind": "^1.5.2", + "satteri": "^0.9.5", + "sharp": "0.35.3", "turndown": "^7.2.4", "turndown-plugin-gfm": "^1.0.2" }, "devDependencies": { - "@astrojs/mdx": "^6.0.0", + "@astrojs/mdx": "^7.0.5", "@astrojs/ts-plugin": "^1.10.7", "@types/jsdom": "^28.0.1", - "astro": "^6.1.6", + "astro": "^7.2.2", "cross-env": "^10.1.0", "cspell": "^9.2.2", - "markdownlint-cli": "^0.48.0", + "markdownlint-cli": "^0.49.1", "sass-embedded": "^1.98.0", "typescript": "^5.4.0" }, "peerDependencies": { - "@astrojs/mdx": ">=5", - "astro": ">=6" - }, - "overrides": { - "igniteui-webcomponents": { - "shiki": "^4.0.2" - } + "@astrojs/mdx": ">=7", + "astro": ">=7" }, "engines": { "node": ">=22.12.0" diff --git a/src/integration.ts b/src/integration.ts index 6dde2c2160..03c8a7c9d0 100644 --- a/src/integration.ts +++ b/src/integration.ts @@ -24,7 +24,7 @@ * { tag: 'link', attrs: { rel: 'stylesheet', href: '...' } }, * ], * // Extra Astro options (markdown, image, build, …) - * markdown: { remarkPlugins: [] }, + * markdown: { mdastPlugins: [], hastPlugins: [] }, * }); * * --- Option B: manual composition (for full control) --- @@ -49,7 +49,8 @@ import fsp from 'node:fs/promises'; import path from 'node:path'; import { buildHtmlToMdConverter, htmlPageToMd } from './html-to-md.ts'; import { createIndex as pagefindCreateIndex } from 'pagefind'; -import { fileURLToPath } from 'node:url'; +import { fileURLToPath, pathToFileURL } from 'node:url'; +import { createRequire } from 'node:module'; import { defineConfig } from 'astro/config'; import type { AstroIntegration } from 'astro'; import mdx from '@astrojs/mdx'; @@ -61,6 +62,7 @@ import { buildSidebarFromToc } from './sidebar'; import { getPlatformHead } from './platform'; import type { HeadEntry, PlatformKey, NavLang } from './platform.ts'; import { getGtmContainerId } from './lib/platform-context.js'; +import { satteri } from '@astrojs/markdown-satteri'; import { remarkEnvVars } from './plugins/remark-env-vars'; import { remarkMdLinks } from './plugins/remark-md-links'; import { remarkHtmlTransforms } from './plugins/remark-html-transforms'; @@ -70,6 +72,77 @@ import { rehypePagefindIgnore } from 'igniteui-astro-components/plugins/rehype-p import { rehypeStripEmptyParagraphs } from './plugins/rehype-strip-empty-paragraphs'; import { rehypeApiReferencesGrid } from './plugins/rehype-api-references-grid'; +/** + * Absolute directories of every installed `igniteui-theming` copy, nearest first. + * + * The linked component library's tree is searched too: when + * `igniteui-astro-components` is a local checkout it carries its own copy, and its + * stylesheets are compiled as part of this build. + */ +function resolveThemingPackageDirs(): string[] { + const origins: string[] = [fileURLToPath(import.meta.url)]; + try { + origins.push(createRequire(import.meta.url).resolve('igniteui-astro-components/package.json')); + } catch { /* library not linked — its tree simply isn't searched */ } + + const dirs: string[] = []; + for (const origin of origins) { + try { + const themingPkg = createRequire(origin).resolve('igniteui-theming/package.json'); + const dir = path.dirname(themingPkg); + if (!dirs.includes(dir)) dirs.push(dir); + } catch { /* not installed in this tree */ } + } + return dirs; +} + +/** + * Sass importer for `igniteui-theming` subpaths. + * + * `igniteui-theming` declares its Sass files as `"./sass/**\/*.*"`, which is not a + * valid Node subpath pattern — only a single `*` is allowed — so no `sass/...` + * subpath resolves through its exports map. Vite 8 (Astro 7) resolves Sass `@use` + * through its own resolver, which enforces package exports; earlier versions fell + * back to plain filesystem resolution, which is why these imports used to work. + * + * Vite appends its resolver-backed importer *after* any configured ones, so this + * runs first and short-circuits those imports to a real path. Returning the + * directory-style URL lets Sass apply its own partial/index rules, so + * `sass/typography` still finds `sass/typography/_index.scss`. + */ +function createThemingSassImporter(): { findFileUrl(url: string): URL | null } { + const prefix = 'igniteui-theming/'; + const packageDirs = resolveThemingPackageDirs(); + + return { + findFileUrl(url: string): URL | null { + if (!url.startsWith(prefix)) return null; + const subpath = url.slice(prefix.length); + + for (const dir of packageDirs) { + const candidate = path.join(dir, subpath); + // Sass appends the partial/index variants itself, so it is enough that + // the target or its containing directory exists in this copy. + if (fs.existsSync(candidate) || fs.existsSync(path.dirname(candidate))) { + return pathToFileURL(candidate); + } + } + return null; + }, + }; +} + +/** Sass `loadPaths` covering the node_modules trees that hold `igniteui-theming`. */ +function resolveScssLoadPaths(): string[] { + // An app-local install wins, matching the previous cwd-only behaviour. + const paths: string[] = [path.join(process.cwd(), 'node_modules')]; + for (const dir of resolveThemingPackageDirs()) { + const nodeModulesDir = path.dirname(dir); + if (!paths.includes(nodeModulesDir)) paths.push(nodeModulesDir); + } + return paths; +} + /** Build / deployment mode. Drives env-var `DOCS_BUILD_MODE`. */ export type DocsMode = 'development' | 'staging' | 'production'; @@ -389,7 +462,14 @@ export function siteMetaIntegration({ css: { preprocessorOptions: { scss: { - loadPaths: [path.join(process.cwd(), 'node_modules')], + // Vite installs Sass's NodePackageImporter by default, and + // Sass consults importers before `loadPaths`. That importer + // *throws* on a subpath the exports map doesn't cover instead + // of falling through, which breaks every + // `igniteui-theming/sass/...` import (see resolveScssLoadPaths). + // Clearing it puts resolution back on `loadPaths`. + importers: [createThemingSassImporter()], + loadPaths: resolveScssLoadPaths(), // The if-function deprecation originates inside // igniteui-theming (vendor code we cannot modify). silenceDeprecations: ['if-function'], @@ -723,9 +803,36 @@ export function createDocsSite(options: CreateDocsSiteOptions = {} as CreateDocs return defineConfig({ site, ...(base !== undefined ? { base } : {}), + // Astro 7 defaults to `compressHTML: 'jsx'`, which drops whitespace between + // inline elements entirely instead of collapsing it to a single space. That + // silently joins adjacent text — breadcrumb segments, badge labels and callout + // titles render as "Open SourceIgnite UI" / "InfoThe -y flag". Keeping the + // Astro 6 behaviour preserves the rendered copy; switch to 'jsx' only after + // auditing templates for the inline pairs that need an explicit {" "}. + compressHTML: true, ...astroExtra, vite: { ...(astroExtra as any).vite, + css: { + ...(astroExtra as any).vite?.css, + preprocessorOptions: { + ...(astroExtra as any).vite?.css?.preprocessorOptions, + scss: { + // Vite installs Sass's NodePackageImporter by default, and Sass + // consults importers before `loadPaths`. That importer *throws* on a + // subpath the exports map doesn't cover rather than falling through, + // which breaks every `igniteui-theming/sass/...` import + // (see resolveScssLoadPaths). Clearing it puts resolution back on + // `loadPaths`. + importers: [createThemingSassImporter()], + loadPaths: resolveScssLoadPaths(), + // The if-function deprecation originates inside igniteui-theming + // (vendor code we cannot modify). + silenceDeprecations: ['if-function'], + ...(astroExtra as any).vite?.css?.preprocessorOptions?.scss, + }, + }, + }, server: { ...(astroExtra as any).vite?.server, proxy: { @@ -740,20 +847,25 @@ export function createDocsSite(options: CreateDocsSiteOptions = {} as CreateDocs wrap: true, }, ...(astroExtra as any).markdown, - remarkPlugins: [ - remarkEnvVars, - remarkMdLinks, - remarkHtmlTransforms, - ...((astroExtra as any).markdown?.remarkPlugins ?? []), - ], - rehypePlugins: [ - rehypeTableWrapper, - rehypeHeadingAnchors, - rehypeStripEmptyParagraphs, - rehypeApiReferencesGrid, - rehypePagefindIgnore, - ...((astroExtra as any).markdown?.rehypePlugins ?? []), - ], + // Astro 7 renders Markdown/MDX with Sätteri instead of remark/rehype. + // MDAST plugins run before HAST plugins, matching the old + // remarkPlugins-then-rehypePlugins ordering. + processor: satteri({ + mdastPlugins: [ + remarkEnvVars, + remarkMdLinks, + remarkHtmlTransforms, + ...((astroExtra as any).markdown?.mdastPlugins ?? []), + ], + hastPlugins: [ + rehypeTableWrapper, + rehypeHeadingAnchors, + rehypeStripEmptyParagraphs, + rehypeApiReferencesGrid, + rehypePagefindIgnore, + ...((astroExtra as any).markdown?.hastPlugins ?? []), + ], + }), }, integrations: [ siteMetaIntegration({ diff --git a/src/plugins/rehype-api-references-grid.ts b/src/plugins/rehype-api-references-grid.ts index 2258b150f0..9e37baf7c5 100644 --- a/src/plugins/rehype-api-references-grid.ts +++ b/src/plugins/rehype-api-references-grid.ts @@ -1,41 +1,29 @@ /** - * Rehype plugin: wrap API References section content in a grid div. + * Sätteri HAST plugin: wrap API References section content in a grid nav. * * Markdown `## API References` headings are followed by components * and wrappers separated by
tags. Blank lines between * items create multiple

elements, so a plain CSS `h2 + p` selector only * catches the first paragraph. * - * This plugin walks the HAST, finds every

whose text is "API References", - * collects all following siblings up to the next heading, strips
nodes and blank text nodes, - * and wraps the collected nodes in: - *
…
+ * This plugin finds every

whose text is "API References", collects all + * following siblings up to the next heading, strips
nodes and blank text + * nodes, and wraps the collected nodes in: + * + * + * The collected nodes are copied into the wrapper (see `detach`) and the + * originals removed, which carries MDX components across intact. */ -import { visit, SKIP } from 'unist-util-visit'; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type HastNode = any; +import { defineHastPlugin } from 'satteri'; +import type { HastNode } from 'satteri'; +import type { ElementContent } from 'hast'; /** True if the node is a heading (h1–h6). */ function isHeading(node: HastNode): boolean { return node.type === 'element' && /^h[1-6]$/.test(node.tagName); } -/** True if the node is an

whose text content equals "API References". */ -function isApiReferencesHeading(node: HastNode): boolean { - if (node.type !== 'element' || node.tagName !== 'h2') return false; - const text = extractText(node).trim(); - return text === 'API References'; -} - -/** Recursively extract all text from a node. */ -function extractText(node: HastNode): string { - if (node.type === 'text') return node.value; - if (node.children) return node.children.map(extractText).join(''); - return ''; -} - /** True if the node is an empty or whitespace-only text node. */ function isBlankText(node: HastNode): boolean { return node.type === 'text' && node.value.trim() === ''; @@ -47,70 +35,71 @@ function isBr(node: HastNode): boolean { ((node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') && node.name === 'br'); } -/** Strip blank text nodes and
elements from a node list. */ -function stripBlanks(nodes: HastNode[]): HastNode[] { - return nodes.filter((n) => !isBlankText(n) && !isBr(n)); +/** + * Recursively copy a node into a plain, id-free object. + * + * Sätteri encodes a node that still carries its arena id as a *ref*, which + * copies the subtree but leaves the original in place — and removing that + * original then invalidates the ref, deleting the copy too. Spreading drops the + * non-enumerable id (the materializers' convention), so the result is rebuilt + * as fresh content and the original can safely be removed. + */ +function detach(node: T): T { + const copy = { ...node } as T & { children?: HastNode[] }; + const children = childrenOf(node); + if (children) copy.children = children.map(detach); + return copy; } -export function rehypeApiReferencesGrid() { - return (tree: HastNode) => { - // Process any container node (root or element) whose children may include headings. - // The `root` node holds top-level siblings — that's where ## API References and the - // following blocks live, so we must include it in the visitor. - visit(tree, (node: HastNode) => node.type === 'root' || (node.type === 'element' && !!node.children), (node: HastNode) => { - - const children: HastNode[] = node.children; - let i = 0; - - while (i < children.length) { - const child = children[i]; - - if (isApiReferencesHeading(child)) { - // Collect all siblings after the heading until the next heading - const start = i + 1; - let end = start; - - while (end < children.length && !isHeading(children[end])) { - end++; - } - - const contentNodes = children.slice(start, end); - - // Flatten: unwrap

elements so their children become direct grid items - const flatNodes: HastNode[] = []; - for (const n of contentNodes) { - if (n.type === 'element' && n.tagName === 'p') { - flatNodes.push(...(n.children ?? [])); - } else { - flatNodes.push(n); - } - } - - const gridItems = stripBlanks(flatNodes); +/** Children of a node, or `undefined` for the leaf types that have none. */ +function childrenOf(node: HastNode): HastNode[] | undefined { + const children = (node as { children?: HastNode[] }).children; + return Array.isArray(children) ? children : undefined; +} - if (gridItems.length === 0) { - i++; - continue; +export function rehypeApiReferencesGrid() { + return defineHastPlugin({ + name: 'api-references-grid', + element: { + filter: ['h2'], + visit(node, ctx) { + if (ctx.textContent(node).trim() !== 'API References') return; + + const parent = ctx.parent(node); + const index = ctx.indexOf(node); + if (!parent || index === undefined) return; + + // Collect all siblings after the heading until the next heading. + const siblings = parent.children as HastNode[]; + let end = index + 1; + while (end < siblings.length && !isHeading(siblings[end])) end++; + + const contentNodes = siblings.slice(index + 1, end); + if (contentNodes.length === 0) return; + + // Flatten: unwrap

elements so their children become direct grid items. + const flatNodes: HastNode[] = []; + for (const n of contentNodes) { + if (n.type === 'element' && n.tagName === 'p') { + flatNodes.push(...(childrenOf(n) ?? [])); + } else { + flatNodes.push(n); } - - // Build the wrapper nav - const gridDiv: HastNode = { - type: 'element', - tagName: 'nav', - properties: { className: ['idg-api-references'] }, - children: gridItems, - }; - - // Replace the original siblings with the wrapper - children.splice(start, end - start, gridDiv); - - // Skip past the newly inserted wrapper - i = start + 1; - return SKIP; } - i++; - } - }); - }; + const gridItems = flatNodes.filter((n) => !isBlankText(n) && !isBr(n)); + if (gridItems.length === 0) return; + + ctx.insertAfter(node, { + type: 'element', + tagName: 'nav', + properties: { className: ['idg-api-references'] }, + children: gridItems.map(detach) as ElementContent[], + }); + + // The nav holds detached copies, so every original is removed. + for (const n of contentNodes) ctx.removeNode(n); + }, + }, + }); } diff --git a/src/plugins/rehype-strip-empty-paragraphs.ts b/src/plugins/rehype-strip-empty-paragraphs.ts index 0e5bfc73f0..08194027ab 100644 --- a/src/plugins/rehype-strip-empty-paragraphs.ts +++ b/src/plugins/rehype-strip-empty-paragraphs.ts @@ -1,8 +1,8 @@ /** - * Rehype plugin: strip empty <p> tags. + * Sätteri HAST plugin: strip empty <p> tags. * - * Remark inserts empty paragraph nodes for the whitespace/newlines that appear - * between sibling HTML elements inside custom elements such as + * The Markdown parser inserts empty paragraph nodes for the whitespace/newlines + * that appear between sibling HTML elements inside custom elements such as * ``. For example: * * @@ -14,30 +14,26 @@ * consist solely of whitespace text nodes. */ -import { visit, CONTINUE } from 'unist-util-visit'; +import { defineHastPlugin } from 'satteri'; +import type { Element } from 'hast'; /** Returns true when a `

` node has no meaningful content. */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function isEmptyParagraph(node: any): boolean { +function isEmptyParagraph(node: Readonly): boolean { if (!node.children || node.children.length === 0) return true; return node.children.every( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (child: any) => child.type === 'text' && child.value.trim() === '' + (child) => child.type === 'text' && child.value.trim() === '' ); } -/** Rehype plugin that removes empty `

` elements from the tree. */ +/** Sätteri HAST plugin that removes empty `

` elements from the tree. */ export function rehypeStripEmptyParagraphs() { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return (tree: any) => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - visit(tree, 'element', (node: any, index: number | undefined, parent: any) => { - if (node.tagName !== 'p' || !parent || index == null) return; - if (isEmptyParagraph(node)) { - parent.children.splice(index, 1); - // Return the same index so the visitor re-checks this position - return [CONTINUE, index]; - } - }); - }; + return defineHastPlugin({ + name: 'strip-empty-paragraphs', + element: { + filter: ['p'], + visit(node, ctx) { + if (isEmptyParagraph(node)) ctx.removeNode(node); + }, + }, + }); } diff --git a/src/plugins/remark-env-vars.ts b/src/plugins/remark-env-vars.ts index 1ea9838e6e..0d22f84f0e 100644 --- a/src/plugins/remark-env-vars.ts +++ b/src/plugins/remark-env-vars.ts @@ -14,7 +14,7 @@ * DOCS_ENV (or NODE_ENV) selects the env block: development | staging | production. */ -import { visit } from 'unist-util-visit'; +import { defineMdastPlugin } from 'satteri'; import fs from 'node:fs'; import path from 'node:path'; @@ -87,24 +87,30 @@ export function replaceEnvVars(str: string): string { return str.replace(ENV_PATTERN, (_match, key) => env[key] ?? `{environment:${key}}`); } -/** Remark plugin that substitutes `{environment:key}` tokens in the markdown AST. */ +/** + * Sätteri MDAST plugin that substitutes `{environment:key}` tokens. + * + * Exported as a factory so Sätteri calls it once per compile; the + * `loadEnv()` cache is module-level and intentionally shared across documents. + */ export function remarkEnvVars() { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return (tree: any) => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - visit(tree, (node: any) => { - if (node.type === 'text' && node.value) { - node.value = replaceEnvVars(node.value); - } - if (node.type === 'link' && node.url) { - node.url = replaceEnvVars(node.url); - } - if (node.type === 'image' && node.url) { - node.url = replaceEnvVars(node.url); - } - if (node.type === 'html' && node.value) { - node.value = replaceEnvVars(node.value); - } - }); - }; + return defineMdastPlugin({ + name: 'env-vars', + text(node, ctx) { + const value = replaceEnvVars(node.value); + if (value !== node.value) ctx.setProperty(node, 'value', value); + }, + html(node, ctx) { + const value = replaceEnvVars(node.value); + if (value !== node.value) ctx.setProperty(node, 'value', value); + }, + link(node, ctx) { + const url = replaceEnvVars(node.url); + if (url !== node.url) ctx.setProperty(node, 'url', url); + }, + image(node, ctx) { + const url = replaceEnvVars(node.url); + if (url !== node.url) ctx.setProperty(node, 'url', url); + }, + }); } diff --git a/src/plugins/remark-html-transforms.ts b/src/plugins/remark-html-transforms.ts index beb3a5fe2f..a552075c8b 100644 --- a/src/plugins/remark-html-transforms.ts +++ b/src/plugins/remark-html-transforms.ts @@ -1,30 +1,32 @@ /** - * Remark plugin: inline HTML transforms. + * Sätteri MDAST plugin: inline HTML transforms. * * Handles legacy HTML patterns in markdown content: * - Rewrites relative `../images/` sources to root-relative paths * - Normalizes code block language identifiers to lowercase */ -import { visit } from 'unist-util-visit'; +import { defineMdastPlugin } from 'satteri'; const IMG_SRC_PATTERN = /src="(\.\.\/)+images\//g; -/** Remark plugin that transforms legacy HTML patterns in the AST. */ +/** Sätteri MDAST plugin that transforms legacy HTML patterns in the AST. */ export function remarkHtmlTransforms() { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return (tree: any) => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - visit(tree, (node: any) => { - // Inline HTML: relative img src → root-relative - if (node.type === 'html' && node.value) { - node.value = (node.value as string).replace(IMG_SRC_PATTERN, 'src="/images/'); - } + return defineMdastPlugin({ + name: 'html-transforms', - // Code blocks: normalize language to lowercase - if (node.type === 'code' && node.lang) { - node.lang = (node.lang as string).toLowerCase(); - } - }); - }; + // Inline HTML: relative img src → root-relative + html(node, ctx) { + if (!node.value) return; + const value = node.value.replace(IMG_SRC_PATTERN, 'src="/images/'); + if (value !== node.value) ctx.setProperty(node, 'value', value); + }, + + // Code blocks: normalize language to lowercase + code(node, ctx) { + if (!node.lang) return; + const lang = node.lang.toLowerCase(); + if (lang !== node.lang) ctx.setProperty(node, 'lang', lang); + }, + }); } diff --git a/src/plugins/remark-md-links.ts b/src/plugins/remark-md-links.ts index 1320a7f783..dda730217c 100644 --- a/src/plugins/remark-md-links.ts +++ b/src/plugins/remark-md-links.ts @@ -17,8 +17,9 @@ * Non-relative links (http/https, /, #, mailto:) and links without .mdx are left unchanged. */ -import { visit } from 'unist-util-visit'; +import { defineMdastPlugin } from 'satteri'; import path from 'node:path'; +import { fileURLToPath } from 'node:url'; /** * Resolve a relative .mdx link to an absolute Astro URL. @@ -52,37 +53,48 @@ function rewriteMdLink(url: string, filePath: string, docsDir: string): string { return docsBase + '/' + slug.toLowerCase() + trail + suffix; } -/** Remark plugin that rewrites relative .mdx links, prepends DOCS_BASE, and fixes relative image paths. */ +/** Resolve the source file path and docs root for the document being compiled. */ +function resolvePaths(fileURL: URL | undefined): { filePath: string; docsDir: string } { + const filePath = fileURL ? fileURLToPath(fileURL) : ''; + const docsDir = process.env.DOCS_SOURCE_PATH + ? path.resolve(process.env.DOCS_SOURCE_PATH) + : (filePath ? path.dirname(filePath) : ''); + return { filePath, docsDir }; +} + +/** + * Sätteri MDAST plugin that rewrites relative .mdx links, prepends DOCS_BASE, + * and fixes relative image paths. + */ export function remarkMdLinks() { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return (tree: any, file: any) => { - const filePath = (file.path as string) ?? ''; - const docsDir = process.env.DOCS_SOURCE_PATH - ? path.resolve(process.env.DOCS_SOURCE_PATH) - : (filePath ? path.dirname(filePath) : ''); + return defineMdastPlugin({ + name: 'md-links', - // eslint-disable-next-line @typescript-eslint/no-explicit-any - visit(tree, (node: any) => { - if (node.type === 'link' && node.url) { - node.url = rewriteMdLink(node.url as string, filePath, docsDir); + link(node, ctx) { + if (!node.url) return; + const { filePath, docsDir } = resolvePaths(ctx.fileURL); + let url = rewriteMdLink(node.url, filePath, docsDir); - // Prepend DOCS_BASE to root-relative internal links not already prefixed. - const docsBase = (process.env.DOCS_BASE ?? '').replace(/\/$/, ''); - if ( - docsBase && - (node.url as string).startsWith('/') && - !(node.url as string).startsWith('//') && - !(node.url as string).startsWith(docsBase + '/') - ) { - node.url = docsBase + (node.url as string); - } + // Prepend DOCS_BASE to root-relative internal links not already prefixed. + const docsBase = (process.env.DOCS_BASE ?? '').replace(/\/$/, ''); + if ( + docsBase && + url.startsWith('/') && + !url.startsWith('//') && + !url.startsWith(docsBase + '/') + ) { + url = docsBase + url; } - // Rewrite relative `../images/` paths in markdown image nodes to root-relative `/images/`. - // Generated MDX files may contain relative image references that Vite cannot resolve. - if (node.type === 'image' && node.url) { - node.url = (node.url as string).replace(/^(\.\.\/)+images\//, '/images/'); - } - }); - }; + if (url !== node.url) ctx.setProperty(node, 'url', url); + }, + + // Rewrite relative `../images/` paths in markdown image nodes to root-relative `/images/`. + // Generated MDX files may contain relative image references that Vite cannot resolve. + image(node, ctx) { + if (!node.url) return; + const url = node.url.replace(/^(\.\.\/)+images\//, '/images/'); + if (url !== node.url) ctx.setProperty(node, 'url', url); + }, + }); } From 23d42b04c34b5b3dd4fe31fcb5316bc52197e059 Mon Sep 17 00:00:00 2001 From: norikois <33947244+norikois@users.noreply.github.com> Date: Wed, 26 Aug 2026 16:13:12 +0900 Subject: [PATCH 37/38] docs(jp): update alt text for Angular Overlay example to improve clarity --- docs/angular/src/content/jp/components/overlay.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/angular/src/content/jp/components/overlay.mdx b/docs/angular/src/content/jp/components/overlay.mdx index b4a97e0482..89661d4972 100644 --- a/docs/angular/src/content/jp/components/overlay.mdx +++ b/docs/angular/src/content/jp/components/overlay.mdx @@ -22,7 +22,7 @@ import ApiLink from 'igniteui-astro-components/components/mdx/ApiLink.astro'; ## Angular Overlay の例 - +


From 1a8e3f09e3764ea2cd64acfd785a4641dd87deff Mon Sep 17 00:00:00 2001 From: norikois <33947244+norikois@users.noreply.github.com> Date: Wed, 26 Aug 2026 16:30:03 +0900 Subject: [PATCH 38/38] docs(jp): correct spelling in overlay service documentation and emphasize default display settings --- docs/angular/src/content/jp/components/overlay.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/angular/src/content/jp/components/overlay.mdx b/docs/angular/src/content/jp/components/overlay.mdx index 89661d4972..a8ec201725 100644 --- a/docs/angular/src/content/jp/components/overlay.mdx +++ b/docs/angular/src/content/jp/components/overlay.mdx @@ -220,7 +220,7 @@ const connectedOverlaySettings = IgxOverlayService.createRelativeOverlaySettings ```typescript // my-overlay-component.component.ts -// add an import for the definion of ConnectedPositioningStrategy class +// add an import for the definition of ConnectedPositioningStrategy class import { ConnectedPositioningStrategy } from 'igniteui-angular/core'; // import { ConnectedPositioningStrategy } from '@infragistics/igniteui-angular'; for licensed package @@ -278,7 +278,7 @@ export class MyOverlayComponent implements OnDestroy {
- が指定されていない場合、切り替えた要素はデフォルト表示設定を使用します。 + が**指定されていない**場合、切り替えた要素は**デフォルト表示設定**を使用します。 ```typescript defaultOverlaySettings = {