diff --git a/docs/angular/injection-tokens.md b/docs/angular/injection-tokens.md new file mode 100644 index 00000000000..c7c775fd69c --- /dev/null +++ b/docs/angular/injection-tokens.md @@ -0,0 +1,177 @@ +--- +title: Angular Injection Tokens +sidebar_label: Injection Tokens +--- + + + Angular Injection Tokens | Access Ionic Elements via Dependency Injection + + + +Ionic provides Angular injection tokens that allow you to access Ionic elements through Angular's dependency injection system. This provides a more Angular-idiomatic way to interact with Ionic components programmatically. + +## Benefits + +Using injection tokens provides several advantages: + +- **Type Safety**: Full TypeScript support with proper typing for the modal element +- **Angular Integration**: Works seamlessly with Angular's dependency injection system +- **Simplified Code**: Eliminates the need for `ViewChild` queries or manual element references +- **Better Testing**: Easier to mock and test components that use injection tokens + +## IonModalToken + +The `IonModalToken` injection token allows you to inject a reference to the current modal element directly into your Angular components. This is particularly useful when you need to programmatically control modal behavior, listen to modal events, or access modal properties. + +Starting in `@ionic/angular` v8.7.0, you can use this injection token to streamline modal interactions in your Angular applications. + +### Basic Usage + +To use the `IonModalToken`, inject it into your component's constructor: + +```tsx +import { Component, inject } from '@angular/core'; +import { IonButton, IonContent, IonHeader, IonModalToken, IonTitle, IonToolbar } from '@ionic/angular/standalone'; + +@Component({ + selector: 'app-modal', + template: ` + + + Modal Content + + + +

This is modal content

+ Close Modal +
+ `, + imports: [IonHeader, IonToolbar, IonTitle, IonContent, IonButton], +}) +export class ModalComponent { + private modalToken = inject(IonModalToken); + + closeModal() { + this.modalToken.dismiss(); + } +} +``` + +### Listening to Modal Events + +You can use the injected modal reference to listen to modal lifecycle events: + +```tsx +import { Component, inject, OnInit } from '@angular/core'; +import { IonButton, IonContent, IonHeader, IonModalToken, IonTitle, IonToolbar } from '@ionic/angular/standalone'; + +@Component({ + selector: 'app-modal', + template: ` + + + Modal with Events + + + +

Check the console for modal events

+ Close +
+ `, + imports: [IonHeader, IonToolbar, IonTitle, IonContent, IonButton], +}) +export class ModalComponent implements OnInit { + private modalToken = inject(IonModalToken); + + ngOnInit() { + this.modalToken.addEventListener('ionModalWillDismiss', (event) => { + console.log('Modal will dismiss:', event.detail); + }); + + this.modalToken.addEventListener('ionModalDidDismiss', (event) => { + console.log('Modal did dismiss:', event.detail); + }); + } + + closeModal() { + this.modalToken.dismiss({ result: 'closed by button' }); + } +} +``` + +### Accessing Modal Properties + +The injected modal reference provides access to all modal properties and methods: + +```tsx +import { Component, inject, OnInit } from '@angular/core'; +import { IonButton, IonContent, IonHeader, IonModalToken, IonTitle, IonToolbar } from '@ionic/angular/standalone'; + +@Component({ + selector: 'app-modal', + template: ` + + + Modal Properties + + + +

Modal ID: {{ modalId }}

+ Toggle Backdrop Dismiss: {{ backdropDismiss }} +
+ `, + imports: [IonHeader, IonToolbar, IonTitle, IonContent, IonButton], +}) +export class ModalComponent implements OnInit { + private modalToken = inject(IonModalToken); + + modalId = ''; + backdropDismiss = true; + + ngOnInit() { + this.modalId = this.modalToken.id || 'No ID'; + this.backdropDismiss = this.modalToken.backdropDismiss; + } + + toggleBackdropDismiss() { + this.backdropDismiss = !this.backdropDismiss; + this.modalToken.backdropDismiss = this.backdropDismiss; + } +} +``` + +### Opening a Modal with Injection Token Content + +When opening a modal that uses the injection token, you can pass the component directly to the modal controller: + +```tsx +import { Component, inject } from '@angular/core'; +import { IonContent, IonButton, ModalController } from '@ionic/angular/standalone'; +import { ModalComponent } from './modal.component'; + +@Component({ + selector: 'app-home', + template: ` + + Open Modal + + `, +}) +export class HomePage { + private modalController = inject(ModalController); + + async openModal() { + const myModal = await this.modalController.create({ + component: ModalComponent, + componentProps: { + // Any props you want to pass to the modal content + }, + }); + + await myModal.present(); + } +} +``` diff --git a/docs/api/checkbox.md b/docs/api/checkbox.md index a7b733f201d..ddc9331f50e 100644 --- a/docs/api/checkbox.md +++ b/docs/api/checkbox.md @@ -65,7 +65,7 @@ import Justify from '@site/static/usage/v8/checkbox/justify/index.md'; import Indeterminate from '@site/static/usage/v8/checkbox/indeterminate/index.md'; - + ## Links inside of Labels Checkbox labels can sometimes be accompanied with links. These links can provide more information related to the checkbox. However, clicking the link should not check the checkbox. To achieve this, we can use [stopPropagation](https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation) to prevent the click event from bubbling. When using this approach, the rest of the label still remains clickable. @@ -114,30 +114,6 @@ interface CheckboxCustomEvent extends CustomEvent { } ``` -## Migrating from Legacy Checkbox Syntax - -A simpler checkbox syntax was introduced in Ionic 7.0. This new syntax reduces the boilerplate required to setup a checkbox, resolves accessibility issues, and improves the developer experience. - -Developers can perform this migration one checkbox at a time. While developers can continue using the legacy syntax, we recommend migrating as soon as possible. - -### Using the Modern Syntax - -Using the modern syntax involves removing the `ion-label` and passing the label directly inside of `ion-checkbox`. The placement of the label can be configured using the `labelPlacement` property on `ion-checkbox`. The way the label and the control are packed on a line can be controlled using the `justify` property on `ion-checkbox`. - -import Migration from '@site/static/usage/v8/checkbox/migration/index.md'; - - - - -:::note -In past versions of Ionic, `ion-item` was required for `ion-checkbox` to function properly. Starting in Ionic 7.0, `ion-checkbox` should only be used in an `ion-item` when the item is placed in an `ion-list`. Additionally, `ion-item` is no longer required for `ion-checkbox` to function properly. -::: - -### Using the Legacy Syntax - -Ionic uses heuristics to detect if an app is using the modern checkbox syntax. In some instances, it may be preferable to continue using the legacy syntax. Developers can set the `legacy` property on `ion-checkbox` to `true` to force that instance of the checkbox to use the legacy syntax. - - ## Properties diff --git a/docs/api/input.md b/docs/api/input.md index 78059609d8e..18d71de4eb8 100644 --- a/docs/api/input.md +++ b/docs/api/input.md @@ -188,28 +188,6 @@ import CSSProps from '@site/static/usage/v8/input/theming/css-properties/index.m -## Migrating from Legacy Input Syntax - -A simpler input syntax was introduced in Ionic 7.0. This new syntax reduces the boilerplate required to setup an input, resolves accessibility issues, and improves the developer experience. - -Developers can perform this migration one input at a time. While developers can continue using the legacy syntax, we recommend migrating as soon as possible. - -### Using the Modern Syntax - -Using the modern syntax involves three steps: - -1. Remove `ion-label` and use the `label` property on `ion-input` instead. The placement of the label can be configured using the `labelPlacement` property on `ion-input`. -2. Move input-specific properties from `ion-item` on to `ion-input`. This includes the `counter`, `counterFormatter`, `fill`, and `shape` properties. -3. Remove usages of the `helper` and `error` slots on `ion-item` and use the `helperText` and `errorText` properties on `ion-input` instead. - -import Migration from '@site/static/usage/v8/input/migration/index.md'; - - - -### Using the Legacy Syntax - -Ionic uses heuristics to detect if an app is using the modern input syntax. In some instances, it may be preferable to continue using the legacy syntax. Developers can set the `legacy` property on `ion-input` to `true` to force that instance of the input to use the legacy syntax. - ## Interfaces ### InputChangeEventDetail diff --git a/docs/api/radio.md b/docs/api/radio.md index fb717c14835..62a86923dda 100644 --- a/docs/api/radio.md +++ b/docs/api/radio.md @@ -36,6 +36,14 @@ import LabelPlacement from '@site/static/usage/v8/radio/label-placement/index.md +## Label Wrapping + +Regardless of label placement, long text will not wrap by default. If the width of the radio is constrained, overflowing text will be truncated with an ellipsis. You can enable text wrapping by adding the `ion-text-wrap` class to a wrapper around the radio text or styling the `label` shadow part using the `::part()` selector. + +import LabelWrap from '@site/static/usage/v8/radio/label-wrap/index.md'; + + + ## Object Value References By default, the radio group uses strict equality (`===`) to determine if an option is selected. This can be overridden by providing a property name or a function to the `compareWith` property. @@ -107,31 +115,6 @@ import CSSParts from '@site/static/usage/v8/radio/theming/css-shadow-parts/index -## Migrating from Legacy Radio Syntax - -A simpler radio syntax was introduced in Ionic 7.0. This new syntax reduces the boilerplate required to setup an radio, resolves accessibility issues, and improves the developer experience. - -Developers can perform this migration one radio at a time. While developers can continue using the legacy syntax, we recommend migrating as soon as possible. - -### Using the Modern Syntax - -Using the modern syntax involves removing the `ion-label` and passing the label directly inside of `ion-radio`. The placement of the label can be configured using the `labelPlacement` property on `ion-radio`. The way the label and the control are packed on a line can be controlled using the `justify` property on `ion-radio`. - -import Migration from '@site/static/usage/v8/radio/migration/index.md'; - - - - -:::note -In past versions of Ionic, `ion-item` was required for `ion-radio` to function properly. Starting in Ionic 7.0, `ion-radio` should only be used in an `ion-item` when the item is placed in an `ion-list`. Additionally, `ion-item` is no longer required for `ion-radio` to function properly. -::: - -### Using the Legacy Syntax - -Ionic uses heuristics to detect if an app is using the modern radio syntax. In some instances, it may be preferable to continue using the legacy syntax. Developers can set the `legacy` property on `ion-radio` to `true` to force that instance of the radio to use the legacy syntax. - - - ## Properties diff --git a/docs/api/range.md b/docs/api/range.md index 838b981be05..fdb042bb3e9 100644 --- a/docs/api/range.md +++ b/docs/api/range.md @@ -128,32 +128,6 @@ import CSSParts from '@site/static/usage/v8/range/theming/css-shadow-parts/index -## Migrating from Legacy Range Syntax - -A simpler range syntax was introduced in Ionic 7.0. This new syntax reduces the boilerplate required to setup an range, resolves accessibility issues, and improves the developer experience. - -Developers can perform this migration one range at a time. While developers can continue using the legacy syntax, we recommend migrating as soon as possible. - -### Using the Modern Syntax - -Using the modern syntax involves removing the `ion-label` and passing the label to `ion-range` using the `label` property. The placement of the label can be configured using the `labelPlacement` property. - -If custom HTML is needed for the label, it can be passed directly inside the `ion-range` using the `label` slot instead. - -import Migration from '@site/static/usage/v8/range/migration/index.md'; - - - - -:::note -In past versions of Ionic, `ion-item` was required for `ion-range` to function properly. Starting in Ionic 7.0, `ion-range` should only be used in an `ion-item` when the item is placed in an `ion-list`. Additionally, `ion-item` is no longer required for `ion-range` to function properly. -::: - -### Using the Legacy Syntax - -Ionic uses heuristics to detect if an app is using the modern range syntax. In some instances, it may be preferable to continue using the legacy syntax. Developers can set the `legacy` property on `ion-range` to `true` to force that instance of the range to use the legacy syntax. - - ## Interfaces ### RangeChangeEventDetail diff --git a/docs/api/reorder-group.md b/docs/api/reorder-group.md index c3c6c4e9508..2d1d7f73fd3 100644 --- a/docs/api/reorder-group.md +++ b/docs/api/reorder-group.md @@ -16,27 +16,71 @@ import Slots from '@ionic-internal/component-api/v8/reorder-group/slots.md'; import EncapsulationPill from '@components/page/api/EncapsulationPill'; -The reorder group is a container for items using the [reorder](./reorder) component. When the user drags an item and drops it in a new position, the `ionItemReorder` event is dispatched. A handler for this event should be implemented that calls the `complete` method. +The reorder group is a container for items using the [reorder](./reorder) component. When the user drags an item and drops it, the `ionReorderEnd` event is dispatched. A handler for this event should be implemented that calls the `complete` method. -The `detail` property of the `ionItemReorder` event includes all of the relevant information about the reorder operation, including the `from` and `to` indexes. In the context of reordering, an item moves `from` an index `to` a new index. For example usage of the reorder group, see the [reorder](./reorder) documentation. +The `detail` property of the `ionReorderEnd` event includes all of the relevant information about the reorder operation, including the `from` and `to` indexes. In the context of reordering, an item moves `from` an index `to` an index. For example usage of the reorder group, see the [reorder](./reorder) documentation. ## Interfaces -### ItemReorderEventDetail +### ReorderMoveEventDetail ```typescript -interface ItemReorderEventDetail { +interface ReorderMoveEventDetail { + from: number; + to: number; +} +``` + +### ReorderEndEventDetail + +```typescript +interface ReorderEndEventDetail { from: number; to: number; complete: (data?: boolean | any[]) => any; } ``` -### ItemReorderCustomEvent +### ReorderMoveCustomEvent + +While not required, this interface can be used in place of the `CustomEvent` interface for stronger typing with Ionic events emitted from this component. + +```typescript +interface ReorderMoveCustomEvent extends CustomEvent { + detail: ReorderMoveEventDetail; + target: HTMLIonReorderGroupElement; +} + +``` + +### ReorderEndCustomEvent While not required, this interface can be used in place of the `CustomEvent` interface for stronger typing with Ionic events emitted from this component. +```typescript +interface ReorderEndCustomEvent extends CustomEvent { + detail: ReorderEndEventDetail; + target: HTMLIonReorderGroupElement; +} +``` + +### ItemReorderEventDetail (deprecated) + +**_Deprecated_** — Use the `ionReorderEnd` event with `ReorderEndEventDetail` instead. + +```typescript +interface ItemReorderEventDetail { + from: number; + to: number; + complete: (data?: boolean | any[]) => any; +} +``` + +### ItemReorderCustomEvent (deprecated) + +**_Deprecated_** — Use the `ionReorderEnd` event with `ReorderEndCustomEvent` instead. + ```typescript interface ItemReorderCustomEvent extends CustomEvent { detail: ItemReorderEventDetail; diff --git a/docs/api/reorder.md b/docs/api/reorder.md index ad07a4290ea..5f771c9badf 100644 --- a/docs/api/reorder.md +++ b/docs/api/reorder.md @@ -20,7 +20,7 @@ import EncapsulationPill from '@components/page/api/EncapsulationPill'; Reorder is a component that allows an item to be dragged to change its order within a group of items. It must be used within a [reorder group](./reorder-group) to provide a visual drag and drop interface. -The reorder is the anchor used to drag and drop the items. Once the reorder is complete, the `ionItemReorder` event will be dispatched from the reorder group and the `complete` method needs to be called. +The reorder is the anchor used to drag and drop the items. Once the reorder is complete, the `ionReorderEnd` event will be dispatched from the reorder group and the `complete` method needs to be called. ## Basic Usage @@ -73,6 +73,29 @@ import UpdatingData from '@site/static/usage/v8/reorder/updating-data/index.md'; +## Event Handling + +### Using `ionReorderStart` and `ionReorderEnd` + +The `ionReorderStart` event is emitted when the user begins a reorder gesture. This event fires when the user taps and holds an item, before any movement occurs. This is useful for preparing the UI for the reorder operation, such as hiding certain elements or updating the visual state of items. For example, icons in list items can be hidden while they are being dragged and shown again when the reorder is complete. + +The `ionReorderEnd` event is emitted when the user completes the reorder gesture. This occurs when the user releases the item they are dragging, for example by lifting their finger on a touch screen or releasing the mouse button. The event includes the `from` and `to` indices of the item, as well as the `complete` method that should be called to finalize the reorder operation. The `from` index will always be the position of the item when the gesture started, while the `to` index will be its final position. This event will fire even if no items have changed position, in which case the `from` and `to` indices will be the same. + +import ReorderStartEndEvents from '@site/static/usage/v8/reorder/reorder-start-end-events/index.md'; + + + +### Using `ionReorderMove` + +The `ionReorderMove` event is emitted continuously during the reorder gesture as the user drags an item. The event includes the `from` and `to` indices of the item. Unlike `ionReorderEnd`, the `from` index in this event represents the last known position of the item (which updates as the item moves), while the `to` index represents its current position. If the item has not changed position since the last event, the `from` and `to` indices will be the same. This event is useful for tracking position changes during the drag operation. For example, the ranking or numbering of items can be updated in real-time as they are being dragged to maintain a logical ascending order. + +:::warning +Do not call the `complete` method during the `ionReorderMove` event as it can break the gesture. +::: + +import ReorderMoveEvent from '@site/static/usage/v8/reorder/reorder-move-event/index.md'; + + ## Usage with Virtual Scroll diff --git a/docs/api/select.md b/docs/api/select.md index 0642c6e701d..2ee43b4751e 100644 --- a/docs/api/select.md +++ b/docs/api/select.md @@ -284,28 +284,6 @@ interface SelectCustomEvent extends CustomEvent { } ``` -## Migrating from Legacy Select Syntax - -A simpler select syntax was introduced in Ionic 7.0. This new syntax reduces the boilerplate required to setup an select, resolves accessibility issues, and improves the developer experience. - -Developers can perform this migration one select at a time. While developers can continue using the legacy syntax, we recommend migrating as soon as possible. - - -### Using the Modern Syntax - -Using the modern syntax involves two steps: - -1. Remove `ion-label` and use the `label` property on `ion-select` instead. The placement of the label can be configured using the `labelPlacement` property on `ion-select`. -2. Move any usage of `fill` and `shape` from `ion-item` on to `ion-select`. - -import Migration from '@site/static/usage/v8/select/migration/index.md'; - - - -### Using the Legacy Syntax - -Ionic uses heuristics to detect if an app is using the modern select syntax. In some instances, it may be preferable to continue using the legacy syntax. Developers can set the `legacy` property on `ion-select` to `true` to force that instance of the input to use the legacy syntax. - ## Accessibility ### Keyboard Interactions diff --git a/docs/api/textarea.md b/docs/api/textarea.md index 5e34e78a72a..feed4b04bee 100644 --- a/docs/api/textarea.md +++ b/docs/api/textarea.md @@ -127,29 +127,6 @@ import StartEndSlots from '@site/static/usage/v8/textarea/start-end-slots/index. -## Migrating from Legacy Textarea Syntax - -A simpler textarea syntax was introduced in Ionic 7.0. This new syntax reduces the boilerplate required to setup an textarea, resolves accessibility issues, and improves the developer experience. - -Developers can perform this migration one textarea at a time. While developers can continue using the legacy syntax, we recommend migrating as soon as possible. - - -### Using the Modern Syntax - -Using the modern syntax involves three steps: - -1. Remove `ion-label` and use the `label` property on `ion-textarea` instead. The placement of the label can be configured using the `labelPlacement` property on `ion-textarea`. -2. Move textarea-specific properties from `ion-item` on to `ion-textarea`. This includes the `counter`, `counterFormatter`, `fill`, and `shape` properties. -3. Remove usages of the `helper` and `error` slots on `ion-item` and use the `helperText` and `errorText` properties on `ion-textarea` instead. - -import Migration from '@site/static/usage/v8/textarea/migration/index.md'; - - - -### Using the Legacy Syntax - -Ionic uses heuristics to detect if an app is using the modern textarea syntax. In some instances, it may be preferable to continue using the legacy syntax. Developers can set the `legacy` property on `ion-textarea` to `true` to force that instance of the textarea to use the legacy syntax. - ## Theming import ThemingPlayground from '@site/static/usage/v8/textarea/theming/index.md'; diff --git a/docs/api/toggle.md b/docs/api/toggle.md index c0b7445b2ac..ad2ebe3554e 100644 --- a/docs/api/toggle.md +++ b/docs/api/toggle.md @@ -107,29 +107,6 @@ import CSSParts from '@site/static/usage/v8/toggle/theming/css-shadow-parts/inde -## Migrating from Legacy Toggle Syntax - -A simpler toggle syntax was introduced in Ionic 7.0. This new syntax reduces the boilerplate required to setup an toggle, resolves accessibility issues, and improves the developer experience. - -While developers can continue using the legacy syntax, we recommend migrating as soon as possible. - -### Using the Modern Syntax - -Using the modern syntax involves removing the `ion-label` and passing the label directly inside of `ion-toggle`. The placement of the label can be configured using the `labelPlacement` property on `ion-toggle`. The way the label and the control are packed on a line can be controlled using the `justify` property on `ion-toggle`. - -import Migration from '@site/static/usage/v8/toggle/migration/index.md'; - - - - -:::note -In past versions of Ionic, `ion-item` was required for `ion-toggle` to function properly. Starting in Ionic 7.0, `ion-toggle` should only be used in an `ion-item` when the item is placed in an `ion-list`. Additionally, `ion-item` is no longer required for `ion-toggle` to function properly. -::: - -### Using the Legacy Syntax - -Ionic uses heuristics to detect if an app is using the modern toggle syntax. In some instances, it may be preferable to continue using the legacy syntax. Developers can set the `legacy` property on `ion-toggle` to `true` to force that instance of the toggle to use the legacy syntax. - ## Interfaces ### ToggleChangeEventDetail diff --git a/docs/layout/css-utilities.md b/docs/layout/css-utilities.md index 29ad62298b4..3bafb37362a 100644 --- a/docs/layout/css-utilities.md +++ b/docs/layout/css-utilities.md @@ -12,13 +12,13 @@ title: CSS Utilities Ionic Framework provides a set of CSS utility classes that can be used on any element in order to modify the text, element placement or adjust the padding and margin. -:::note +:::important If your app was not started using an available Ionic Framework starter, the stylesheets listed in the [optional section of the global stylesheets](global-stylesheets.md#optional) will need to be included in order for these styles to work. ::: ## Text Modification -### Text Alignment +### Text Align ```html @@ -76,7 +76,7 @@ If your app was not started using an available Ionic Framework starter, the styl | `.ion-text-wrap` | `white-space: normal` | Sequences of whitespace are collapsed. Newline characters in the source are handled as other whitespace. Breaks lines as necessary to fill line boxes. | | `.ion-text-nowrap` | `white-space: nowrap` | Collapses whitespace as for `normal`, but suppresses line breaks (text wrapping) within text. | -### Text Transformation +### Text Transform ```html @@ -125,9 +125,9 @@ The table below shows the default behavior, where `{modifier}` is any of the fol ## Element Placement -### Float Elements +### Float -The float CSS property specifies that an element should be placed along the left or right side of its container, where text and inline elements will wrap around it. This way, the element is taken from the normal flow of the web page, though still remaining a part of the flow, contrary to absolute positioning. +The [float](https://developer.mozilla.org/en-US/docs/Web/CSS/float) CSS property specifies that an element should be placed along the left or right side of its container, where text and inline elements will wrap around it. This way, the element is taken from the normal flow of the web page, though still remaining a part of the flow, contrary to absolute positioning. ```html @@ -188,45 +188,59 @@ The table below shows the default behavior, where `{modifier}` is any of the fol ## Element Display -The display CSS property determines if an element should be visible or not. The element will still be in the DOM, but not rendered, if it is hidden. +### Display -```html - - - -
-

hidden

- You can't see me. -
-
- -
-

not-hidden

- You can see me! -
-
-
-
-``` +The [display](https://developer.mozilla.org/en-US/docs/Web/CSS/display) CSS property sets whether an element is treated as a block or inline box and the layout used for its children, such as flow layout, grid or flex. It can also be used to completely hide an element from the layout. + +Ionic provides the following utility classes for `display`: + +| Class | Style Rule | Description | +| --------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `.ion-display-none` | `display: none` | Turns off the display of an element so that it has no effect on layout (the document is rendered as though the element did not exist). | +| `.ion-display-inline` | `display: inline` | The element behaves as an inline element that does not create line breaks before or after itself. | +| `.ion-display-inline-block` | `display: inline-block` | The element behaves as a block element that flows with surrounding content as if it were a single inline box. | +| `.ion-display-block` | `display: block` | The element behaves as a block element, creating line breaks both before and after itself when in the normal flow. | +| `.ion-display-flex` | `display: flex` | The element behaves like a block element and lays out its content according to the flexbox model. | +| `.ion-display-inline-flex` | `display: inline-flex` | The element behaves like an inline element and lays out its content according to the flexbox model. | +| `.ion-display-grid` | `display: grid` | The element behaves like a block element and lays out its content according to the grid model. | +| `.ion-display-inline-grid` | `display: inline-grid` | The element behaves like an inline element and lays out its content according to the grid model. | +| `.ion-display-table` | `display: table` | The element behaves like an HTML `` element. It defines a block-level box. | +| `.ion-display-table-cell` | `display: table-cell` | The element behaves like an HTML `` element. | + +### Responsive Display Classes + +All of the display classes listed above have additional classes to modify the display based on the screen size. Instead of `display-` in each class, use `display-{breakpoint}-` to only use the class on specific screen sizes, where `{breakpoint}` is one of the breakpoint names listed in [Ionic Breakpoints](#ionic-breakpoints). -| Class | Style Rule | Description | -| ----------- | --------------- | --------------------------- | -| `.ion-hide` | `display: none` | The element will be hidden. | +The table below shows the default behavior, where `{modifier}` is any of the following: `none`, `inline`, `inline-block`, `block`, `flex`, `inline-flex`, `grid`, `inline-grid`, `table`, `table-cell`, `table-row`, as they are described above. -### Responsive Display Attributes +| Class | Description | +| ---------------------------- | ------------------------------------------------------------- | +| `.ion-display-{modifier}` | Applies the modifier to the element on all screen sizes. | +| `.ion-display-sm-{modifier}` | Applies the modifier to the element when `min-width: 576px`. | +| `.ion-display-md-{modifier}` | Applies the modifier to the element when `min-width: 768px`. | +| `.ion-display-lg-{modifier}` | Applies the modifier to the element when `min-width: 992px`. | +| `.ion-display-xl-{modifier}` | Applies the modifier to the element when `min-width: 1200px`. | -There are also additional classes to modify the visibility based on the screen size. Instead of just `.ion-hide` for all screen sizes, use `.ion-hide-{breakpoint}-{dir}` to only use the class on specific screen sizes, where `{breakpoint}` is one of the breakpoint names listed in [Ionic Breakpoints](#ionic-breakpoints), and `{dir}` is whether the element should be hidden on all screen sizes above (`up`) or below (`down`) the specified breakpoint. +### Deprecated Classes + +:::warning Deprecation Notice + +The following classes are deprecated and will be removed in the next major release. Use the recommended `.ion-display-*` classes instead. + +::: -| Class | Description | -| -------------------- | ---------------------------------------------------------------------------------------------------- | -| `.ion-hide-sm-{dir}` | Applies the modifier to the element when `min-width: 576px` (`up`) or `max-width: 576px` (`down`). | -| `.ion-hide-md-{dir}` | Applies the modifier to the element when `min-width: 768px` (`up`) or `max-width: 768px` (`down`). | -| `.ion-hide-lg-{dir}` | Applies the modifier to the element when `min-width: 992px` (`up`) or `max-width: 992px` (`down`). | -| `.ion-hide-xl-{dir}` | Applies the modifier to the element when `min-width: 1200px` (`up`) or `max-width: 1200px` (`down`). | +| Class | Description | +| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `.ion-hide` | Applies `display: none` to the element on all screen sizes.
**Deprecated** — Use the `ion-display-none` class instead. | +| `.ion-hide-sm-{dir}` | Applies the modifier to the element when `min-width: 576px` (`up`) or `max-width: 576px` (`down`).
**Deprecated** — Use the `ion-display-sm-{modifier}` classes instead. | +| `.ion-hide-md-{dir}` | Applies the modifier to the element when `min-width: 768px` (`up`) or `max-width: 768px` (`down`).
**Deprecated** — Use the `ion-display-md-{modifier}` classes instead. | +| `.ion-hide-lg-{dir}` | Applies the modifier to the element when `min-width: 992px` (`up`) or `max-width: 992px` (`down`).
**Deprecated** — Use the `ion-display-lg-{modifier}` classes instead. | +| `.ion-hide-xl-{dir}` | Applies the modifier to the element when `min-width: 1200px` (`up`) or `max-width: 1200px` (`down`).
**Deprecated** — Use the `ion-display-xl-{modifier}` classes instead. | ## Content Space -### Element Padding +### Padding The padding class sets the padding area of an element. The padding area is the space between the content of the element and its border. @@ -276,7 +290,7 @@ The default amount of `padding` to be applied is `16px` and is set by the `--ion | `.ion-padding-horizontal` | `padding: 0 16px` | Applies padding to the left and right. | | `.ion-no-padding` | `padding: 0` | Applies no padding to all sides. | -### Element Margin +### Margin The margin area extends the border area with an empty area used to separate the element from its neighbors. @@ -326,146 +340,54 @@ The default amount of `margin` to be applied is `16px` and is set by the `--ion- | `.ion-margin-horizontal` | `margin: 0 16px` | Applies margin to the left and right. | | `.ion-no-margin` | `margin: 0` | Applies no margin to all sides. | -## Flex Properties +## Flex Container Properties + +Flexbox properties are divided into two categories: **container properties** that control the layout of all flex items, and **item properties** that control individual flex items. See [Flex Item Properties](#flex-item-properties) for item-level alignment. -### Flex Container Properties +### Align Items -```html - - - -
1 of 2
-
- -
2 of 2
-
-
+The [align-items](https://developer.mozilla.org/en-US/docs/Web/CSS/align-items) CSS property sets the [align-self](#align-self) value on all direct children as a group. In flexbox, it controls the alignment of items on the cross axis. In grid layout, it controls the alignment of items on the block axis within their grid areas. - - -
1 of 2
-
- -
2 of 2
-
-
+ - - -
1 of 2
-
- -
2 of 2
-
-
+Ionic provides the following utility classes for `align-items`: - - -
1 of 2
-
- -
2 of 2
-
-
+| Class | Style Rule | Description | +| --------------------------- | ------------------------- | ---------------------------------------------------- | +| `.ion-align-items-start` | `align-items: flex-start` | Items are packed toward the start on the cross axis. | +| `.ion-align-items-end` | `align-items: flex-end` | Items are packed toward the end on the cross axis. | +| `.ion-align-items-center` | `align-items: center` | Items are centered along the cross axis. | +| `.ion-align-items-baseline` | `align-items: baseline` | Items are aligned so that their baselines align. | +| `.ion-align-items-stretch` | `align-items: stretch` | Items are stretched to fill the container. | - - -
1 of 2
-
- -
2 of 2
-
-
+### Align Content - - -
1 of 2
-
- -
2 of 2
-
-
-
+The [align-content](https://developer.mozilla.org/en-US/docs/Web/CSS/align-content) CSS property sets the distribution of space between and around content items along a flexbox's cross axis, or a grid or block-level element's block axis. - - - -
1 of 4
-
- -
2 of 4
-
- -
3 of 4
-
- -
4 of 4 # # #
-
-
+This property has no effect on single line flex containers (i.e., ones with `flex-wrap: nowrap`). - - -
1 of 4
-
- -
2 of 4
-
- -
3 of 4
-
- -
4 of 4 # # #
-
-
+ - - -
1 of 4
-
- -
2 of 4
-
- -
3 of 4
-
- -
4 of 4 # # #
-
-
+Ionic provides the following utility classes for `align-content`: - - -
1 of 4
-
- -
2 of 4
-
- -
3 of 4
-
- -
4 of 4 # # #
-
-
+| Class | Style Rule | Description | +| ---------------------------- | ------------------------------ | ---------------------------------------------------------- | +| `.ion-align-content-start` | `align-content: flex-start` | Lines are packed toward the start of the cross axis. | +| `.ion-align-content-end` | `align-content: flex-end` | Lines are packed toward the end of the cross axis. | +| `.ion-align-content-center` | `align-content: center` | Lines are centered along the cross axis. | +| `.ion-align-content-stretch` | `align-content: stretch` | Lines are stretched to fill the container. | +| `.ion-align-content-between` | `align-content: space-between` | Lines are evenly distributed on the cross axis. | +| `.ion-align-content-around` | `align-content: space-around` | Lines are evenly distributed with equal space around them. | - - -
1 of 4
-
- -
2 of 4
-
- -
3 of 4
-
- -
4 of 4 # # #
-
-
-
-``` +### Justify Content + +The [justify-content](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content) CSS property defines how the browser distributes space between and around content items along the main axis of a flex container and the inline axis of grid and multi-column containers. + + + +Ionic provides the following utility classes for `justify-content`: | Class | Style Rule | Description | | ------------------------------ | -------------------------------- | --------------------------------------------------------------------------- | @@ -475,35 +397,77 @@ The default amount of `margin` to be applied is `16px` and is set by the `--ion- | `.ion-justify-content-around` | `justify-content: space-around` | Items are evenly distributed on the main axis with equal space around them. | | `.ion-justify-content-between` | `justify-content: space-between` | Items are evenly distributed on the main axis. | | `.ion-justify-content-evenly` | `justify-content: space-evenly` | Items are distributed so that the spacing between any two items is equal. | -| `.ion-align-items-start` | `align-items: flex-start` | Items are packed toward the start on the cross axis. | -| `.ion-align-items-end` | `align-items: flex-end` | Items are packed toward the end on the cross axis. | -| `.ion-align-items-center` | `align-items: center` | Items are centered along the cross axis. | -| `.ion-align-items-baseline` | `align-items: baseline` | Items are aligned so that their baselines align. | -| `.ion-align-items-stretch` | `align-items: stretch` | Items are stretched to fill the container. | -| `.ion-nowrap` | `flex-wrap: nowrap` | Items will all be on one line. | -| `.ion-wrap` | `flex-wrap: wrap` | Items will wrap onto multiple lines, from top to bottom. | -| `.ion-wrap-reverse` | `flex-wrap: wrap-reverse` | Items will wrap onto multiple lines, from bottom to top. | -### Flex Item Properties +### Flex Direction -```html - - - -
1 of 4
-
- -
2 of 4
-
- -
3 of 4
-
- -
4 of 4 # # #
-
-
-
-``` +The [flex-direction](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-direction) CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed). + + + +Ionic provides the following utility classes for `flex-direction`: + +| Class | Style Rule | Description | +| -------------------------- | -------------------------------- | ----------------------------------------------------------------- | +| `.ion-flex-row` | `flex-direction: row` | Items are placed in the same direction as the text direction. | +| `.ion-flex-row-reverse` | `flex-direction: row-reverse` | Items are placed in the opposite direction as the text direction. | +| `.ion-flex-column` | `flex-direction: column` | Items are placed vertically. | +| `.ion-flex-column-reverse` | `flex-direction: column-reverse` | Items are placed vertically in reverse order. | + +### Flex Wrap + +The [flex-wrap](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap) CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked. + + + +Ionic provides the following utility classes for `flex-wrap`: + +| Class | Style Rule | Description | +| ------------------------ | ------------------------- | -------------------------------------------------------- | +| `.ion-flex-nowrap` | `flex-wrap: nowrap` | Items will all be on one line. | +| `.ion-flex-wrap` | `flex-wrap: wrap` | Items will wrap onto multiple lines, from top to bottom. | +| `.ion-flex-wrap-reverse` | `flex-wrap: wrap-reverse` | Items will wrap onto multiple lines, from bottom to top. | + +### Responsive Flex Container Classes + +All of the flex container classes listed above have additional classes to modify the properties based on the screen size. Instead of the base class name, use `{property}-{breakpoint}-{modifier}` to only use the class on specific screen sizes, where `{breakpoint}` is one of the breakpoint names listed in [Ionic Breakpoints](#ionic-breakpoints). + +The table below shows the default behavior, where `{property}` is one of the following: `justify-content`, `align-content`, `align-items`, `flex`, or `flex-wrap`, and `{modifier}` is the corresponding value as described above. + +| Class | Description | +| ------------------------------- | ------------------------------------------------------------- | +| `.ion-{property}-{modifier}` | Applies the modifier to the element on all screen sizes. | +| `.ion-{property}-sm-{modifier}` | Applies the modifier to the element when `min-width: 576px`. | +| `.ion-{property}-md-{modifier}` | Applies the modifier to the element when `min-width: 768px`. | +| `.ion-{property}-lg-{modifier}` | Applies the modifier to the element when `min-width: 992px`. | +| `.ion-{property}-xl-{modifier}` | Applies the modifier to the element when `min-width: 1200px`. | + +### Deprecated Classes + +:::warning Deprecation Notice + +The following classes are deprecated and will be removed in the next major release. Use the recommended `.ion-flex-*` classes instead. + +::: + +| Class | Description | +| ------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `.ion-nowrap` | Items will all be on one line.
**Deprecated** — Use `.ion-flex-nowrap` instead. | +| `.ion-wrap` | Items will wrap onto multiple lines, from top to bottom.
**Deprecated** — Use `.ion-flex-wrap` instead. | +| `.ion-wrap-reverse` | Items will wrap onto multiple lines, from bottom to top.
**Deprecated** — Use `.ion-flex-wrap-reverse` instead. | + +## Flex Item Properties + +Flex item properties control how individual flex items behave within their flex container. See also: [Flex Container Properties](#flex-container-properties) for container-level alignment. + +### Align Self + +The [align-self](https://developer.mozilla.org/en-US/docs/Web/CSS/align-self) CSS property overrides a grid or flex item's align-items value. In grid, it aligns the item inside the grid area. In flexbox, it aligns the item on the cross axis. + +The property doesn't apply to block-level boxes, or to table cells. If a flexbox item's cross-axis margin is `auto`, then `align-self` is ignored. + + + +Ionic provides the following utility classes for `align-self`: | Class | Style Rule | Description | | -------------------------- | ------------------------ | ---------------------------------------------------------------------- | @@ -514,9 +478,90 @@ The default amount of `margin` to be applied is `16px` and is set by the `--ion- | `.ion-align-self-stretch` | `align-self: stretch` | Item is stretched to fill the container. | | `.ion-align-self-auto` | `align-self: auto` | Item is positioned according to the parent's `align-items` value. | +### Flex + +The [flex](https://developer.mozilla.org/en-US/docs/Web/CSS/flex) CSS property is a shorthand property for `flex-grow`, `flex-shrink` and `flex-basis`. It sets how a flex item will grow or shrink to fit the space available in its flex container. + + + +Ionic provides the following utility classes for `flex`: + +| Class | Style Rule | Description | +| ------------------- | --------------- | ----------------------------------------------------------- | +| `.ion-flex-1` | `flex: 1` | Item grows and shrinks equally with other flex items. | +| `.ion-flex-auto` | `flex: auto` | Item grows and shrinks based on its content size. | +| `.ion-flex-initial` | `flex: initial` | Item shrinks to its minimum content size but does not grow. | +| `.ion-flex-none` | `flex: none` | Item does not grow or shrink. | + +### Flex Grow + +The [flex-grow](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow) CSS property sets the flex grow factor, which specifies how much of the flex container's positive free space, if any, should be assigned to the flex item's main size. + + + +Ionic provides the following utility classes for `flex-grow`: + +| Class | Style Rule | Description | +| ------------------ | -------------- | -------------------------------------------------- | +| `.ion-flex-grow-0` | `flex-grow: 0` | Item does not grow beyond its content size. | +| `.ion-flex-grow-1` | `flex-grow: 1` | Item grows to fill available space proportionally. | + +### Flex Shrink + +The [flex-shrink](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-shrink) CSS property sets the flex shrink factor of a flex item. If the size of all flex items is larger than the flex container, the flex items can shrink to fit according to their `flex-shrink` value. Each flex line's negative free space is distributed between the line's flex items that have a `flex-shrink` value greater than `0`. + + + +Ionic provides the following utility classes for `flex-shrink`: + +| Class | Style Rule | Description | +| -------------------- | ---------------- | -------------------------------------------------------- | +| `.ion-flex-shrink-0` | `flex-shrink: 0` | Item does not shrink below its content size. | +| `.ion-flex-shrink-1` | `flex-shrink: 1` | Item shrinks proportionally when container is too small. | + +### Order + +The [order](https://developer.mozilla.org/en-US/docs/Web/CSS/order) CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order. Items not given an explicit `order` value are assigned the default value of `0`. + + + +Ionic provides the following utility classes for `order`: + +| Class | Style Rule | Description | +| ------------------ | ----------- | ----------------------------------------- | +| `.ion-order-first` | `order: -1` | Item appears first in the flex container. | +| `.ion-order-0` | `order: 0` | Item appears in its natural order. | +| `.ion-order-1` | `order: 1` | Item appears after items with order 0. | +| `.ion-order-2` | `order: 2` | Item appears after items with order 1. | +| `.ion-order-3` | `order: 3` | Item appears after items with order 2. | +| `.ion-order-4` | `order: 4` | Item appears after items with order 3. | +| `.ion-order-5` | `order: 5` | Item appears after items with order 4. | +| `.ion-order-6` | `order: 6` | Item appears after items with order 5. | +| `.ion-order-7` | `order: 7` | Item appears after items with order 6. | +| `.ion-order-8` | `order: 8` | Item appears after items with order 7. | +| `.ion-order-9` | `order: 9` | Item appears after items with order 8. | +| `.ion-order-10` | `order: 10` | Item appears after items with order 9. | +| `.ion-order-11` | `order: 11` | Item appears after items with order 10. | +| `.ion-order-12` | `order: 12` | Item appears after items with order 11. | +| `.ion-order-last` | `order: 13` | Item appears last in the flex container. | + +### Responsive Flex Item Classes + +All of the flex item classes listed above have additional classes to modify the properties based on the screen size. Instead of the base class name, use `{property}-{breakpoint}-{modifier}` to only use the class on specific screen sizes, where `{breakpoint}` is one of the breakpoint names listed in [Ionic Breakpoints](#ionic-breakpoints). + +The table below shows the default behavior, where `{property}` is one of the following: `align-self`, `flex`, `flex-grow`, `flex-shrink`, or `order`, and `{modifier}` is the corresponding value as described above. + +| Class | Description | +| ------------------------------- | ------------------------------------------------------------- | +| `.ion-{property}-{modifier}` | Applies the modifier to the element on all screen sizes. | +| `.ion-{property}-sm-{modifier}` | Applies the modifier to the element when `min-width: 576px`. | +| `.ion-{property}-md-{modifier}` | Applies the modifier to the element when `min-width: 768px`. | +| `.ion-{property}-lg-{modifier}` | Applies the modifier to the element when `min-width: 992px`. | +| `.ion-{property}-xl-{modifier}` | Applies the modifier to the element when `min-width: 1200px`. | + ## Border Display -The border display CSS property determines if the border should be visible or not. The property can be applied to the ion-header and the ion-footer. +The `.ion-no-border` utility class can be used to remove borders from Ionic components. This class can be applied to the `ion-header` and `ion-footer` components. ```html diff --git a/docs/updating/8-0.md b/docs/updating/8-0.md index e0e283b4ac5..ca20c9cb6cb 100644 --- a/docs/updating/8-0.md +++ b/docs/updating/8-0.md @@ -215,13 +215,13 @@ iOS >=15 ### Checkbox -1. Migrate any remaining instances of Checkbox to use the [modern form control syntax](../api/checkbox#migrating-from-legacy-checkbox-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. +1. Migrate any remaining instances of Checkbox to use the [modern form control syntax](../v7/api/checkbox#migrating-from-legacy-checkbox-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. ### Input 1. Remove any usages of the `size` property. CSS should be used to specify the visible width of the input instead. 2. Remove any usages of the `accept` property. -3. Migrate any remaining instances of Input to use the [modern form control syntax](../api/input#migrating-from-legacy-input-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. +3. Migrate any remaining instances of Input to use the [modern form control syntax](../v7/api/input#migrating-from-legacy-input-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. ### Item @@ -243,19 +243,19 @@ iOS >=15 ### Radio -1. Migrate any remaining instances of Radio to use the [modern form control syntax](../api/radio#migrating-from-legacy-radio-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. +1. Migrate any remaining instances of Radio to use the [modern form control syntax](../v7/api/radio#migrating-from-legacy-radio-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. ### Select -1. Migrate any remaining instances of Select to use the [modern form control syntax](../api/select#migrating-from-legacy-select-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. +1. Migrate any remaining instances of Select to use the [modern form control syntax](../v7/api/select#migrating-from-legacy-select-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. ### Textarea -1. Migrate any remaining instances of Textarea to use the [modern form control syntax](../api/textarea#migrating-from-legacy-textarea-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. +1. Migrate any remaining instances of Textarea to use the [modern form control syntax](../v7/api/textarea#migrating-from-legacy-textarea-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. ### Toggle -1. Migrate any remaining instances of Toggle to use the [modern form control syntax](../api/toggle#migrating-from-legacy-toggle-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. +1. Migrate any remaining instances of Toggle to use the [modern form control syntax](../v7/api/toggle#migrating-from-legacy-toggle-syntax). Additionally, remove any usages of the `legacy` property as the legacy form control syntax has been removed. ## Need Help Upgrading? diff --git a/plugins/docusaurus-plugin-ionic-component-api/index.js b/plugins/docusaurus-plugin-ionic-component-api/index.js index d3b3d2d7255..90e59ee09f3 100644 --- a/plugins/docusaurus-plugin-ionic-component-api/index.js +++ b/plugins/docusaurus-plugin-ionic-component-api/index.js @@ -145,7 +145,7 @@ ${properties .map((prop) => { const isDeprecated = prop.deprecation !== undefined; - const docs = isDeprecated ? `${prop.docs}\n_Deprecated_ ${prop.deprecation}` : prop.docs; + const docs = isDeprecated ? `${prop.docs}\n\n**_Deprecated_** — ${prop.deprecation}` : prop.docs; return ` ### ${prop.name} ${isDeprecated ? '(deprecated)' : ''} @@ -170,7 +170,15 @@ function renderEvents({ events }) { return ` | Name | Description | Bubbles | | --- | --- | --- | -${events.map((event) => `| \`${event.event}\` | ${formatMultiline(event.docs)} | \`${event.bubbles}\` |`).join('\n')}`; +${events + .map((event) => { + const isDeprecated = event.deprecation !== undefined; + const docs = isDeprecated ? `${event.docs}\n\n**_Deprecated_** — ${event.deprecation}` : event.docs; + return `| \`${event.event}\` ${isDeprecated ? '**(deprecated)**' : ''} | ${formatMultiline(docs)} | \`${ + event.bubbles + }\` |`; + }) + .join('\n')}`; } /** diff --git a/sidebars.js b/sidebars.js index bbcc8f72b49..c2d050fae06 100644 --- a/sidebars.js +++ b/sidebars.js @@ -85,6 +85,7 @@ module.exports = { }, 'angular/lifecycle', 'angular/navigation', + 'angular/injection-tokens', 'angular/virtual-scroll', 'angular/slides', 'angular/platform', diff --git a/static/code/stackblitz/v7/react/package-lock.json b/static/code/stackblitz/v7/react/package-lock.json index 99f3ce46ed7..1819714e6eb 100644 --- a/static/code/stackblitz/v7/react/package-lock.json +++ b/static/code/stackblitz/v7/react/package-lock.json @@ -1395,9 +1395,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "engines": { "node": ">=12" }, @@ -1679,13 +1679,13 @@ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, "node_modules/vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" @@ -2580,9 +2580,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "postcss": { "version": "8.5.6", @@ -2782,14 +2782,14 @@ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, "vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", "requires": { "esbuild": "^0.25.0", "fdir": "^6.4.6", "fsevents": "~2.3.3", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" diff --git a/static/code/stackblitz/v7/vue/package-lock.json b/static/code/stackblitz/v7/vue/package-lock.json index 27e17f33d0b..4a6001fdc67 100644 --- a/static/code/stackblitz/v7/vue/package-lock.json +++ b/static/code/stackblitz/v7/vue/package-lock.json @@ -37,11 +37,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -51,9 +51,9 @@ } }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" @@ -495,9 +495,9 @@ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.19", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", - "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "version": "1.0.0-beta.29", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz", + "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==", "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { @@ -779,12 +779,12 @@ "dev": true }, "node_modules/@vitejs/plugin-vue": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz", - "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", + "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", "dev": true, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.19" + "@rolldown/pluginutils": "1.0.0-beta.29" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -821,36 +821,36 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", - "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz", + "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", "dependencies": { - "@babel/parser": "^7.27.5", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/shared": "3.5.18", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", - "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", + "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", "dependencies": { - "@vue/compiler-core": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-core": "3.5.18", + "@vue/shared": "3.5.18" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", - "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", + "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", "dependencies": { - "@babel/parser": "^7.27.5", - "@vue/compiler-core": "3.5.17", - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/compiler-core": "3.5.18", + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.6", @@ -858,12 +858,12 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", - "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", + "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", "dependencies": { - "@vue/compiler-dom": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-dom": "3.5.18", + "@vue/shared": "3.5.18" } }, "node_modules/@vue/compiler-vue2": { @@ -882,9 +882,9 @@ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, "node_modules/@vue/language-core": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.3.tgz", - "integrity": "sha512-I9wY0ULMN9tMSua+2C7g+ez1cIziVMUzIHlDYGSl2rtru3Eh4sXj95vZ+4GBuXwwPnEmYfzSApVbXiVbI8V5Gg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.4.tgz", + "integrity": "sha512-BvueED4LfBCSNH66eeUQk37MQCb7hjdezzGgxniM0LbriW53AJIyLorgshAtStmjfsAuOCcTl/c1b+nz/ye8xQ==", "dev": true, "dependencies": { "@volar/language-core": "2.4.20", @@ -906,49 +906,49 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.17.tgz", - "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz", + "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", "dependencies": { - "@vue/shared": "3.5.17" + "@vue/shared": "3.5.18" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.17.tgz", - "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz", + "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", "dependencies": { - "@vue/reactivity": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/reactivity": "3.5.18", + "@vue/shared": "3.5.18" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz", - "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz", + "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", "dependencies": { - "@vue/reactivity": "3.5.17", - "@vue/runtime-core": "3.5.17", - "@vue/shared": "3.5.17", + "@vue/reactivity": "3.5.18", + "@vue/runtime-core": "3.5.18", + "@vue/shared": "3.5.18", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.17.tgz", - "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz", + "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", "dependencies": { - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18" }, "peerDependencies": { - "vue": "3.5.17" + "vue": "3.5.18" } }, "node_modules/@vue/shared": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", - "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==" + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz", + "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==" }, "node_modules/alien-signals": { "version": "2.0.5", @@ -1111,9 +1111,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "engines": { "node": ">=12" @@ -1231,14 +1231,14 @@ } }, "node_modules/vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", "dev": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" @@ -1311,15 +1311,15 @@ "dev": true }, "node_modules/vue": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.17.tgz", - "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz", + "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==", "dependencies": { - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-sfc": "3.5.17", - "@vue/runtime-dom": "3.5.17", - "@vue/server-renderer": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-sfc": "3.5.18", + "@vue/runtime-dom": "3.5.18", + "@vue/server-renderer": "3.5.18", + "@vue/shared": "3.5.18" }, "peerDependencies": { "typescript": "*" @@ -1345,13 +1345,13 @@ } }, "node_modules/vue-tsc": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.3.tgz", - "integrity": "sha512-uU1OMSzWE8/y0+kDTc0iEIu9v82bmFkGyJpAO/x3wQqBkkHkButKgtygREyOkxL4E/xtcf/ExvgNhhjdzonldw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.4.tgz", + "integrity": "sha512-kZmSEjGtROApVBuaIcoprrXZsFNGon5ggkTJokmhQ/H1hMzCFRPQ0Ed8IHYFsmYJYvHBcdmEQVGVcRuxzPzNbw==", "dev": true, "dependencies": { "@volar/typescript": "2.4.20", - "@vue/language-core": "3.0.3" + "@vue/language-core": "3.0.4" }, "bin": { "vue-tsc": "bin/vue-tsc.js" @@ -1373,17 +1373,17 @@ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==" }, "@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "requires": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.0" } }, "@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "requires": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" @@ -1597,9 +1597,9 @@ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "@rolldown/pluginutils": { - "version": "1.0.0-beta.19", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", - "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "version": "1.0.0-beta.29", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz", + "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==", "dev": true }, "@rollup/rollup-android-arm-eabi": { @@ -1754,12 +1754,12 @@ "dev": true }, "@vitejs/plugin-vue": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz", - "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", + "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", "dev": true, "requires": { - "@rolldown/pluginutils": "1.0.0-beta.19" + "@rolldown/pluginutils": "1.0.0-beta.29" } }, "@volar/language-core": { @@ -1789,36 +1789,36 @@ } }, "@vue/compiler-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", - "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz", + "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", "requires": { - "@babel/parser": "^7.27.5", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/shared": "3.5.18", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "@vue/compiler-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", - "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", + "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", "requires": { - "@vue/compiler-core": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-core": "3.5.18", + "@vue/shared": "3.5.18" } }, "@vue/compiler-sfc": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", - "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", + "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", "requires": { - "@babel/parser": "^7.27.5", - "@vue/compiler-core": "3.5.17", - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/compiler-core": "3.5.18", + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.6", @@ -1826,12 +1826,12 @@ } }, "@vue/compiler-ssr": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", - "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", + "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", "requires": { - "@vue/compiler-dom": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-dom": "3.5.18", + "@vue/shared": "3.5.18" } }, "@vue/compiler-vue2": { @@ -1850,9 +1850,9 @@ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, "@vue/language-core": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.3.tgz", - "integrity": "sha512-I9wY0ULMN9tMSua+2C7g+ez1cIziVMUzIHlDYGSl2rtru3Eh4sXj95vZ+4GBuXwwPnEmYfzSApVbXiVbI8V5Gg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.4.tgz", + "integrity": "sha512-BvueED4LfBCSNH66eeUQk37MQCb7hjdezzGgxniM0LbriW53AJIyLorgshAtStmjfsAuOCcTl/c1b+nz/ye8xQ==", "dev": true, "requires": { "@volar/language-core": "2.4.20", @@ -1866,46 +1866,46 @@ } }, "@vue/reactivity": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.17.tgz", - "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz", + "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", "requires": { - "@vue/shared": "3.5.17" + "@vue/shared": "3.5.18" } }, "@vue/runtime-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.17.tgz", - "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz", + "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", "requires": { - "@vue/reactivity": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/reactivity": "3.5.18", + "@vue/shared": "3.5.18" } }, "@vue/runtime-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz", - "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz", + "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", "requires": { - "@vue/reactivity": "3.5.17", - "@vue/runtime-core": "3.5.17", - "@vue/shared": "3.5.17", + "@vue/reactivity": "3.5.18", + "@vue/runtime-core": "3.5.18", + "@vue/shared": "3.5.18", "csstype": "^3.1.3" } }, "@vue/server-renderer": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.17.tgz", - "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz", + "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", "requires": { - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18" } }, "@vue/shared": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", - "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==" + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz", + "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==" }, "alien-signals": { "version": "2.0.5", @@ -2026,9 +2026,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true }, "postcss": { @@ -2098,15 +2098,15 @@ "devOptional": true }, "vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", "dev": true, "requires": { "esbuild": "^0.25.0", "fdir": "^6.4.6", "fsevents": "~2.3.3", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" @@ -2119,15 +2119,15 @@ "dev": true }, "vue": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.17.tgz", - "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz", + "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==", "requires": { - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-sfc": "3.5.17", - "@vue/runtime-dom": "3.5.17", - "@vue/server-renderer": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-sfc": "3.5.18", + "@vue/runtime-dom": "3.5.18", + "@vue/server-renderer": "3.5.18", + "@vue/shared": "3.5.18" } }, "vue-router": { @@ -2139,13 +2139,13 @@ } }, "vue-tsc": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.3.tgz", - "integrity": "sha512-uU1OMSzWE8/y0+kDTc0iEIu9v82bmFkGyJpAO/x3wQqBkkHkButKgtygREyOkxL4E/xtcf/ExvgNhhjdzonldw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.4.tgz", + "integrity": "sha512-kZmSEjGtROApVBuaIcoprrXZsFNGon5ggkTJokmhQ/H1hMzCFRPQ0Ed8IHYFsmYJYvHBcdmEQVGVcRuxzPzNbw==", "dev": true, "requires": { "@volar/typescript": "2.4.20", - "@vue/language-core": "3.0.3" + "@vue/language-core": "3.0.4" } } } diff --git a/static/code/stackblitz/v8/angular/package.json b/static/code/stackblitz/v8/angular/package.json index 6cf52acc420..190268e822a 100644 --- a/static/code/stackblitz/v8/angular/package.json +++ b/static/code/stackblitz/v8/angular/package.json @@ -15,8 +15,8 @@ "@angular/platform-browser": "^20.0.0", "@angular/platform-browser-dynamic": "^20.0.0", "@angular/router": "^20.0.0", - "@ionic/angular": "8.6.5", - "@ionic/core": "8.6.5", + "@ionic/angular": "8.7.0", + "@ionic/core": "8.7.0", "ionicons": "8.0.13", "rxjs": "^7.8.1", "tslib": "^2.5.0", diff --git a/static/code/stackblitz/v8/html/package.json b/static/code/stackblitz/v8/html/package.json index e1d3912cfee..4c386cb3f7d 100644 --- a/static/code/stackblitz/v8/html/package.json +++ b/static/code/stackblitz/v8/html/package.json @@ -9,7 +9,7 @@ "start": "vite preview" }, "dependencies": { - "@ionic/core": "8.6.5", + "@ionic/core": "8.7.0", "ionicons": "8.0.13" }, "devDependencies": { diff --git a/static/code/stackblitz/v8/react/package-lock.json b/static/code/stackblitz/v8/react/package-lock.json index 2f20f90617b..c77cae7388a 100644 --- a/static/code/stackblitz/v8/react/package-lock.json +++ b/static/code/stackblitz/v8/react/package-lock.json @@ -8,8 +8,8 @@ "name": "vite-react-typescript", "version": "0.1.0", "dependencies": { - "@ionic/react": "8.6.5", - "@ionic/react-router": "8.6.5", + "@ionic/react": "8.7.0", + "@ionic/react-router": "8.7.0", "@types/node": "^22.0.0", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", @@ -669,22 +669,22 @@ } }, "node_modules/@ionic/core": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.6.5.tgz", - "integrity": "sha512-HN+6/Q67fEEpRA86QzXSrCahuHwaTPBsa910RuvY0pIYuoY4rpzGPU9ZOQ5q2wBsrln921rroEPU1xdpPKIH8Q==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.0.tgz", + "integrity": "sha512-l/43DXwv3WB2iXfdOQlu0fBY1CP70kek1y75HCwe4C9UlXcSnaLYnr3F/4VLvo1sIjNOmJHxJURpv/ZR7CP4AQ==", "dependencies": { "@stencil/core": "4.33.1", - "ionicons": "^7.2.2", + "ionicons": "^8.0.13", "tslib": "^2.1.0" } }, "node_modules/@ionic/react": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.6.5.tgz", - "integrity": "sha512-reUKqlU3cIJoHuDibB8WUd32a7nqg5aMsIfPnXOVydIUsJdvQnwjACbYiP0g+4AFzTVPsw/Cmyqh85GhXGw4WA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.0.tgz", + "integrity": "sha512-9MLa6qWDbtLoq+cUEAdoxHXeXrNTzoKVaOzEs95rohoKsKIUch5aAcI4g4iPx7zd04fMhvpiEVfMwoR1tq4EJQ==", "dependencies": { - "@ionic/core": "8.6.5", - "ionicons": "^7.0.0", + "@ionic/core": "8.7.0", + "ionicons": "^8.0.13", "tslib": "*" }, "peerDependencies": { @@ -693,11 +693,11 @@ } }, "node_modules/@ionic/react-router": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-8.6.5.tgz", - "integrity": "sha512-DGR7yHaNEneK1DwZ6D52vkKRICAAteiC1i9C6KgNGw24e1et83nE1gqa4s4EQ3ggbfWBkmWCs/9UBqU8oyG0Cg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-8.7.0.tgz", + "integrity": "sha512-DcSxqaT4I1wvnMlunPIM2lCTuhWMKFfDwdIpLJGLzQytqA9iv+AXDYrhm5BfuXry8bpgKSHErX16ihsqqzqVvw==", "dependencies": { - "@ionic/react": "8.6.5", + "@ionic/react": "8.7.0", "tslib": "*" }, "peerDependencies": { @@ -1407,11 +1407,129 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/ionicons": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.3.1.tgz", - "integrity": "sha512-1boG4EQTBBpQ4/0PU60Yi78Iw/k8iNtKu9c0NmsbzHGnWAcwpiovG9Wi/rk5UlF+DC+CR4XDCxKo91YqvAxkww==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz", + "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==", "dependencies": { - "@stencil/core": "^4.0.3" + "@stencil/core": "^4.35.3" + } + }, + "node_modules/ionicons/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz", + "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz", + "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz", + "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz", + "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz", + "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz", + "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz", + "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz", + "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/ionicons/node_modules/@stencil/core": { + "version": "4.36.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", + "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "bin": { + "stencil": "bin/stencil" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.10.0" + }, + "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "4.34.9", + "@rollup/rollup-darwin-x64": "4.34.9", + "@rollup/rollup-linux-arm64-gnu": "4.34.9", + "@rollup/rollup-linux-arm64-musl": "4.34.9", + "@rollup/rollup-linux-x64-gnu": "4.34.9", + "@rollup/rollup-linux-x64-musl": "4.34.9", + "@rollup/rollup-win32-arm64-msvc": "4.34.9", + "@rollup/rollup-win32-x64-msvc": "4.34.9" } }, "node_modules/js-tokens": { @@ -1501,9 +1619,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "engines": { "node": ">=12" }, @@ -1785,13 +1903,13 @@ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, "node_modules/vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" @@ -2208,31 +2326,31 @@ "optional": true }, "@ionic/core": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.6.5.tgz", - "integrity": "sha512-HN+6/Q67fEEpRA86QzXSrCahuHwaTPBsa910RuvY0pIYuoY4rpzGPU9ZOQ5q2wBsrln921rroEPU1xdpPKIH8Q==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.0.tgz", + "integrity": "sha512-l/43DXwv3WB2iXfdOQlu0fBY1CP70kek1y75HCwe4C9UlXcSnaLYnr3F/4VLvo1sIjNOmJHxJURpv/ZR7CP4AQ==", "requires": { "@stencil/core": "4.33.1", - "ionicons": "^7.2.2", + "ionicons": "^8.0.13", "tslib": "^2.1.0" } }, "@ionic/react": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.6.5.tgz", - "integrity": "sha512-reUKqlU3cIJoHuDibB8WUd32a7nqg5aMsIfPnXOVydIUsJdvQnwjACbYiP0g+4AFzTVPsw/Cmyqh85GhXGw4WA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.0.tgz", + "integrity": "sha512-9MLa6qWDbtLoq+cUEAdoxHXeXrNTzoKVaOzEs95rohoKsKIUch5aAcI4g4iPx7zd04fMhvpiEVfMwoR1tq4EJQ==", "requires": { - "@ionic/core": "8.6.5", - "ionicons": "^7.0.0", + "@ionic/core": "8.7.0", + "ionicons": "^8.0.13", "tslib": "*" } }, "@ionic/react-router": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-8.6.5.tgz", - "integrity": "sha512-DGR7yHaNEneK1DwZ6D52vkKRICAAteiC1i9C6KgNGw24e1et83nE1gqa4s4EQ3ggbfWBkmWCs/9UBqU8oyG0Cg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-8.7.0.tgz", + "integrity": "sha512-DcSxqaT4I1wvnMlunPIM2lCTuhWMKFfDwdIpLJGLzQytqA9iv+AXDYrhm5BfuXry8bpgKSHErX16ihsqqzqVvw==", "requires": { - "@ionic/react": "8.6.5", + "@ionic/react": "8.7.0", "tslib": "*" } }, @@ -2682,11 +2800,76 @@ } }, "ionicons": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.3.1.tgz", - "integrity": "sha512-1boG4EQTBBpQ4/0PU60Yi78Iw/k8iNtKu9c0NmsbzHGnWAcwpiovG9Wi/rk5UlF+DC+CR4XDCxKo91YqvAxkww==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz", + "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==", "requires": { - "@stencil/core": "^4.0.3" + "@stencil/core": "^4.35.3" + }, + "dependencies": { + "@rollup/rollup-darwin-arm64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz", + "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==", + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz", + "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==", + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz", + "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==", + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz", + "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==", + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz", + "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==", + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz", + "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==", + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz", + "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==", + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz", + "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==", + "optional": true + }, + "@stencil/core": { + "version": "4.36.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", + "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "requires": { + "@rollup/rollup-darwin-arm64": "4.34.9", + "@rollup/rollup-darwin-x64": "4.34.9", + "@rollup/rollup-linux-arm64-gnu": "4.34.9", + "@rollup/rollup-linux-arm64-musl": "4.34.9", + "@rollup/rollup-linux-x64-gnu": "4.34.9", + "@rollup/rollup-linux-x64-musl": "4.34.9", + "@rollup/rollup-win32-arm64-msvc": "4.34.9", + "@rollup/rollup-win32-x64-msvc": "4.34.9" + } + } } }, "js-tokens": { @@ -2746,9 +2929,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "postcss": { "version": "8.5.6", @@ -2948,14 +3131,14 @@ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, "vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", "requires": { "esbuild": "^0.25.0", "fdir": "^6.4.6", "fsevents": "~2.3.3", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" diff --git a/static/code/stackblitz/v8/react/package.json b/static/code/stackblitz/v8/react/package.json index 07c566794e6..ec62cee7918 100644 --- a/static/code/stackblitz/v8/react/package.json +++ b/static/code/stackblitz/v8/react/package.json @@ -3,8 +3,8 @@ "version": "0.1.0", "private": true, "dependencies": { - "@ionic/react": "8.6.5", - "@ionic/react-router": "8.6.5", + "@ionic/react": "8.7.0", + "@ionic/react-router": "8.7.0", "@types/node": "^22.0.0", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", diff --git a/static/code/stackblitz/v8/vue/package-lock.json b/static/code/stackblitz/v8/vue/package-lock.json index bb6d3dbde48..8f3d3c9080f 100644 --- a/static/code/stackblitz/v8/vue/package-lock.json +++ b/static/code/stackblitz/v8/vue/package-lock.json @@ -8,8 +8,8 @@ "name": "vite-vue-starter", "version": "0.0.0", "dependencies": { - "@ionic/vue": "8.6.5", - "@ionic/vue-router": "8.6.5", + "@ionic/vue": "8.7.0", + "@ionic/vue-router": "8.7.0", "vue": "^3.2.25", "vue-router": "4.5.1" }, @@ -37,11 +37,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -51,9 +51,9 @@ } }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" @@ -463,31 +463,31 @@ } }, "node_modules/@ionic/core": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.6.5.tgz", - "integrity": "sha512-HN+6/Q67fEEpRA86QzXSrCahuHwaTPBsa910RuvY0pIYuoY4rpzGPU9ZOQ5q2wBsrln921rroEPU1xdpPKIH8Q==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.0.tgz", + "integrity": "sha512-l/43DXwv3WB2iXfdOQlu0fBY1CP70kek1y75HCwe4C9UlXcSnaLYnr3F/4VLvo1sIjNOmJHxJURpv/ZR7CP4AQ==", "dependencies": { "@stencil/core": "4.33.1", - "ionicons": "^7.2.2", + "ionicons": "^8.0.13", "tslib": "^2.1.0" } }, "node_modules/@ionic/vue": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.6.5.tgz", - "integrity": "sha512-hmvH8y9QRbfWchRBJJoSHHoAHpcOMo942B1/4xZQwgkujRtpLTIoWG9eGNxvbMpV0c11CyUX9R2++MHpVdLKDw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.0.tgz", + "integrity": "sha512-lIq8zTIx794QrFUHqXpS02Z0QRPBDNcuX+lIL7dQYg4PXxYwdERppt5MStfXXbx1jNr6YDCOhYMdcuw9emmzGA==", "dependencies": { - "@ionic/core": "8.6.5", + "@ionic/core": "8.7.0", "@stencil/vue-output-target": "0.10.7", - "ionicons": "^7.0.0" + "ionicons": "^8.0.13" } }, "node_modules/@ionic/vue-router": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/vue-router/-/vue-router-8.6.5.tgz", - "integrity": "sha512-WMQLkQSBgaoV1z+dtTYr/D32N5OFzSrF3pNLWT+r3E8+OlLqLt/1AqEqDbIYT1yj/i+JzmD7ZpKgktvZwevQDQ==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/vue-router/-/vue-router-8.7.0.tgz", + "integrity": "sha512-LoBxwC6aOL1qV/XKtd8FiURkhZABxFZkjkoLbGMHcdeV++BPwQvdkLtQ9/TC6KbwTmHYJHooqIvkAHQA0f0yMw==", "dependencies": { - "@ionic/vue": "8.6.5" + "@ionic/vue": "8.7.0" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -496,9 +496,9 @@ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.19", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", - "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "version": "1.0.0-beta.29", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz", + "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==", "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { @@ -907,12 +907,12 @@ "dev": true }, "node_modules/@vitejs/plugin-vue": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz", - "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", + "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", "dev": true, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.19" + "@rolldown/pluginutils": "1.0.0-beta.29" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -949,36 +949,36 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", - "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz", + "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", "dependencies": { - "@babel/parser": "^7.27.5", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/shared": "3.5.18", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", - "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", + "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", "dependencies": { - "@vue/compiler-core": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-core": "3.5.18", + "@vue/shared": "3.5.18" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", - "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", + "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", "dependencies": { - "@babel/parser": "^7.27.5", - "@vue/compiler-core": "3.5.17", - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/compiler-core": "3.5.18", + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.6", @@ -986,12 +986,12 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", - "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", + "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", "dependencies": { - "@vue/compiler-dom": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-dom": "3.5.18", + "@vue/shared": "3.5.18" } }, "node_modules/@vue/compiler-vue2": { @@ -1010,9 +1010,9 @@ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, "node_modules/@vue/language-core": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.3.tgz", - "integrity": "sha512-I9wY0ULMN9tMSua+2C7g+ez1cIziVMUzIHlDYGSl2rtru3Eh4sXj95vZ+4GBuXwwPnEmYfzSApVbXiVbI8V5Gg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.4.tgz", + "integrity": "sha512-BvueED4LfBCSNH66eeUQk37MQCb7hjdezzGgxniM0LbriW53AJIyLorgshAtStmjfsAuOCcTl/c1b+nz/ye8xQ==", "dev": true, "dependencies": { "@volar/language-core": "2.4.20", @@ -1034,49 +1034,49 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.17.tgz", - "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz", + "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", "dependencies": { - "@vue/shared": "3.5.17" + "@vue/shared": "3.5.18" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.17.tgz", - "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz", + "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", "dependencies": { - "@vue/reactivity": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/reactivity": "3.5.18", + "@vue/shared": "3.5.18" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz", - "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz", + "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", "dependencies": { - "@vue/reactivity": "3.5.17", - "@vue/runtime-core": "3.5.17", - "@vue/shared": "3.5.17", + "@vue/reactivity": "3.5.18", + "@vue/runtime-core": "3.5.18", + "@vue/shared": "3.5.18", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.17.tgz", - "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz", + "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", "dependencies": { - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18" }, "peerDependencies": { - "vue": "3.5.17" + "vue": "3.5.18" } }, "node_modules/@vue/shared": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", - "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==" + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz", + "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==" }, "node_modules/alien-signals": { "version": "2.0.5", @@ -1189,11 +1189,129 @@ } }, "node_modules/ionicons": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.3.1.tgz", - "integrity": "sha512-1boG4EQTBBpQ4/0PU60Yi78Iw/k8iNtKu9c0NmsbzHGnWAcwpiovG9Wi/rk5UlF+DC+CR4XDCxKo91YqvAxkww==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz", + "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==", "dependencies": { - "@stencil/core": "^4.0.3" + "@stencil/core": "^4.35.3" + } + }, + "node_modules/ionicons/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz", + "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz", + "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz", + "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz", + "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz", + "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz", + "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz", + "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/ionicons/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz", + "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/ionicons/node_modules/@stencil/core": { + "version": "4.36.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", + "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "bin": { + "stencil": "bin/stencil" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.10.0" + }, + "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "4.34.9", + "@rollup/rollup-darwin-x64": "4.34.9", + "@rollup/rollup-linux-arm64-gnu": "4.34.9", + "@rollup/rollup-linux-arm64-musl": "4.34.9", + "@rollup/rollup-linux-x64-gnu": "4.34.9", + "@rollup/rollup-linux-x64-musl": "4.34.9", + "@rollup/rollup-win32-arm64-msvc": "4.34.9", + "@rollup/rollup-win32-x64-msvc": "4.34.9" } }, "node_modules/magic-string": { @@ -1239,9 +1357,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "engines": { "node": ">=12" @@ -1359,14 +1477,14 @@ } }, "node_modules/vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", "dev": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" @@ -1439,15 +1557,15 @@ "dev": true }, "node_modules/vue": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.17.tgz", - "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz", + "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==", "dependencies": { - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-sfc": "3.5.17", - "@vue/runtime-dom": "3.5.17", - "@vue/server-renderer": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-sfc": "3.5.18", + "@vue/runtime-dom": "3.5.18", + "@vue/server-renderer": "3.5.18", + "@vue/shared": "3.5.18" }, "peerDependencies": { "typescript": "*" @@ -1473,13 +1591,13 @@ } }, "node_modules/vue-tsc": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.3.tgz", - "integrity": "sha512-uU1OMSzWE8/y0+kDTc0iEIu9v82bmFkGyJpAO/x3wQqBkkHkButKgtygREyOkxL4E/xtcf/ExvgNhhjdzonldw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.4.tgz", + "integrity": "sha512-kZmSEjGtROApVBuaIcoprrXZsFNGon5ggkTJokmhQ/H1hMzCFRPQ0Ed8IHYFsmYJYvHBcdmEQVGVcRuxzPzNbw==", "dev": true, "dependencies": { "@volar/typescript": "2.4.20", - "@vue/language-core": "3.0.3" + "@vue/language-core": "3.0.4" }, "bin": { "vue-tsc": "bin/vue-tsc.js" @@ -1501,17 +1619,17 @@ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==" }, "@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "requires": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.0" } }, "@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "requires": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" @@ -1693,31 +1811,31 @@ "optional": true }, "@ionic/core": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.6.5.tgz", - "integrity": "sha512-HN+6/Q67fEEpRA86QzXSrCahuHwaTPBsa910RuvY0pIYuoY4rpzGPU9ZOQ5q2wBsrln921rroEPU1xdpPKIH8Q==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.0.tgz", + "integrity": "sha512-l/43DXwv3WB2iXfdOQlu0fBY1CP70kek1y75HCwe4C9UlXcSnaLYnr3F/4VLvo1sIjNOmJHxJURpv/ZR7CP4AQ==", "requires": { "@stencil/core": "4.33.1", - "ionicons": "^7.2.2", + "ionicons": "^8.0.13", "tslib": "^2.1.0" } }, "@ionic/vue": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.6.5.tgz", - "integrity": "sha512-hmvH8y9QRbfWchRBJJoSHHoAHpcOMo942B1/4xZQwgkujRtpLTIoWG9eGNxvbMpV0c11CyUX9R2++MHpVdLKDw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.0.tgz", + "integrity": "sha512-lIq8zTIx794QrFUHqXpS02Z0QRPBDNcuX+lIL7dQYg4PXxYwdERppt5MStfXXbx1jNr6YDCOhYMdcuw9emmzGA==", "requires": { - "@ionic/core": "8.6.5", + "@ionic/core": "8.7.0", "@stencil/vue-output-target": "0.10.7", - "ionicons": "^7.0.0" + "ionicons": "^8.0.13" } }, "@ionic/vue-router": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/@ionic/vue-router/-/vue-router-8.6.5.tgz", - "integrity": "sha512-WMQLkQSBgaoV1z+dtTYr/D32N5OFzSrF3pNLWT+r3E8+OlLqLt/1AqEqDbIYT1yj/i+JzmD7ZpKgktvZwevQDQ==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@ionic/vue-router/-/vue-router-8.7.0.tgz", + "integrity": "sha512-LoBxwC6aOL1qV/XKtd8FiURkhZABxFZkjkoLbGMHcdeV++BPwQvdkLtQ9/TC6KbwTmHYJHooqIvkAHQA0f0yMw==", "requires": { - "@ionic/vue": "8.6.5" + "@ionic/vue": "8.7.0" } }, "@jridgewell/sourcemap-codec": { @@ -1726,9 +1844,9 @@ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "@rolldown/pluginutils": { - "version": "1.0.0-beta.19", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", - "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "version": "1.0.0-beta.29", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz", + "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==", "dev": true }, "@rollup/rollup-android-arm-eabi": { @@ -1949,12 +2067,12 @@ "dev": true }, "@vitejs/plugin-vue": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz", - "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", + "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", "dev": true, "requires": { - "@rolldown/pluginutils": "1.0.0-beta.19" + "@rolldown/pluginutils": "1.0.0-beta.29" } }, "@volar/language-core": { @@ -1984,36 +2102,36 @@ } }, "@vue/compiler-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", - "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz", + "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", "requires": { - "@babel/parser": "^7.27.5", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/shared": "3.5.18", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "@vue/compiler-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", - "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", + "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", "requires": { - "@vue/compiler-core": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-core": "3.5.18", + "@vue/shared": "3.5.18" } }, "@vue/compiler-sfc": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", - "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", + "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", "requires": { - "@babel/parser": "^7.27.5", - "@vue/compiler-core": "3.5.17", - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/compiler-core": "3.5.18", + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.6", @@ -2021,12 +2139,12 @@ } }, "@vue/compiler-ssr": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", - "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", + "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", "requires": { - "@vue/compiler-dom": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-dom": "3.5.18", + "@vue/shared": "3.5.18" } }, "@vue/compiler-vue2": { @@ -2045,9 +2163,9 @@ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, "@vue/language-core": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.3.tgz", - "integrity": "sha512-I9wY0ULMN9tMSua+2C7g+ez1cIziVMUzIHlDYGSl2rtru3Eh4sXj95vZ+4GBuXwwPnEmYfzSApVbXiVbI8V5Gg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.4.tgz", + "integrity": "sha512-BvueED4LfBCSNH66eeUQk37MQCb7hjdezzGgxniM0LbriW53AJIyLorgshAtStmjfsAuOCcTl/c1b+nz/ye8xQ==", "dev": true, "requires": { "@volar/language-core": "2.4.20", @@ -2061,46 +2179,46 @@ } }, "@vue/reactivity": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.17.tgz", - "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz", + "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", "requires": { - "@vue/shared": "3.5.17" + "@vue/shared": "3.5.18" } }, "@vue/runtime-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.17.tgz", - "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz", + "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", "requires": { - "@vue/reactivity": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/reactivity": "3.5.18", + "@vue/shared": "3.5.18" } }, "@vue/runtime-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz", - "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz", + "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", "requires": { - "@vue/reactivity": "3.5.17", - "@vue/runtime-core": "3.5.17", - "@vue/shared": "3.5.17", + "@vue/reactivity": "3.5.18", + "@vue/runtime-core": "3.5.18", + "@vue/shared": "3.5.18", "csstype": "^3.1.3" } }, "@vue/server-renderer": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.17.tgz", - "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz", + "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", "requires": { - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18" } }, "@vue/shared": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", - "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==" + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz", + "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==" }, "alien-signals": { "version": "2.0.5", @@ -2183,11 +2301,76 @@ "dev": true }, "ionicons": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.3.1.tgz", - "integrity": "sha512-1boG4EQTBBpQ4/0PU60Yi78Iw/k8iNtKu9c0NmsbzHGnWAcwpiovG9Wi/rk5UlF+DC+CR4XDCxKo91YqvAxkww==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz", + "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==", "requires": { - "@stencil/core": "^4.0.3" + "@stencil/core": "^4.35.3" + }, + "dependencies": { + "@rollup/rollup-darwin-arm64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz", + "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==", + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz", + "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==", + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz", + "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==", + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz", + "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==", + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz", + "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==", + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz", + "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==", + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz", + "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==", + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz", + "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==", + "optional": true + }, + "@stencil/core": { + "version": "4.36.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", + "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "requires": { + "@rollup/rollup-darwin-arm64": "4.34.9", + "@rollup/rollup-darwin-x64": "4.34.9", + "@rollup/rollup-linux-arm64-gnu": "4.34.9", + "@rollup/rollup-linux-arm64-musl": "4.34.9", + "@rollup/rollup-linux-x64-gnu": "4.34.9", + "@rollup/rollup-linux-x64-musl": "4.34.9", + "@rollup/rollup-win32-arm64-msvc": "4.34.9", + "@rollup/rollup-win32-x64-msvc": "4.34.9" + } + } } }, "magic-string": { @@ -2221,9 +2404,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true }, "postcss": { @@ -2293,15 +2476,15 @@ "devOptional": true }, "vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", "dev": true, "requires": { "esbuild": "^0.25.0", "fdir": "^6.4.6", "fsevents": "~2.3.3", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" @@ -2314,15 +2497,15 @@ "dev": true }, "vue": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.17.tgz", - "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz", + "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==", "requires": { - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-sfc": "3.5.17", - "@vue/runtime-dom": "3.5.17", - "@vue/server-renderer": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-sfc": "3.5.18", + "@vue/runtime-dom": "3.5.18", + "@vue/server-renderer": "3.5.18", + "@vue/shared": "3.5.18" } }, "vue-router": { @@ -2334,13 +2517,13 @@ } }, "vue-tsc": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.3.tgz", - "integrity": "sha512-uU1OMSzWE8/y0+kDTc0iEIu9v82bmFkGyJpAO/x3wQqBkkHkButKgtygREyOkxL4E/xtcf/ExvgNhhjdzonldw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.4.tgz", + "integrity": "sha512-kZmSEjGtROApVBuaIcoprrXZsFNGon5ggkTJokmhQ/H1hMzCFRPQ0Ed8IHYFsmYJYvHBcdmEQVGVcRuxzPzNbw==", "dev": true, "requires": { "@volar/typescript": "2.4.20", - "@vue/language-core": "3.0.3" + "@vue/language-core": "3.0.4" } } } diff --git a/static/code/stackblitz/v8/vue/package.json b/static/code/stackblitz/v8/vue/package.json index 3ad1d6524a3..a5aff493ef4 100644 --- a/static/code/stackblitz/v8/vue/package.json +++ b/static/code/stackblitz/v8/vue/package.json @@ -8,8 +8,8 @@ "preview": "vite preview" }, "dependencies": { - "@ionic/vue": "8.6.5", - "@ionic/vue-router": "8.6.5", + "@ionic/vue": "8.7.0", + "@ionic/vue-router": "8.7.0", "vue": "^3.2.25", "vue-router": "4.5.1" }, diff --git a/static/demos/api/reorder/index.html b/static/demos/api/reorder/index.html index 695a50c2701..3903da1eb7d 100644 --- a/static/demos/api/reorder/index.html +++ b/static/demos/api/reorder/index.html @@ -99,7 +99,7 @@ function toggleReorder() { const reorderGroup = document.getElementById('reorder'); reorderGroup.disabled = !reorderGroup.disabled; - reorderGroup.addEventListener('ionItemReorder', ({ detail }) => { + reorderGroup.addEventListener('ionReorderEnd', ({ detail }) => { detail.complete(true); }); } diff --git a/static/img/layout/align-content.png b/static/img/layout/align-content.png new file mode 100644 index 00000000000..265c7c7bf3d Binary files /dev/null and b/static/img/layout/align-content.png differ diff --git a/static/img/layout/align-items.png b/static/img/layout/align-items.png new file mode 100644 index 00000000000..d5c40e22e35 Binary files /dev/null and b/static/img/layout/align-items.png differ diff --git a/static/img/layout/align-self.png b/static/img/layout/align-self.png new file mode 100644 index 00000000000..11fcbd371c2 Binary files /dev/null and b/static/img/layout/align-self.png differ diff --git a/static/img/layout/flex-direction.png b/static/img/layout/flex-direction.png new file mode 100644 index 00000000000..dd5691f0fc1 Binary files /dev/null and b/static/img/layout/flex-direction.png differ diff --git a/static/img/layout/flex-grow.png b/static/img/layout/flex-grow.png new file mode 100644 index 00000000000..a029e415dfb Binary files /dev/null and b/static/img/layout/flex-grow.png differ diff --git a/static/img/layout/flex-shrink.png b/static/img/layout/flex-shrink.png new file mode 100644 index 00000000000..4c5d58c54da Binary files /dev/null and b/static/img/layout/flex-shrink.png differ diff --git a/static/img/layout/flex-wrap.png b/static/img/layout/flex-wrap.png new file mode 100644 index 00000000000..300c417c1be Binary files /dev/null and b/static/img/layout/flex-wrap.png differ diff --git a/static/img/layout/flex.png b/static/img/layout/flex.png new file mode 100644 index 00000000000..f2648ac05da Binary files /dev/null and b/static/img/layout/flex.png differ diff --git a/static/img/layout/justify-content.png b/static/img/layout/justify-content.png new file mode 100644 index 00000000000..1b2641086a0 Binary files /dev/null and b/static/img/layout/justify-content.png differ diff --git a/static/img/layout/order.png b/static/img/layout/order.png new file mode 100644 index 00000000000..875e6e799b9 Binary files /dev/null and b/static/img/layout/order.png differ diff --git a/static/usage/v7/radio/label-wrap/angular/example_component_css.md b/static/usage/v7/radio/label-wrap/angular/example_component_css.md new file mode 100644 index 00000000000..ec109440a50 --- /dev/null +++ b/static/usage/v7/radio/label-wrap/angular/example_component_css.md @@ -0,0 +1,9 @@ +```css +ion-list { + width: 250px; +} + +ion-radio.wrapped::part(label) { + white-space: normal; +} +``` diff --git a/static/usage/v7/radio/label-wrap/angular/example_component_html.md b/static/usage/v7/radio/label-wrap/angular/example_component_html.md new file mode 100644 index 00000000000..0837d088fab --- /dev/null +++ b/static/usage/v7/radio/label-wrap/angular/example_component_html.md @@ -0,0 +1,17 @@ +```html + + + + Truncated with ellipsis by default + + + Wrapping with text-wrap applied to label shadow part + + + +
Wrapping with ion-text-wrap class applied wrapper element
+
+
+
+
+``` diff --git a/static/usage/v7/radio/label-wrap/angular/example_component_ts.md b/static/usage/v7/radio/label-wrap/angular/example_component_ts.md new file mode 100644 index 00000000000..151a9f44f80 --- /dev/null +++ b/static/usage/v7/radio/label-wrap/angular/example_component_ts.md @@ -0,0 +1,12 @@ +```ts +import { Component } from '@angular/core'; +import { IonItem, IonList, IonRadio, IonRadioGroup } from '@ionic/angular/standalone'; + +@Component({ + selector: 'app-example', + templateUrl: 'example.component.html', + styleUrls: ['example.component.css'], + imports: [IonItem, IonList, IonRadio, IonRadioGroup], +}) +export class ExampleComponent {} +``` diff --git a/static/usage/v7/radio/label-wrap/demo.html b/static/usage/v7/radio/label-wrap/demo.html new file mode 100644 index 00000000000..6f8f030bcf2 --- /dev/null +++ b/static/usage/v7/radio/label-wrap/demo.html @@ -0,0 +1,48 @@ + + + + + + Radio + + + + + + + + + + + +
+ + + + Truncated with ellipsis by default + + + + Wrapping with text-wrap applied to label shadow part + + + + +
Wrapping with ion-text-wrap class applied wrapper element
+
+
+
+
+
+
+
+ + diff --git a/static/usage/v7/radio/label-wrap/index.md b/static/usage/v7/radio/label-wrap/index.md new file mode 100644 index 00000000000..95f743485e5 --- /dev/null +++ b/static/usage/v7/radio/label-wrap/index.md @@ -0,0 +1,34 @@ +import Playground from '@site/src/components/global/Playground'; + +import javascript from './javascript.md'; + +import react_main_tsx from './react/main_tsx.md'; +import react_main_css from './react/main_css.md'; + +import vue from './vue.md'; + +import angular_example_component_html from './angular/example_component_html.md'; +import angular_example_component_css from './angular/example_component_css.md'; +import angular_example_component_ts from './angular/example_component_ts.md'; + + diff --git a/static/usage/v7/radio/label-wrap/javascript.md b/static/usage/v7/radio/label-wrap/javascript.md new file mode 100644 index 00000000000..1bce1a8fd7a --- /dev/null +++ b/static/usage/v7/radio/label-wrap/javascript.md @@ -0,0 +1,27 @@ +```html + + + + Truncated with ellipsis by default + + + Wrapping with text-wrap applied to label shadow part + + + +
Wrapping with ion-text-wrap class applied wrapper element
+
+
+
+
+ + +``` diff --git a/static/usage/v7/radio/label-wrap/react/main_css.md b/static/usage/v7/radio/label-wrap/react/main_css.md new file mode 100644 index 00000000000..ec109440a50 --- /dev/null +++ b/static/usage/v7/radio/label-wrap/react/main_css.md @@ -0,0 +1,9 @@ +```css +ion-list { + width: 250px; +} + +ion-radio.wrapped::part(label) { + white-space: normal; +} +``` diff --git a/static/usage/v7/radio/label-wrap/react/main_tsx.md b/static/usage/v7/radio/label-wrap/react/main_tsx.md new file mode 100644 index 00000000000..25b4d4618dc --- /dev/null +++ b/static/usage/v7/radio/label-wrap/react/main_tsx.md @@ -0,0 +1,29 @@ +```tsx +import React from 'react'; +import { IonList, IonItem, IonRadio, IonRadioGroup } from '@ionic/react'; + +import './main.css'; + +function Example() { + return ( + + + + Truncated with ellipsis by default + + + + Wrapping with text-wrap applied to label shadow part + + + + +
Wrapping with ion-text-wrap class applied wrapper element
+
+
+
+
+ ); +} +export default Example; +``` diff --git a/static/usage/v7/radio/label-wrap/vue.md b/static/usage/v7/radio/label-wrap/vue.md new file mode 100644 index 00000000000..ecabbadb8b1 --- /dev/null +++ b/static/usage/v7/radio/label-wrap/vue.md @@ -0,0 +1,38 @@ +```html + + + + + +``` diff --git a/static/usage/v8/datetime/highlightedDates/array/angular/example_component_ts.md b/static/usage/v8/datetime/highlightedDates/array/angular/example_component_ts.md index 1382b5db0e9..ca7f322c840 100644 --- a/static/usage/v8/datetime/highlightedDates/array/angular/example_component_ts.md +++ b/static/usage/v8/datetime/highlightedDates/array/angular/example_component_ts.md @@ -14,21 +14,25 @@ export class ExampleComponent { date: '2023-01-05', textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }, { date: '2023-01-10', textColor: '#09721b', backgroundColor: '#c8e5d0', + border: '1px solid #4caf50', }, { date: '2023-01-20', - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }, { date: '2023-01-23', textColor: 'rgb(68, 10, 184)', backgroundColor: 'rgb(211, 200, 229)', + border: '1px solid rgb(103, 58, 183)', }, ]; } diff --git a/static/usage/v8/datetime/highlightedDates/array/demo.html b/static/usage/v8/datetime/highlightedDates/array/demo.html index 1e8545bf042..9f27a6f29c8 100644 --- a/static/usage/v8/datetime/highlightedDates/array/demo.html +++ b/static/usage/v8/datetime/highlightedDates/array/demo.html @@ -31,21 +31,25 @@ date: '2023-01-05', textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }, { date: '2023-01-10', textColor: '#09721b', backgroundColor: '#c8e5d0', + border: '1px solid #4caf50', }, { date: '2023-01-20', - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }, { date: '2023-01-23', textColor: 'rgb(68, 10, 184)', backgroundColor: 'rgb(211, 200, 229)', + border: '1px solid rgb(103, 58, 183)', }, ]; diff --git a/static/usage/v8/datetime/highlightedDates/array/javascript.md b/static/usage/v8/datetime/highlightedDates/array/javascript.md index a27ff554ee2..9eae9580daf 100644 --- a/static/usage/v8/datetime/highlightedDates/array/javascript.md +++ b/static/usage/v8/datetime/highlightedDates/array/javascript.md @@ -8,21 +8,25 @@ date: '2023-01-05', textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }, { date: '2023-01-10', textColor: '#09721b', backgroundColor: '#c8e5d0', + border: '1px solid #4caf50', }, { date: '2023-01-20', - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }, { date: '2023-01-23', textColor: 'rgb(68, 10, 184)', backgroundColor: 'rgb(211, 200, 229)', + border: '1px solid rgb(103, 58, 183)', }, ]; diff --git a/static/usage/v8/datetime/highlightedDates/array/react.md b/static/usage/v8/datetime/highlightedDates/array/react.md index 4d8d9258f63..f49daad4da2 100644 --- a/static/usage/v8/datetime/highlightedDates/array/react.md +++ b/static/usage/v8/datetime/highlightedDates/array/react.md @@ -11,21 +11,25 @@ function Example() { date: '2023-01-05', textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }, { date: '2023-01-10', textColor: '#09721b', backgroundColor: '#c8e5d0', + border: '1px solid #4caf50', }, { date: '2023-01-20', - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }, { date: '2023-01-23', textColor: 'rgb(68, 10, 184)', backgroundColor: 'rgb(211, 200, 229)', + border: '1px solid rgb(103, 58, 183)', }, ]} > diff --git a/static/usage/v8/datetime/highlightedDates/array/vue.md b/static/usage/v8/datetime/highlightedDates/array/vue.md index 408f58f2833..40cc4316e6d 100644 --- a/static/usage/v8/datetime/highlightedDates/array/vue.md +++ b/static/usage/v8/datetime/highlightedDates/array/vue.md @@ -15,21 +15,25 @@ date: '2023-01-05', textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }, { date: '2023-01-10', textColor: '#09721b', backgroundColor: '#c8e5d0', + border: '1px solid #4caf50', }, { date: '2023-01-20', - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }, { date: '2023-01-23', textColor: 'rgb(68, 10, 184)', backgroundColor: 'rgb(211, 200, 229)', + border: '1px solid rgb(103, 58, 183)', }, ]; diff --git a/static/usage/v8/datetime/highlightedDates/callback/angular/example_component_ts.md b/static/usage/v8/datetime/highlightedDates/callback/angular/example_component_ts.md index b877e31c7e5..159d9f8700a 100644 --- a/static/usage/v8/datetime/highlightedDates/callback/angular/example_component_ts.md +++ b/static/usage/v8/datetime/highlightedDates/callback/angular/example_component_ts.md @@ -17,13 +17,15 @@ export class ExampleComponent { return { textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }; } if (utcDay % 3 === 0) { return { - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }; } diff --git a/static/usage/v8/datetime/highlightedDates/callback/demo.html b/static/usage/v8/datetime/highlightedDates/callback/demo.html index 855b797ed2d..447b01e38f5 100644 --- a/static/usage/v8/datetime/highlightedDates/callback/demo.html +++ b/static/usage/v8/datetime/highlightedDates/callback/demo.html @@ -34,13 +34,15 @@ return { textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }; } if (utcDay % 3 === 0) { return { - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }; } diff --git a/static/usage/v8/datetime/highlightedDates/callback/javascript.md b/static/usage/v8/datetime/highlightedDates/callback/javascript.md index 9041810960b..e7774445358 100644 --- a/static/usage/v8/datetime/highlightedDates/callback/javascript.md +++ b/static/usage/v8/datetime/highlightedDates/callback/javascript.md @@ -11,13 +11,15 @@ return { textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }; } if (utcDay % 3 === 0) { return { - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }; } diff --git a/static/usage/v8/datetime/highlightedDates/callback/react.md b/static/usage/v8/datetime/highlightedDates/callback/react.md index 6543a1366ca..b730427ea96 100644 --- a/static/usage/v8/datetime/highlightedDates/callback/react.md +++ b/static/usage/v8/datetime/highlightedDates/callback/react.md @@ -13,13 +13,15 @@ function Example() { return { textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }; } if (utcDay % 3 === 0) { return { - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }; } diff --git a/static/usage/v8/datetime/highlightedDates/callback/vue.md b/static/usage/v8/datetime/highlightedDates/callback/vue.md index e916b2cef1b..5288fefea8e 100644 --- a/static/usage/v8/datetime/highlightedDates/callback/vue.md +++ b/static/usage/v8/datetime/highlightedDates/callback/vue.md @@ -18,13 +18,15 @@ return { textColor: '#800080', backgroundColor: '#ffc0cb', + border: '1px solid #e91e63', }; } if (utcDay % 3 === 0) { return { - textColor: 'var(--ion-color-secondary-contrast)', - backgroundColor: 'var(--ion-color-secondary)', + textColor: 'var(--ion-color-secondary)', + backgroundColor: 'rgb(var(--ion-color-secondary-rgb), 0.18)', + border: '1px solid var(--ion-color-secondary-shade)', }; } diff --git a/static/usage/v8/radio/label-wrap/angular/example_component_css.md b/static/usage/v8/radio/label-wrap/angular/example_component_css.md new file mode 100644 index 00000000000..ec109440a50 --- /dev/null +++ b/static/usage/v8/radio/label-wrap/angular/example_component_css.md @@ -0,0 +1,9 @@ +```css +ion-list { + width: 250px; +} + +ion-radio.wrapped::part(label) { + white-space: normal; +} +``` diff --git a/static/usage/v8/radio/label-wrap/angular/example_component_html.md b/static/usage/v8/radio/label-wrap/angular/example_component_html.md new file mode 100644 index 00000000000..0837d088fab --- /dev/null +++ b/static/usage/v8/radio/label-wrap/angular/example_component_html.md @@ -0,0 +1,17 @@ +```html + + + + Truncated with ellipsis by default + + + Wrapping with text-wrap applied to label shadow part + + + +
Wrapping with ion-text-wrap class applied wrapper element
+
+
+
+
+``` diff --git a/static/usage/v8/radio/label-wrap/angular/example_component_ts.md b/static/usage/v8/radio/label-wrap/angular/example_component_ts.md new file mode 100644 index 00000000000..151a9f44f80 --- /dev/null +++ b/static/usage/v8/radio/label-wrap/angular/example_component_ts.md @@ -0,0 +1,12 @@ +```ts +import { Component } from '@angular/core'; +import { IonItem, IonList, IonRadio, IonRadioGroup } from '@ionic/angular/standalone'; + +@Component({ + selector: 'app-example', + templateUrl: 'example.component.html', + styleUrls: ['example.component.css'], + imports: [IonItem, IonList, IonRadio, IonRadioGroup], +}) +export class ExampleComponent {} +``` diff --git a/static/usage/v8/radio/label-wrap/demo.html b/static/usage/v8/radio/label-wrap/demo.html new file mode 100644 index 00000000000..6f8f030bcf2 --- /dev/null +++ b/static/usage/v8/radio/label-wrap/demo.html @@ -0,0 +1,48 @@ + + + + + + Radio + + + + + + + + + + + +
+ + + + Truncated with ellipsis by default + + + + Wrapping with text-wrap applied to label shadow part + + + + +
Wrapping with ion-text-wrap class applied wrapper element
+
+
+
+
+
+
+
+ + diff --git a/static/usage/v8/radio/label-wrap/index.md b/static/usage/v8/radio/label-wrap/index.md new file mode 100644 index 00000000000..95f743485e5 --- /dev/null +++ b/static/usage/v8/radio/label-wrap/index.md @@ -0,0 +1,34 @@ +import Playground from '@site/src/components/global/Playground'; + +import javascript from './javascript.md'; + +import react_main_tsx from './react/main_tsx.md'; +import react_main_css from './react/main_css.md'; + +import vue from './vue.md'; + +import angular_example_component_html from './angular/example_component_html.md'; +import angular_example_component_css from './angular/example_component_css.md'; +import angular_example_component_ts from './angular/example_component_ts.md'; + + diff --git a/static/usage/v8/radio/label-wrap/javascript.md b/static/usage/v8/radio/label-wrap/javascript.md new file mode 100644 index 00000000000..1bce1a8fd7a --- /dev/null +++ b/static/usage/v8/radio/label-wrap/javascript.md @@ -0,0 +1,27 @@ +```html + + + + Truncated with ellipsis by default + + + Wrapping with text-wrap applied to label shadow part + + + +
Wrapping with ion-text-wrap class applied wrapper element
+
+
+
+
+ + +``` diff --git a/static/usage/v8/radio/label-wrap/react/main_css.md b/static/usage/v8/radio/label-wrap/react/main_css.md new file mode 100644 index 00000000000..ec109440a50 --- /dev/null +++ b/static/usage/v8/radio/label-wrap/react/main_css.md @@ -0,0 +1,9 @@ +```css +ion-list { + width: 250px; +} + +ion-radio.wrapped::part(label) { + white-space: normal; +} +``` diff --git a/static/usage/v8/radio/label-wrap/react/main_tsx.md b/static/usage/v8/radio/label-wrap/react/main_tsx.md new file mode 100644 index 00000000000..25b4d4618dc --- /dev/null +++ b/static/usage/v8/radio/label-wrap/react/main_tsx.md @@ -0,0 +1,29 @@ +```tsx +import React from 'react'; +import { IonList, IonItem, IonRadio, IonRadioGroup } from '@ionic/react'; + +import './main.css'; + +function Example() { + return ( + + + + Truncated with ellipsis by default + + + + Wrapping with text-wrap applied to label shadow part + + + + +
Wrapping with ion-text-wrap class applied wrapper element
+
+
+
+
+ ); +} +export default Example; +``` diff --git a/static/usage/v8/radio/label-wrap/vue.md b/static/usage/v8/radio/label-wrap/vue.md new file mode 100644 index 00000000000..ecabbadb8b1 --- /dev/null +++ b/static/usage/v8/radio/label-wrap/vue.md @@ -0,0 +1,38 @@ +```html + + + + + +``` diff --git a/static/usage/v8/reorder/basic/angular/example_component_html.md b/static/usage/v8/reorder/basic/angular/example_component_html.md index 60795eaa3ff..8b1294bd101 100644 --- a/static/usage/v8/reorder/basic/angular/example_component_html.md +++ b/static/usage/v8/reorder/basic/angular/example_component_html.md @@ -2,7 +2,7 @@ - + Item 1 diff --git a/static/usage/v8/reorder/basic/angular/example_component_ts.md b/static/usage/v8/reorder/basic/angular/example_component_ts.md index 541fd9c6df3..5553891178a 100644 --- a/static/usage/v8/reorder/basic/angular/example_component_ts.md +++ b/static/usage/v8/reorder/basic/angular/example_component_ts.md @@ -1,12 +1,12 @@ ```ts import { Component } from '@angular/core'; import { - ItemReorderEventDetail, IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, + ReorderEndCustomEvent, } from '@ionic/angular/standalone'; @Component({ @@ -16,14 +16,14 @@ import { imports: [IonItem, IonLabel, IonList, IonReorder, IonReorderGroup], }) export class ExampleComponent { - handleReorder(event: CustomEvent) { + handleReorderEnd(event: ReorderEndCustomEvent) { // The `from` and `to` properties contain the index of the item // when the drag started and ended, respectively console.log('Dragged from index', event.detail.from, 'to', event.detail.to); // Finish the reorder and position the item in the DOM based on // where the gesture ended. This method can also be called directly - // by the reorder group + // by the reorder group. event.detail.complete(); } } diff --git a/static/usage/v8/reorder/basic/demo.html b/static/usage/v8/reorder/basic/demo.html index f9afb7d750a..7b8abca0b96 100644 --- a/static/usage/v8/reorder/basic/demo.html +++ b/static/usage/v8/reorder/basic/demo.html @@ -11,7 +11,7 @@ @@ -56,14 +56,14 @@ diff --git a/static/usage/v8/reorder/basic/javascript.md b/static/usage/v8/reorder/basic/javascript.md index fe805d10fc6..4b07e8ad210 100644 --- a/static/usage/v8/reorder/basic/javascript.md +++ b/static/usage/v8/reorder/basic/javascript.md @@ -32,14 +32,14 @@ diff --git a/static/usage/v8/reorder/basic/react.md b/static/usage/v8/reorder/basic/react.md index abe3b187294..397ebc395d7 100644 --- a/static/usage/v8/reorder/basic/react.md +++ b/static/usage/v8/reorder/basic/react.md @@ -1,23 +1,23 @@ ```tsx import React from 'react'; -import { IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, ItemReorderEventDetail } from '@ionic/react'; +import { IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, ReorderEndCustomEvent } from '@ionic/react'; function Example() { - function handleReorder(event: CustomEvent) { + function handleReorderEnd(event: ReorderEndCustomEvent) { // The `from` and `to` properties contain the index of the item // when the drag started and ended, respectively console.log('Dragged from index', event.detail.from, 'to', event.detail.to); // Finish the reorder and position the item in the DOM based on // where the gesture ended. This method can also be called directly - // by the reorder group + // by the reorder group. event.detail.complete(); } return ( {/* The reorder gesture is disabled by default, enable it to drag and drop items */} - + Item 1 diff --git a/static/usage/v8/reorder/basic/vue.md b/static/usage/v8/reorder/basic/vue.md index 0ac2374089f..285a1c347be 100644 --- a/static/usage/v8/reorder/basic/vue.md +++ b/static/usage/v8/reorder/basic/vue.md @@ -2,7 +2,7 @@ diff --git a/static/usage/v8/reorder/custom-icon/angular/example_component_html.md b/static/usage/v8/reorder/custom-icon/angular/example_component_html.md index 6d1fb8960bd..cc6692c862d 100644 --- a/static/usage/v8/reorder/custom-icon/angular/example_component_html.md +++ b/static/usage/v8/reorder/custom-icon/angular/example_component_html.md @@ -2,7 +2,7 @@ - + Item 1 diff --git a/static/usage/v8/reorder/custom-icon/angular/example_component_ts.md b/static/usage/v8/reorder/custom-icon/angular/example_component_ts.md index e9bdafd6df8..4d0472c0bd3 100644 --- a/static/usage/v8/reorder/custom-icon/angular/example_component_ts.md +++ b/static/usage/v8/reorder/custom-icon/angular/example_component_ts.md @@ -1,13 +1,13 @@ ```ts import { Component } from '@angular/core'; import { - ItemReorderEventDetail, IonIcon, IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, + ReorderEndCustomEvent, } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; @@ -29,14 +29,14 @@ export class ExampleComponent { addIcons({ pizza }); } - handleReorder(event: CustomEvent) { + handleReorderEnd(event: ReorderEndCustomEvent) { // The `from` and `to` properties contain the index of the item // when the drag started and ended, respectively console.log('Dragged from index', event.detail.from, 'to', event.detail.to); // Finish the reorder and position the item in the DOM based on // where the gesture ended. This method can also be called directly - // by the reorder group + // by the reorder group. event.detail.complete(); } } diff --git a/static/usage/v8/reorder/custom-icon/demo.html b/static/usage/v8/reorder/custom-icon/demo.html index ab2c55b9423..b089815bd07 100644 --- a/static/usage/v8/reorder/custom-icon/demo.html +++ b/static/usage/v8/reorder/custom-icon/demo.html @@ -11,7 +11,7 @@ @@ -66,14 +66,14 @@ diff --git a/static/usage/v8/reorder/custom-icon/javascript.md b/static/usage/v8/reorder/custom-icon/javascript.md index d7aa87d8f64..8535da7544a 100644 --- a/static/usage/v8/reorder/custom-icon/javascript.md +++ b/static/usage/v8/reorder/custom-icon/javascript.md @@ -42,14 +42,14 @@ diff --git a/static/usage/v8/reorder/custom-icon/javascript/index_html.md b/static/usage/v8/reorder/custom-icon/javascript/index_html.md index d7aa87d8f64..8535da7544a 100644 --- a/static/usage/v8/reorder/custom-icon/javascript/index_html.md +++ b/static/usage/v8/reorder/custom-icon/javascript/index_html.md @@ -42,14 +42,14 @@ diff --git a/static/usage/v8/reorder/custom-icon/react.md b/static/usage/v8/reorder/custom-icon/react.md index 9103db6029d..f5fe620035b 100644 --- a/static/usage/v8/reorder/custom-icon/react.md +++ b/static/usage/v8/reorder/custom-icon/react.md @@ -1,24 +1,24 @@ ```tsx import React from 'react'; -import { IonIcon, IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, ItemReorderEventDetail } from '@ionic/react'; +import { IonIcon, IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, ReorderEndCustomEvent } from '@ionic/react'; import { pizza } from 'ionicons/icons'; function Example() { - function handleReorder(event: CustomEvent) { + function handleReorderEnd(event: ReorderEndCustomEvent) { // The `from` and `to` properties contain the index of the item // when the drag started and ended, respectively console.log('Dragged from index', event.detail.from, 'to', event.detail.to); // Finish the reorder and position the item in the DOM based on // where the gesture ended. This method can also be called directly - // by the reorder group + // by the reorder group. event.detail.complete(); } return ( {/* The reorder gesture is disabled by default, enable it to drag and drop items */} - + Item 1 diff --git a/static/usage/v8/reorder/custom-icon/vue.md b/static/usage/v8/reorder/custom-icon/vue.md index 87d77e33048..eec6b5222a9 100644 --- a/static/usage/v8/reorder/custom-icon/vue.md +++ b/static/usage/v8/reorder/custom-icon/vue.md @@ -2,7 +2,7 @@ diff --git a/static/usage/v8/reorder/custom-scroll-target/angular/example_component_html.md b/static/usage/v8/reorder/custom-scroll-target/angular/example_component_html.md index 2296a5506c4..73fc3967021 100644 --- a/static/usage/v8/reorder/custom-scroll-target/angular/example_component_html.md +++ b/static/usage/v8/reorder/custom-scroll-target/angular/example_component_html.md @@ -4,7 +4,7 @@ - + Item 1 diff --git a/static/usage/v8/reorder/custom-scroll-target/angular/example_component_ts.md b/static/usage/v8/reorder/custom-scroll-target/angular/example_component_ts.md index bdd83c0417f..84dedb755b1 100644 --- a/static/usage/v8/reorder/custom-scroll-target/angular/example_component_ts.md +++ b/static/usage/v8/reorder/custom-scroll-target/angular/example_component_ts.md @@ -1,7 +1,7 @@ ```ts import { Component } from '@angular/core'; import { - ItemReorderEventDetail, + ReorderEndCustomEvent, IonContent, IonItem, IonLabel, @@ -17,14 +17,14 @@ import { imports: [IonContent, IonItem, IonLabel, IonList, IonReorder, IonReorderGroup], }) export class ExampleComponent { - handleReorder(event: CustomEvent) { + handleReorderEnd(event: ReorderEndCustomEvent) { // The `from` and `to` properties contain the index of the item // when the drag started and ended, respectively console.log('Dragged from index', event.detail.from, 'to', event.detail.to); // Finish the reorder and position the item in the DOM based on // where the gesture ended. This method can also be called directly - // by the reorder group + // by the reorder group. event.detail.complete(); } } diff --git a/static/usage/v8/reorder/custom-scroll-target/demo.html b/static/usage/v8/reorder/custom-scroll-target/demo.html index 760fb525d79..fb66a69e0ce 100644 --- a/static/usage/v8/reorder/custom-scroll-target/demo.html +++ b/static/usage/v8/reorder/custom-scroll-target/demo.html @@ -10,16 +10,17 @@ + + + + + +
+ + + + +
+
+
+ + + + diff --git a/static/usage/v8/reorder/reorder-move-event/index.md b/static/usage/v8/reorder/reorder-move-event/index.md new file mode 100644 index 00000000000..be938ff393c --- /dev/null +++ b/static/usage/v8/reorder/reorder-move-event/index.md @@ -0,0 +1,26 @@ +import Playground from '@site/src/components/global/Playground'; + +import javascript from './javascript.md'; +import react from './react.md'; +import vue from './vue.md'; + +import angular_example_component_ts from './angular/example_component_ts.md'; +import angular_example_component_html from './angular/example_component_html.md'; + + diff --git a/static/usage/v8/reorder/reorder-move-event/javascript.md b/static/usage/v8/reorder/reorder-move-event/javascript.md new file mode 100644 index 00000000000..e559409668b --- /dev/null +++ b/static/usage/v8/reorder/reorder-move-event/javascript.md @@ -0,0 +1,89 @@ +```html + + + + + + +``` diff --git a/static/usage/v8/reorder/reorder-move-event/react.md b/static/usage/v8/reorder/reorder-move-event/react.md new file mode 100644 index 00000000000..39a0680728d --- /dev/null +++ b/static/usage/v8/reorder/reorder-move-event/react.md @@ -0,0 +1,92 @@ +```tsx +import React, { useState } from 'react'; +import { + IonItem, + IonLabel, + IonList, + IonReorder, + IonReorderGroup, + ReorderEndCustomEvent, + ReorderMoveCustomEvent, +} from '@ionic/react'; + +function Example() { + const [items, setItems] = useState([ + 'Buy groceries', + 'Call the bank', + 'Finish project report', + 'Book flight tickets', + 'Read a book', + ]); + + function handleReorderMove(event: ReorderMoveCustomEvent) { + const from = event.detail.from; + const to = event.detail.to; + + if (from !== to) { + console.log('Dragged from index', from, 'to', to); + } + + // Get all items and sort by their current id (item-1, item-2, ...) + const itemElements = Array.from(document.querySelectorAll('ion-item')).sort((a, b) => { + const aNum = parseInt(a.id.replace('item-', ''), 10); + const bNum = parseInt(b.id.replace('item-', ''), 10); + return aNum - bNum; + }); + + // Dragging down: shift up items between from+1 and to, set dragged to to+1 + if (from < to) { + for (let i = from; i <= to; i++) { + const item = itemElements[i]; + const itemNum = item.querySelector('b'); + if (i === from) { + // Dragged item + itemNum!.textContent = String(to + 1); + item.id = `item-${to + 1}`; + } else { + // Items shift up + itemNum!.textContent = String(i); + item.id = `item-${i}`; + } + } + // Dragging up: shift down items between to and from-1, set dragged to to+1 + } else if (from > to) { + for (let i = to; i <= from; i++) { + const item = itemElements[i]; + const itemNum = item.querySelector('b'); + if (i === from) { + // Dragged item + itemNum!.textContent = String(to + 1); + item.id = `item-${to + 1}`; + } else { + // Items shift down + itemNum!.textContent = String(i + 2); + item.id = `item-${i + 2}`; + } + } + } + } + + function handleReorderEnd(event: ReorderEndCustomEvent) { + // Finish the reorder and update the items data + setItems(event.detail.complete(items)); + } + + return ( + + {/* The reorder gesture is disabled by default, enable it to drag and drop items */} + + {items.map((item, index) => ( + + {index + 1} + {item} + + + ))} + + + ); +} + +export default Example; +``` diff --git a/static/usage/v8/reorder/reorder-move-event/vue.md b/static/usage/v8/reorder/reorder-move-event/vue.md new file mode 100644 index 00000000000..cd3518e5aac --- /dev/null +++ b/static/usage/v8/reorder/reorder-move-event/vue.md @@ -0,0 +1,81 @@ +```html + + + +``` diff --git a/static/usage/v8/reorder/reorder-start-end-events/angular/example_component_html.md b/static/usage/v8/reorder/reorder-start-end-events/angular/example_component_html.md new file mode 100644 index 00000000000..7b9be3a150c --- /dev/null +++ b/static/usage/v8/reorder/reorder-start-end-events/angular/example_component_html.md @@ -0,0 +1,19 @@ +```html + + + + + @for (item of items; track item; let i = $index) { + + {{ item.label }} + + + + } + + +``` diff --git a/static/usage/v8/reorder/reorder-start-end-events/angular/example_component_ts.md b/static/usage/v8/reorder/reorder-start-end-events/angular/example_component_ts.md new file mode 100644 index 00000000000..ec4ccbdb946 --- /dev/null +++ b/static/usage/v8/reorder/reorder-start-end-events/angular/example_component_ts.md @@ -0,0 +1,62 @@ +```ts +import { Component, ViewChildren, QueryList, ElementRef } from '@angular/core'; +import { + ReorderEndCustomEvent, + IonItem, + IonLabel, + IonList, + IonReorder, + IonReorderGroup, + IonIcon, +} from '@ionic/angular/standalone'; +import { addIcons } from 'ionicons'; +import { caretDown, ellipse, warning } from 'ionicons/icons'; + +@Component({ + selector: 'app-example', + templateUrl: 'example.component.html', + styleUrls: ['example.component.css'], + imports: [IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, IonIcon], +}) +export class ExampleComponent { + items = [ + { label: 'Buy groceries', icon: 'warning', color: 'warning' }, + { label: 'Call the bank', icon: 'warning', color: 'warning' }, + { label: 'Finish project report', icon: 'ellipse', color: 'light' }, + { label: 'Book flight tickets', icon: 'ellipse', color: 'light' }, + { label: 'Read a book', icon: 'caret-down', color: 'secondary' }, + ]; + + @ViewChildren('icon', { read: ElementRef }) icons!: QueryList>; + + constructor() { + /** + * Any icons you want to use in your application + * can be registered in app.component.ts and then + * referenced by name anywhere in your application. + */ + addIcons({ caretDown, ellipse, warning }); + } + + handleReorderStart() { + console.log('Reorder started'); + + // Hide the icons when the reorder starts + this.icons.forEach((icon) => { + icon.nativeElement.style.opacity = '0'; + }); + } + + handleReorderEnd(event: ReorderEndCustomEvent) { + console.log('Dragged from index', event.detail.from, 'to', event.detail.to); + + // Show the icons again + this.icons.forEach((icon) => { + icon.nativeElement.style.opacity = '1'; + }); + + // Finish the reorder and update the items data + this.items = event.detail.complete(this.items); + } +} +``` diff --git a/static/usage/v8/reorder/reorder-start-end-events/demo.html b/static/usage/v8/reorder/reorder-start-end-events/demo.html new file mode 100644 index 00000000000..72e214b83fe --- /dev/null +++ b/static/usage/v8/reorder/reorder-start-end-events/demo.html @@ -0,0 +1,82 @@ + + + + + + Reorder + + + + + + + + + + + +
+ + + + + Buy groceries + + + + + Call the bank + + + + + Finish project report + + + + + Book flight tickets + + + + + Read a book + + + + + +
+
+
+ + + + diff --git a/static/usage/v8/reorder/reorder-start-end-events/index.md b/static/usage/v8/reorder/reorder-start-end-events/index.md new file mode 100644 index 00000000000..5e7d48127d1 --- /dev/null +++ b/static/usage/v8/reorder/reorder-start-end-events/index.md @@ -0,0 +1,33 @@ +import Playground from '@site/src/components/global/Playground'; + +import javascript_index_html from './javascript/index_html.md'; +import javascript_index_ts from './javascript/index_ts.md'; + +import react from './react.md'; +import vue from './vue.md'; + +import angular_example_component_html from './angular/example_component_html.md'; +import angular_example_component_ts from './angular/example_component_ts.md'; + + diff --git a/static/usage/v8/reorder/reorder-start-end-events/javascript/index_html.md b/static/usage/v8/reorder/reorder-start-end-events/javascript/index_html.md new file mode 100644 index 00000000000..a98397de9e1 --- /dev/null +++ b/static/usage/v8/reorder/reorder-start-end-events/javascript/index_html.md @@ -0,0 +1,57 @@ +```html + + + + + Buy groceries + + + + + Call the bank + + + + + Finish project report + + + + + Book flight tickets + + + + + Read a book + + + + + + + +``` diff --git a/static/usage/v8/reorder/reorder-start-end-events/javascript/index_ts.md b/static/usage/v8/reorder/reorder-start-end-events/javascript/index_ts.md new file mode 100644 index 00000000000..c9e03106886 --- /dev/null +++ b/static/usage/v8/reorder/reorder-start-end-events/javascript/index_ts.md @@ -0,0 +1,47 @@ +```ts +import { defineCustomElements } from '@ionic/core/loader'; + +import { addIcons } from 'ionicons'; +import { caretDown, ellipse, warning } from 'ionicons/icons'; + +/* Core CSS required for Ionic components to work properly */ +import '@ionic/core/css/core.css'; + +/* Basic CSS for apps built with Ionic */ +import '@ionic/core/css/normalize.css'; +import '@ionic/core/css/structure.css'; +import '@ionic/core/css/typography.css'; + +/* Optional CSS utils that can be commented out */ +import '@ionic/core/css/padding.css'; +import '@ionic/core/css/float-elements.css'; +import '@ionic/core/css/text-alignment.css'; +import '@ionic/core/css/text-transformation.css'; +import '@ionic/core/css/flex-utils.css'; +import '@ionic/core/css/display.css'; + +/** + * Ionic Dark Palette + * ----------------------------------------------------- + * For more information, please see: + * https://ionicframework.com/docs/theming/dark-mode + */ + +// import '@ionic/core/css/palettes/dark.always.css'; +// import '@ionic/core/css/palettes/dark.class.css'; +import '@ionic/core/css/palettes/dark.system.css'; + +/* Theme variables */ +import './theme/variables.css'; + +/** + * On Ionicons 7.2+ these icons get mapped + * to "caret-down", "ellipse", "warning" keys. + * Alternatively, developers can do: + * addIcons({ 'caret-down': caretDown, + * "ellipse": ellipse, "warning": warning }); + */ +addIcons({ caretDown, ellipse, warning }); + +defineCustomElements(); +``` diff --git a/static/usage/v8/reorder/reorder-start-end-events/react.md b/static/usage/v8/reorder/reorder-start-end-events/react.md new file mode 100644 index 00000000000..c70462d5b32 --- /dev/null +++ b/static/usage/v8/reorder/reorder-start-end-events/react.md @@ -0,0 +1,67 @@ +```tsx +import React, { useRef, useState } from 'react'; +import { IonIcon, IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, ReorderEndCustomEvent } from '@ionic/react'; +import { caretDown, ellipse, warning } from 'ionicons/icons'; + +interface TodoItem { + label: string; + icon: string; + color: string; +} + +function Example() { + const [items, setItems] = useState([ + { label: 'Buy groceries', icon: warning, color: 'warning' }, + { label: 'Call the bank', icon: warning, color: 'warning' }, + { label: 'Finish project report', icon: ellipse, color: 'light' }, + { label: 'Book flight tickets', icon: ellipse, color: 'light' }, + { label: 'Read a book', icon: caretDown, color: 'secondary' }, + ]); + const iconsRef = useRef<(HTMLIonIconElement | null)[]>([]); + + function handleReorderStart() { + console.log('Reorder started'); + + // Hide the icons when the reorder starts + iconsRef.current.forEach((icon) => { + if (icon) icon.style.opacity = '0'; + }); + } + + function handleReorderEnd(event: ReorderEndCustomEvent) { + console.log('Dragged from index', event.detail.from, 'to', event.detail.to); + + // Show the icons again + iconsRef.current.forEach((icon) => { + if (icon) icon.style.opacity = '1'; + }); + + // Finish the reorder and update the items data + setItems(event.detail.complete(items)); + } + + return ( + + {/* The reorder gesture is disabled by default, enable it to drag and drop items */} + + {items.map((item: TodoItem, i: number) => ( + + {item.label} + { + iconsRef.current[i] = el; + }} + /> + + + ))} + + + ); +} + +export default Example; +``` diff --git a/static/usage/v8/reorder/reorder-start-end-events/vue.md b/static/usage/v8/reorder/reorder-start-end-events/vue.md new file mode 100644 index 00000000000..0648e09bddc --- /dev/null +++ b/static/usage/v8/reorder/reorder-start-end-events/vue.md @@ -0,0 +1,59 @@ +```html + + + +``` diff --git a/static/usage/v8/reorder/toggling-disabled/angular/example_component_html.md b/static/usage/v8/reorder/toggling-disabled/angular/example_component_html.md index aca04f1ee5a..dbfe175895b 100644 --- a/static/usage/v8/reorder/toggling-disabled/angular/example_component_html.md +++ b/static/usage/v8/reorder/toggling-disabled/angular/example_component_html.md @@ -1,7 +1,7 @@ ```html - + Item 1 diff --git a/static/usage/v8/reorder/toggling-disabled/angular/example_component_ts.md b/static/usage/v8/reorder/toggling-disabled/angular/example_component_ts.md index 496e59f15e1..1e1448b61a0 100644 --- a/static/usage/v8/reorder/toggling-disabled/angular/example_component_ts.md +++ b/static/usage/v8/reorder/toggling-disabled/angular/example_component_ts.md @@ -1,13 +1,13 @@ ```ts import { Component } from '@angular/core'; import { - ItemReorderEventDetail, IonButton, IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, + ReorderEndCustomEvent, } from '@ionic/angular/standalone'; @Component({ @@ -19,14 +19,14 @@ import { export class ExampleComponent { public isDisabled = true; - handleReorder(event: CustomEvent) { + handleReorderEnd(event: ReorderEndCustomEvent) { // The `from` and `to` properties contain the index of the item // when the drag started and ended, respectively console.log('Dragged from index', event.detail.from, 'to', event.detail.to); // Finish the reorder and position the item in the DOM based on // where the gesture ended. This method can also be called directly - // by the reorder group + // by the reorder group. event.detail.complete(); } diff --git a/static/usage/v8/reorder/toggling-disabled/demo.html b/static/usage/v8/reorder/toggling-disabled/demo.html index 46481ab3dc0..4b5dc99e6e8 100644 --- a/static/usage/v8/reorder/toggling-disabled/demo.html +++ b/static/usage/v8/reorder/toggling-disabled/demo.html @@ -16,7 +16,7 @@ } ion-list { - width: 100%; + width: 300px; } @@ -63,14 +63,14 @@ diff --git a/static/usage/v8/reorder/updating-data/angular/example_component_html.md b/static/usage/v8/reorder/updating-data/angular/example_component_html.md index 873daed0e90..6326a17c949 100644 --- a/static/usage/v8/reorder/updating-data/angular/example_component_html.md +++ b/static/usage/v8/reorder/updating-data/angular/example_component_html.md @@ -2,7 +2,7 @@ - + @for (item of items; track item) { Item {{ item }} diff --git a/static/usage/v8/reorder/updating-data/angular/example_component_ts.md b/static/usage/v8/reorder/updating-data/angular/example_component_ts.md index f70f2bed206..d476b6fdfa0 100644 --- a/static/usage/v8/reorder/updating-data/angular/example_component_ts.md +++ b/static/usage/v8/reorder/updating-data/angular/example_component_ts.md @@ -1,12 +1,12 @@ ```ts import { Component } from '@angular/core'; import { - ItemReorderEventDetail, IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, + ReorderEndCustomEvent, } from '@ionic/angular/standalone'; @Component({ @@ -18,7 +18,7 @@ import { export class ExampleComponent { items = [1, 2, 3, 4, 5]; - handleReorder(event: CustomEvent) { + handleReorderEnd(event: ReorderEndCustomEvent) { // Before complete is called with the items they will remain in the // order before the drag console.log('Before complete', this.items); diff --git a/static/usage/v8/reorder/updating-data/demo.html b/static/usage/v8/reorder/updating-data/demo.html index 8f0ca1b7cda..a01deb9600c 100644 --- a/static/usage/v8/reorder/updating-data/demo.html +++ b/static/usage/v8/reorder/updating-data/demo.html @@ -11,7 +11,7 @@ @@ -34,7 +34,7 @@ let items = [1, 2, 3, 4, 5]; reorderItems(items); - reorderGroup.addEventListener('ionItemReorder', ({ detail }) => { + reorderGroup.addEventListener('ionReorderEnd', ({ detail }) => { // Before complete is called with the items they will remain in the // order before the drag console.log('Before complete', items); diff --git a/static/usage/v8/reorder/updating-data/javascript.md b/static/usage/v8/reorder/updating-data/javascript.md index 901bf08a970..28ef0989eea 100644 --- a/static/usage/v8/reorder/updating-data/javascript.md +++ b/static/usage/v8/reorder/updating-data/javascript.md @@ -10,7 +10,7 @@ let items = [1, 2, 3, 4, 5]; reorderItems(items); - reorderGroup.addEventListener('ionItemReorder', ({ detail }) => { + reorderGroup.addEventListener('ionReorderEnd', ({ detail }) => { // Before complete is called with the items they will remain in the // order before the drag console.log('Before complete', items); diff --git a/static/usage/v8/reorder/updating-data/react.md b/static/usage/v8/reorder/updating-data/react.md index acbf422d017..36b9049e56a 100644 --- a/static/usage/v8/reorder/updating-data/react.md +++ b/static/usage/v8/reorder/updating-data/react.md @@ -1,11 +1,11 @@ ```tsx import React, { useState } from 'react'; -import { IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, ItemReorderEventDetail } from '@ionic/react'; +import { IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, ReorderEndCustomEvent } from '@ionic/react'; function Example() { const [items, setItems] = useState([1, 2, 3, 4, 5]); - function handleReorder(event: CustomEvent) { + function handleReorderEnd(event: ReorderEndCustomEvent) { // Before complete is called with the items they will remain in the // order before the drag console.log('Before complete', items); @@ -22,7 +22,7 @@ function Example() { return ( {/* The reorder gesture is disabled by default, enable it to drag and drop items */} - + {items.map((item) => ( Item {item} diff --git a/static/usage/v8/reorder/updating-data/vue.md b/static/usage/v8/reorder/updating-data/vue.md index 024caf38347..188df041bc2 100644 --- a/static/usage/v8/reorder/updating-data/vue.md +++ b/static/usage/v8/reorder/updating-data/vue.md @@ -2,7 +2,7 @@ diff --git a/static/usage/v8/reorder/wrapper/angular/example_component_html.md b/static/usage/v8/reorder/wrapper/angular/example_component_html.md index cf856309098..5abb818e8b3 100644 --- a/static/usage/v8/reorder/wrapper/angular/example_component_html.md +++ b/static/usage/v8/reorder/wrapper/angular/example_component_html.md @@ -2,7 +2,7 @@ - + Item 1 diff --git a/static/usage/v8/reorder/wrapper/angular/example_component_ts.md b/static/usage/v8/reorder/wrapper/angular/example_component_ts.md index 541fd9c6df3..5553891178a 100644 --- a/static/usage/v8/reorder/wrapper/angular/example_component_ts.md +++ b/static/usage/v8/reorder/wrapper/angular/example_component_ts.md @@ -1,12 +1,12 @@ ```ts import { Component } from '@angular/core'; import { - ItemReorderEventDetail, IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, + ReorderEndCustomEvent, } from '@ionic/angular/standalone'; @Component({ @@ -16,14 +16,14 @@ import { imports: [IonItem, IonLabel, IonList, IonReorder, IonReorderGroup], }) export class ExampleComponent { - handleReorder(event: CustomEvent) { + handleReorderEnd(event: ReorderEndCustomEvent) { // The `from` and `to` properties contain the index of the item // when the drag started and ended, respectively console.log('Dragged from index', event.detail.from, 'to', event.detail.to); // Finish the reorder and position the item in the DOM based on // where the gesture ended. This method can also be called directly - // by the reorder group + // by the reorder group. event.detail.complete(); } } diff --git a/static/usage/v8/reorder/wrapper/demo.html b/static/usage/v8/reorder/wrapper/demo.html index 1322a6ee6fd..e4520630556 100644 --- a/static/usage/v8/reorder/wrapper/demo.html +++ b/static/usage/v8/reorder/wrapper/demo.html @@ -11,7 +11,7 @@ @@ -61,14 +61,14 @@ diff --git a/static/usage/v8/reorder/wrapper/javascript.md b/static/usage/v8/reorder/wrapper/javascript.md index e4e024ee2d4..3cd52cb1e8c 100644 --- a/static/usage/v8/reorder/wrapper/javascript.md +++ b/static/usage/v8/reorder/wrapper/javascript.md @@ -37,14 +37,14 @@ diff --git a/static/usage/v8/reorder/wrapper/react.md b/static/usage/v8/reorder/wrapper/react.md index f70ba499316..50210964586 100644 --- a/static/usage/v8/reorder/wrapper/react.md +++ b/static/usage/v8/reorder/wrapper/react.md @@ -1,23 +1,23 @@ ```tsx import React from 'react'; -import { IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, ItemReorderEventDetail } from '@ionic/react'; +import { IonItem, IonLabel, IonList, IonReorder, IonReorderGroup, ReorderEndCustomEvent } from '@ionic/react'; function Example() { - function handleReorder(event: CustomEvent) { + function handleReorderEnd(event: ReorderEndCustomEvent) { // The `from` and `to` properties contain the index of the item // when the drag started and ended, respectively console.log('Dragged from index', event.detail.from, 'to', event.detail.to); // Finish the reorder and position the item in the DOM based on // where the gesture ended. This method can also be called directly - // by the reorder group + // by the reorder group. event.detail.complete(); } return ( {/* The reorder gesture is disabled by default, enable it to drag and drop items */} - + Item 1 diff --git a/static/usage/v8/reorder/wrapper/vue.md b/static/usage/v8/reorder/wrapper/vue.md index fd157186093..1b114e575de 100644 --- a/static/usage/v8/reorder/wrapper/vue.md +++ b/static/usage/v8/reorder/wrapper/vue.md @@ -2,7 +2,7 @@ diff --git a/versioned_docs/version-v5/layout/css-utilities.md b/versioned_docs/version-v5/layout/css-utilities.md index c2dfe9934d4..e81b9503249 100644 --- a/versioned_docs/version-v5/layout/css-utilities.md +++ b/versioned_docs/version-v5/layout/css-utilities.md @@ -6,13 +6,13 @@ title: CSS Utilities Ionic Framework provides a set of CSS utility classes that can be used on any element in order to modify the text, element placement or adjust the padding and margin. -:::note +:::important If your app was not started using an available Ionic Framework starter, the stylesheets listed in the [optional section of the global stylesheets](global-stylesheets.md#optional) will need to be included in order for these styles to work. ::: ## Text Modification -### Text Alignment +### Text Align ```html @@ -70,7 +70,7 @@ If your app was not started using an available Ionic Framework starter, the styl | `.ion-text-wrap` | `white-space: normal` | Sequences of whitespace are collapsed. Newline characters in the source are handled as other whitespace. Breaks lines as necessary to fill line boxes. | | `.ion-text-nowrap` | `white-space: nowrap` | Collapses whitespace as for `normal`, but suppresses line breaks (text wrapping) within text. | -### Text Transformation +### Text Transform ```html @@ -121,7 +121,7 @@ The table below shows the default behavior, where `{modifier}` is any of the fol ### Float Elements -The float CSS property specifies that an element should be placed along the left or right side of its container, where text and inline elements will wrap around it. This way, the element is taken from the normal flow of the web page, though still remaining a part of the flow, contrary to absolute positioning. +The [float](https://developer.mozilla.org/en-US/docs/Web/CSS/float) CSS property specifies that an element should be placed along the left or right side of its container, where text and inline elements will wrap around it. This way, the element is taken from the normal flow of the web page, though still remaining a part of the flow, contrary to absolute positioning. ```html @@ -165,7 +165,7 @@ The table below shows the default behavior, where `{modifier}` is any of the fol ## Element Display -The display CSS property determines if an element should be visible or not. The element will still be in the DOM, but not rendered, if it is hidden. +The [display](https://developer.mozilla.org/en-US/docs/Web/CSS/display) CSS property sets whether an element is treated as a block or inline box and the layout used for its children, such as flow layout, grid or flex. It can also be used to completely hide an element from the layout. ```html @@ -190,7 +190,7 @@ The display CSS property determines if an element should be visible or not. The | ----------- | --------------- | --------------------------- | | `.ion-hide` | `display: none` | The element will be hidden. | -### Responsive Display Attributes +### Responsive Display Classes There are also additional classes to modify the visibility based on the screen size. Instead of just `.ion-hide` for all screen sizes, use `.ion-hide-{breakpoint}-{dir}` to only use the class on specific screen sizes, where `{breakpoint}` is one of the breakpoint names listed in [Ionic Breakpoints](#ionic-breakpoints), and `{dir}` is whether the element should be hidden on all screen sizes above (`up`) or below (`down`) the specified breakpoint. @@ -203,7 +203,7 @@ There are also additional classes to modify the visibility based on the screen s ## Content Space -### Element Padding +### Padding The padding class sets the padding area of an element. The padding area is the space between the content of the element and its border. @@ -253,7 +253,7 @@ The default amount of `padding` to be applied is `16px` and is set by the `--ion | `.ion-padding-horizontal` | `padding: 0 16px` | Applies padding to the left and right. | | `.ion-no-padding` | `padding: 0` | Applies no padding to all sides. | -### Element Margin +### Margin The margin area extends the border area with an empty area used to separate the element from its neighbors. @@ -493,7 +493,7 @@ The default amount of `margin` to be applied is `16px` and is set by the `--ion- ## Border Display -The border display CSS property determines if the border should be visible or not. The property can be applied to the ion-header and the ion-footer. +The `.ion-no-border` utility class can be used to remove borders from Ionic components. This class can be applied to the `ion-header` and `ion-footer` components. ```html diff --git a/versioned_docs/version-v6/layout/css-utilities.md b/versioned_docs/version-v6/layout/css-utilities.md index f743f94a139..20e40f101cc 100644 --- a/versioned_docs/version-v6/layout/css-utilities.md +++ b/versioned_docs/version-v6/layout/css-utilities.md @@ -12,13 +12,13 @@ title: CSS Utilities Ionic Framework provides a set of CSS utility classes that can be used on any element in order to modify the text, element placement or adjust the padding and margin. -:::note +:::important If your app was not started using an available Ionic Framework starter, the stylesheets listed in the [optional section of the global stylesheets](global-stylesheets.md#optional) will need to be included in order for these styles to work. ::: ## Text Modification -### Text Alignment +### Text Align ```html @@ -76,7 +76,7 @@ If your app was not started using an available Ionic Framework starter, the styl | `.ion-text-wrap` | `white-space: normal` | Sequences of whitespace are collapsed. Newline characters in the source are handled as other whitespace. Breaks lines as necessary to fill line boxes. | | `.ion-text-nowrap` | `white-space: nowrap` | Collapses whitespace as for `normal`, but suppresses line breaks (text wrapping) within text. | -### Text Transformation +### Text Transform ```html @@ -127,7 +127,7 @@ The table below shows the default behavior, where `{modifier}` is any of the fol ### Float Elements -The float CSS property specifies that an element should be placed along the left or right side of its container, where text and inline elements will wrap around it. This way, the element is taken from the normal flow of the web page, though still remaining a part of the flow, contrary to absolute positioning. +The [float](https://developer.mozilla.org/en-US/docs/Web/CSS/float) CSS property specifies that an element should be placed along the left or right side of its container, where text and inline elements will wrap around it. This way, the element is taken from the normal flow of the web page, though still remaining a part of the flow, contrary to absolute positioning. ```html @@ -171,7 +171,7 @@ The table below shows the default behavior, where `{modifier}` is any of the fol ## Element Display -The display CSS property determines if an element should be visible or not. The element will still be in the DOM, but not rendered, if it is hidden. +The [display](https://developer.mozilla.org/en-US/docs/Web/CSS/display) CSS property sets whether an element is treated as a block or inline box and the layout used for its children, such as flow layout, grid or flex. It can also be used to completely hide an element from the layout. ```html @@ -196,7 +196,7 @@ The display CSS property determines if an element should be visible or not. The | ----------- | --------------- | --------------------------- | | `.ion-hide` | `display: none` | The element will be hidden. | -### Responsive Display Attributes +### Responsive Display Classes There are also additional classes to modify the visibility based on the screen size. Instead of just `.ion-hide` for all screen sizes, use `.ion-hide-{breakpoint}-{dir}` to only use the class on specific screen sizes, where `{breakpoint}` is one of the breakpoint names listed in [Ionic Breakpoints](#ionic-breakpoints), and `{dir}` is whether the element should be hidden on all screen sizes above (`up`) or below (`down`) the specified breakpoint. @@ -209,7 +209,7 @@ There are also additional classes to modify the visibility based on the screen s ## Content Space -### Element Padding +### Padding The padding class sets the padding area of an element. The padding area is the space between the content of the element and its border. @@ -259,7 +259,7 @@ The default amount of `padding` to be applied is `16px` and is set by the `--ion | `.ion-padding-horizontal` | `padding: 0 16px` | Applies padding to the left and right. | | `.ion-no-padding` | `padding: 0` | Applies no padding to all sides. | -### Element Margin +### Margin The margin area extends the border area with an empty area used to separate the element from its neighbors. @@ -499,7 +499,7 @@ The default amount of `margin` to be applied is `16px` and is set by the `--ion- ## Border Display -The border display CSS property determines if the border should be visible or not. The property can be applied to the ion-header and the ion-footer. +The `.ion-no-border` utility class can be used to remove borders from Ionic components. This class can be applied to the `ion-header` and `ion-footer` components. ```html diff --git a/versioned_docs/version-v7/api/radio.md b/versioned_docs/version-v7/api/radio.md index c470a326ed6..8cec4707042 100644 --- a/versioned_docs/version-v7/api/radio.md +++ b/versioned_docs/version-v7/api/radio.md @@ -39,6 +39,14 @@ import LabelPlacement from '@site/static/usage/v7/radio/label-placement/index.md +## Label Wrapping + +Regardless of label placement, long text will not wrap by default. If the width of the radio is constrained, overflowing text will be truncated with an ellipsis. You can enable text wrapping by adding the `ion-text-wrap` class to a wrapper around the radio text or styling the `label` shadow part using the `::part()` selector. + +import LabelWrap from '@site/static/usage/v7/radio/label-wrap/index.md'; + + + ## Object Value References By default, the radio group uses strict equality (`===`) to determine if an option is selected. This can be overridden by providing a property name or a function to the `compareWith` property. diff --git a/versioned_docs/version-v7/layout/css-utilities.md b/versioned_docs/version-v7/layout/css-utilities.md index 05bb0a88aaa..21bf56b8d4c 100644 --- a/versioned_docs/version-v7/layout/css-utilities.md +++ b/versioned_docs/version-v7/layout/css-utilities.md @@ -14,13 +14,13 @@ inlineHtmlPreviews: true Ionic Framework provides a set of CSS utility classes that can be used on any element in order to modify the text, element placement or adjust the padding and margin. -:::note +:::important If your app was not started using an available Ionic Framework starter, the stylesheets listed in the [optional section of the global stylesheets](global-stylesheets.md#optional) will need to be included in order for these styles to work. ::: ## Text Modification -### Text Alignment +### Text Align ```html @@ -78,7 +78,7 @@ If your app was not started using an available Ionic Framework starter, the styl | `.ion-text-wrap` | `white-space: normal` | Sequences of whitespace are collapsed. Newline characters in the source are handled as other whitespace. Breaks lines as necessary to fill line boxes. | | `.ion-text-nowrap` | `white-space: nowrap` | Collapses whitespace as for `normal`, but suppresses line breaks (text wrapping) within text. | -### Text Transformation +### Text Transform ```html @@ -129,7 +129,7 @@ The table below shows the default behavior, where `{modifier}` is any of the fol ### Float Elements -The float CSS property specifies that an element should be placed along the left or right side of its container, where text and inline elements will wrap around it. This way, the element is taken from the normal flow of the web page, though still remaining a part of the flow, contrary to absolute positioning. +The [float](https://developer.mozilla.org/en-US/docs/Web/CSS/float) CSS property specifies that an element should be placed along the left or right side of its container, where text and inline elements will wrap around it. This way, the element is taken from the normal flow of the web page, though still remaining a part of the flow, contrary to absolute positioning. ```html @@ -190,7 +190,7 @@ The table below shows the default behavior, where `{modifier}` is any of the fol ## Element Display -The display CSS property determines if an element should be visible or not. The element will still be in the DOM, but not rendered, if it is hidden. +The [display](https://developer.mozilla.org/en-US/docs/Web/CSS/display) CSS property sets whether an element is treated as a block or inline box and the layout used for its children, such as flow layout, grid or flex. It can also be used to completely hide an element from the layout. ```html @@ -215,7 +215,7 @@ The display CSS property determines if an element should be visible or not. The | ----------- | --------------- | --------------------------- | | `.ion-hide` | `display: none` | The element will be hidden. | -### Responsive Display Attributes +### Responsive Display Classes There are also additional classes to modify the visibility based on the screen size. Instead of just `.ion-hide` for all screen sizes, use `.ion-hide-{breakpoint}-{dir}` to only use the class on specific screen sizes, where `{breakpoint}` is one of the breakpoint names listed in [Ionic Breakpoints](#ionic-breakpoints), and `{dir}` is whether the element should be hidden on all screen sizes above (`up`) or below (`down`) the specified breakpoint. @@ -228,7 +228,7 @@ There are also additional classes to modify the visibility based on the screen s ## Content Space -### Element Padding +### Padding The padding class sets the padding area of an element. The padding area is the space between the content of the element and its border. @@ -278,7 +278,7 @@ The default amount of `padding` to be applied is `16px` and is set by the `--ion | `.ion-padding-horizontal` | `padding: 0 16px` | Applies padding to the left and right. | | `.ion-no-padding` | `padding: 0` | Applies no padding to all sides. | -### Element Margin +### Margin The margin area extends the border area with an empty area used to separate the element from its neighbors. @@ -518,7 +518,7 @@ The default amount of `margin` to be applied is `16px` and is set by the `--ion- ## Border Display -The border display CSS property determines if the border should be visible or not. The property can be applied to the ion-header and the ion-footer. +The `.ion-no-border` utility class can be used to remove borders from Ionic components. This class can be applied to the `ion-header` and `ion-footer` components. ```html
` element. | +| `.ion-display-table-row` | `display: table-row` | The element behaves like an HTML `