From 5420c98073f4298a7da30f18aaf130edde1285c1 Mon Sep 17 00:00:00 2001
From: JounQin <admin@1stg.me>
Date: Tue, 15 Aug 2023 17:41:15 +0800
Subject: [PATCH 1/4] feat: migrate to standalone API

---
 patches/inquirer+8.2.4.patch                  | 13 +++++++++
 .../accordion-item.component.ts               |  6 ++++
 src/accordion/accordion.component.spec.ts     |  5 ++--
 src/accordion/accordion.component.ts          |  1 +
 src/accordion/accordion.module.ts             |  7 +++--
 src/anchor/anchor.component.ts                |  6 ++++
 src/anchor/anchor.directive.ts                |  2 ++
 src/anchor/anchor.module.ts                   |  4 +--
 .../autocomplete-placeholder.component.ts     |  1 +
 src/autocomplete/autocomplete.component.ts    |  3 ++
 src/autocomplete/autocomplete.directive.ts    |  2 ++
 src/autocomplete/autocomplete.module.ts       |  6 ++--
 src/autocomplete/helper-directives.ts         |  1 +
 .../suggestion-group.component.ts             |  3 ++
 .../suggestion/suggestion.component.ts        |  3 ++
 src/back-top/back-top.component.ts            |  6 ++++
 src/back-top/back-top.module.ts               |  3 +-
 src/breadcrumb/breadcrumb-item.component.ts   |  5 ++++
 src/breadcrumb/breadcrumb.component.spec.ts   |  5 ++--
 src/breadcrumb/breadcrumb.component.ts        |  1 +
 src/breadcrumb/breadcrumb.module.ts           |  8 +++--
 .../button-group/button-group.component.ts    |  1 +
 src/button/button.component.spec.ts           |  5 ++--
 src/button/button.component.ts                |  4 +++
 src/button/button.module.ts                   |  3 +-
 src/card/card.component.ts                    |  1 +
 src/card/card.module.ts                       |  4 +--
 src/card/helper-directives.ts                 |  3 ++
 src/card/section.component.ts                 |  1 +
 .../checkbox-group.component.spec.ts          |  5 ++--
 .../checkbox-group.component.ts               |  1 +
 src/checkbox/checkbox.component.spec.ts       |  5 ++--
 src/checkbox/checkbox.component.ts            |  4 +++
 src/checkbox/checkbox.module.ts               |  8 +++--
 src/color-picker/color-picker.component.ts    |  1 +
 src/color-picker/color-picker.module.ts       |  3 +-
 .../calendar/date-picker-panel/component.ts   | 29 +++++++++++++++++--
 src/date-picker/calendar/footer/component.ts  |  6 ++++
 src/date-picker/calendar/header/component.ts  |  6 ++++
 .../calendar/panel/picker-panel.ts            |  5 ++++
 .../calendar/range-picker-panel/component.ts  | 20 ++++++++++++-
 src/date-picker/date-picker.module.ts         |  2 +-
 .../date-picker/date-picker.component.ts      | 12 +++++++-
 .../range-picker/range-picker.component.ts    | 12 +++++++-
 src/date-picker/trigger/trigger.component.ts  |  5 ++++
 .../confirm-dialog.component.ts               | 17 +++++++++++
 .../dialog-content/dialog-close.directive.ts  |  1 +
 .../dialog-content.component.ts               |  1 +
 .../dialog-content/dialog-footer.component.ts |  1 +
 .../dialog-content/dialog-header.component.ts |  4 +++
 src/dialog/dialog.component.ts                |  4 +++
 src/dialog/dialog.module.ts                   |  2 --
 src/dialog/dialog.service.spec.ts             | 19 ++++++++++--
 src/drawer/component/drawer.component.ts      | 14 +++++++++
 src/drawer/component/helper-directives.ts     |  3 ++
 src/drawer/drawer.module.ts                   | 10 +++++--
 src/dropdown/dropdown-active.directive.ts     |  1 +
 .../dropdown-button.component.ts              |  6 ++++
 src/dropdown/dropdown.directive.ts            |  1 +
 src/dropdown/dropdown.module.ts               |  7 +++--
 src/dropdown/helper-directives.ts             |  1 +
 .../menu-group/menu-group.component.ts        |  1 +
 src/dropdown/menu-item/menu-item.component.ts |  1 +
 src/dropdown/menu/menu-content.directive.ts   |  1 +
 src/dropdown/menu/menu.component.ts           |  1 +
 src/dropdown/submenu/submenu.component.ts     | 11 +++++++
 src/form/form-item/form-item.component.ts     |  3 ++
 src/form/form.component.spec.ts               |  5 ++--
 src/form/form.directive.ts                    |  1 +
 src/form/form.module.ts                       |  4 +--
 src/form/helper-directives.ts                 |  5 ++++
 src/i18n/i18n.module.ts                       |  2 +-
 src/i18n/i18n.pipe.ts                         |  1 +
 src/icon/icon.component.spec.ts               |  5 ++--
 src/icon/icon.component.ts                    |  4 +++
 src/icon/icon.module.ts                       |  3 +-
 src/inline-alert/helper-directives.ts         |  1 +
 .../inline-alert.component.spec.ts            |  5 ++--
 src/inline-alert/inline-alert.component.ts    |  4 +++
 src/inline-alert/inline-alert.module.ts       |  8 +++--
 src/input/autosize.directive.ts               |  1 +
 src/input/helper-directives.ts                |  4 +++
 .../input-group/input-group.component.spec.ts |  5 ++--
 .../input-group/input-group.component.ts      |  3 ++
 src/input/input.component.spec.ts             |  5 ++--
 src/input/input.component.ts                  |  1 +
 src/input/input.module.ts                     |  2 --
 .../number-input.component.spec.ts            |  5 ++--
 .../number-input/number-input.component.ts    | 12 ++++++++
 src/input/search/search.component.spec.ts     |  5 ++--
 src/input/search/search.component.ts          |  6 ++++
 .../tags-input/tags-input.component.spec.ts   |  5 ++--
 src/input/tags-input/tags-input.component.ts  |  4 +++
 src/message/message-wrapper.component.ts      |  1 +
 src/message/message.component.ts              |  3 ++
 src/message/message.module.ts                 |  9 ++++--
 src/message/message.service.spec.ts           |  4 +--
 .../notification-wrapper.component.ts         |  1 +
 src/notification/notification.component.ts    | 10 ++++++-
 src/notification/notification.module.ts       | 10 +++++--
 src/notification/notification.service.spec.ts | 10 +++++--
 src/paginator/paginator.component.spec.ts     |  5 ++--
 src/paginator/paginator.component.ts          | 17 +++++++++++
 src/paginator/paginator.module.ts             | 10 +++++--
 .../radio-button/radio-button.component.ts    |  4 +++
 .../radio-group/radio-group.component.ts      |  1 +
 src/radio/radio.component.spec.ts             |  5 ++--
 src/radio/radio.component.ts                  |  3 ++
 src/radio/radio.module.ts                     |  9 ++++--
 ...xed-size-table-virtual-scroll.directive.ts |  1 +
 .../fixed-size-virtual-scroll.directive.ts    |  1 +
 src/scrolling/scrolling.module.ts             |  2 +-
 src/scrolling/virtual-for-of.directive.ts     |  1 +
 .../virtual-scroll-viewport.component.ts      |  1 +
 src/select/helper-directives.ts               |  2 ++
 .../multi-select.component.spec.ts            | 10 +++++--
 .../multi-select/multi-select.component.ts    | 24 +++++++++++++++
 .../option-group/option-group.component.ts    |  3 ++
 src/select/option-placeholder.component.ts    |  1 +
 src/select/option/option.component.ts         |  4 +++
 src/select/select.component.spec.ts           | 10 +++++--
 src/select/select.component.ts                | 19 ++++++++++++
 src/select/select.module.ts                   |  2 --
 src/select/validators.ts                      |  1 +
 src/shared/click-outside.directive.ts         |  1 +
 src/shared/shared.module.ts                   |  2 +-
 src/sort/sort-header.component.ts             |  1 +
 src/sort/sort.directive.ts                    |  1 +
 src/sort/sort.module.ts                       |  3 +-
 src/sort/sort.spec.ts                         | 12 ++++++--
 src/status-bar/status-bar.component.spec.ts   |  5 ++--
 src/status-bar/status-bar.component.ts        |  4 +++
 src/status-bar/status-bar.module.ts           |  3 +-
 src/steps/steps.component.ts                  | 18 ++++++++++++
 src/steps/steps.module.ts                     |  3 +-
 src/switch/switch.component.spec.ts           |  5 ++--
 src/switch/switch.component.ts                |  3 ++
 src/switch/switch.module.ts                   |  3 +-
 .../table-of-contents.module.ts               |  8 +++--
 .../toc-container.directive.ts                |  1 +
 .../toc-content.directive.ts                  |  1 +
 src/table-of-contents/toc-link.directive.ts   |  1 +
 src/table/table-cell-def.directive.ts         |  1 +
 src/table/table-cell.component.ts             |  7 +++++
 src/table/table-cell.directive.ts             |  1 +
 src/table/table-column-def.directive.ts       |  1 +
 src/table/table-header-cell-def.directive.ts  |  1 +
 src/table/table-header-cell.directive.ts      |  1 +
 src/table/table-header-row-def.directive.ts   |  1 +
 src/table/table-header-row.component.ts       |  8 ++++-
 src/table/table-placeholder.directive.ts      |  2 ++
 src/table/table-row-def.directive.ts          |  1 +
 src/table/table-row.component.ts              |  4 ++-
 src/table/table-scroll.directive.ts           |  2 ++
 src/table/table.component.ts                  |  3 ++
 src/table/table.module.ts                     |  6 ++--
 src/table/table.spec.ts                       |  5 ++--
 src/tabs/tab-body.component.ts                |  9 ++++++
 src/tabs/tab-group.component.spec.ts          |  6 ++--
 src/tabs/tab-group.component.ts               | 20 +++++++++++++
 .../tab-header-active-indicator.component.ts  |  3 ++
 src/tabs/tab-header.component.spec.ts         |  8 +++--
 src/tabs/tab-header.component.ts              | 13 +++++++++
 src/tabs/tab.component.ts                     |  1 +
 src/tabs/tabs.module.ts                       |  2 --
 src/tag/check-tag/check-tag.component.ts      |  1 +
 src/tag/tag.component.spec.ts                 |  5 ++--
 src/tag/tag.component.ts                      |  4 +++
 src/tag/tag.module.ts                         |  3 +-
 src/theme/theme.module.ts                     |  9 ++++--
 src/theme/theme.pipe.ts                       | 24 ++++++++++++---
 src/time-picker/component.ts                  | 20 ++++++++++++-
 src/time-picker/panel/panel.component.ts      | 19 ++++++++++++
 src/time-picker/time-picker.module.ts         |  3 +-
 src/tooltip/tooltip-active.directive.ts       |  1 +
 src/tooltip/tooltip-copy.directive.ts         |  1 +
 src/tooltip/tooltip.component.ts              |  3 ++
 src/tooltip/tooltip.directive.spec.ts         | 10 +++++--
 src/tooltip/tooltip.directive.ts              |  1 +
 src/tooltip/tooltip.module.ts                 |  5 ++--
 .../tree-node-placeholder.component.ts        |  1 +
 src/tree-select/tree-select.component.spec.ts | 10 +++++--
 src/tree-select/tree-select.component.ts      | 20 +++++++++++++
 src/tree-select/tree-select.module.ts         |  7 +++--
 184 files changed, 824 insertions(+), 141 deletions(-)
 create mode 100644 patches/inquirer+8.2.4.patch

diff --git a/patches/inquirer+8.2.4.patch b/patches/inquirer+8.2.4.patch
new file mode 100644
index 000000000..2eed42ef0
--- /dev/null
+++ b/patches/inquirer+8.2.4.patch
@@ -0,0 +1,13 @@
+diff --git a/node_modules/inquirer/lib/utils/screen-manager.js b/node_modules/inquirer/lib/utils/screen-manager.js
+index d411a99..c98e86c 100644
+--- a/node_modules/inquirer/lib/utils/screen-manager.js
++++ b/node_modules/inquirer/lib/utils/screen-manager.js
+@@ -1,7 +1,7 @@
+ 'use strict';
+ const util = require('./readline');
+ const cliWidth = require('cli-width');
+-const wrapAnsi = require('wrap-ansi');
++const wrapAnsi = require('wrap-ansi-cjs');
+ const stripAnsi = require('strip-ansi');
+ const stringWidth = require('string-width');
+ const ora = require('ora');
diff --git a/src/accordion/accordion-item/accordion-item.component.ts b/src/accordion/accordion-item/accordion-item.component.ts
index 424c0c9d2..3bc529830 100644
--- a/src/accordion/accordion-item/accordion-item.component.ts
+++ b/src/accordion/accordion-item/accordion-item.component.ts
@@ -7,6 +7,7 @@ import {
 } from '@angular/animations';
 import { CdkAccordionItem } from '@angular/cdk/accordion';
 import { UniqueSelectionDispatcher } from '@angular/cdk/collections';
+import { NgIf, NgTemplateOutlet } from '@angular/common';
 import {
   AfterContentInit,
   ChangeDetectionStrategy,
@@ -20,14 +21,17 @@ import {
 } from '@angular/core';
 import { filter, startWith, take } from 'rxjs';
 
+import { IconComponent } from '../../icon/icon.component';
 import { AccordionComponent } from '../accordion.component';
 
 @Directive({
   selector: '[auiAccordionItemHeader]',
+  standalone: true,
 })
 export class AccordionItemHeaderDirective {}
 @Directive({
   selector: '[auiAccordionContent]',
+  standalone: true,
 })
 export class AccordionItemContentDirective {}
 @Component({
@@ -45,6 +49,8 @@ export class AccordionItemContentDirective {}
     ]),
   ],
   viewProviders: [AccordionItemComponent],
+  standalone: true,
+  imports: [IconComponent, NgIf, NgTemplateOutlet],
 })
 export class AccordionItemComponent
   extends CdkAccordionItem
diff --git a/src/accordion/accordion.component.spec.ts b/src/accordion/accordion.component.spec.ts
index 274e3bea2..066c5d720 100644
--- a/src/accordion/accordion.component.spec.ts
+++ b/src/accordion/accordion.component.spec.ts
@@ -9,8 +9,7 @@ describe('AccordionComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [AccordionModule],
-      declarations: [TestComponent],
+      imports: [AccordionModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -55,6 +54,8 @@ describe('AccordionComponent', () => {
       </aui-accordion-item>
     </aui-accordion>
   `,
+  standalone: true,
+  imports: [AccordionModule],
 })
 class TestComponent {
   multi: boolean;
diff --git a/src/accordion/accordion.component.ts b/src/accordion/accordion.component.ts
index 56c1ae121..09ea362c4 100644
--- a/src/accordion/accordion.component.ts
+++ b/src/accordion/accordion.component.ts
@@ -16,6 +16,7 @@ import {
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class AccordionComponent extends CdkAccordion {
   @Input()
diff --git a/src/accordion/accordion.module.ts b/src/accordion/accordion.module.ts
index acb7d0434..f8e56cfbb 100644
--- a/src/accordion/accordion.module.ts
+++ b/src/accordion/accordion.module.ts
@@ -13,13 +13,16 @@ import {
 import { AccordionComponent } from './accordion.component';
 
 @NgModule({
-  declarations: [
+  imports: [
+    CommonModule,
+    CdkAccordionModule,
+    IconModule,
+    ButtonModule,
     AccordionComponent,
     AccordionItemComponent,
     AccordionItemHeaderDirective,
     AccordionItemContentDirective,
   ],
-  imports: [CommonModule, CdkAccordionModule, IconModule, ButtonModule],
   exports: [
     AccordionComponent,
     AccordionItemComponent,
diff --git a/src/anchor/anchor.component.ts b/src/anchor/anchor.component.ts
index c31ecab7d..eaf96dd7a 100644
--- a/src/anchor/anchor.component.ts
+++ b/src/anchor/anchor.component.ts
@@ -1,3 +1,4 @@
+import { NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
 import {
   AfterViewInit,
   ChangeDetectionStrategy,
@@ -25,6 +26,7 @@ import {
 import { buildBem, isTemplateRef, last } from '../utils';
 
 import { AnchorDirectiveChild } from './anchor.directive';
+import { AnchorModule } from './anchor.module';
 import { AnchorItem, AnchorTreeItem } from './types';
 import { getAnchorTreeItems } from './utils';
 
@@ -35,6 +37,8 @@ const bem = buildBem('aui-anchor');
   templateUrl: 'anchor-tree.component.html',
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [NgFor, NgIf, NgTemplateOutlet, AnchorModule],
 })
 export class AnchorTreeComponent
   extends AnchorDirectiveChild
@@ -120,6 +124,8 @@ export class AnchorTreeComponent
   styleUrls: ['anchor.component.scss'],
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [AnchorTreeComponent],
 })
 export class AnchorComponent
   extends AnchorDirectiveChild
diff --git a/src/anchor/anchor.directive.ts b/src/anchor/anchor.directive.ts
index 258893bc9..c0f5757a9 100644
--- a/src/anchor/anchor.directive.ts
+++ b/src/anchor/anchor.directive.ts
@@ -38,6 +38,7 @@ export class AnchorDirectiveChild {
 
 @Directive({
   selector: '[auiAnchorLabel]',
+  standalone: true,
 })
 export class AnchorLabelDirective
   extends AnchorDirectiveChild
@@ -114,6 +115,7 @@ export class AnchorLabelDirective
 
 @Directive({
   selector: '[auiAnchor]',
+  standalone: true,
 })
 export class AnchorDirective implements AfterContentInit, OnDestroy {
   @Input()
diff --git a/src/anchor/anchor.module.ts b/src/anchor/anchor.module.ts
index 7e6d47517..f7b106636 100644
--- a/src/anchor/anchor.module.ts
+++ b/src/anchor/anchor.module.ts
@@ -5,8 +5,8 @@ import { AnchorComponent, AnchorTreeComponent } from './anchor.component';
 import { AnchorDirective, AnchorLabelDirective } from './anchor.directive';
 
 @NgModule({
-  imports: [CommonModule],
-  declarations: [
+  imports: [
+    CommonModule,
     AnchorComponent,
     AnchorTreeComponent,
     AnchorDirective,
diff --git a/src/autocomplete/autocomplete-placeholder.component.ts b/src/autocomplete/autocomplete-placeholder.component.ts
index d1d9b7bb2..a6b944941 100644
--- a/src/autocomplete/autocomplete-placeholder.component.ts
+++ b/src/autocomplete/autocomplete-placeholder.component.ts
@@ -10,5 +10,6 @@ import {
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class AutocompletePlaceholderComponent {}
diff --git a/src/autocomplete/autocomplete.component.ts b/src/autocomplete/autocomplete.component.ts
index e3bac49f2..cdc33348f 100644
--- a/src/autocomplete/autocomplete.component.ts
+++ b/src/autocomplete/autocomplete.component.ts
@@ -1,3 +1,4 @@
+import { AsyncPipe } from '@angular/common';
 import {
   AfterContentInit,
   ChangeDetectionStrategy,
@@ -37,6 +38,8 @@ import { SuggestionComponent } from './suggestion/suggestion.component';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [AsyncPipe],
 })
 export class AutocompleteComponent implements AfterContentInit {
   @ContentChildren(SuggestionComponent, { descendants: true })
diff --git a/src/autocomplete/autocomplete.directive.ts b/src/autocomplete/autocomplete.directive.ts
index a46220f74..5fc8c8935 100644
--- a/src/autocomplete/autocomplete.directive.ts
+++ b/src/autocomplete/autocomplete.directive.ts
@@ -42,6 +42,7 @@ import { SuggestionComponent } from './suggestion/suggestion.component';
   host: {
     autocomplete: 'off',
   },
+  standalone: true,
 })
 export class AutoCompleteDirective
   extends BaseTooltip<AutoCompleteContext>
@@ -340,6 +341,7 @@ export class AutoCompleteDirective
   host: {
     autocomplete: 'off',
   },
+  standalone: true,
 })
 export class CustomAutoCompleteDirective extends AutoCompleteDirective {
   @Input('auiAutocompleteInnerSelector')
diff --git a/src/autocomplete/autocomplete.module.ts b/src/autocomplete/autocomplete.module.ts
index b34c76220..0b8aa36ba 100644
--- a/src/autocomplete/autocomplete.module.ts
+++ b/src/autocomplete/autocomplete.module.ts
@@ -15,8 +15,10 @@ import { SuggestionComponent } from './suggestion/suggestion.component';
 import { SuggestionGroupComponent } from './suggestion-group/suggestion-group.component';
 
 @NgModule({
-  imports: [CommonModule, OverlayModule, TooltipModule],
-  declarations: [
+  imports: [
+    CommonModule,
+    OverlayModule,
+    TooltipModule,
     AutoCompleteDirective,
     CustomAutoCompleteDirective,
     AutocompleteComponent,
diff --git a/src/autocomplete/helper-directives.ts b/src/autocomplete/helper-directives.ts
index c8c8d92c1..406ff5aa7 100644
--- a/src/autocomplete/helper-directives.ts
+++ b/src/autocomplete/helper-directives.ts
@@ -6,5 +6,6 @@ import { Directive } from '@angular/core';
   host: {
     '[class.aui-suggestion-group__title]': 'true',
   },
+  standalone: true,
 })
 export class SuggestionGroupTitleDirective {}
diff --git a/src/autocomplete/suggestion-group/suggestion-group.component.ts b/src/autocomplete/suggestion-group/suggestion-group.component.ts
index 56cd2f948..2a84f4439 100644
--- a/src/autocomplete/suggestion-group/suggestion-group.component.ts
+++ b/src/autocomplete/suggestion-group/suggestion-group.component.ts
@@ -1,3 +1,4 @@
+import { AsyncPipe } from '@angular/common';
 import {
   AfterContentInit,
   ChangeDetectionStrategy,
@@ -19,6 +20,8 @@ import { SuggestionComponent } from '../suggestion/suggestion.component';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [AsyncPipe],
 })
 export class SuggestionGroupComponent implements AfterContentInit {
   @ContentChildren(forwardRef(() => SuggestionComponent))
diff --git a/src/autocomplete/suggestion/suggestion.component.ts b/src/autocomplete/suggestion/suggestion.component.ts
index 1d6aff29d..8bbb9dcf0 100644
--- a/src/autocomplete/suggestion/suggestion.component.ts
+++ b/src/autocomplete/suggestion/suggestion.component.ts
@@ -1,3 +1,4 @@
+import { AsyncPipe } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -27,6 +28,8 @@ import { AutocompleteComponent } from '../autocomplete.component';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [AsyncPipe],
 })
 export class SuggestionComponent {
   bem: Bem = buildBem('aui-suggestion');
diff --git a/src/back-top/back-top.component.ts b/src/back-top/back-top.component.ts
index ad1fb16c7..eca3921ed 100644
--- a/src/back-top/back-top.component.ts
+++ b/src/back-top/back-top.component.ts
@@ -1,4 +1,5 @@
 import { CdkScrollable } from '@angular/cdk/overlay';
+import { AsyncPipe } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -19,6 +20,9 @@ import {
   startWith,
 } from 'rxjs';
 
+import { ButtonComponent } from '../button/button.component';
+import { IconComponent } from '../icon/icon.component';
+
 type TargetType = Element | Window | string;
 
 @Component({
@@ -28,6 +32,8 @@ type TargetType = Element | Window | string;
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [ButtonComponent, IconComponent, AsyncPipe],
 })
 export class BackTopComponent {
   @Input()
diff --git a/src/back-top/back-top.module.ts b/src/back-top/back-top.module.ts
index ca379282e..9787b734c 100644
--- a/src/back-top/back-top.module.ts
+++ b/src/back-top/back-top.module.ts
@@ -7,8 +7,7 @@ import { IconModule } from '../icon/icon.module';
 import { BackTopComponent } from './back-top.component';
 
 @NgModule({
-  imports: [CommonModule, IconModule, ButtonModule],
-  declarations: [BackTopComponent],
+  imports: [CommonModule, IconModule, ButtonModule, BackTopComponent],
   exports: [BackTopComponent],
 })
 export class BackTopModule {}
diff --git a/src/breadcrumb/breadcrumb-item.component.ts b/src/breadcrumb/breadcrumb-item.component.ts
index d99b6e1dc..20ca8f475 100644
--- a/src/breadcrumb/breadcrumb-item.component.ts
+++ b/src/breadcrumb/breadcrumb-item.component.ts
@@ -1,3 +1,4 @@
+import { NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -5,6 +6,8 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { IconComponent } from '../icon/icon.component';
+
 @Component({
   selector: 'aui-breadcrumb-item',
   templateUrl: './breadcrumb-item.component.html',
@@ -12,6 +15,8 @@ import {
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgIf, IconComponent],
 })
 export class BreadcrumbItemComponent {
   get separator() {
diff --git a/src/breadcrumb/breadcrumb.component.spec.ts b/src/breadcrumb/breadcrumb.component.spec.ts
index 1d03f0485..83e4249ba 100644
--- a/src/breadcrumb/breadcrumb.component.spec.ts
+++ b/src/breadcrumb/breadcrumb.component.spec.ts
@@ -6,8 +6,7 @@ import { BreadcrumbModule } from './breadcrumb.module';
 describe('BreadcrumbComponent', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [BreadcrumbModule],
-      declarations: [TestComponent],
+      imports: [BreadcrumbModule, TestComponent],
     });
   });
 
@@ -36,5 +35,7 @@ describe('BreadcrumbComponent', () => {
       <aui-breadcrumb-item>default</aui-breadcrumb-item>
     </aui-breadcrumb>
   `,
+  standalone: true,
+  imports: [BreadcrumbModule],
 })
 class TestComponent {}
diff --git a/src/breadcrumb/breadcrumb.component.ts b/src/breadcrumb/breadcrumb.component.ts
index 481bd4277..e28918f96 100644
--- a/src/breadcrumb/breadcrumb.component.ts
+++ b/src/breadcrumb/breadcrumb.component.ts
@@ -17,6 +17,7 @@ import { BreadcrumbItemComponent } from './breadcrumb-item.component';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class BreadcrumbComponent implements AfterContentInit {
   @Input()
diff --git a/src/breadcrumb/breadcrumb.module.ts b/src/breadcrumb/breadcrumb.module.ts
index b00855e9b..0e69a305c 100644
--- a/src/breadcrumb/breadcrumb.module.ts
+++ b/src/breadcrumb/breadcrumb.module.ts
@@ -7,8 +7,12 @@ import { BreadcrumbItemComponent } from './breadcrumb-item.component';
 import { BreadcrumbComponent } from './breadcrumb.component';
 
 @NgModule({
-  imports: [CommonModule, IconModule],
-  declarations: [BreadcrumbComponent, BreadcrumbItemComponent],
+  imports: [
+    CommonModule,
+    IconModule,
+    BreadcrumbComponent,
+    BreadcrumbItemComponent,
+  ],
   exports: [BreadcrumbComponent, BreadcrumbItemComponent],
 })
 export class BreadcrumbModule {}
diff --git a/src/button/button-group/button-group.component.ts b/src/button/button-group/button-group.component.ts
index 5c7c9ff95..2227ca817 100644
--- a/src/button/button-group/button-group.component.ts
+++ b/src/button/button-group/button-group.component.ts
@@ -11,5 +11,6 @@ import {
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class ButtonGroupComponent {}
diff --git a/src/button/button.component.spec.ts b/src/button/button.component.spec.ts
index d7d2dc9d1..ecbb25972 100644
--- a/src/button/button.component.spec.ts
+++ b/src/button/button.component.spec.ts
@@ -14,8 +14,7 @@ describe('ButtonComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [ButtonModule],
-      declarations: [TestComponent],
+      imports: [ButtonModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -111,6 +110,8 @@ describe('ButtonComponent', () => {
       {{ content }}
     </button>
   `,
+  standalone: true,
+  imports: [ButtonModule],
 })
 class TestComponent {
   type: ButtonType;
diff --git a/src/button/button.component.ts b/src/button/button.component.ts
index 9e146bd12..f2aafe96a 100644
--- a/src/button/button.component.ts
+++ b/src/button/button.component.ts
@@ -1,4 +1,5 @@
 import { FocusMonitor } from '@angular/cdk/a11y';
+import { NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -9,6 +10,7 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { IconComponent } from '../icon/icon.component';
 import { ComponentSize } from '../types';
 
 import { ButtonType } from './button.types';
@@ -23,6 +25,8 @@ const prefix = 'aui-button--';
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgIf, IconComponent],
 })
 export class ButtonComponent implements OnDestroy {
   @Input('aui-button')
diff --git a/src/button/button.module.ts b/src/button/button.module.ts
index 3d595f197..8d008b7ab 100644
--- a/src/button/button.module.ts
+++ b/src/button/button.module.ts
@@ -7,8 +7,7 @@ import { ButtonGroupComponent } from './button-group/button-group.component';
 import { ButtonComponent } from './button.component';
 
 @NgModule({
-  imports: [CommonModule, IconModule],
-  declarations: [ButtonComponent, ButtonGroupComponent],
+  imports: [CommonModule, IconModule, ButtonComponent, ButtonGroupComponent],
   exports: [ButtonComponent, ButtonGroupComponent],
 })
 export class ButtonModule {}
diff --git a/src/card/card.component.ts b/src/card/card.component.ts
index ed1df226b..8e48ba64a 100644
--- a/src/card/card.component.ts
+++ b/src/card/card.component.ts
@@ -12,6 +12,7 @@ import {
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class CardComponent {
   @Input() divider = true;
diff --git a/src/card/card.module.ts b/src/card/card.module.ts
index 0e5e5b2d8..fc931c037 100644
--- a/src/card/card.module.ts
+++ b/src/card/card.module.ts
@@ -10,8 +10,8 @@ import {
 import { SectionComponent } from './section.component';
 
 @NgModule({
-  imports: [CommonModule],
-  declarations: [
+  imports: [
+    CommonModule,
     CardComponent,
     CardHeaderDirective,
     CardFooterDirective,
diff --git a/src/card/helper-directives.ts b/src/card/helper-directives.ts
index 277e22d00..321373ca7 100644
--- a/src/card/helper-directives.ts
+++ b/src/card/helper-directives.ts
@@ -5,6 +5,7 @@ import { Directive } from '@angular/core';
   host: {
     '[class.aui-card__header]': 'true',
   },
+  standalone: true,
 })
 export class CardHeaderDirective {}
 
@@ -13,6 +14,7 @@ export class CardHeaderDirective {}
   host: {
     '[class.aui-card__footer]': 'true',
   },
+  standalone: true,
 })
 export class CardFooterDirective {}
 
@@ -21,5 +23,6 @@ export class CardFooterDirective {}
   host: {
     '[class.aui-section__title]': 'true',
   },
+  standalone: true,
 })
 export class SectionTitleDirective {}
diff --git a/src/card/section.component.ts b/src/card/section.component.ts
index ad8fbf1f3..2690e613e 100644
--- a/src/card/section.component.ts
+++ b/src/card/section.component.ts
@@ -11,5 +11,6 @@ import {
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class SectionComponent {}
diff --git a/src/checkbox/checkbox-group/checkbox-group.component.spec.ts b/src/checkbox/checkbox-group/checkbox-group.component.spec.ts
index 399db1870..29f63d2bc 100644
--- a/src/checkbox/checkbox-group/checkbox-group.component.spec.ts
+++ b/src/checkbox/checkbox-group/checkbox-group.component.spec.ts
@@ -18,8 +18,7 @@ describe('CheckboxGroupComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [FormsModule, CheckboxModule],
-      declarations: [TestComponent],
+      imports: [FormsModule, CheckboxModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -97,6 +96,8 @@ describe('CheckboxGroupComponent', () => {
       </aui-checkbox-group>
     </div>
   `,
+  standalone: true,
+  imports: [FormsModule, CheckboxModule],
 })
 class TestComponent {
   value: string[];
diff --git a/src/checkbox/checkbox-group/checkbox-group.component.ts b/src/checkbox/checkbox-group/checkbox-group.component.ts
index fb2433937..e400a2f5c 100644
--- a/src/checkbox/checkbox-group/checkbox-group.component.ts
+++ b/src/checkbox/checkbox-group/checkbox-group.component.ts
@@ -27,6 +27,7 @@ import { CheckboxComponent } from '../checkbox.component';
       multi: true,
     },
   ],
+  standalone: true,
 })
 export class CheckboxGroupComponent<T> extends CommonFormControl<T[]> {
   private _trackFn: TrackFn<T>;
diff --git a/src/checkbox/checkbox.component.spec.ts b/src/checkbox/checkbox.component.spec.ts
index 7f5ff1bc4..a798cab62 100644
--- a/src/checkbox/checkbox.component.spec.ts
+++ b/src/checkbox/checkbox.component.spec.ts
@@ -17,8 +17,7 @@ describe('CheckboxComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [CheckboxModule, FormsModule],
-      declarations: [TestComponent],
+      imports: [CheckboxModule, FormsModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -123,6 +122,8 @@ describe('CheckboxComponent', () => {
       {{ content }}
     </aui-checkbox>
   `,
+  standalone: true,
+  imports: [CheckboxModule, FormsModule],
 })
 export class TestComponent {
   checkedMap = { a: true, b: false, c: true, d: true };
diff --git a/src/checkbox/checkbox.component.ts b/src/checkbox/checkbox.component.ts
index 9cf39b130..555f921a9 100644
--- a/src/checkbox/checkbox.component.ts
+++ b/src/checkbox/checkbox.component.ts
@@ -1,4 +1,5 @@
 import { FocusMonitor } from '@angular/cdk/a11y';
+import { NgIf } from '@angular/common';
 import {
   AfterViewInit,
   ChangeDetectionStrategy,
@@ -17,6 +18,7 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms';
 import { BehaviorSubject, Subject, combineLatest, map, takeUntil } from 'rxjs';
 
 import { CommonFormControl } from '../form';
+import { IconComponent } from '../icon/icon.component';
 
 import { CheckboxGroupComponent } from './checkbox-group/checkbox-group.component';
 
@@ -35,6 +37,8 @@ let uniqueId = 0;
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [NgIf, IconComponent],
 })
 export class CheckboxComponent<T>
   extends CommonFormControl<boolean>
diff --git a/src/checkbox/checkbox.module.ts b/src/checkbox/checkbox.module.ts
index 79c1cb052..9a5d36d4b 100644
--- a/src/checkbox/checkbox.module.ts
+++ b/src/checkbox/checkbox.module.ts
@@ -7,8 +7,12 @@ import { CheckboxGroupComponent } from './checkbox-group/checkbox-group.componen
 import { CheckboxComponent } from './checkbox.component';
 
 @NgModule({
-  imports: [CommonModule, IconModule],
-  declarations: [CheckboxComponent, CheckboxGroupComponent],
+  imports: [
+    CommonModule,
+    IconModule,
+    CheckboxComponent,
+    CheckboxGroupComponent,
+  ],
   exports: [CheckboxComponent, CheckboxGroupComponent],
 })
 export class CheckboxModule {}
diff --git a/src/color-picker/color-picker.component.ts b/src/color-picker/color-picker.component.ts
index 4e7ba8813..3888c0808 100644
--- a/src/color-picker/color-picker.component.ts
+++ b/src/color-picker/color-picker.component.ts
@@ -22,6 +22,7 @@ import { CommonFormControl } from '../form';
       multi: true,
     },
   ],
+  standalone: true,
 })
 export class ColorPickerComponent extends CommonFormControl<string> {
   onInput(event: Event) {
diff --git a/src/color-picker/color-picker.module.ts b/src/color-picker/color-picker.module.ts
index 13274ac19..532df6a33 100644
--- a/src/color-picker/color-picker.module.ts
+++ b/src/color-picker/color-picker.module.ts
@@ -5,8 +5,7 @@ import { FormsModule } from '@angular/forms';
 import { ColorPickerComponent } from './color-picker.component';
 
 @NgModule({
-  imports: [CommonModule, FormsModule],
-  declarations: [ColorPickerComponent],
+  imports: [CommonModule, FormsModule, ColorPickerComponent],
   exports: [ColorPickerComponent],
 })
 export class ColorPickerModule {}
diff --git a/src/date-picker/calendar/date-picker-panel/component.ts b/src/date-picker/calendar/date-picker-panel/component.ts
index 5a3fb99df..9b937bdd0 100644
--- a/src/date-picker/calendar/date-picker-panel/component.ts
+++ b/src/date-picker/calendar/date-picker-panel/component.ts
@@ -1,3 +1,4 @@
+import { NgIf, NgTemplateOutlet } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -8,14 +9,24 @@ import {
   ViewEncapsulation,
   forwardRef,
 } from '@angular/core';
-import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
 import dayjs, { ConfigType, Dayjs } from 'dayjs';
 
+import { ButtonComponent } from '../../../button/button.component';
 import { CommonFormControl } from '../../../form/common-form';
-import { HOUR_ITEMS, MINUTE_ITEMS, SECOND_ITEMS } from '../../../time-picker';
-import { TimePickerModel } from '../../../time-picker/time-picker.type';
+import { I18nPipe } from '../../../i18n/i18n.pipe';
+import {
+  HOUR_ITEMS,
+  MINUTE_ITEMS,
+  SECOND_ITEMS,
+  TimePickerComponent,
+  TimePickerModel,
+} from '../../../time-picker';
 import { DateNavRange, DisabledTimeFn } from '../../date-picker.type';
 import { DatePickerType } from '../constant';
+import { CalendarFooterComponent } from '../footer/component';
+import { CalendarHeaderComponent } from '../header/component';
+import { PickerPanelComponent } from '../panel/picker-panel';
 import {
   getNavRangeByType,
   getTimePickerModel,
@@ -38,6 +49,18 @@ import {
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [
+    CalendarHeaderComponent,
+    PickerPanelComponent,
+    NgIf,
+    NgTemplateOutlet,
+    CalendarFooterComponent,
+    TimePickerComponent,
+    FormsModule,
+    ButtonComponent,
+    I18nPipe,
+  ],
 })
 export class DatePickerPanelComponent extends CommonFormControl<Dayjs> {
   @Input()
diff --git a/src/date-picker/calendar/footer/component.ts b/src/date-picker/calendar/footer/component.ts
index 10bdde07a..03da2ba2e 100644
--- a/src/date-picker/calendar/footer/component.ts
+++ b/src/date-picker/calendar/footer/component.ts
@@ -1,3 +1,4 @@
+import { NgIf, NgTemplateOutlet } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -8,12 +9,17 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { ButtonComponent } from '../../../button/button.component';
+import { I18nPipe } from '../../../i18n/i18n.pipe';
+
 @Component({
   selector: 'aui-calendar-footer',
   templateUrl: './template.html',
   styleUrls: ['./style.scss'],
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [NgIf, NgTemplateOutlet, ButtonComponent, I18nPipe],
 })
 export class CalendarFooterComponent {
   @Input()
diff --git a/src/date-picker/calendar/header/component.ts b/src/date-picker/calendar/header/component.ts
index 7e0b03761..08fe7da21 100644
--- a/src/date-picker/calendar/header/component.ts
+++ b/src/date-picker/calendar/header/component.ts
@@ -1,3 +1,4 @@
+import { NgIf, NgTemplateOutlet } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -8,6 +9,9 @@ import {
 } from '@angular/core';
 import dayjs, { ConfigType, Dayjs } from 'dayjs';
 
+import { ButtonComponent } from '../../../button/button.component';
+import { I18nPipe } from '../../../i18n/i18n.pipe';
+import { IconComponent } from '../../../icon/icon.component';
 import { buildBem } from '../../../utils';
 import {
   CalendarHeaderRange,
@@ -25,6 +29,8 @@ const bem = buildBem('aui-calendar-header');
   styleUrls: ['./style.scss'],
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [NgIf, NgTemplateOutlet, ButtonComponent, IconComponent, I18nPipe],
 })
 export class CalendarHeaderComponent {
   @Input()
diff --git a/src/date-picker/calendar/panel/picker-panel.ts b/src/date-picker/calendar/panel/picker-panel.ts
index 7615b6710..630d000dc 100644
--- a/src/date-picker/calendar/panel/picker-panel.ts
+++ b/src/date-picker/calendar/panel/picker-panel.ts
@@ -1,3 +1,4 @@
+import { NgClass, NgIf, NgFor } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -11,6 +12,8 @@ import {
 import dayjs, { Dayjs } from 'dayjs';
 import isBetween from 'dayjs/plugin/isBetween';
 
+import { ButtonComponent } from '../../../button/button.component';
+import { I18nPipe } from '../../../i18n/i18n.pipe';
 import { buildBem } from '../../../utils';
 import { DateNavRange } from '../../date-picker.type';
 import {
@@ -46,6 +49,8 @@ const bem = buildBem('aui-picker-panel');
   styleUrls: ['./picker-panel.style.scss'],
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [NgClass, NgIf, NgFor, ButtonComponent, I18nPipe],
 })
 export class PickerPanelComponent implements OnChanges {
   @Input()
diff --git a/src/date-picker/calendar/range-picker-panel/component.ts b/src/date-picker/calendar/range-picker-panel/component.ts
index 3ff279a48..44d8513b1 100644
--- a/src/date-picker/calendar/range-picker-panel/component.ts
+++ b/src/date-picker/calendar/range-picker-panel/component.ts
@@ -1,3 +1,4 @@
+import { NgIf, NgTemplateOutlet, DatePipe } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -7,14 +8,19 @@ import {
   Output,
   ViewEncapsulation,
 } from '@angular/core';
-import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
 import dayjs, { Dayjs } from 'dayjs';
 
 import { CommonFormControl } from '../../../form/common-form';
+import { I18nPipe } from '../../../i18n/i18n.pipe';
+import { TimePickerComponent } from '../../../time-picker/component';
 import { TimePickerModel } from '../../../time-picker/time-picker.type';
 import { buildBem } from '../../../utils';
 import { DateNavRange, DisabledTimeFn, Side } from '../../date-picker.type';
 import { DatePickerType, MONTH, YEAR } from '../constant';
+import { CalendarFooterComponent } from '../footer/component';
+import { CalendarHeaderComponent } from '../header/component';
+import { PickerPanelComponent } from '../panel/picker-panel';
 import {
   composeDisabledDateFn,
   getTimePickerModel,
@@ -42,6 +48,18 @@ const bem = buildBem('aui-date-range-picker-panel');
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [
+    CalendarHeaderComponent,
+    PickerPanelComponent,
+    NgIf,
+    CalendarFooterComponent,
+    NgTemplateOutlet,
+    TimePickerComponent,
+    FormsModule,
+    DatePipe,
+    I18nPipe,
+  ],
 })
 export class DateRangePickerPanelComponent extends CommonFormControl<Dayjs[]> {
   @Input()
diff --git a/src/date-picker/date-picker.module.ts b/src/date-picker/date-picker.module.ts
index cfe4c86e5..3b635246a 100644
--- a/src/date-picker/date-picker.module.ts
+++ b/src/date-picker/date-picker.module.ts
@@ -40,8 +40,8 @@ const COMPONENTS = [
     TimePickerModule,
     IconModule,
     I18nModule,
+    ...COMPONENTS,
   ],
-  declarations: [...COMPONENTS],
   exports: [...COMPONENTS],
 })
 export class DatePickerModule {}
diff --git a/src/date-picker/date-picker/date-picker.component.ts b/src/date-picker/date-picker/date-picker.component.ts
index ba6c3737d..ea96ed423 100644
--- a/src/date-picker/date-picker/date-picker.component.ts
+++ b/src/date-picker/date-picker/date-picker.component.ts
@@ -9,13 +9,16 @@ import {
   ViewEncapsulation,
   forwardRef,
 } from '@angular/core';
-import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
 import dayjs, { ConfigType, Dayjs } from 'dayjs';
 
 import { CommonFormControl } from '../../form/common-form';
+import { TooltipDirective } from '../../tooltip/tooltip.directive';
 import { ComponentSize } from '../../types';
 import { DatePickerType } from '../calendar/constant';
+import { DatePickerPanelComponent } from '../calendar/date-picker-panel/component';
 import { DateNavRange, DisabledTimeFn } from '../date-picker.type';
+import { DatePickerTriggerComponent } from '../trigger/trigger.component';
 
 @Component({
   selector: 'aui-date-picker',
@@ -30,6 +33,13 @@ import { DateNavRange, DisabledTimeFn } from '../date-picker.type';
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [
+    DatePickerTriggerComponent,
+    TooltipDirective,
+    DatePickerPanelComponent,
+    FormsModule,
+  ],
 })
 export class DatePickerComponent
   extends CommonFormControl<ConfigType, Dayjs>
diff --git a/src/date-picker/range-picker/range-picker.component.ts b/src/date-picker/range-picker/range-picker.component.ts
index c71a587a0..0c6cdda0d 100644
--- a/src/date-picker/range-picker/range-picker.component.ts
+++ b/src/date-picker/range-picker/range-picker.component.ts
@@ -7,12 +7,15 @@ import {
   ViewEncapsulation,
   forwardRef,
 } from '@angular/core';
-import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
 import dayjs, { ConfigType, Dayjs } from 'dayjs';
 
 import { CommonFormControl } from '../../form';
+import { TooltipDirective } from '../../tooltip/tooltip.directive';
 import { ComponentSize } from '../../types';
+import { DateRangePickerPanelComponent } from '../calendar/range-picker-panel/component';
 import { DisabledDateFn, DisabledTimeFn } from '../date-picker.type';
+import { DatePickerTriggerComponent } from '../trigger/trigger.component';
 
 @Component({
   selector: 'aui-range-picker',
@@ -27,6 +30,13 @@ import { DisabledDateFn, DisabledTimeFn } from '../date-picker.type';
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [
+    DatePickerTriggerComponent,
+    TooltipDirective,
+    DateRangePickerPanelComponent,
+    FormsModule,
+  ],
 })
 export class RangePickerComponent extends CommonFormControl<
   ConfigType[],
diff --git a/src/date-picker/trigger/trigger.component.ts b/src/date-picker/trigger/trigger.component.ts
index 25a5a9ac7..246108a3b 100644
--- a/src/date-picker/trigger/trigger.component.ts
+++ b/src/date-picker/trigger/trigger.component.ts
@@ -1,3 +1,4 @@
+import { NgClass, NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -9,6 +10,8 @@ import {
 } from '@angular/core';
 import { Dayjs } from 'dayjs';
 
+import { I18nPipe } from '../../i18n/i18n.pipe';
+import { IconComponent } from '../../icon/icon.component';
 import { InputComponent } from '../../input/input.component';
 import { ComponentSize } from '../../types';
 import { buildBem } from '../../utils';
@@ -21,6 +24,8 @@ const bem = buildBem('aui-date-picker-trigger');
   styleUrls: ['./trigger.style.scss'],
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
+  standalone: true,
+  imports: [NgClass, NgIf, InputComponent, IconComponent, I18nPipe],
 })
 export class DatePickerTriggerComponent {
   @Input()
diff --git a/src/dialog/confirm-dialog/confirm-dialog.component.ts b/src/dialog/confirm-dialog/confirm-dialog.component.ts
index 7c30482ad..1120cf4c5 100644
--- a/src/dialog/confirm-dialog/confirm-dialog.component.ts
+++ b/src/dialog/confirm-dialog/confirm-dialog.component.ts
@@ -1,3 +1,9 @@
+import {
+  NgIf,
+  NgTemplateOutlet,
+  NgComponentOutlet,
+  NgClass,
+} from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -6,6 +12,8 @@ import {
 } from '@angular/core';
 import { firstValueFrom, Observable } from 'rxjs';
 
+import { ButtonComponent } from '../../button/button.component';
+import { IconComponent } from '../../icon/icon.component';
 import { Bem, buildBem, isString, isTemplateRef } from '../../utils';
 import { DialogRef } from '../dialog-ref';
 import {
@@ -24,6 +32,15 @@ import { ConfirmDialogConfig } from './confirm-dialog-config';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [
+    IconComponent,
+    NgIf,
+    NgTemplateOutlet,
+    NgComponentOutlet,
+    ButtonComponent,
+    NgClass,
+  ],
 })
 export class ConfirmDialogComponent<T = unknown, R = unknown> {
   bem: Bem = buildBem('aui-confirm-dialog');
diff --git a/src/dialog/dialog-content/dialog-close.directive.ts b/src/dialog/dialog-content/dialog-close.directive.ts
index 850bbd7df..5185a3a8c 100644
--- a/src/dialog/dialog-content/dialog-close.directive.ts
+++ b/src/dialog/dialog-content/dialog-close.directive.ts
@@ -14,6 +14,7 @@ import { getClosestDialog } from '../utils';
 @Directive({
   selector: '[auiDialogClose]',
   exportAs: 'auiDialogClose',
+  standalone: true,
 })
 export class DialogCloseDirective implements OnInit {
   @Input('auiDialogClose')
diff --git a/src/dialog/dialog-content/dialog-content.component.ts b/src/dialog/dialog-content/dialog-content.component.ts
index e726b3c6c..80609643d 100644
--- a/src/dialog/dialog-content/dialog-content.component.ts
+++ b/src/dialog/dialog-content/dialog-content.component.ts
@@ -16,6 +16,7 @@ import { Bem, buildBem } from '../../utils';
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class DialogContentComponent extends CdkScrollable {
   bem: Bem = buildBem('aui-dialog');
diff --git a/src/dialog/dialog-content/dialog-footer.component.ts b/src/dialog/dialog-content/dialog-footer.component.ts
index 500158899..051e12b29 100644
--- a/src/dialog/dialog-content/dialog-footer.component.ts
+++ b/src/dialog/dialog-content/dialog-footer.component.ts
@@ -12,6 +12,7 @@ import { Bem, buildBem } from '../../utils';
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class DialogFooterComponent {
   bem: Bem = buildBem('aui-dialog');
diff --git a/src/dialog/dialog-content/dialog-header.component.ts b/src/dialog/dialog-content/dialog-header.component.ts
index 0ed0aacb5..7c77feca3 100644
--- a/src/dialog/dialog-content/dialog-header.component.ts
+++ b/src/dialog/dialog-content/dialog-header.component.ts
@@ -1,3 +1,4 @@
+import { NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -8,6 +9,7 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { IconComponent } from '../../icon/icon.component';
 import { Bem, buildBem } from '../../utils';
 import { DialogRef } from '../dialog-ref';
 import { DialogService } from '../dialog.service';
@@ -19,6 +21,8 @@ import { getClosestDialog } from '../utils';
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgIf, IconComponent],
 })
 export class DialogHeaderComponent implements OnInit {
   bem: Bem = buildBem('aui-dialog');
diff --git a/src/dialog/dialog.component.ts b/src/dialog/dialog.component.ts
index b7ae7175e..19c51f355 100644
--- a/src/dialog/dialog.component.ts
+++ b/src/dialog/dialog.component.ts
@@ -4,7 +4,9 @@ import {
   CdkPortalOutlet,
   ComponentPortal,
   TemplatePortal,
+  PortalModule,
 } from '@angular/cdk/portal';
+import { NgClass } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -46,6 +48,8 @@ import { throwDialogContentAlreadyAttachedError } from './utils';
     '(@dialogContainer.start)': 'onAnimationStart($event)',
     '(@dialogContainer.done)': 'onAnimationDone($event)',
   },
+  standalone: true,
+  imports: [NgClass, PortalModule],
 })
 export class DialogComponent {
   @ViewChild(CdkPortalOutlet, { static: true })
diff --git a/src/dialog/dialog.module.ts b/src/dialog/dialog.module.ts
index ac8cd5bee..582e5a51c 100644
--- a/src/dialog/dialog.module.ts
+++ b/src/dialog/dialog.module.ts
@@ -21,8 +21,6 @@ import { DialogService } from './dialog.service';
     PortalModule,
     IconModule,
     ButtonModule,
-  ],
-  declarations: [
     DialogComponent,
     DialogHeaderComponent,
     DialogContentComponent,
diff --git a/src/dialog/dialog.service.spec.ts b/src/dialog/dialog.service.spec.ts
index 56a6bbc3a..8f20e9ffc 100644
--- a/src/dialog/dialog.service.spec.ts
+++ b/src/dialog/dialog.service.spec.ts
@@ -19,6 +19,11 @@ import {
 } from '@angular/platform-browser/animations';
 import { timer } from 'rxjs';
 
+import { DialogCloseDirective } from './dialog-content/dialog-close.directive';
+import { DialogContentComponent as DialogContentComponent_1 } from './dialog-content/dialog-content.component';
+import { DialogFooterComponent } from './dialog-content/dialog-footer.component';
+import { DialogHeaderComponent } from './dialog-content/dialog-header.component';
+
 import { DialogModule, DialogService, DialogSize } from '.';
 
 describe('DialogService', () => {
@@ -366,6 +371,8 @@ describe('DialogService', () => {
     </ng-template>
   `,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [DialogHeaderComponent, DialogCloseDirective],
 })
 class TestComponent {
   result: any;
@@ -380,6 +387,7 @@ class TestComponent {
     </ng-template>
   `,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
 })
 class ContentTemplateRefTestComponent {
   @ViewChild('template', { static: true })
@@ -405,12 +413,19 @@ class ContentTemplateRefTestComponent {
     </aui-dialog-footer>
   `,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [
+    DialogHeaderComponent,
+    DialogContentComponent_1,
+    DialogFooterComponent,
+    DialogCloseDirective,
+  ],
 })
 class DialogContentComponent {}
 
 @NgModule({
-  imports: [DialogModule],
-  declarations: [
+  imports: [
+    DialogModule,
     DialogContentComponent,
     TestComponent,
     ContentTemplateRefTestComponent,
diff --git a/src/drawer/component/drawer.component.ts b/src/drawer/component/drawer.component.ts
index 5a6fd8fb5..760358255 100644
--- a/src/drawer/component/drawer.component.ts
+++ b/src/drawer/component/drawer.component.ts
@@ -8,7 +8,10 @@ import {
   CdkPortalOutlet,
   ComponentPortal,
   TemplatePortal,
+  PortalModule,
 } from '@angular/cdk/portal';
+import { CdkScrollable } from '@angular/cdk/scrolling';
+import { NgIf, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
 import {
   AfterViewInit,
   ChangeDetectionStrategy,
@@ -32,6 +35,7 @@ import {
 } from '@angular/core';
 import { Observable, Subject, takeUntil } from 'rxjs';
 
+import { IconComponent } from '../../icon/icon.component';
 import { isTemplateRef } from '../../utils';
 
 import { DrawerRef, DrawerSize } from './drawer-ref';
@@ -57,6 +61,16 @@ const SIZE_MAPPER = {
   styleUrls: ['./drawer.component.scss'],
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [
+    NgIf,
+    NgClass,
+    NgStyle,
+    NgTemplateOutlet,
+    IconComponent,
+    CdkScrollable,
+    PortalModule,
+  ],
 })
 export class DrawerComponent<
     T = ComponentType<unknown>,
diff --git a/src/drawer/component/helper-directives.ts b/src/drawer/component/helper-directives.ts
index bb6d29198..910915042 100644
--- a/src/drawer/component/helper-directives.ts
+++ b/src/drawer/component/helper-directives.ts
@@ -7,15 +7,18 @@ import { Directive } from '@angular/core';
 
 @Directive({
   selector: '[auiDrawerHeader]',
+  standalone: true,
 })
 export class DrawerHeaderDirective {}
 
 @Directive({
   selector: '[auiDrawerContent]',
+  standalone: true,
 })
 export class DrawerContentDirective {}
 
 @Directive({
   selector: '[auiDrawerFooter]',
+  standalone: true,
 })
 export class DrawerFooterDirective {}
diff --git a/src/drawer/drawer.module.ts b/src/drawer/drawer.module.ts
index 415bfa577..43046e72b 100644
--- a/src/drawer/drawer.module.ts
+++ b/src/drawer/drawer.module.ts
@@ -21,8 +21,14 @@ const COMMON = [
 ];
 
 @NgModule({
-  imports: [CommonModule, IconModule, IconModule, OverlayModule, PortalModule],
-  declarations: COMMON,
+  imports: [
+    CommonModule,
+    IconModule,
+    IconModule,
+    OverlayModule,
+    PortalModule,
+    ...COMMON,
+  ],
   exports: COMMON,
   providers: [DrawerService],
 })
diff --git a/src/dropdown/dropdown-active.directive.ts b/src/dropdown/dropdown-active.directive.ts
index 887141419..860118c1a 100644
--- a/src/dropdown/dropdown-active.directive.ts
+++ b/src/dropdown/dropdown-active.directive.ts
@@ -4,6 +4,7 @@ import { TooltipActiveDirective } from '../tooltip';
 
 @Directive({
   selector: '[auiDropdownActive]',
+  standalone: true,
 })
 export class DropdownActiveDirective extends TooltipActiveDirective {
   @Input('auiDropdownActive')
diff --git a/src/dropdown/dropdown-button/dropdown-button.component.ts b/src/dropdown/dropdown-button/dropdown-button.component.ts
index f2a78fdd2..21871dbe0 100644
--- a/src/dropdown/dropdown-button/dropdown-button.component.ts
+++ b/src/dropdown/dropdown-button/dropdown-button.component.ts
@@ -1,3 +1,4 @@
+import { AsyncPipe } from '@angular/common';
 import {
   AfterContentInit,
   ChangeDetectionStrategy,
@@ -13,8 +14,11 @@ import {
 import { Observable, map, startWith } from 'rxjs';
 
 import { ButtonType } from '../../button';
+import { ButtonComponent } from '../../button/button.component';
+import { IconComponent } from '../../icon/icon.component';
 import { ComponentSize } from '../../types';
 import { Bem, buildBem, coerceAttrBoolean } from '../../utils';
+import { DropdownDirective } from '../dropdown.directive';
 import { MenuComponent } from '../menu/menu.component';
 import { MenuItemComponent } from '../menu-item/menu-item.component';
 
@@ -25,6 +29,8 @@ import { MenuItemComponent } from '../menu-item/menu-item.component';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [ButtonComponent, DropdownDirective, IconComponent, AsyncPipe],
 })
 export class DropdownButtonComponent implements AfterContentInit {
   bem: Bem = buildBem('aui-dropdown-button');
diff --git a/src/dropdown/dropdown.directive.ts b/src/dropdown/dropdown.directive.ts
index a1d3bb6a9..e8e0e7df4 100644
--- a/src/dropdown/dropdown.directive.ts
+++ b/src/dropdown/dropdown.directive.ts
@@ -33,6 +33,7 @@ import { MenuComponent } from './menu/menu.component';
       useExisting: DropdownDirective,
     },
   ],
+  standalone: true,
 })
 export class DropdownDirective extends BaseTooltip implements OnInit {
   @Input('auiDropdown')
diff --git a/src/dropdown/dropdown.module.ts b/src/dropdown/dropdown.module.ts
index 243b767d6..59ff91869 100644
--- a/src/dropdown/dropdown.module.ts
+++ b/src/dropdown/dropdown.module.ts
@@ -16,8 +16,11 @@ import { MenuItemComponent } from './menu-item/menu-item.component';
 import { SubmenuComponent } from './submenu/submenu.component';
 
 @NgModule({
-  imports: [CommonModule, TooltipModule, IconModule, ButtonModule],
-  declarations: [
+  imports: [
+    CommonModule,
+    TooltipModule,
+    IconModule,
+    ButtonModule,
     DropdownDirective,
     DropdownActiveDirective,
     DropdownButtonComponent,
diff --git a/src/dropdown/helper-directives.ts b/src/dropdown/helper-directives.ts
index a4e177c6e..5dc3914fe 100644
--- a/src/dropdown/helper-directives.ts
+++ b/src/dropdown/helper-directives.ts
@@ -6,5 +6,6 @@ import { Directive } from '@angular/core';
   host: {
     '[class.aui-menu-group__title]': 'true',
   },
+  standalone: true,
 })
 export class MenuGroupTitleDirective {}
diff --git a/src/dropdown/menu-group/menu-group.component.ts b/src/dropdown/menu-group/menu-group.component.ts
index 6e5bbcbf9..740123d49 100644
--- a/src/dropdown/menu-group/menu-group.component.ts
+++ b/src/dropdown/menu-group/menu-group.component.ts
@@ -11,5 +11,6 @@ import {
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class MenuGroupComponent {}
diff --git a/src/dropdown/menu-item/menu-item.component.ts b/src/dropdown/menu-item/menu-item.component.ts
index 1f95b0c9d..44700f12c 100644
--- a/src/dropdown/menu-item/menu-item.component.ts
+++ b/src/dropdown/menu-item/menu-item.component.ts
@@ -15,6 +15,7 @@ import { MenuItemType } from '../dropdown.types';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class MenuItemComponent {
   bem: Bem = buildBem('aui-menu-item');
diff --git a/src/dropdown/menu/menu-content.directive.ts b/src/dropdown/menu/menu-content.directive.ts
index 5581833e0..9a145edfb 100644
--- a/src/dropdown/menu/menu-content.directive.ts
+++ b/src/dropdown/menu/menu-content.directive.ts
@@ -14,6 +14,7 @@ import {
 @Directive({
   selector: '*[auiMenuContent]',
   exportAs: 'auiMenuContent',
+  standalone: true,
 })
 export class MenuContentDirective implements OnDestroy {
   private portal: TemplatePortal;
diff --git a/src/dropdown/menu/menu.component.ts b/src/dropdown/menu/menu.component.ts
index c8ad178cd..80de62c2e 100644
--- a/src/dropdown/menu/menu.component.ts
+++ b/src/dropdown/menu/menu.component.ts
@@ -20,6 +20,7 @@ import { MenuContentDirective } from './menu-content.directive';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class MenuComponent {
   bem: Bem = buildBem('aui-menu');
diff --git a/src/dropdown/submenu/submenu.component.ts b/src/dropdown/submenu/submenu.component.ts
index d51da3974..fc6db0de6 100644
--- a/src/dropdown/submenu/submenu.component.ts
+++ b/src/dropdown/submenu/submenu.component.ts
@@ -7,9 +7,13 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { IconComponent } from '../../icon/icon.component';
 import { TooltipTrigger } from '../../tooltip';
+import { TooltipActiveDirective } from '../../tooltip/tooltip-active.directive';
+import { TooltipDirective } from '../../tooltip/tooltip.directive';
 import { ComponentSize } from '../../types';
 import { Bem, buildBem } from '../../utils';
+import { MenuComponent } from '../menu/menu.component';
 import { MenuItemComponent } from '../menu-item/menu-item.component';
 
 @Component({
@@ -19,6 +23,13 @@ import { MenuItemComponent } from '../menu-item/menu-item.component';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [
+    TooltipActiveDirective,
+    TooltipDirective,
+    IconComponent,
+    MenuComponent,
+  ],
 })
 export class SubmenuComponent extends MenuItemComponent {
   override bem: Bem = buildBem('aui-submenu');
diff --git a/src/form/form-item/form-item.component.ts b/src/form/form-item/form-item.component.ts
index 193f7aa9f..772e2b642 100644
--- a/src/form/form-item/form-item.component.ts
+++ b/src/form/form-item/form-item.component.ts
@@ -1,3 +1,4 @@
+import { NgClass, NgIf, AsyncPipe } from '@angular/common';
 import {
   AfterContentInit,
   ChangeDetectionStrategy,
@@ -41,6 +42,8 @@ import {
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgClass, NgIf, AsyncPipe],
 })
 export class FormItemComponent implements AfterContentInit, OnDestroy {
   bem: Bem = buildBem('aui-form-item');
diff --git a/src/form/form.component.spec.ts b/src/form/form.component.spec.ts
index 9a357069a..e636269df 100644
--- a/src/form/form.component.spec.ts
+++ b/src/form/form.component.spec.ts
@@ -10,8 +10,7 @@ describe('FormComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [FormsModule, FormModule],
-      declarations: [TestComponent],
+      imports: [FormsModule, FormModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -65,6 +64,8 @@ describe('FormComponent', () => {
       </aui-form-item>
     </form>
   `,
+  standalone: true,
+  imports: [FormsModule, FormModule],
 })
 class TestComponent {
   @ViewChild('form', { static: true })
diff --git a/src/form/form.directive.ts b/src/form/form.directive.ts
index 747d36ba2..10271308a 100644
--- a/src/form/form.directive.ts
+++ b/src/form/form.directive.ts
@@ -12,6 +12,7 @@ import { LabelPosition } from './form.types';
     '[class.aui-form--inline]': 'inline',
     '[class.ng-submitted]': 'ngClassSubmitted',
   },
+  standalone: true,
 })
 export class FormDirective {
   get ngClassSubmitted() {
diff --git a/src/form/form.module.ts b/src/form/form.module.ts
index d57b5a8f4..ad66b6f39 100644
--- a/src/form/form.module.ts
+++ b/src/form/form.module.ts
@@ -12,8 +12,8 @@ import {
 } from './helper-directives';
 
 @NgModule({
-  imports: [CommonModule],
-  declarations: [
+  imports: [
+    CommonModule,
     FormDirective,
     FormItemComponent,
     FormItemAddonDirective,
diff --git a/src/form/helper-directives.ts b/src/form/helper-directives.ts
index 7f0c10f9b..8ae39a239 100644
--- a/src/form/helper-directives.ts
+++ b/src/form/helper-directives.ts
@@ -7,6 +7,7 @@ import { coerceAttrBoolean } from '../utils';
   host: {
     '[class.aui-form-item__label]': 'true',
   },
+  standalone: true,
 })
 export class FormItemLabelDirective {}
 
@@ -15,6 +16,7 @@ export class FormItemLabelDirective {}
   host: {
     '[class.aui-form-item__hint]': 'true',
   },
+  standalone: true,
 })
 export class FormItemHintDirective {}
 
@@ -23,6 +25,7 @@ export class FormItemHintDirective {}
   host: {
     '[class.aui-form-item__addon]': 'true',
   },
+  standalone: true,
 })
 export class FormItemAddonDirective {}
 
@@ -31,6 +34,7 @@ export class FormItemAddonDirective {}
   host: {
     '[class.aui-form-item__error]': 'true',
   },
+  standalone: true,
 })
 export class FormItemErrorDirective {}
 
@@ -39,6 +43,7 @@ export class FormItemErrorDirective {}
   host: {
     '[class.aui-form-item__control]': 'true',
   },
+  standalone: true,
 })
 export class FormItemControlDirective {
   @Input({ transform: coerceAttrBoolean })
diff --git a/src/i18n/i18n.module.ts b/src/i18n/i18n.module.ts
index 11741c5df..5a63d843e 100644
--- a/src/i18n/i18n.module.ts
+++ b/src/i18n/i18n.module.ts
@@ -3,7 +3,7 @@ import { NgModule } from '@angular/core';
 import { I18nPipe } from './i18n.pipe';
 
 @NgModule({
-  declarations: [I18nPipe],
+  imports: [I18nPipe],
   exports: [I18nPipe],
 })
 export class I18nModule {}
diff --git a/src/i18n/i18n.pipe.ts b/src/i18n/i18n.pipe.ts
index 1d0e0f63d..2f68feb6d 100644
--- a/src/i18n/i18n.pipe.ts
+++ b/src/i18n/i18n.pipe.ts
@@ -12,6 +12,7 @@ import { StringMap } from './i18n.type';
 @Pipe({
   name: 'auiI18n',
   pure: false,
+  standalone: true,
 })
 export class I18nPipe implements PipeTransform, OnDestroy {
   private readonly destroy$$ = new Subject<void>();
diff --git a/src/icon/icon.component.spec.ts b/src/icon/icon.component.spec.ts
index 6fdbdfbb8..ec9e9e81c 100644
--- a/src/icon/icon.component.spec.ts
+++ b/src/icon/icon.component.spec.ts
@@ -12,8 +12,7 @@ describe('IconComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [IconModule],
-      declarations: [TestComponent],
+      imports: [IconModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -109,6 +108,8 @@ describe('IconComponent', () => {
       [size]="size"
     ></aui-icon>
   `,
+  standalone: true,
+  imports: [IconModule],
 })
 class TestComponent {
   icon = '';
diff --git a/src/icon/icon.component.ts b/src/icon/icon.component.ts
index ab77e5271..8d4b1eab5 100644
--- a/src/icon/icon.component.ts
+++ b/src/icon/icon.component.ts
@@ -1,3 +1,4 @@
+import { NgIf, NgClass } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -5,6 +6,7 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { ThemePickerPipe } from '../theme/theme.pipe';
 import { Bem, buildBem, handlePixel } from '../utils';
 
 import { IconRegisterService } from './icon-register.service';
@@ -18,6 +20,8 @@ let id = 0;
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgIf, NgClass, ThemePickerPipe],
 })
 export class IconComponent {
   @Input()
diff --git a/src/icon/icon.module.ts b/src/icon/icon.module.ts
index 45c21e5a2..c82c274a1 100644
--- a/src/icon/icon.module.ts
+++ b/src/icon/icon.module.ts
@@ -7,8 +7,7 @@ import { ICON_REGISTER_SERVICE_PROVIDER } from './icon-register.service';
 import { IconComponent } from './icon.component';
 
 @NgModule({
-  imports: [CommonModule, ThemeModule],
-  declarations: [IconComponent],
+  imports: [CommonModule, ThemeModule, IconComponent],
   exports: [IconComponent],
   providers: [ICON_REGISTER_SERVICE_PROVIDER],
 })
diff --git a/src/inline-alert/helper-directives.ts b/src/inline-alert/helper-directives.ts
index aa0ec53ce..31d125728 100644
--- a/src/inline-alert/helper-directives.ts
+++ b/src/inline-alert/helper-directives.ts
@@ -3,5 +3,6 @@ import { Directive } from '@angular/core';
 @Directive({
   selector: '[auiInlineAlertTitle]',
   exportAs: 'auiInlineAlertTitle',
+  standalone: true,
 })
 export class InlineAlertTitleDirective {}
diff --git a/src/inline-alert/inline-alert.component.spec.ts b/src/inline-alert/inline-alert.component.spec.ts
index c7f9de86c..65433e88a 100644
--- a/src/inline-alert/inline-alert.component.spec.ts
+++ b/src/inline-alert/inline-alert.component.spec.ts
@@ -10,8 +10,7 @@ describe('InlineAlertComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [InlineAlertModule],
-      declarations: [TestComponent],
+      imports: [InlineAlertModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -115,6 +114,8 @@ describe('InlineAlertComponent', () => {
       #inlineAlertRef
     ></aui-inline-alert>
   `,
+  standalone: true,
+  imports: [InlineAlertModule],
 })
 export class TestComponent {
   title = '';
diff --git a/src/inline-alert/inline-alert.component.ts b/src/inline-alert/inline-alert.component.ts
index dc9421c7b..634a33b98 100644
--- a/src/inline-alert/inline-alert.component.ts
+++ b/src/inline-alert/inline-alert.component.ts
@@ -1,3 +1,4 @@
+import { NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -8,6 +9,7 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { IconComponent } from '../icon/icon.component';
 import { Bem, buildBem } from '../utils';
 
 import { InlineAlertTitleDirective } from './helper-directives';
@@ -20,6 +22,8 @@ import { InlineAlertType } from './inline-alert.types';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgIf, IconComponent],
 })
 export class InlineAlertComponent {
   bem: Bem = buildBem('aui-inline-alert');
diff --git a/src/inline-alert/inline-alert.module.ts b/src/inline-alert/inline-alert.module.ts
index b992a8535..8b20e28fe 100644
--- a/src/inline-alert/inline-alert.module.ts
+++ b/src/inline-alert/inline-alert.module.ts
@@ -7,8 +7,12 @@ import { InlineAlertTitleDirective } from './helper-directives';
 import { InlineAlertComponent } from './inline-alert.component';
 
 @NgModule({
-  imports: [CommonModule, IconModule],
-  declarations: [InlineAlertComponent, InlineAlertTitleDirective],
+  imports: [
+    CommonModule,
+    IconModule,
+    InlineAlertComponent,
+    InlineAlertTitleDirective,
+  ],
   exports: [InlineAlertComponent, InlineAlertTitleDirective],
 })
 export class InlineAlertModule {}
diff --git a/src/input/autosize.directive.ts b/src/input/autosize.directive.ts
index d25fb72c8..0110cc217 100644
--- a/src/input/autosize.directive.ts
+++ b/src/input/autosize.directive.ts
@@ -28,6 +28,7 @@ export interface AutoSizeValue {
     // eslint-disable-next-line @angular-eslint/directive-selector
     'textarea[autosize][ngModel],textarea[autosize][formControl],textarea[autosize][formControlName]',
   exportAs: 'TextareaAutosize',
+  standalone: true,
 })
 export class AutosizeDirective implements AfterViewInit, OnDestroy {
   private _autoSize: AutoSizeValue = DEFAULT_VALUE;
diff --git a/src/input/helper-directives.ts b/src/input/helper-directives.ts
index 45b6f0649..1ea8efb4c 100644
--- a/src/input/helper-directives.ts
+++ b/src/input/helper-directives.ts
@@ -2,20 +2,24 @@ import { Directive } from '@angular/core';
 
 @Directive({
   selector: '[auiInputAddonBefore]',
+  standalone: true,
 })
 export class InputAddonBeforeDirective {}
 
 @Directive({
   selector: '[auiInputAddonAfter]',
+  standalone: true,
 })
 export class InputAddonAfterDirective {}
 
 @Directive({
   selector: '[auiInputPrefix]',
+  standalone: true,
 })
 export class InputPrefixDirective {}
 
 @Directive({
   selector: '[auiInputSuffix]',
+  standalone: true,
 })
 export class InputSuffixDirective {}
diff --git a/src/input/input-group/input-group.component.spec.ts b/src/input/input-group/input-group.component.spec.ts
index d6a8bb065..9809df8d3 100644
--- a/src/input/input-group/input-group.component.spec.ts
+++ b/src/input/input-group/input-group.component.spec.ts
@@ -17,8 +17,7 @@ describe('InputGroupComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [InputModule, IconModule],
-      declarations: [TestComponent],
+      imports: [InputModule, IconModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -106,6 +105,8 @@ describe('InputGroupComponent', () => {
       />
     </aui-input-group>
   `,
+  standalone: true,
+  imports: [InputModule, IconModule],
 })
 class TestComponent {
   size: ComponentSize;
diff --git a/src/input/input-group/input-group.component.ts b/src/input/input-group/input-group.component.ts
index e90987484..463cc4d19 100644
--- a/src/input/input-group/input-group.component.ts
+++ b/src/input/input-group/input-group.component.ts
@@ -1,3 +1,4 @@
+import { NgClass, NgIf, AsyncPipe } from '@angular/common';
 import {
   AfterContentInit,
   ChangeDetectionStrategy,
@@ -25,6 +26,8 @@ import { InputComponent } from '../input.component';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgClass, NgIf, AsyncPipe],
 })
 export class InputGroupComponent implements AfterContentInit {
   bem: Bem = buildBem('aui-input-group');
diff --git a/src/input/input.component.spec.ts b/src/input/input.component.spec.ts
index a813a4c17..cf9f4da24 100644
--- a/src/input/input.component.spec.ts
+++ b/src/input/input.component.spec.ts
@@ -14,8 +14,7 @@ describe('InputComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [InputModule],
-      declarations: [TestComponent],
+      imports: [InputModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -38,6 +37,8 @@ describe('InputComponent', () => {
 
 @Component({
   template: '<input aui-input [size]="size">',
+  standalone: true,
+  imports: [InputModule],
 })
 class TestComponent {
   size: ComponentSize;
diff --git a/src/input/input.component.ts b/src/input/input.component.ts
index de77d50b6..dfa6bc237 100644
--- a/src/input/input.component.ts
+++ b/src/input/input.component.ts
@@ -20,6 +20,7 @@ import { coerceAttrBoolean } from '../utils';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class InputComponent {
   @Input()
diff --git a/src/input/input.module.ts b/src/input/input.module.ts
index f45816e58..5a3c63c6b 100644
--- a/src/input/input.module.ts
+++ b/src/input/input.module.ts
@@ -27,8 +27,6 @@ import { TagsInputComponent } from './tags-input/tags-input.component';
     IconModule,
     TagModule,
     SharedModule,
-  ],
-  declarations: [
     AutosizeDirective,
     InputComponent,
     InputGroupComponent,
diff --git a/src/input/number-input/number-input.component.spec.ts b/src/input/number-input/number-input.component.spec.ts
index 4cc4dc302..55c11c1bd 100644
--- a/src/input/number-input/number-input.component.spec.ts
+++ b/src/input/number-input/number-input.component.spec.ts
@@ -19,8 +19,7 @@ describe('InputNumberComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [InputModule, FormsModule],
-      declarations: [TestComponent],
+      imports: [InputModule, FormsModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -192,6 +191,8 @@ describe('InputNumberComponent', () => {
       [clearable]="clearable"
     ></aui-number-input>
   `,
+  standalone: true,
+  imports: [InputModule, FormsModule],
 })
 class TestComponent {
   size: string;
diff --git a/src/input/number-input/number-input.component.ts b/src/input/number-input/number-input.component.ts
index c32f57df0..8fa5dad20 100644
--- a/src/input/number-input/number-input.component.ts
+++ b/src/input/number-input/number-input.component.ts
@@ -1,3 +1,4 @@
+import { NgClass, NgIf, NgStyle, AsyncPipe } from '@angular/common';
 import {
   AfterContentInit,
   AfterViewInit,
@@ -16,6 +17,8 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms';
 import { Observable } from 'rxjs';
 
 import { CommonFormControl } from '../../form';
+import { IconComponent } from '../../icon/icon.component';
+import { ClickOutsideDirective } from '../../shared/click-outside.directive';
 import { ComponentSize } from '../../types';
 import { Bem, buildBem, watchContentExist } from '../../utils';
 import {
@@ -37,6 +40,15 @@ import {
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [
+    NgClass,
+    NgIf,
+    ClickOutsideDirective,
+    IconComponent,
+    NgStyle,
+    AsyncPipe,
+  ],
 })
 export class NumberInputComponent
   extends CommonFormControl<number>
diff --git a/src/input/search/search.component.spec.ts b/src/input/search/search.component.spec.ts
index 8760fd43d..8aae45740 100644
--- a/src/input/search/search.component.spec.ts
+++ b/src/input/search/search.component.spec.ts
@@ -18,8 +18,7 @@ describe('SearchComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [InputModule],
-      declarations: [TestComponent],
+      imports: [InputModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -210,6 +209,8 @@ describe('SearchComponent', () => {
       [placeholder]="placeholder"
     ></aui-search>
   `,
+  standalone: true,
+  imports: [InputModule],
 })
 class TestComponent {
   searchButton: boolean;
diff --git a/src/input/search/search.component.ts b/src/input/search/search.component.ts
index a43a0a972..4063527ea 100644
--- a/src/input/search/search.component.ts
+++ b/src/input/search/search.component.ts
@@ -1,3 +1,4 @@
+import { NgClass, NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -8,9 +9,12 @@ import {
   ViewChild,
   ViewEncapsulation,
 } from '@angular/core';
+import { FormsModule } from '@angular/forms';
 
+import { IconComponent } from '../../icon/icon.component';
 import { ComponentSize } from '../../types';
 import { Bem, buildBem } from '../../utils';
+import { InputComponent } from '../input.component';
 
 @Component({
   selector: 'aui-search',
@@ -19,6 +23,8 @@ import { Bem, buildBem } from '../../utils';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgClass, NgIf, IconComponent, InputComponent, FormsModule],
 })
 export class SearchComponent {
   bem: Bem = buildBem('aui-search');
diff --git a/src/input/tags-input/tags-input.component.spec.ts b/src/input/tags-input/tags-input.component.spec.ts
index 30fdada03..17489fd1c 100644
--- a/src/input/tags-input/tags-input.component.spec.ts
+++ b/src/input/tags-input/tags-input.component.spec.ts
@@ -18,8 +18,7 @@ describe('TagsInputComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [FormsModule, InputModule],
-      declarations: [TestComponent],
+      imports: [FormsModule, InputModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -92,6 +91,8 @@ describe('TagsInputComponent', () => {
       [placeholder]="placeholder"
     ></aui-tags-input>
   `,
+  standalone: true,
+  imports: [FormsModule, InputModule],
 })
 class TestComponent {
   value: string[];
diff --git a/src/input/tags-input/tags-input.component.ts b/src/input/tags-input/tags-input.component.ts
index f7d5b0faf..340081e9e 100644
--- a/src/input/tags-input/tags-input.component.ts
+++ b/src/input/tags-input/tags-input.component.ts
@@ -1,3 +1,4 @@
+import { NgFor } from '@angular/common';
 import {
   AfterViewInit,
   ChangeDetectionStrategy,
@@ -26,6 +27,7 @@ import {
 import { take } from 'rxjs';
 
 import { CommonFormControl } from '../../form';
+import { TagComponent } from '../../tag/tag.component';
 import { ComponentSize } from '../../types';
 import { Bem, buildBem } from '../../utils';
 
@@ -51,6 +53,8 @@ export const INPUT_ERROR_KEY = 'input_data_error';
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [NgFor, TagComponent],
 })
 export class TagsInputComponent
   extends CommonFormControl<string[]>
diff --git a/src/message/message-wrapper.component.ts b/src/message/message-wrapper.component.ts
index ef37545ab..6e49d22d8 100644
--- a/src/message/message-wrapper.component.ts
+++ b/src/message/message-wrapper.component.ts
@@ -12,6 +12,7 @@ import {
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class MessageWrapperComponent {
   constructor(public elementRef: ElementRef) {}
diff --git a/src/message/message.component.ts b/src/message/message.component.ts
index d8b5d71cf..2c80fe983 100644
--- a/src/message/message.component.ts
+++ b/src/message/message.component.ts
@@ -9,6 +9,7 @@ import {
 } from '@angular/core';
 import { Subject } from 'rxjs';
 
+import { IconComponent } from '../icon/icon.component';
 import { Bem, buildBem } from '../utils';
 
 import { MessageAnimations } from './message-animations';
@@ -31,6 +32,8 @@ const typeIcon: { [key: string]: string } = {
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [IconComponent],
 })
 export class MessageComponent implements AfterViewInit {
   protected readonly animateStartState: string = 'slideDown';
diff --git a/src/message/message.module.ts b/src/message/message.module.ts
index 9d42bb988..45adfbafc 100644
--- a/src/message/message.module.ts
+++ b/src/message/message.module.ts
@@ -9,8 +9,13 @@ import { MessageComponent } from './message.component';
 import { MessageService } from './message.service';
 
 @NgModule({
-  imports: [CommonModule, OverlayModule, IconModule],
-  declarations: [MessageWrapperComponent, MessageComponent],
+  imports: [
+    CommonModule,
+    OverlayModule,
+    IconModule,
+    MessageWrapperComponent,
+    MessageComponent,
+  ],
   providers: [MessageService],
 })
 export class MessageModule {}
diff --git a/src/message/message.service.spec.ts b/src/message/message.service.spec.ts
index 482d8ff78..ec7e802d5 100644
--- a/src/message/message.service.spec.ts
+++ b/src/message/message.service.spec.ts
@@ -89,6 +89,7 @@ describe('MessageService', () => {
 @Component({
   template: '',
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
 })
 export class TestComponent {
   @ViewChild('template', { static: true })
@@ -96,7 +97,6 @@ export class TestComponent {
 }
 
 @NgModule({
-  imports: [MessageModule, NoopAnimationsModule],
-  declarations: [TestComponent],
+  imports: [MessageModule, NoopAnimationsModule, TestComponent],
 })
 class TestModule {}
diff --git a/src/notification/notification-wrapper.component.ts b/src/notification/notification-wrapper.component.ts
index 8a30bee2a..7ec77ce59 100644
--- a/src/notification/notification-wrapper.component.ts
+++ b/src/notification/notification-wrapper.component.ts
@@ -14,6 +14,7 @@ import { MessageWrapperComponent } from '../message/message-wrapper.component';
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class NotificationWrapperComponent extends MessageWrapperComponent {
   constructor(public override elementRef: ElementRef) {
diff --git a/src/notification/notification.component.ts b/src/notification/notification.component.ts
index 48a6e7992..fabdcdd18 100644
--- a/src/notification/notification.component.ts
+++ b/src/notification/notification.component.ts
@@ -1,4 +1,9 @@
-import { CdkPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
+import {
+  CdkPortalOutlet,
+  TemplatePortal,
+  PortalModule,
+} from '@angular/cdk/portal';
+import { NgIf } from '@angular/common';
 import {
   AfterViewInit,
   ChangeDetectionStrategy,
@@ -12,6 +17,7 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { IconComponent } from '../icon/icon.component';
 import { MessageAnimations } from '../message/message-animations';
 import { MessageComponent } from '../message/message.component';
 import { Bem, buildBem } from '../utils';
@@ -28,6 +34,8 @@ let uniqueId = 0;
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [IconComponent, NgIf, PortalModule],
 })
 export class NotificationComponent
   extends MessageComponent
diff --git a/src/notification/notification.module.ts b/src/notification/notification.module.ts
index 616959a10..e71112162 100644
--- a/src/notification/notification.module.ts
+++ b/src/notification/notification.module.ts
@@ -10,8 +10,14 @@ import { NotificationComponent } from './notification.component';
 import { NotificationService } from './notification.service';
 
 @NgModule({
-  imports: [CommonModule, OverlayModule, PortalModule, IconModule],
-  declarations: [NotificationWrapperComponent, NotificationComponent],
+  imports: [
+    CommonModule,
+    OverlayModule,
+    PortalModule,
+    IconModule,
+    NotificationWrapperComponent,
+    NotificationComponent,
+  ],
   providers: [NotificationService],
 })
 export class NotificationModule {}
diff --git a/src/notification/notification.service.spec.ts b/src/notification/notification.service.spec.ts
index 2fd033280..d9e7ba869 100644
--- a/src/notification/notification.service.spec.ts
+++ b/src/notification/notification.service.spec.ts
@@ -118,6 +118,7 @@ describe('NotificationService', () => {
 
 @Component({
   template: `<div class="notification-demo-content">demo content</div>`,
+  standalone: true,
 })
 class NotificationContentComponent {}
 
@@ -129,6 +130,7 @@ class NotificationContentComponent {}
       </ng-template>
     </div>
   `,
+  standalone: true,
 })
 export class TestComponent {
   @ViewChild('template', { static: true })
@@ -136,7 +138,11 @@ export class TestComponent {
 }
 
 @NgModule({
-  imports: [NotificationModule, NoopAnimationsModule],
-  declarations: [TestComponent, NotificationContentComponent],
+  imports: [
+    NotificationModule,
+    NoopAnimationsModule,
+    TestComponent,
+    NotificationContentComponent,
+  ],
 })
 class TestModule {}
diff --git a/src/paginator/paginator.component.spec.ts b/src/paginator/paginator.component.spec.ts
index 86246ab96..66b9cd357 100644
--- a/src/paginator/paginator.component.spec.ts
+++ b/src/paginator/paginator.component.spec.ts
@@ -14,8 +14,7 @@ describe('PaginatorComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [PaginatorModule],
-      declarations: [TestComponent],
+      imports: [PaginatorModule, TestComponent],
     });
 
     fixture = TestBed.createComponent(TestComponent);
@@ -120,6 +119,8 @@ describe('PaginatorComponent', () => {
       custom content
     </aui-paginator>
   `,
+  standalone: true,
+  imports: [PaginatorModule],
 })
 class TestComponent {
   currentPage = 1;
diff --git a/src/paginator/paginator.component.ts b/src/paginator/paginator.component.ts
index 63f8d84fe..030f2eaac 100644
--- a/src/paginator/paginator.component.ts
+++ b/src/paginator/paginator.component.ts
@@ -1,3 +1,4 @@
+import { NgFor, NgIf, NgClass } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -10,6 +11,11 @@ import {
 } from '@angular/core';
 import { Subscription } from 'rxjs';
 
+import { ButtonComponent } from '../button/button.component';
+import { IconComponent } from '../icon/icon.component';
+import { InputComponent } from '../input/input.component';
+import { OptionComponent } from '../select/option/option.component';
+import { SelectComponent } from '../select/select.component';
 import { Bem, buildBem } from '../utils';
 
 import { PaginatorIntl } from './paginator-intl';
@@ -21,6 +27,17 @@ import { PaginatorIntl } from './paginator-intl';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [
+    NgFor,
+    NgIf,
+    ButtonComponent,
+    NgClass,
+    IconComponent,
+    SelectComponent,
+    OptionComponent,
+    InputComponent,
+  ],
 })
 export class PaginatorComponent implements OnDestroy {
   bem: Bem = buildBem('aui-paginator');
diff --git a/src/paginator/paginator.module.ts b/src/paginator/paginator.module.ts
index 24b79d6de..ea75fe613 100644
--- a/src/paginator/paginator.module.ts
+++ b/src/paginator/paginator.module.ts
@@ -10,8 +10,14 @@ import { PAGINATOR_INTL_PROVIDER } from './paginator-intl';
 import { PaginatorComponent } from './paginator.component';
 
 @NgModule({
-  imports: [CommonModule, ButtonModule, IconModule, SelectModule, InputModule],
-  declarations: [PaginatorComponent],
+  imports: [
+    CommonModule,
+    ButtonModule,
+    IconModule,
+    SelectModule,
+    InputModule,
+    PaginatorComponent,
+  ],
   exports: [PaginatorComponent],
   providers: [PAGINATOR_INTL_PROVIDER],
 })
diff --git a/src/radio/radio-button/radio-button.component.ts b/src/radio/radio-button/radio-button.component.ts
index 4318eef5e..aa6a4fc01 100644
--- a/src/radio/radio-button/radio-button.component.ts
+++ b/src/radio/radio-button/radio-button.component.ts
@@ -1,4 +1,5 @@
 import { FocusMonitor } from '@angular/cdk/a11y';
+import { NgClass, NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -8,6 +9,7 @@ import {
 } from '@angular/core';
 import { takeUntil } from 'rxjs';
 
+import { IconComponent } from '../../icon/icon.component';
 import { Bem, buildBem } from '../../utils';
 import { BaseRadio } from '../base-radio';
 import { RadioGroupComponent } from '../radio-group/radio-group.component';
@@ -20,6 +22,8 @@ import { RadioSize } from '../radio.types';
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgClass, NgIf, IconComponent],
 })
 export class RadioButtonComponent extends BaseRadio implements OnInit {
   bem: Bem = buildBem('aui-radio-button');
diff --git a/src/radio/radio-group/radio-group.component.ts b/src/radio/radio-group/radio-group.component.ts
index 52cc0cda2..2f5a33c56 100644
--- a/src/radio/radio-group/radio-group.component.ts
+++ b/src/radio/radio-group/radio-group.component.ts
@@ -25,6 +25,7 @@ import { RadioSize } from '../radio.types';
       multi: true,
     },
   ],
+  standalone: true,
 })
 export class RadioGroupComponent extends CommonFormControl<any> {
   private readonly size$$ = new BehaviorSubject<RadioSize>(RadioSize.Medium);
diff --git a/src/radio/radio.component.spec.ts b/src/radio/radio.component.spec.ts
index 7cef1ca09..48b570ec8 100644
--- a/src/radio/radio.component.spec.ts
+++ b/src/radio/radio.component.spec.ts
@@ -19,8 +19,7 @@ describe('RadioComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [RadioModule, FormsModule],
-      declarations: [TestComponent],
+      imports: [RadioModule, FormsModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -126,6 +125,8 @@ describe('RadioComponent', () => {
       </aui-radio-button>
     </aui-radio-group>
   `,
+  standalone: true,
+  imports: [RadioModule, FormsModule],
 })
 export class TestComponent {
   size: RadioSize = RadioSize.Medium;
diff --git a/src/radio/radio.component.ts b/src/radio/radio.component.ts
index 9dabb39e4..f9e899c2a 100644
--- a/src/radio/radio.component.ts
+++ b/src/radio/radio.component.ts
@@ -1,4 +1,5 @@
 import { FocusMonitor } from '@angular/cdk/a11y';
+import { NgClass } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -18,6 +19,8 @@ import { RadioGroupComponent } from './radio-group/radio-group.component';
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgClass],
 })
 export class RadioComponent extends BaseRadio {
   bem: Bem = buildBem('aui-radio');
diff --git a/src/radio/radio.module.ts b/src/radio/radio.module.ts
index fb8a2e8c2..abe60a851 100644
--- a/src/radio/radio.module.ts
+++ b/src/radio/radio.module.ts
@@ -8,8 +8,13 @@ import { RadioGroupComponent } from './radio-group/radio-group.component';
 import { RadioComponent } from './radio.component';
 
 @NgModule({
-  imports: [CommonModule, IconModule],
-  declarations: [RadioComponent, RadioGroupComponent, RadioButtonComponent],
+  imports: [
+    CommonModule,
+    IconModule,
+    RadioComponent,
+    RadioGroupComponent,
+    RadioButtonComponent,
+  ],
   exports: [RadioComponent, RadioGroupComponent, RadioButtonComponent],
 })
 export class RadioModule {}
diff --git a/src/scrolling/fixed-size-table-virtual-scroll.directive.ts b/src/scrolling/fixed-size-table-virtual-scroll.directive.ts
index f3a0a90f2..38c4071fc 100644
--- a/src/scrolling/fixed-size-table-virtual-scroll.directive.ts
+++ b/src/scrolling/fixed-size-table-virtual-scroll.directive.ts
@@ -49,6 +49,7 @@ const defaults = {
       deps: [forwardRef(() => FixedSizeTableVirtualScrollDirective)],
     },
   ],
+  standalone: true,
 })
 export class FixedSizeTableVirtualScrollDirective<T = unknown>
   implements AfterContentInit, OnChanges, OnDestroy
diff --git a/src/scrolling/fixed-size-virtual-scroll.directive.ts b/src/scrolling/fixed-size-virtual-scroll.directive.ts
index 860ea7c5e..9b000fa41 100644
--- a/src/scrolling/fixed-size-virtual-scroll.directive.ts
+++ b/src/scrolling/fixed-size-virtual-scroll.directive.ts
@@ -15,5 +15,6 @@ import { Directive, forwardRef } from '@angular/core';
       deps: [forwardRef(() => FixedSizeVirtualScrollDirective)],
     },
   ],
+  standalone: true,
 })
 export class FixedSizeVirtualScrollDirective extends CdkFixedSizeVirtualScroll {}
diff --git a/src/scrolling/scrolling.module.ts b/src/scrolling/scrolling.module.ts
index bf96dfad6..353a30bb5 100644
--- a/src/scrolling/scrolling.module.ts
+++ b/src/scrolling/scrolling.module.ts
@@ -15,7 +15,7 @@ const EXPORTABLE_DIRECTIVES = [
 const EXPORTABLE = [...EXPORTABLE_COMPONENTS, ...EXPORTABLE_DIRECTIVES];
 
 @NgModule({
-  declarations: EXPORTABLE,
+  imports: [...EXPORTABLE],
   exports: EXPORTABLE,
 })
 export class ScrollingModule {}
diff --git a/src/scrolling/virtual-for-of.directive.ts b/src/scrolling/virtual-for-of.directive.ts
index c99ce9e28..0e999aeca 100644
--- a/src/scrolling/virtual-for-of.directive.ts
+++ b/src/scrolling/virtual-for-of.directive.ts
@@ -14,6 +14,7 @@ import { Observable } from 'rxjs';
 
 @Directive({
   selector: '[auiVirtualFor][auiVirtualForOf]',
+  standalone: true,
 })
 export class VirtualForOfDirective<T> extends CdkVirtualForOf<T> {
   @Input()
diff --git a/src/scrolling/virtual-scroll-viewport.component.ts b/src/scrolling/virtual-scroll-viewport.component.ts
index fc6f2cf4f..30fe1039e 100644
--- a/src/scrolling/virtual-scroll-viewport.component.ts
+++ b/src/scrolling/virtual-scroll-viewport.component.ts
@@ -25,5 +25,6 @@ import {
       useExisting: VirtualScrollViewportComponent,
     },
   ],
+  standalone: true,
 })
 export class VirtualScrollViewportComponent extends CdkVirtualScrollViewport {}
diff --git a/src/select/helper-directives.ts b/src/select/helper-directives.ts
index a8060d189..bd50120a4 100644
--- a/src/select/helper-directives.ts
+++ b/src/select/helper-directives.ts
@@ -8,11 +8,13 @@ import { MenuContentDirective } from '../dropdown';
   host: {
     '[class.aui-option-group__title]': 'true',
   },
+  standalone: true,
 })
 export class OptionGroupTitleDirective {}
 
 @Directive({
   selector: '*[auiOptionContent]',
   exportAs: 'auiOptionContent',
+  standalone: true,
 })
 export class OptionContentDirective extends MenuContentDirective {}
diff --git a/src/select/multi-select/multi-select.component.spec.ts b/src/select/multi-select/multi-select.component.spec.ts
index 81b247a07..1c389b508 100644
--- a/src/select/multi-select/multi-select.component.spec.ts
+++ b/src/select/multi-select/multi-select.component.spec.ts
@@ -23,8 +23,12 @@ describe('multiSelectComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [SelectModule, FormsModule, BrowserAnimationsModule],
-      declarations: [TestComponent],
+      imports: [
+        SelectModule,
+        FormsModule,
+        BrowserAnimationsModule,
+        TestComponent,
+      ],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -142,6 +146,8 @@ describe('multiSelectComponent', () => {
       >
     </aui-multi-select>
   `,
+  standalone: true,
+  imports: [SelectModule, FormsModule],
 })
 class TestComponent {
   value: number[];
diff --git a/src/select/multi-select/multi-select.component.ts b/src/select/multi-select/multi-select.component.ts
index 98e41ae09..ec7edabd2 100644
--- a/src/select/multi-select/multi-select.component.ts
+++ b/src/select/multi-select/multi-select.component.ts
@@ -1,3 +1,10 @@
+import {
+  NgFor,
+  NgClass,
+  NgIf,
+  NgTemplateOutlet,
+  AsyncPipe,
+} from '@angular/common';
 import {
   AfterContentInit,
   AfterViewInit,
@@ -24,7 +31,11 @@ import {
   tap,
 } from 'rxjs';
 
+import { I18nPipe } from '../../i18n/i18n.pipe';
+import { IconComponent } from '../../icon/icon.component';
 import { createWithMaxRowCount } from '../../input/tags-input/with-max-row-count';
+import { TagComponent } from '../../tag/tag.component';
+import { TooltipDirective } from '../../tooltip/tooltip.directive';
 import { ComponentSize } from '../../types';
 import {
   Bem,
@@ -63,6 +74,19 @@ import {
       useExisting: MultiSelectComponent,
     },
   ],
+  standalone: true,
+  imports: [
+    TooltipDirective,
+    IconComponent,
+    NgFor,
+    TagComponent,
+    NgClass,
+    NgIf,
+    NgTemplateOutlet,
+    OptionComponent,
+    AsyncPipe,
+    I18nPipe,
+  ],
 })
 export class MultiSelectComponent<T = unknown>
   extends BaseSelect<T, T[]>
diff --git a/src/select/option-group/option-group.component.ts b/src/select/option-group/option-group.component.ts
index bfb67ac4c..2f63dd26b 100644
--- a/src/select/option-group/option-group.component.ts
+++ b/src/select/option-group/option-group.component.ts
@@ -1,3 +1,4 @@
+import { AsyncPipe } from '@angular/common';
 import {
   AfterContentInit,
   ChangeDetectionStrategy,
@@ -19,6 +20,8 @@ import { OptionComponent } from '../option/option.component';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [AsyncPipe],
 })
 export class OptionGroupComponent<T> implements AfterContentInit {
   @ContentChildren(forwardRef(() => OptionComponent))
diff --git a/src/select/option-placeholder.component.ts b/src/select/option-placeholder.component.ts
index 2717a609e..e3f8a4136 100644
--- a/src/select/option-placeholder.component.ts
+++ b/src/select/option-placeholder.component.ts
@@ -10,5 +10,6 @@ import {
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class OptionPlaceholderComponent {}
diff --git a/src/select/option/option.component.ts b/src/select/option/option.component.ts
index 796d3eed8..d87f22425 100644
--- a/src/select/option/option.component.ts
+++ b/src/select/option/option.component.ts
@@ -1,3 +1,4 @@
+import { NgIf, AsyncPipe } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -19,6 +20,7 @@ import {
   tap,
 } from 'rxjs';
 
+import { IconComponent } from '../../icon/icon.component';
 import { ComponentSize } from '../../types';
 import { Bem, buildBem, coerceAttrBoolean, publishRef } from '../../utils';
 import { BaseSelect } from '../base-select';
@@ -30,6 +32,8 @@ import { BaseSelect } from '../base-select';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgIf, IconComponent, AsyncPipe],
 })
 export class OptionComponent<T> {
   bem: Bem = buildBem('aui-option');
diff --git a/src/select/select.component.spec.ts b/src/select/select.component.spec.ts
index 0a390132e..8a627e749 100644
--- a/src/select/select.component.spec.ts
+++ b/src/select/select.component.spec.ts
@@ -20,8 +20,12 @@ describe('SelectComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [SelectModule, FormsModule, BrowserAnimationsModule],
-      declarations: [TestComponent],
+      imports: [
+        SelectModule,
+        FormsModule,
+        BrowserAnimationsModule,
+        TestComponent,
+      ],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -133,6 +137,8 @@ describe('SelectComponent', () => {
       </aui-option>
     </aui-select>
   `,
+  standalone: true,
+  imports: [SelectModule, FormsModule],
 })
 class TestComponent {
   disabled: boolean;
diff --git a/src/select/select.component.ts b/src/select/select.component.ts
index 4080ba6ce..3a714f21e 100644
--- a/src/select/select.component.ts
+++ b/src/select/select.component.ts
@@ -1,3 +1,4 @@
+import { NgIf, NgTemplateOutlet, NgFor, AsyncPipe } from '@angular/common';
 import {
   AfterContentInit,
   ChangeDetectionStrategy,
@@ -18,7 +19,12 @@ import {
   switchMap,
 } from 'rxjs';
 
+import { IconComponent } from '../icon/icon.component';
 import { InputComponent } from '../input';
+import { InputSuffixDirective } from '../input/helper-directives';
+import { InputGroupComponent } from '../input/input-group/input-group.component';
+import { InputComponent as InputComponent_1 } from '../input/input.component';
+import { TooltipDirective } from '../tooltip/tooltip.directive';
 import { coerceString, publishRef } from '../utils';
 
 import { BaseSelect } from './base-select';
@@ -43,6 +49,19 @@ import { SelectOption } from './select.types';
       useExisting: SelectComponent,
     },
   ],
+  standalone: true,
+  imports: [
+    TooltipDirective,
+    InputGroupComponent,
+    InputComponent_1,
+    InputSuffixDirective,
+    IconComponent,
+    NgIf,
+    NgTemplateOutlet,
+    OptionComponent,
+    NgFor,
+    AsyncPipe,
+  ],
 })
 export class SelectComponent<T = unknown>
   extends BaseSelect<T>
diff --git a/src/select/select.module.ts b/src/select/select.module.ts
index f6a15e2b1..c42547c98 100644
--- a/src/select/select.module.ts
+++ b/src/select/select.module.ts
@@ -26,8 +26,6 @@ import { IncludesDirective } from './validators';
     IconModule,
     TooltipModule,
     TagModule,
-  ],
-  declarations: [
     SelectComponent,
     OptionComponent,
     OptionGroupComponent,
diff --git a/src/select/validators.ts b/src/select/validators.ts
index 12160c45e..f1cf56f91 100644
--- a/src/select/validators.ts
+++ b/src/select/validators.ts
@@ -39,6 +39,7 @@ export class AuiSelectValidators {
       multi: true,
     },
   ],
+  standalone: true,
 })
 export class IncludesDirective<T> implements Validator, AfterContentInit {
   @Input()
diff --git a/src/shared/click-outside.directive.ts b/src/shared/click-outside.directive.ts
index cae9ed32a..02d4f2315 100644
--- a/src/shared/click-outside.directive.ts
+++ b/src/shared/click-outside.directive.ts
@@ -9,6 +9,7 @@ import {
 @Directive({
   selector: '[auiClickOutside]',
   exportAs: 'auiClickOutside',
+  standalone: true,
 })
 export class ClickOutsideDirective {
   @Output()
diff --git a/src/shared/shared.module.ts b/src/shared/shared.module.ts
index 3bd55035c..aef2cf794 100644
--- a/src/shared/shared.module.ts
+++ b/src/shared/shared.module.ts
@@ -3,7 +3,7 @@ import { NgModule } from '@angular/core';
 import { ClickOutsideDirective } from './click-outside.directive';
 
 @NgModule({
-  declarations: [ClickOutsideDirective],
+  imports: [ClickOutsideDirective],
   exports: [ClickOutsideDirective],
 })
 export class SharedModule {}
diff --git a/src/sort/sort-header.component.ts b/src/sort/sort-header.component.ts
index 6d60eaeb0..3dae2260b 100644
--- a/src/sort/sort-header.component.ts
+++ b/src/sort/sort-header.component.ts
@@ -29,6 +29,7 @@ import { ArrowViewState, SortDirection, Sortable } from './sort.types';
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
 })
 export class SortHeaderComponent implements Sortable, OnInit, OnDestroy {
   private readonly _rerenderSubscription: Subscription;
diff --git a/src/sort/sort.directive.ts b/src/sort/sort.directive.ts
index e5522c04a..fa2ff858b 100644
--- a/src/sort/sort.directive.ts
+++ b/src/sort/sort.directive.ts
@@ -21,6 +21,7 @@ import { Sort, SortDirection, Sortable } from './sort.types';
 @Directive({
   selector: '[auiSort]',
   exportAs: 'auiSort',
+  standalone: true,
 })
 export class SortDirective implements OnChanges, OnDestroy {
   sortables = new Map<string, Sortable>();
diff --git a/src/sort/sort.module.ts b/src/sort/sort.module.ts
index c467fc63f..35512a7a8 100644
--- a/src/sort/sort.module.ts
+++ b/src/sort/sort.module.ts
@@ -5,8 +5,7 @@ import { SortHeaderComponent } from './sort-header.component';
 import { SortDirective } from './sort.directive';
 
 @NgModule({
-  imports: [CommonModule],
-  declarations: [SortDirective, SortHeaderComponent],
+  imports: [CommonModule, SortDirective, SortHeaderComponent],
   exports: [SortDirective, SortHeaderComponent],
 })
 export class SortModule {}
diff --git a/src/sort/sort.spec.ts b/src/sort/sort.spec.ts
index f68cd5844..301a15b9a 100644
--- a/src/sort/sort.spec.ts
+++ b/src/sort/sort.spec.ts
@@ -22,8 +22,10 @@ describe('Sort', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [SortModule, CdkTableModule, TableModule],
-      declarations: [
+      imports: [
+        SortModule,
+        CdkTableModule,
+        TableModule,
         SimpleSortAppComponent,
         CdkTableSortAppComponent,
         AuiTableSortAppComponent,
@@ -184,6 +186,8 @@ type SimpleAuiSortAppColumnIds = 'defaultA' | 'defaultB' | 'overrideStart';
       </div>
     </div>
   `,
+  standalone: true,
+  imports: [SortModule, CdkTableModule, TableModule],
 })
 class SimpleSortAppComponent {
   latestSortEvent: Sort;
@@ -293,6 +297,8 @@ class FakeDataSource extends DataSource<any> {
       <cdk-row *cdkRowDef="let row; columns: columnsToRender"></cdk-row>
     </cdk-table>
   `,
+  standalone: true,
+  imports: [SortModule, CdkTableModule, TableModule],
 })
 class CdkTableSortAppComponent {
   @ViewChild(SortDirective, { static: true })
@@ -346,6 +352,8 @@ class CdkTableSortAppComponent {
       ></aui-table-row>
     </aui-table>
   `,
+  standalone: true,
+  imports: [SortModule, CdkTableModule, TableModule],
 })
 class AuiTableSortAppComponent {
   @ViewChild(SortDirective, { static: true })
diff --git a/src/status-bar/status-bar.component.spec.ts b/src/status-bar/status-bar.component.spec.ts
index 596f61e3a..87074c98d 100644
--- a/src/status-bar/status-bar.component.spec.ts
+++ b/src/status-bar/status-bar.component.spec.ts
@@ -20,8 +20,7 @@ describe('Status Bar', () => {
   let ocEl: HTMLElement;
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [StatusBarModule, NoopAnimationsModule],
-      declarations: [TestComponent],
+      imports: [StatusBarModule, NoopAnimationsModule, TestComponent],
     });
 
     fixture = TestBed.createComponent(TestComponent);
@@ -97,6 +96,8 @@ describe('Status Bar', () => {
       <div>{{ type }}: {{ value }}</div>
     </ng-template>
   `,
+  standalone: true,
+  imports: [StatusBarModule],
 })
 class TestComponent {
   status1: Status[] = [
diff --git a/src/status-bar/status-bar.component.ts b/src/status-bar/status-bar.component.ts
index 6c105e080..9ca5d62ac 100644
--- a/src/status-bar/status-bar.component.ts
+++ b/src/status-bar/status-bar.component.ts
@@ -1,3 +1,4 @@
+import { NgFor, NgIf, NgClass } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -8,6 +9,7 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { TooltipDirective } from '../tooltip/tooltip.directive';
 import { Bem, buildBem } from '../utils';
 
 import { Status, StatusBarSize } from './status-bar.types';
@@ -19,6 +21,8 @@ import { Status, StatusBarSize } from './status-bar.types';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgFor, NgIf, NgClass, TooltipDirective],
 })
 export class StatusBarComponent {
   bem: Bem = buildBem('aui-status-bar');
diff --git a/src/status-bar/status-bar.module.ts b/src/status-bar/status-bar.module.ts
index d223fe27a..74e21a16b 100644
--- a/src/status-bar/status-bar.module.ts
+++ b/src/status-bar/status-bar.module.ts
@@ -6,8 +6,7 @@ import { TooltipModule } from '../tooltip';
 import { StatusBarComponent } from './status-bar.component';
 
 @NgModule({
-  imports: [CommonModule, TooltipModule],
-  declarations: [StatusBarComponent],
+  imports: [CommonModule, TooltipModule, StatusBarComponent],
   exports: [StatusBarComponent],
 })
 export class StatusBarModule {}
diff --git a/src/steps/steps.component.ts b/src/steps/steps.component.ts
index 7ddc50a12..45c680093 100644
--- a/src/steps/steps.component.ts
+++ b/src/steps/steps.component.ts
@@ -1,3 +1,10 @@
+import {
+  NgFor,
+  NgIf,
+  NgSwitch,
+  NgSwitchCase,
+  NgSwitchDefault,
+} from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -10,6 +17,8 @@ import {
 } from '@angular/core';
 import { BehaviorSubject, Subject, takeUntil } from 'rxjs';
 
+import { IconComponent } from '../icon/icon.component';
+
 import { StepItem, StepState, StepsOrientation, StepsType } from './types';
 
 const StepDefaultIcon = {
@@ -33,6 +42,15 @@ const StepSelectedIcon = {
   styleUrls: ['./steps.component.scss'],
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
+  standalone: true,
+  imports: [
+    NgFor,
+    NgIf,
+    NgSwitch,
+    NgSwitchCase,
+    IconComponent,
+    NgSwitchDefault,
+  ],
 })
 export class StepsComponent implements OnInit, OnDestroy {
   _currentIndex: number;
diff --git a/src/steps/steps.module.ts b/src/steps/steps.module.ts
index bffc28e68..7fa44fbd9 100644
--- a/src/steps/steps.module.ts
+++ b/src/steps/steps.module.ts
@@ -6,8 +6,7 @@ import { IconModule } from '../icon';
 import { StepsComponent } from './steps.component';
 
 @NgModule({
-  imports: [CommonModule, IconModule],
-  declarations: [StepsComponent],
+  imports: [CommonModule, IconModule, StepsComponent],
   exports: [StepsComponent],
 })
 export class StepsModule {}
diff --git a/src/switch/switch.component.spec.ts b/src/switch/switch.component.spec.ts
index 65fbafe97..7893a7332 100644
--- a/src/switch/switch.component.spec.ts
+++ b/src/switch/switch.component.spec.ts
@@ -16,8 +16,7 @@ describe('SwitchComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [SwitchModule, FormsModule],
-      declarations: [TestComponent],
+      imports: [SwitchModule, FormsModule, TestComponent],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -106,6 +105,8 @@ describe('SwitchComponent', () => {
       [loading]="true"
     ></aui-switch>
   `,
+  standalone: true,
+  imports: [SwitchModule, FormsModule],
 })
 export class TestComponent {
   switchMap = { a: true, b: false, c: true, d: true };
diff --git a/src/switch/switch.component.ts b/src/switch/switch.component.ts
index 85d0bf887..a8467d717 100644
--- a/src/switch/switch.component.ts
+++ b/src/switch/switch.component.ts
@@ -1,3 +1,4 @@
+import { NgClass } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -26,6 +27,8 @@ const prefix = 'aui-switch';
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [NgClass],
 })
 export class SwitchComponent extends CommonFormControl<boolean> {
   bem: Bem = buildBem(prefix);
diff --git a/src/switch/switch.module.ts b/src/switch/switch.module.ts
index 137af8a56..e9dc45d70 100644
--- a/src/switch/switch.module.ts
+++ b/src/switch/switch.module.ts
@@ -4,8 +4,7 @@ import { NgModule } from '@angular/core';
 import { SwitchComponent } from './switch.component';
 
 @NgModule({
-  imports: [CommonModule],
-  declarations: [SwitchComponent],
+  imports: [CommonModule, SwitchComponent],
   exports: [SwitchComponent],
 })
 export class SwitchModule {}
diff --git a/src/table-of-contents/table-of-contents.module.ts b/src/table-of-contents/table-of-contents.module.ts
index 160a8d441..a31da2d93 100644
--- a/src/table-of-contents/table-of-contents.module.ts
+++ b/src/table-of-contents/table-of-contents.module.ts
@@ -6,8 +6,12 @@ import { TocContentDirective } from './toc-content.directive';
 import { TocLinkDirective } from './toc-link.directive';
 
 @NgModule({
-  imports: [CommonModule],
-  declarations: [TocContentDirective, TocContainerDirective, TocLinkDirective],
+  imports: [
+    CommonModule,
+    TocContentDirective,
+    TocContainerDirective,
+    TocLinkDirective,
+  ],
   exports: [TocContentDirective, TocContainerDirective, TocLinkDirective],
 })
 export class TableOfContentsModule {}
diff --git a/src/table-of-contents/toc-container.directive.ts b/src/table-of-contents/toc-container.directive.ts
index f92efd253..a3e3a0801 100644
--- a/src/table-of-contents/toc-container.directive.ts
+++ b/src/table-of-contents/toc-container.directive.ts
@@ -31,6 +31,7 @@ import { TocContentDirective } from './toc-content.directive';
 @Directive({
   selector: '[auiTocContainer]',
   exportAs: 'auiTocContainer',
+  standalone: true,
 })
 export class TocContainerDirective implements AfterContentInit, OnDestroy {
   @Output()
diff --git a/src/table-of-contents/toc-content.directive.ts b/src/table-of-contents/toc-content.directive.ts
index 06bd28ed8..d84081e8f 100644
--- a/src/table-of-contents/toc-content.directive.ts
+++ b/src/table-of-contents/toc-content.directive.ts
@@ -12,6 +12,7 @@ import { TocContainerDirective } from './toc-container.directive';
 
 @Directive({
   selector: '[auiTocContent]',
+  standalone: true,
 })
 export class TocContentDirective implements OnInit, OnDestroy {
   @HostBinding('class.isActive')
diff --git a/src/table-of-contents/toc-link.directive.ts b/src/table-of-contents/toc-link.directive.ts
index a0111e908..b6927d19d 100644
--- a/src/table-of-contents/toc-link.directive.ts
+++ b/src/table-of-contents/toc-link.directive.ts
@@ -13,6 +13,7 @@ import { TocContainerDirective } from './toc-container.directive';
 
 @Directive({
   selector: '[auiTocLink]',
+  standalone: true,
 })
 export class TocLinkDirective implements OnInit, OnDestroy {
   @HostBinding('class.isActive')
diff --git a/src/table/table-cell-def.directive.ts b/src/table/table-cell-def.directive.ts
index 9937c93f2..24955cfcc 100644
--- a/src/table/table-cell-def.directive.ts
+++ b/src/table/table-cell-def.directive.ts
@@ -13,5 +13,6 @@ import { Directive } from '@angular/core';
       useExisting: TableCellDefDirective,
     },
   ],
+  standalone: true,
 })
 export class TableCellDefDirective extends CdkCellDef {}
diff --git a/src/table/table-cell.component.ts b/src/table/table-cell.component.ts
index 715eeedf8..f5f9572bf 100644
--- a/src/table/table-cell.component.ts
+++ b/src/table/table-cell.component.ts
@@ -6,6 +6,7 @@ import {
   trigger,
 } from '@angular/animations';
 import { CdkCell } from '@angular/cdk/table';
+import { NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -15,6 +16,8 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { IconComponent } from '../icon/icon.component';
+
 @Component({
   selector: 'aui-table-cell[auiExpandButton]',
   template: `
@@ -31,6 +34,8 @@ import {
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [IconComponent],
 })
 export class TableExpandButtonCellComponent extends CdkCell {
   @Input()
@@ -72,6 +77,8 @@ export class TableExpandButtonCellComponent extends CdkCell {
       transition('* <=> expanded', [animate('0.1s ease-in-out')]),
     ]),
   ],
+  standalone: true,
+  imports: [NgIf],
 })
 export class TableExpandPanelCellComponent extends CdkCell {
   @Input()
diff --git a/src/table/table-cell.directive.ts b/src/table/table-cell.directive.ts
index f9360b352..f60fee04b 100644
--- a/src/table/table-cell.directive.ts
+++ b/src/table/table-cell.directive.ts
@@ -14,6 +14,7 @@ const bem = buildBem('aui-table');
     role: 'gridcell',
     '[class.aui-table__cell--column]': 'direction === "column"',
   },
+  standalone: true,
 })
 export class TableCellDirective extends CdkCell {
   @Input()
diff --git a/src/table/table-column-def.directive.ts b/src/table/table-column-def.directive.ts
index d80753560..4b88ea117 100644
--- a/src/table/table-column-def.directive.ts
+++ b/src/table/table-column-def.directive.ts
@@ -14,6 +14,7 @@ import { Directive, Input } from '@angular/core';
     },
   ],
   inputs: ['sticky'],
+  standalone: true,
 })
 export class TableColumnDefDirective extends CdkColumnDef {
   // Unique name for this column
diff --git a/src/table/table-header-cell-def.directive.ts b/src/table/table-header-cell-def.directive.ts
index 79bc48794..12daf65d7 100644
--- a/src/table/table-header-cell-def.directive.ts
+++ b/src/table/table-header-cell-def.directive.ts
@@ -13,5 +13,6 @@ import { Directive } from '@angular/core';
       useExisting: TableHeaderCellDefDirective,
     },
   ],
+  standalone: true,
 })
 export class TableHeaderCellDefDirective extends CdkHeaderCellDef {}
diff --git a/src/table/table-header-cell.directive.ts b/src/table/table-header-cell.directive.ts
index 44e29e688..9a774cbdf 100644
--- a/src/table/table-header-cell.directive.ts
+++ b/src/table/table-header-cell.directive.ts
@@ -13,6 +13,7 @@ const bem = buildBem('aui-table');
     class: 'aui-table__header-cell',
     role: 'columnheader',
   },
+  standalone: true,
 })
 export class TableHeaderCellDirective extends CdkHeaderCell {
   constructor(columnDef: CdkColumnDef, elementRef: ElementRef<HTMLElement>) {
diff --git a/src/table/table-header-row-def.directive.ts b/src/table/table-header-row-def.directive.ts
index a7bb5fb33..0e4bb0987 100644
--- a/src/table/table-header-row-def.directive.ts
+++ b/src/table/table-header-row-def.directive.ts
@@ -13,6 +13,7 @@ import { Directive, Input } from '@angular/core';
       useExisting: TableHeaderRowDefDirective,
     },
   ],
+  standalone: true,
 })
 export class TableHeaderRowDefDirective extends CdkHeaderRowDef {
   @Input('auiTableHeaderRowDef')
diff --git a/src/table/table-header-row.component.ts b/src/table/table-header-row.component.ts
index d61ce605f..7536d201a 100644
--- a/src/table/table-header-row.component.ts
+++ b/src/table/table-header-row.component.ts
@@ -1,4 +1,8 @@
-import { CDK_ROW_TEMPLATE, CdkHeaderRow } from '@angular/cdk/table';
+import {
+  CDK_ROW_TEMPLATE,
+  CdkHeaderRow,
+  CdkTableModule,
+} from '@angular/cdk/table';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -17,5 +21,7 @@ import {
   encapsulation: ViewEncapsulation.None,
   exportAs: 'auiTableHeaderRow',
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [CdkTableModule],
 })
 export class TableHeaderRowComponent extends CdkHeaderRow {}
diff --git a/src/table/table-placeholder.directive.ts b/src/table/table-placeholder.directive.ts
index 38c1a9134..dcd020722 100644
--- a/src/table/table-placeholder.directive.ts
+++ b/src/table/table-placeholder.directive.ts
@@ -8,6 +8,7 @@ import {
 
 @Directive({
   selector: 'ng-template[auiTablePlaceholderDef]',
+  standalone: true,
 })
 export class TablePlaceholderDefDirective {
   constructor(public templateRef: TemplateRef<any>) {}
@@ -15,6 +16,7 @@ export class TablePlaceholderDefDirective {
 
 @Directive({
   selector: '[auiTablePlaceholderOutlet]',
+  standalone: true,
 })
 export class TablePlaceholderOutletDirective implements RowOutlet {
   constructor(
diff --git a/src/table/table-row-def.directive.ts b/src/table/table-row-def.directive.ts
index 3a2139677..93115b37f 100644
--- a/src/table/table-row-def.directive.ts
+++ b/src/table/table-row-def.directive.ts
@@ -14,6 +14,7 @@ import { Directive, Input } from '@angular/core';
       useExisting: TableRowDefDirective,
     },
   ],
+  standalone: true,
 })
 export class TableRowDefDirective<T> extends CdkRowDef<T> {
   @Input('auiTableRowDefColumns')
diff --git a/src/table/table-row.component.ts b/src/table/table-row.component.ts
index da8187d30..313a8e5f9 100644
--- a/src/table/table-row.component.ts
+++ b/src/table/table-row.component.ts
@@ -1,4 +1,4 @@
-import { CDK_ROW_TEMPLATE, CdkRow } from '@angular/cdk/table';
+import { CDK_ROW_TEMPLATE, CdkRow, CdkTableModule } from '@angular/cdk/table';
 import {
   AfterContentInit,
   ChangeDetectionStrategy,
@@ -21,6 +21,8 @@ import {
   encapsulation: ViewEncapsulation.None,
   exportAs: 'auiTableRow',
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [CdkTableModule],
 })
 export class TableRowComponent extends CdkRow implements AfterContentInit {
   @Input()
diff --git a/src/table/table-scroll.directive.ts b/src/table/table-scroll.directive.ts
index 4f84fb138..44cee4159 100644
--- a/src/table/table-scroll.directive.ts
+++ b/src/table/table-scroll.directive.ts
@@ -42,6 +42,7 @@ const HAS_TABLE_VERTICAL_SCROLL = 'hasTableVerticalScroll';
   host: {
     class: 'aui-table__scroll-wrapper',
   },
+  standalone: true,
 })
 export class TableScrollWrapperDirective {
   @HostBinding('style.max-height')
@@ -54,6 +55,7 @@ export class TableScrollWrapperDirective {
   providers: [
     { provide: CdkScrollable, useExisting: TableScrollableDirective },
   ],
+  standalone: true,
 })
 export class TableScrollableDirective
   extends CdkScrollable
diff --git a/src/table/table.component.ts b/src/table/table.component.ts
index 2f03cabf6..dcda7fc28 100644
--- a/src/table/table.component.ts
+++ b/src/table/table.component.ts
@@ -8,6 +8,7 @@ import {
   CdkTable,
   _COALESCED_STYLE_SCHEDULER,
   _CoalescedStyleScheduler,
+  CdkTableModule,
 } from '@angular/cdk/table';
 import {
   AfterContentInit,
@@ -52,6 +53,8 @@ import {
       useClass: _CoalescedStyleScheduler,
     },
   ],
+  standalone: true,
+  imports: [CdkTableModule, TablePlaceholderOutletDirective],
 })
 export class TableComponent<T>
   extends CdkTable<T>
diff --git a/src/table/table.module.ts b/src/table/table.module.ts
index a17aeaa11..5900d7b7c 100644
--- a/src/table/table.module.ts
+++ b/src/table/table.module.ts
@@ -28,8 +28,10 @@ import {
 import { TableComponent } from './table.component';
 
 @NgModule({
-  imports: [CommonModule, IconModule, CdkTableModule],
-  declarations: [
+  imports: [
+    CommonModule,
+    IconModule,
+    CdkTableModule,
     TableComponent,
     TableRowComponent,
     TableHeaderRowComponent,
diff --git a/src/table/table.spec.ts b/src/table/table.spec.ts
index 301ea4acc..6c21bdbb1 100644
--- a/src/table/table.spec.ts
+++ b/src/table/table.spec.ts
@@ -12,8 +12,7 @@ const bem = buildBem('aui-table');
 describe('Table', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [TableModule],
-      declarations: [SimpleTableAppComponent],
+      imports: [TableModule, SimpleTableAppComponent],
     });
   });
 
@@ -121,6 +120,8 @@ class FakeDataSource extends DataSource<TestData> {
       ></aui-table-row>
     </aui-table>
   `,
+  standalone: true,
+  imports: [TableModule],
 })
 class SimpleTableAppComponent {
   dataSource: FakeDataSource | null = new FakeDataSource();
diff --git a/src/tabs/tab-body.component.ts b/src/tabs/tab-body.component.ts
index 015609200..29ee51379 100644
--- a/src/tabs/tab-body.component.ts
+++ b/src/tabs/tab-body.component.ts
@@ -16,6 +16,7 @@ import {
   ViewChild,
   ViewContainerRef,
   ViewEncapsulation,
+  forwardRef,
 } from '@angular/core';
 import { BehaviorSubject, Subscription } from 'rxjs';
 
@@ -27,6 +28,8 @@ import { coerceAttrBoolean } from '../utils';
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [forwardRef(() => TabBodyPortalDirective)],
 })
 export class TabBodyComponent implements OnDestroy {
   private _content: TemplatePortal;
@@ -58,6 +61,7 @@ export class TabBodyComponent implements OnDestroy {
 /** Used to flag tab labels for use with the portal directive */
 @Directive({
   selector: '[auiTabLabel]',
+  standalone: true,
 })
 export class TabLabelDirective extends CdkPortal {
   // eslint-disable-next-line @typescript-eslint/no-useless-constructor
@@ -74,6 +78,7 @@ export class TabLabelDirective extends CdkPortal {
  */
 @Directive({
   selector: '[auiTabContent]',
+  standalone: true,
 })
 export class TabContentDirective {
   constructor(public template: TemplateRef<any>) {}
@@ -82,6 +87,7 @@ export class TabContentDirective {
 /** Used to project additional template from host to the tab header. */
 @Directive({
   selector: '[auiTabHeaderAddon]',
+  standalone: true,
 })
 export class TabHeaderAddonDirective extends CdkPortal {
   // eslint-disable-next-line @typescript-eslint/no-useless-constructor
@@ -102,6 +108,7 @@ export class TabHeaderAddonDirective extends CdkPortal {
     '[class.aui-tab-label]': 'true',
     '[class.aui-tab-label--disabled]': '!!disabled',
   },
+  standalone: true,
 })
 export class TabLabelWrapperDirective {
   /** Whether or not the tab is disabled  */
@@ -126,6 +133,7 @@ export class TabLabelWrapperDirective {
 
 @Directive({
   selector: '[auiTabTitle]',
+  standalone: true,
 })
 export class TabTitleDirective extends CdkPortal {
   // eslint-disable-next-line @typescript-eslint/no-useless-constructor
@@ -142,6 +150,7 @@ export class TabTitleDirective extends CdkPortal {
  */
 @Directive({
   selector: '[auiTabBodyHost]',
+  standalone: true,
 })
 export class TabBodyPortalDirective
   extends CdkPortalOutlet
diff --git a/src/tabs/tab-group.component.spec.ts b/src/tabs/tab-group.component.spec.ts
index 4c6201b62..b15bfed2b 100644
--- a/src/tabs/tab-group.component.spec.ts
+++ b/src/tabs/tab-group.component.spec.ts
@@ -15,8 +15,8 @@ import { TabChangeEvent, TabComponent, TabGroupComponent, TabsModule } from '.';
 describe('TabGroupComponent', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [TabsModule],
-      declarations: [SimpleTabsTestAppComponent, LifeCycleDirective],
+      imports: [TabsModule, SimpleTabsTestAppComponent],
+      declarations: [LifeCycleDirective],
     });
   });
 
@@ -325,6 +325,8 @@ function checkSelectedIndex(
       </aui-tab>
     </aui-tab-group>
   `,
+  standalone: true,
+  imports: [TabsModule],
 })
 class SimpleTabsTestAppComponent {
   @ViewChildren(TabComponent)
diff --git a/src/tabs/tab-group.component.ts b/src/tabs/tab-group.component.ts
index 9816d80b5..14ce20617 100644
--- a/src/tabs/tab-group.component.ts
+++ b/src/tabs/tab-group.component.ts
@@ -1,4 +1,7 @@
 /* eslint-disable no-prototype-builtins */
+import { A11yModule } from '@angular/cdk/a11y';
+import { PortalModule } from '@angular/cdk/portal';
+import { NgClass, NgIf, NgFor } from '@angular/common';
 import {
   AfterContentChecked,
   AfterContentInit,
@@ -20,11 +23,14 @@ import {
 } from '@angular/core';
 import { Subject, Subscription, merge } from 'rxjs';
 
+import { IconComponent } from '../icon/icon.component';
 import { Bem, buildBem } from '../utils';
 
 import {
   TabHeaderAddonDirective,
   TabTitleDirective,
+  TabLabelWrapperDirective,
+  TabBodyComponent,
 } from './tab-body.component';
 import { TabHeaderComponent } from './tab-header.component';
 import { TabComponent } from './tab.component';
@@ -46,6 +52,20 @@ export class TabChangeEvent {
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [
+    NgClass,
+    TabHeaderComponent,
+    NgIf,
+    TabTitleDirective,
+    PortalModule,
+    NgFor,
+    TabLabelWrapperDirective,
+    A11yModule,
+    IconComponent,
+    TabHeaderAddonDirective,
+    TabBodyComponent,
+  ],
 })
 export class TabGroupComponent
   implements OnChanges, AfterContentChecked, AfterContentInit, OnDestroy
diff --git a/src/tabs/tab-header-active-indicator.component.ts b/src/tabs/tab-header-active-indicator.component.ts
index bb62dd8ef..f868fb781 100644
--- a/src/tabs/tab-header-active-indicator.component.ts
+++ b/src/tabs/tab-header-active-indicator.component.ts
@@ -1,3 +1,4 @@
+import { NgClass } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -17,6 +18,8 @@ import { TabType } from './tabs.types';
   encapsulation: ViewEncapsulation.None,
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgClass],
 })
 export class TabHeaderActiveIndicatorComponent {
   @Input()
diff --git a/src/tabs/tab-header.component.spec.ts b/src/tabs/tab-header.component.spec.ts
index f02fb53a5..878507e47 100644
--- a/src/tabs/tab-header.component.spec.ts
+++ b/src/tabs/tab-header.component.spec.ts
@@ -21,8 +21,10 @@ describe('TabHeaderComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [CommonModule, PortalModule, IconModule],
-      declarations: [
+      imports: [
+        CommonModule,
+        PortalModule,
+        IconModule,
         TabHeaderComponent,
         TabHeaderActiveIndicatorComponent,
         TabLabelWrapperDirective,
@@ -88,6 +90,8 @@ interface Tab {
       }
     `,
   ],
+  standalone: true,
+  imports: [CommonModule, PortalModule, IconModule],
 })
 class SimpleTabHeaderAppComponent {
   selectedIndex = 0;
diff --git a/src/tabs/tab-header.component.ts b/src/tabs/tab-header.component.ts
index 27b35f440..e7a4f6559 100644
--- a/src/tabs/tab-header.component.ts
+++ b/src/tabs/tab-header.component.ts
@@ -1,5 +1,8 @@
 import { FocusKeyManager } from '@angular/cdk/a11y';
+import { ObserversModule } from '@angular/cdk/observers';
+import { PortalModule } from '@angular/cdk/portal';
 import { ViewportRuler } from '@angular/cdk/scrolling';
+import { NgClass, NgIf } from '@angular/common';
 import {
   AfterContentChecked,
   AfterContentInit,
@@ -19,6 +22,7 @@ import {
 } from '@angular/core';
 import { Subject, takeUntil } from 'rxjs';
 
+import { IconComponent } from '../icon/icon.component';
 import { Bem, buildBem } from '../utils';
 
 import {
@@ -48,6 +52,15 @@ const EXAGGERATED_OVERSCROLL = 60;
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
   changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [
+    NgClass,
+    NgIf,
+    PortalModule,
+    IconComponent,
+    ObserversModule,
+    TabHeaderActiveIndicatorComponent,
+  ],
 })
 export class TabHeaderComponent
   implements OnDestroy, AfterContentChecked, AfterContentInit
diff --git a/src/tabs/tab.component.ts b/src/tabs/tab.component.ts
index a26ff312a..c993d5cb2 100644
--- a/src/tabs/tab.component.ts
+++ b/src/tabs/tab.component.ts
@@ -31,6 +31,7 @@ import { TabContextService } from './tab-context.service';
   changeDetection: ChangeDetectionStrategy.OnPush,
   preserveWhitespaces: false,
   providers: [TabContextService],
+  standalone: true,
 })
 export class TabComponent implements AfterContentInit, OnDestroy, OnChanges {
   @Input()
diff --git a/src/tabs/tabs.module.ts b/src/tabs/tabs.module.ts
index 20ea1e766..e1d358d1b 100644
--- a/src/tabs/tabs.module.ts
+++ b/src/tabs/tabs.module.ts
@@ -31,8 +31,6 @@ import { TabComponent } from './tab.component';
     IconModule,
     A11yModule,
     ObserversModule,
-  ],
-  declarations: [
     TabGroupComponent,
     TabComponent,
     TabLabelDirective,
diff --git a/src/tag/check-tag/check-tag.component.ts b/src/tag/check-tag/check-tag.component.ts
index fe4aa74fb..2d92a5a52 100644
--- a/src/tag/check-tag/check-tag.component.ts
+++ b/src/tag/check-tag/check-tag.component.ts
@@ -18,6 +18,7 @@ import { TagType } from '../tag.types';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class CheckTagComponent {
   bem: Bem = buildBem('aui-tag');
diff --git a/src/tag/tag.component.spec.ts b/src/tag/tag.component.spec.ts
index c46f8243e..50f701eb1 100644
--- a/src/tag/tag.component.spec.ts
+++ b/src/tag/tag.component.spec.ts
@@ -6,8 +6,7 @@ import { TagModule } from './tag.module';
 describe('TagComponent', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [TagModule],
-      declarations: [TestComponent],
+      imports: [TagModule, TestComponent],
     });
   });
 
@@ -52,5 +51,7 @@ describe('TagComponent', () => {
       info
     </aui-tag>
   `,
+  standalone: true,
+  imports: [TagModule],
 })
 class TestComponent {}
diff --git a/src/tag/tag.component.ts b/src/tag/tag.component.ts
index 5d4b71889..ed4009137 100644
--- a/src/tag/tag.component.ts
+++ b/src/tag/tag.component.ts
@@ -1,3 +1,4 @@
+import { NgStyle, NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -7,6 +8,7 @@ import {
   ViewEncapsulation,
 } from '@angular/core';
 
+import { IconComponent } from '../icon/icon.component';
 import { ComponentSize } from '../types';
 import { Bem, buildBem } from '../utils';
 
@@ -19,6 +21,8 @@ import { TagType } from './tag.types';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgStyle, NgIf, IconComponent],
 })
 export class TagComponent {
   bem: Bem = buildBem('aui-tag');
diff --git a/src/tag/tag.module.ts b/src/tag/tag.module.ts
index d47a41a8e..87f382db0 100644
--- a/src/tag/tag.module.ts
+++ b/src/tag/tag.module.ts
@@ -7,8 +7,7 @@ import { CheckTagComponent } from './check-tag/check-tag.component';
 import { TagComponent } from './tag.component';
 
 @NgModule({
-  imports: [CommonModule, IconModule],
-  declarations: [TagComponent, CheckTagComponent],
+  imports: [CommonModule, IconModule, TagComponent, CheckTagComponent],
   exports: [TagComponent, CheckTagComponent],
 })
 export class TagModule {}
diff --git a/src/theme/theme.module.ts b/src/theme/theme.module.ts
index fa1a89fd7..8c3afe90e 100644
--- a/src/theme/theme.module.ts
+++ b/src/theme/theme.module.ts
@@ -9,8 +9,13 @@ import {
 } from './theme.pipe';
 
 @NgModule({
-  imports: [CommonModule],
-  declarations: [ThemePickerPipe, RgbColorPipe, RgbaColorPipe, CssVarPipe],
+  imports: [
+    CommonModule,
+    ThemePickerPipe,
+    RgbColorPipe,
+    RgbaColorPipe,
+    CssVarPipe,
+  ],
   exports: [ThemePickerPipe, RgbColorPipe, RgbaColorPipe, CssVarPipe],
 })
 export class ThemeModule {}
diff --git a/src/theme/theme.pipe.ts b/src/theme/theme.pipe.ts
index 60e227944..26233afbe 100644
--- a/src/theme/theme.pipe.ts
+++ b/src/theme/theme.pipe.ts
@@ -10,22 +10,38 @@ import { ThemeService } from './theme.service';
 import { Theme, ThemeSet } from './theme.types';
 import { cssVar, rgbColor, rgbaColor } from './utils';
 
-@Pipe({ name: 'auiRgbColor', pure: true })
+@Pipe({
+  name: 'auiRgbColor',
+  pure: true,
+  standalone: true,
+})
 export class RgbColorPipe implements PipeTransform {
   transform: (color: string) => string = rgbColor;
 }
 
-@Pipe({ name: 'auiRgbaColor', pure: true })
+@Pipe({
+  name: 'auiRgbaColor',
+  pure: true,
+  standalone: true,
+})
 export class RgbaColorPipe implements PipeTransform {
   transform: ([color, opacity]: [string, number]) => string = rgbaColor;
 }
 
-@Pipe({ name: 'auiCssVar', pure: true })
+@Pipe({
+  name: 'auiCssVar',
+  pure: true,
+  standalone: true,
+})
 export class CssVarPipe implements PipeTransform {
   transform: (value: string) => string = cssVar;
 }
 
-@Pipe({ name: 'auiThemePicker', pure: false })
+@Pipe({
+  name: 'auiThemePicker',
+  pure: false,
+  standalone: true,
+})
 export class ThemePickerPipe<T> implements PipeTransform, OnDestroy {
   private currentTheme: Theme;
   private readonly destroy$$ = new Subject<void>();
diff --git a/src/time-picker/component.ts b/src/time-picker/component.ts
index 59167c89a..8ff2fee42 100644
--- a/src/time-picker/component.ts
+++ b/src/time-picker/component.ts
@@ -1,3 +1,4 @@
+import { NgIf } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   Component,
@@ -9,15 +10,21 @@ import {
   ViewEncapsulation,
   forwardRef,
 } from '@angular/core';
-import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
 import dayjs, { Dayjs } from 'dayjs';
 import customParseFormat from 'dayjs/plugin/customParseFormat';
 
 import { updateDateByTimeModel } from '../date-picker/calendar/util';
 import { CommonFormControl } from '../form/common-form';
+import { IconComponent } from '../icon/icon.component';
+import { InputSuffixDirective } from '../input/helper-directives';
+import { InputGroupComponent } from '../input/input-group/input-group.component';
+import { InputComponent } from '../input/input.component';
 import { TooltipDirective } from '../tooltip';
+import { TooltipDirective as TooltipDirective_1 } from '../tooltip/tooltip.directive';
 import { ComponentSize } from '../types';
 
+import { TimePickerPanelComponent } from './panel/panel.component';
 import {
   TimePickerDataLike,
   TimePickerModel,
@@ -39,6 +46,17 @@ dayjs.extend(customParseFormat);
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [
+    TooltipDirective_1,
+    InputGroupComponent,
+    InputComponent,
+    FormsModule,
+    NgIf,
+    InputSuffixDirective,
+    IconComponent,
+    TimePickerPanelComponent,
+  ],
 })
 export class TimePickerComponent extends CommonFormControl<
   TimePickerDataLike,
diff --git a/src/time-picker/panel/panel.component.ts b/src/time-picker/panel/panel.component.ts
index b389e0211..1c7a41f7b 100644
--- a/src/time-picker/panel/panel.component.ts
+++ b/src/time-picker/panel/panel.component.ts
@@ -1,3 +1,10 @@
+import {
+  NgIf,
+  NgFor,
+  NgClass,
+  NgTemplateOutlet,
+  DecimalPipe,
+} from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -17,8 +24,10 @@ import {
 import { NG_VALUE_ACCESSOR } from '@angular/forms';
 import dayjs, { Dayjs } from 'dayjs';
 
+import { ButtonComponent } from '../../button/button.component';
 import { updateDateByTimeModel } from '../../date-picker/calendar/util';
 import { CommonFormControl } from '../../form/common-form';
+import { I18nPipe } from '../../i18n/i18n.pipe';
 import { ComponentSize } from '../../types';
 import { buildBem } from '../../utils';
 import {
@@ -45,6 +54,16 @@ const bem = buildBem('aui-time-picker-panel');
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [
+    NgIf,
+    NgFor,
+    NgClass,
+    ButtonComponent,
+    NgTemplateOutlet,
+    DecimalPipe,
+    I18nPipe,
+  ],
 })
 export class TimePickerPanelComponent
   extends CommonFormControl<Dayjs>
diff --git a/src/time-picker/time-picker.module.ts b/src/time-picker/time-picker.module.ts
index 6ddf0bc7f..59a1b25fc 100644
--- a/src/time-picker/time-picker.module.ts
+++ b/src/time-picker/time-picker.module.ts
@@ -25,8 +25,9 @@ import { TimePickerPanelComponent } from './panel/panel.component';
     IconModule,
     ButtonModule,
     I18nModule,
+    TimePickerComponent,
+    TimePickerPanelComponent,
   ],
-  declarations: [TimePickerComponent, TimePickerPanelComponent],
   exports: [TimePickerComponent, TimePickerPanelComponent],
 })
 export class TimePickerModule {}
diff --git a/src/tooltip/tooltip-active.directive.ts b/src/tooltip/tooltip-active.directive.ts
index 64e16c6c0..47d28cbee 100644
--- a/src/tooltip/tooltip-active.directive.ts
+++ b/src/tooltip/tooltip-active.directive.ts
@@ -11,6 +11,7 @@ import { BaseTooltip } from './base-tooltip';
 
 @Directive({
   selector: '[auiTooltipActive]',
+  standalone: true,
 })
 export class TooltipActiveDirective implements OnDestroy {
   @Input('auiTooltipActive')
diff --git a/src/tooltip/tooltip-copy.directive.ts b/src/tooltip/tooltip-copy.directive.ts
index 176b6a192..ec3f5e21a 100644
--- a/src/tooltip/tooltip-copy.directive.ts
+++ b/src/tooltip/tooltip-copy.directive.ts
@@ -19,6 +19,7 @@ import { TooltipCopyIntl } from './tooltip-intl';
 @Directive({
   selector: '[auiTooltipCopy]',
   inputs: ['position:auiTooltipPosition', 'disabled:auiTooltipDisabled'],
+  standalone: true,
 })
 export class TooltipCopyDirective extends BaseTooltip implements OnInit {
   @HostBinding('class.aui-tooltip-copy')
diff --git a/src/tooltip/tooltip.component.ts b/src/tooltip/tooltip.component.ts
index bafc67e3f..7ddc8b381 100644
--- a/src/tooltip/tooltip.component.ts
+++ b/src/tooltip/tooltip.component.ts
@@ -6,6 +6,7 @@ import {
   state,
   animate,
 } from '@angular/animations';
+import { NgIf, NgTemplateOutlet, AsyncPipe } from '@angular/common';
 import {
   ChangeDetectionStrategy,
   ChangeDetectorRef,
@@ -57,6 +58,8 @@ import { TooltipType } from './tooltip.types';
       ]),
     ]),
   ],
+  standalone: true,
+  imports: [NgIf, NgTemplateOutlet, AsyncPipe],
 })
 export class TooltipComponent implements OnDestroy {
   text: string;
diff --git a/src/tooltip/tooltip.directive.spec.ts b/src/tooltip/tooltip.directive.spec.ts
index 080885e19..233060473 100644
--- a/src/tooltip/tooltip.directive.spec.ts
+++ b/src/tooltip/tooltip.directive.spec.ts
@@ -26,8 +26,12 @@ describe('TooltipDirective', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [TooltipModule, FormsModule, BrowserAnimationsModule],
-      declarations: [TestComponent],
+      imports: [
+        TooltipModule,
+        FormsModule,
+        BrowserAnimationsModule,
+        TestComponent,
+      ],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -207,6 +211,8 @@ describe('TooltipDirective', () => {
       <div id="dataNode">{{ text }}</div>
     </ng-template>
   `,
+  standalone: true,
+  imports: [TooltipModule, FormsModule],
 })
 class TestComponent {
   content: string | TemplateRef<any> = 'hello world';
diff --git a/src/tooltip/tooltip.directive.ts b/src/tooltip/tooltip.directive.ts
index 129590b51..00e4ef5dc 100644
--- a/src/tooltip/tooltip.directive.ts
+++ b/src/tooltip/tooltip.directive.ts
@@ -21,6 +21,7 @@ import { BaseTooltip } from './base-tooltip';
     'disabled:auiTooltipDisabled',
     'hideOnClick:auiTooltipHideOnClick',
   ],
+  standalone: true,
 })
 export class TooltipDirective extends BaseTooltip {
   @Output('auiTooltipVisibleChange')
diff --git a/src/tooltip/tooltip.module.ts b/src/tooltip/tooltip.module.ts
index 102049e54..9ee46f2fa 100644
--- a/src/tooltip/tooltip.module.ts
+++ b/src/tooltip/tooltip.module.ts
@@ -9,8 +9,9 @@ import { TooltipComponent } from './tooltip.component';
 import { TooltipDirective } from './tooltip.directive';
 
 @NgModule({
-  imports: [CommonModule, OverlayModule],
-  declarations: [
+  imports: [
+    CommonModule,
+    OverlayModule,
     TooltipDirective,
     TooltipComponent,
     TooltipActiveDirective,
diff --git a/src/tree-select/tree-node-placeholder.component.ts b/src/tree-select/tree-node-placeholder.component.ts
index c502c608f..07a321c32 100644
--- a/src/tree-select/tree-node-placeholder.component.ts
+++ b/src/tree-select/tree-node-placeholder.component.ts
@@ -10,5 +10,6 @@ import {
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
 })
 export class TreeNodePlaceholderComponent {}
diff --git a/src/tree-select/tree-select.component.spec.ts b/src/tree-select/tree-select.component.spec.ts
index a30f7bf0d..6ab7f162a 100644
--- a/src/tree-select/tree-select.component.spec.ts
+++ b/src/tree-select/tree-select.component.spec.ts
@@ -25,8 +25,12 @@ describe('TreeSelectComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [TreeSelectModule, FormsModule, BrowserAnimationsModule],
-      declarations: [TestComponent],
+      imports: [
+        TreeSelectModule,
+        FormsModule,
+        BrowserAnimationsModule,
+        TestComponent,
+      ],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -124,6 +128,8 @@ describe('TreeSelectComponent', () => {
       <aui-tree-node-placeholder>None</aui-tree-node-placeholder>
     </aui-tree-select>
   `,
+  standalone: true,
+  imports: [TreeSelectModule, FormsModule],
 })
 class TestComponent {
   value = 'a-1';
diff --git a/src/tree-select/tree-select.component.ts b/src/tree-select/tree-select.component.ts
index aaa4c63bd..ee458cecd 100644
--- a/src/tree-select/tree-select.component.ts
+++ b/src/tree-select/tree-select.component.ts
@@ -1,3 +1,4 @@
+import { NgFor, NgIf } from '@angular/common';
 import {
   AfterViewInit,
   ChangeDetectionStrategy,
@@ -29,9 +30,14 @@ import {
 } from 'rxjs';
 
 import { CommonFormControl } from '../form';
+import { IconComponent } from '../icon/icon.component';
 import { InputComponent } from '../input';
+import { InputSuffixDirective } from '../input/helper-directives';
+import { InputGroupComponent } from '../input/input-group/input-group.component';
+import { InputComponent as InputComponent_1 } from '../input/input.component';
 import { TrackFn } from '../select/select.types';
 import { TooltipDirective } from '../tooltip';
+import { TooltipDirective as TooltipDirective_1 } from '../tooltip/tooltip.directive';
 import {
   Bem,
   buildBem,
@@ -41,6 +47,7 @@ import {
   scrollIntoView,
 } from '../utils';
 
+import { TreeSelectModule } from './tree-select.module';
 import { TreeNode } from './tree-select.types';
 
 @Component({
@@ -57,6 +64,17 @@ import { TreeNode } from './tree-select.types';
       multi: true,
     },
   ],
+  standalone: true,
+  imports: [
+    TooltipDirective_1,
+    InputGroupComponent,
+    InputComponent_1,
+    InputSuffixDirective,
+    IconComponent,
+    NgFor,
+    forwardRef(() => TreeNodeComponent),
+    NgIf,
+  ],
 })
 export class TreeSelectComponent<T = unknown> extends CommonFormControl<T> {
   @Input()
@@ -275,6 +293,8 @@ export class TreeSelectComponent<T = unknown> extends CommonFormControl<T> {
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
+  standalone: true,
+  imports: [NgIf, IconComponent, NgFor, TreeSelectModule],
 })
 export class TreeNodeComponent<T> implements AfterViewInit, OnDestroy {
   bem: Bem = buildBem('aui-tree-node');
diff --git a/src/tree-select/tree-select.module.ts b/src/tree-select/tree-select.module.ts
index 90592fafc..d9774d7cb 100644
--- a/src/tree-select/tree-select.module.ts
+++ b/src/tree-select/tree-select.module.ts
@@ -12,8 +12,11 @@ import {
 } from './tree-select.component';
 
 @NgModule({
-  imports: [CommonModule, TooltipModule, IconModule, InputModule],
-  declarations: [
+  imports: [
+    CommonModule,
+    TooltipModule,
+    IconModule,
+    InputModule,
     TreeSelectComponent,
     TreeNodeComponent,
     TreeNodePlaceholderComponent,

From a28bc903dfccec195e3c82b31b838de0964a6be8 Mon Sep 17 00:00:00 2001
From: JounQin <admin@1stg.me>
Date: Thu, 31 Aug 2023 12:16:53 +0800
Subject: [PATCH 2/4] test: fix all test cases

---
 package.json                                  |   48 +-
 src/accordion/accordion.component.spec.ts     |    8 +-
 src/accordion/accordion.module.ts             |    8 +-
 src/anchor/anchor.module.ts                   |    7 +
 src/autocomplete/autocomplete.module.ts       |   10 +
 src/breadcrumb/breadcrumb.component.spec.ts   |   10 +-
 src/breadcrumb/breadcrumb.module.ts           |    5 +
 src/button/button.component.spec.ts           |    8 +-
 src/card/card.module.ts                       |    8 +
 .../checkbox-group.component.spec.ts          |   12 +-
 src/checkbox/checkbox.component.spec.ts       |    7 +-
 src/checkbox/checkbox.module.ts               |    5 +
 src/date-picker/date-picker.module.ts         |    2 +-
 src/dialog/dialog.service.spec.ts             |   34 +-
 .../__snapshots__/form.component.spec.ts.snap |    4 +-
 src/form/common-form.ts                       |    4 +-
 src/form/form.component.spec.ts               |   14 +-
 src/form/form.module.ts                       |   10 +
 src/icon/icon-register.service.ts             |   27 +-
 src/icon/icon.component.spec.ts               |    9 +-
 src/icon/icon.module.ts                       |    2 -
 .../inline-alert.component.spec.ts            |    9 +-
 src/inline-alert/inline-alert.module.ts       |    5 +
 .../input-group/input-group.component.spec.ts |   11 +-
 .../input-group/input-group.component.ts      |    8 +
 src/input/input.component.spec.ts             |    7 +-
 .../number-input.component.spec.ts            |   10 +-
 .../number-input/number-input.component.ts    |    8 +-
 src/input/search/search.component.spec.ts     |    7 +-
 src/input/search/search.component.ts          |    2 +-
 .../tags-input/tags-input.component.spec.ts   |    7 +-
 src/message/message.module.ts                 |    2 -
 src/message/message.service.spec.ts           |   22 +-
 src/message/message.service.ts                |    4 +-
 src/notification/notification.module.ts       |    2 -
 src/notification/notification.service.spec.ts |   22 +-
 src/notification/notification.service.ts      |    4 +-
 src/paginator/paginator-intl.ts               |   18 +-
 src/paginator/paginator.component.spec.ts     |   14 +-
 src/paginator/paginator.module.ts             |    2 -
 src/select/base-select.ts                     |    4 +-
 .../multi-select.component.spec.ts            |    9 +-
 src/select/option/option.component.ts         |    2 +-
 src/select/select.component.spec.ts           |   14 +-
 src/select/select.component.ts                |   15 +-
 src/select/select.module.ts                   |   11 +
 src/sort/sort.module.ts                       |    2 +
 src/status-bar/status-bar.component.spec.ts   |    2 +-
 .../table-of-contents.module.ts               |    6 +
 src/table/table.module.ts                     |   19 +
 src/tabs/tab-group.component.spec.ts          |   19 +-
 src/tabs/tab-header.component.spec.ts         |   31 +-
 src/tabs/tabs.module.ts                       |   11 +
 src/time-picker/component.ts                  |    5 +-
 src/tooltip/base-tooltip.ts                   |    4 +-
 src/tooltip/tooltip-intl.ts                   |   21 +-
 src/tooltip/tooltip.directive.spec.ts         |    9 +-
 src/tooltip/tooltip.module.ts                 |    2 -
 src/tree-select/tree-select.component.spec.ts |   14 +-
 src/tree-select/tree-select.component.ts      |   15 +-
 src/utils/life-cycle.ts                       |    1 +
 yarn.lock                                     | 1901 +++++++++--------
 62 files changed, 1335 insertions(+), 1188 deletions(-)

diff --git a/package.json b/package.json
index 992e40613..d078574f0 100644
--- a/package.json
+++ b/package.json
@@ -55,41 +55,41 @@
     "@1stg/remark-preset": "^2.0.0",
     "@1stg/simple-git-hooks": "^0.2.3",
     "@1stg/stylelint-config": "^5.1.0",
-    "@angular-devkit/build-angular": "^16.2.0",
-    "@angular/animations": "^16.2.0",
-    "@angular/cdk": "^16.2.0",
-    "@angular/cli": "^16.2.0",
-    "@angular/common": "^16.2.0",
-    "@angular/compiler": "^16.2.0",
-    "@angular/compiler-cli": "^16.2.0",
-    "@angular/core": "^16.2.0",
-    "@angular/forms": "^16.2.0",
-    "@angular/platform-browser": "^16.2.0",
-    "@angular/platform-browser-dynamic": "^16.2.0",
+    "@angular-devkit/build-angular": "^16.2.1",
+    "@angular/animations": "^16.2.3",
+    "@angular/cdk": "^16.2.2",
+    "@angular/cli": "^16.2.1",
+    "@angular/common": "^16.2.3",
+    "@angular/compiler": "^16.2.3",
+    "@angular/compiler-cli": "^16.2.3",
+    "@angular/core": "^16.2.3",
+    "@angular/forms": "^16.2.3",
+    "@angular/platform-browser": "^16.2.3",
+    "@angular/platform-browser-dynamic": "^16.2.3",
     "@changesets/changelog-github": "^0.4.8",
     "@changesets/cli": "^2.26.2",
     "@commitlint/cli": "^17.7.1",
     "@compodoc/compodoc": "^1.1.21",
-    "@storybook/addon-essentials": "^7.2.3",
-    "@storybook/addon-interactions": "^7.2.3",
-    "@storybook/addon-links": "^7.2.3",
-    "@storybook/angular": "^7.2.3",
-    "@storybook/blocks": "^7.2.3",
+    "@storybook/addon-essentials": "^7.4.0",
+    "@storybook/addon-interactions": "^7.4.0",
+    "@storybook/addon-links": "^7.4.0",
+    "@storybook/angular": "^7.4.0",
+    "@storybook/blocks": "^7.4.0",
     "@types/chroma-js": "^2.4.0",
     "@types/file-saver": "^2.0.5",
-    "@types/jest": "29.5.3",
-    "@types/node": "^20.5.0",
+    "@types/jest": "29.5.4",
+    "@types/node": "^20.5.7",
     "chroma-js": "^2.4.2",
     "dayjs": "^1.11.9",
-    "eslint": "^8.47.0",
+    "eslint": "^8.48.0",
     "file-saver": "^2.0.5",
     "gulp": "^4.0.2",
     "gulp-dart-sass": "^1.1.0",
-    "jest": "^29.6.2",
+    "jest": "^29.6.4",
     "jest-junit": "^16.0.0",
     "jest-preset-angular": "^13.1.1",
-    "lint-staged": "^14.0.0",
-    "ng-packagr": "^16.2.0",
+    "lint-staged": "^14.0.1",
+    "ng-packagr": "^16.2.2",
     "npm-run-all": "^4.1.5",
     "patch-package": "^8.0.0",
     "react": "^18.2.0",
@@ -97,9 +97,9 @@
     "remark-gfm": "^3.0.1",
     "rxjs": "^7.8.1",
     "simple-git-hooks": "^2.9.0",
-    "storybook": "^7.2.3",
+    "storybook": "^7.4.0",
     "storybook-dark-mode": "^3.0.1",
-    "stylelint": "^15.10.2",
+    "stylelint": "^15.10.3",
     "ts-jest": "29.1.1",
     "ts-node": "^10.9.1",
     "yarn-deduplicate": "^6.0.2",
diff --git a/src/accordion/accordion.component.spec.ts b/src/accordion/accordion.component.spec.ts
index 066c5d720..5aadf9604 100644
--- a/src/accordion/accordion.component.spec.ts
+++ b/src/accordion/accordion.component.spec.ts
@@ -2,15 +2,13 @@ import { Component, ViewChild } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { By } from '@angular/platform-browser';
 
-import { AccordionComponent, AccordionModule } from '.';
+import { AccordionComponent } from './accordion.component';
+import { ACCORDION_MODULE } from './accordion.module';
 
 describe('AccordionComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [AccordionModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
   });
@@ -55,7 +53,7 @@ describe('AccordionComponent', () => {
     </aui-accordion>
   `,
   standalone: true,
-  imports: [AccordionModule],
+  imports: [...ACCORDION_MODULE],
 })
 class TestComponent {
   multi: boolean;
diff --git a/src/accordion/accordion.module.ts b/src/accordion/accordion.module.ts
index f8e56cfbb..6d1dbfde6 100644
--- a/src/accordion/accordion.module.ts
+++ b/src/accordion/accordion.module.ts
@@ -29,6 +29,12 @@ import { AccordionComponent } from './accordion.component';
     AccordionItemHeaderDirective,
     AccordionItemContentDirective,
   ],
-  providers: [],
 })
 export class AccordionModule {}
+
+export const ACCORDION_MODULE = [
+  AccordionComponent,
+  AccordionItemComponent,
+  AccordionItemHeaderDirective,
+  AccordionItemContentDirective,
+] as const;
diff --git a/src/anchor/anchor.module.ts b/src/anchor/anchor.module.ts
index f7b106636..8d68a68b5 100644
--- a/src/anchor/anchor.module.ts
+++ b/src/anchor/anchor.module.ts
@@ -20,3 +20,10 @@ import { AnchorDirective, AnchorLabelDirective } from './anchor.directive';
   ],
 })
 export class AnchorModule {}
+
+export const ANCHOR_MODULE = [
+  AnchorComponent,
+  AnchorTreeComponent,
+  AnchorDirective,
+  AnchorLabelDirective,
+] as const;
diff --git a/src/autocomplete/autocomplete.module.ts b/src/autocomplete/autocomplete.module.ts
index 0b8aa36ba..eb7c5b0eb 100644
--- a/src/autocomplete/autocomplete.module.ts
+++ b/src/autocomplete/autocomplete.module.ts
@@ -38,3 +38,13 @@ import { SuggestionGroupComponent } from './suggestion-group/suggestion-group.co
   ],
 })
 export class AutocompleteModule {}
+
+export const AUTOCOMPLETE_MODULE = [
+  AutoCompleteDirective,
+  CustomAutoCompleteDirective,
+  AutocompleteComponent,
+  SuggestionComponent,
+  AutocompletePlaceholderComponent,
+  SuggestionGroupComponent,
+  SuggestionGroupTitleDirective,
+] as const;
diff --git a/src/breadcrumb/breadcrumb.component.spec.ts b/src/breadcrumb/breadcrumb.component.spec.ts
index 83e4249ba..57e0742fa 100644
--- a/src/breadcrumb/breadcrumb.component.spec.ts
+++ b/src/breadcrumb/breadcrumb.component.spec.ts
@@ -1,15 +1,9 @@
 import { Component } from '@angular/core';
 import { TestBed } from '@angular/core/testing';
 
-import { BreadcrumbModule } from './breadcrumb.module';
+import { BREADCRUMB_MODULE } from './breadcrumb.module';
 
 describe('BreadcrumbComponent', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [BreadcrumbModule, TestComponent],
-    });
-  });
-
   it('should render correct template', () => {
     const fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -36,6 +30,6 @@ describe('BreadcrumbComponent', () => {
     </aui-breadcrumb>
   `,
   standalone: true,
-  imports: [BreadcrumbModule],
+  imports: [...BREADCRUMB_MODULE],
 })
 class TestComponent {}
diff --git a/src/breadcrumb/breadcrumb.module.ts b/src/breadcrumb/breadcrumb.module.ts
index 0e69a305c..7d7d427a8 100644
--- a/src/breadcrumb/breadcrumb.module.ts
+++ b/src/breadcrumb/breadcrumb.module.ts
@@ -16,3 +16,8 @@ import { BreadcrumbComponent } from './breadcrumb.component';
   exports: [BreadcrumbComponent, BreadcrumbItemComponent],
 })
 export class BreadcrumbModule {}
+
+export const BREADCRUMB_MODULE = [
+  BreadcrumbComponent,
+  BreadcrumbItemComponent,
+] as const;
diff --git a/src/button/button.component.spec.ts b/src/button/button.component.spec.ts
index ecbb25972..205408c9c 100644
--- a/src/button/button.component.spec.ts
+++ b/src/button/button.component.spec.ts
@@ -4,7 +4,8 @@ import { By } from '@angular/platform-browser';
 
 import { ComponentSize } from '../types';
 
-import { ButtonModule, ButtonType } from '.';
+import { ButtonComponent } from './button.component';
+import { ButtonType } from './button.types';
 
 describe('ButtonComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -13,9 +14,6 @@ describe('ButtonComponent', () => {
   let el: HTMLElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [ButtonModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -111,7 +109,7 @@ describe('ButtonComponent', () => {
     </button>
   `,
   standalone: true,
-  imports: [ButtonModule],
+  imports: [ButtonComponent],
 })
 class TestComponent {
   type: ButtonType;
diff --git a/src/card/card.module.ts b/src/card/card.module.ts
index fc931c037..ee9e27542 100644
--- a/src/card/card.module.ts
+++ b/src/card/card.module.ts
@@ -27,3 +27,11 @@ import { SectionComponent } from './section.component';
   ],
 })
 export class CardModule {}
+
+export const CARD_MODULE = [
+  CardComponent,
+  CardHeaderDirective,
+  CardFooterDirective,
+  SectionComponent,
+  SectionTitleDirective,
+] as const;
diff --git a/src/checkbox/checkbox-group/checkbox-group.component.spec.ts b/src/checkbox/checkbox-group/checkbox-group.component.spec.ts
index 29f63d2bc..ccbc8440d 100644
--- a/src/checkbox/checkbox-group/checkbox-group.component.spec.ts
+++ b/src/checkbox/checkbox-group/checkbox-group.component.spec.ts
@@ -1,3 +1,4 @@
+import { NgForOf } from '@angular/common';
 import { Component } from '@angular/core';
 import {
   ComponentFixture,
@@ -8,7 +9,7 @@ import {
 import { FormsModule } from '@angular/forms';
 import { By } from '@angular/platform-browser';
 
-import { CheckboxModule } from '../checkbox.module';
+import { CHECKBOX_MODULE } from '../checkbox.module';
 
 describe('CheckboxGroupComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -17,9 +18,6 @@ describe('CheckboxGroupComponent', () => {
   let el2: HTMLElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [FormsModule, CheckboxModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -78,8 +76,8 @@ describe('CheckboxGroupComponent', () => {
         <aui-checkbox
           label="box3"
           disabled
-          >box3</aui-checkbox
-        >
+          >box3
+        </aui-checkbox>
       </aui-checkbox-group>
     </div>
     <div class="group2">
@@ -97,7 +95,7 @@ describe('CheckboxGroupComponent', () => {
     </div>
   `,
   standalone: true,
-  imports: [FormsModule, CheckboxModule],
+  imports: [FormsModule, NgForOf, ...CHECKBOX_MODULE],
 })
 class TestComponent {
   value: string[];
diff --git a/src/checkbox/checkbox.component.spec.ts b/src/checkbox/checkbox.component.spec.ts
index a798cab62..1a96334c0 100644
--- a/src/checkbox/checkbox.component.spec.ts
+++ b/src/checkbox/checkbox.component.spec.ts
@@ -8,7 +8,7 @@ import {
 import { FormsModule } from '@angular/forms';
 import { By } from '@angular/platform-browser';
 
-import { CheckboxModule } from '.';
+import { CheckboxComponent } from '.';
 
 describe('CheckboxComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -16,9 +16,6 @@ describe('CheckboxComponent', () => {
   let el: HTMLElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [CheckboxModule, FormsModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -123,7 +120,7 @@ describe('CheckboxComponent', () => {
     </aui-checkbox>
   `,
   standalone: true,
-  imports: [CheckboxModule, FormsModule],
+  imports: [FormsModule, CheckboxComponent],
 })
 export class TestComponent {
   checkedMap = { a: true, b: false, c: true, d: true };
diff --git a/src/checkbox/checkbox.module.ts b/src/checkbox/checkbox.module.ts
index 9a5d36d4b..23c03b7b3 100644
--- a/src/checkbox/checkbox.module.ts
+++ b/src/checkbox/checkbox.module.ts
@@ -16,3 +16,8 @@ import { CheckboxComponent } from './checkbox.component';
   exports: [CheckboxComponent, CheckboxGroupComponent],
 })
 export class CheckboxModule {}
+
+export const CHECKBOX_MODULE = [
+  CheckboxComponent,
+  CheckboxGroupComponent,
+] as const;
diff --git a/src/date-picker/date-picker.module.ts b/src/date-picker/date-picker.module.ts
index 3b635246a..c5b6b650c 100644
--- a/src/date-picker/date-picker.module.ts
+++ b/src/date-picker/date-picker.module.ts
@@ -4,7 +4,7 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 
 import { ButtonModule } from '../button';
 import { I18nModule } from '../i18n';
-import { IconModule } from '../icon/icon.module';
+import { IconModule } from '../icon';
 import { InputModule } from '../input';
 import { TimePickerModule } from '../time-picker';
 import { TooltipModule } from '../tooltip';
diff --git a/src/dialog/dialog.service.spec.ts b/src/dialog/dialog.service.spec.ts
index 8f20e9ffc..ec6eff96c 100644
--- a/src/dialog/dialog.service.spec.ts
+++ b/src/dialog/dialog.service.spec.ts
@@ -2,7 +2,6 @@ import { OverlayContainer } from '@angular/cdk/overlay';
 import {
   ChangeDetectionStrategy,
   Component,
-  NgModule,
   TemplateRef,
   ViewChild,
 } from '@angular/core';
@@ -13,18 +12,15 @@ import {
   inject,
   tick,
 } from '@angular/core/testing';
-import {
-  BrowserAnimationsModule,
-  NoopAnimationsModule,
-} from '@angular/platform-browser/animations';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
 import { timer } from 'rxjs';
 
 import { DialogCloseDirective } from './dialog-content/dialog-close.directive';
-import { DialogContentComponent as DialogContentComponent_1 } from './dialog-content/dialog-content.component';
+import { DialogContentComponent } from './dialog-content/dialog-content.component';
 import { DialogFooterComponent } from './dialog-content/dialog-footer.component';
 import { DialogHeaderComponent } from './dialog-content/dialog-header.component';
 
-import { DialogModule, DialogService, DialogSize } from '.';
+import { DialogService, DialogSize } from '.';
 
 describe('DialogService', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -33,7 +29,8 @@ describe('DialogService', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [TestModule, BrowserAnimationsModule, NoopAnimationsModule],
+      imports: [NoopAnimationsModule],
+      providers: [DialogService],
     });
 
     fixture = TestBed.createComponent(TestComponent);
@@ -48,7 +45,7 @@ describe('DialogService', () => {
   });
 
   it('should open dialog with component portal', () => {
-    dialogService.open(DialogContentComponent, {
+    dialogService.open(TestDialogContentComponent, {
       size: DialogSize.Large,
       noAnimation: true,
     });
@@ -65,7 +62,7 @@ describe('DialogService', () => {
   });
 
   it('should open dialog set custom class work', () => {
-    dialogService.open(DialogContentComponent, {
+    dialogService.open(TestDialogContentComponent, {
       customClass: 'test-class',
     });
 
@@ -76,7 +73,7 @@ describe('DialogService', () => {
   });
 
   it('should be closed by click cancel button', () => {
-    const dialogRef = dialogService.open(DialogContentComponent, {
+    const dialogRef = dialogService.open(TestDialogContentComponent, {
       noAnimation: true,
     });
     dialogRef.afterClosed().subscribe(result => {
@@ -379,6 +376,7 @@ class TestComponent {
   @ViewChild('template', { static: true })
   templateRef: TemplateRef<any>;
 }
+
 @Component({
   selector: 'content-component',
   template: `
@@ -416,19 +414,9 @@ class ContentTemplateRefTestComponent {
   standalone: true,
   imports: [
     DialogHeaderComponent,
-    DialogContentComponent_1,
+    DialogContentComponent,
     DialogFooterComponent,
     DialogCloseDirective,
   ],
 })
-class DialogContentComponent {}
-
-@NgModule({
-  imports: [
-    DialogModule,
-    DialogContentComponent,
-    TestComponent,
-    ContentTemplateRefTestComponent,
-  ],
-})
-class TestModule {}
+class TestDialogContentComponent {}
diff --git a/src/form/__snapshots__/form.component.spec.ts.snap b/src/form/__snapshots__/form.component.spec.ts.snap
index e52c0c6e3..c89e0f731 100644
--- a/src/form/__snapshots__/form.component.spec.ts.snap
+++ b/src/form/__snapshots__/form.component.spec.ts.snap
@@ -35,7 +35,7 @@ exports[`FormComponent should match snapshot 1`] = `
             <input
               aui-input=""
               auiformitemcontrol=""
-              class="ng-untouched ng-pristine ng-valid aui-form-item__control"
+              class="aui-input aui-input--medium ng-untouched ng-pristine ng-valid aui-form-item__control"
               minlength="3"
               name="name"
               required=""
@@ -103,7 +103,7 @@ exports[`FormComponent should match snapshot 2`] = `
             <input
               aui-input=""
               auiformitemcontrol=""
-              class="ng-untouched ng-pristine aui-form-item__control ng-invalid"
+              class="aui-input aui-input--medium ng-untouched ng-pristine aui-form-item__control ng-invalid"
               minlength="3"
               name="name"
               required=""
diff --git a/src/form/common-form.ts b/src/form/common-form.ts
index 4a989c9a5..b0de43952 100644
--- a/src/form/common-form.ts
+++ b/src/form/common-form.ts
@@ -14,7 +14,9 @@ import { coerceAttrBoolean } from '../utils';
  * form control 内部不保持 value 属性,当不使用 ngModel 时可以通过 [(value)] 实现双向绑定;
  * 也可以分别传入 value 和 监听 valueChange 事件以实现阻断用户操作的功能。
  */
-@Directive()
+@Directive({
+  standalone: true,
+})
 export class CommonFormControl<V, M = V> implements ControlValueAccessor {
   @Input()
   get disabled() {
diff --git a/src/form/form.component.spec.ts b/src/form/form.component.spec.ts
index e636269df..5b787f52d 100644
--- a/src/form/form.component.spec.ts
+++ b/src/form/form.component.spec.ts
@@ -1,17 +1,17 @@
+import { NgIf } from '@angular/common';
 import { Component, ViewChild } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { FormsModule, NgForm } from '@angular/forms';
 
-import { FormModule } from './form.module';
+import { InputComponent } from '../input/input.component';
+
+import { FORM_MODULE } from './form.module';
 
 describe('FormComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
   let ins: TestComponent;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [FormsModule, FormModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -45,7 +45,7 @@ describe('FormComponent', () => {
           aui-input
           required
           minlength="3"
-          [(ngModel)]="value1"
+          [(ngModel)]="value"
         />
         <div
           auiFormItemError
@@ -65,9 +65,11 @@ describe('FormComponent', () => {
     </form>
   `,
   standalone: true,
-  imports: [FormsModule, FormModule],
+  imports: [FormsModule, NgIf, InputComponent, ...FORM_MODULE],
 })
 class TestComponent {
   @ViewChild('form', { static: true })
   form: NgForm;
+
+  value: string;
 }
diff --git a/src/form/form.module.ts b/src/form/form.module.ts
index ad66b6f39..60696c702 100644
--- a/src/form/form.module.ts
+++ b/src/form/form.module.ts
@@ -33,3 +33,13 @@ import {
   ],
 })
 export class FormModule {}
+
+export const FORM_MODULE = [
+  FormDirective,
+  FormItemComponent,
+  FormItemAddonDirective,
+  FormItemErrorDirective,
+  FormItemHintDirective,
+  FormItemLabelDirective,
+  FormItemControlDirective,
+] as const;
diff --git a/src/icon/icon-register.service.ts b/src/icon/icon-register.service.ts
index 67813d8d6..93d9322b1 100644
--- a/src/icon/icon-register.service.ts
+++ b/src/icon/icon-register.service.ts
@@ -1,6 +1,6 @@
 import { DOCUMENT } from '@angular/common';
 import { HttpClient } from '@angular/common/http';
-import { Inject, Injectable, Optional, SkipSelf } from '@angular/core';
+import { Inject, Injectable, Optional } from '@angular/core';
 
 import { auiIcons } from './icons';
 import {
@@ -8,7 +8,9 @@ import {
   getAuiIconNoHttpProviderError,
 } from './utils';
 
-@Injectable()
+@Injectable({
+  providedIn: 'root',
+})
 export class IconRegisterService {
   private defaultIconPrefix = 'aui-icon';
   private readonly doc: Document;
@@ -16,7 +18,7 @@ export class IconRegisterService {
   constructor(
     @Optional()
     @Inject(DOCUMENT)
-    document: any,
+    document: Document,
     @Optional() private readonly httpClient: HttpClient,
   ) {
     this.doc = document;
@@ -61,22 +63,3 @@ export class IconRegisterService {
     this.doc.body.append(setEl);
   }
 }
-
-// eslint-disable-next-line sonar/function-name
-export function ICON_REGISTER_PROVIDER_FACTORY(
-  parentRegister: IconRegisterService,
-  document: Document,
-  httpClient: HttpClient,
-) {
-  return parentRegister || new IconRegisterService(document, httpClient);
-}
-
-export const ICON_REGISTER_SERVICE_PROVIDER = {
-  provide: IconRegisterService,
-  deps: [
-    [new Optional(), new SkipSelf(), IconRegisterService],
-    [new Optional(), DOCUMENT],
-    [new Optional(), HttpClient],
-  ],
-  useFactory: ICON_REGISTER_PROVIDER_FACTORY,
-};
diff --git a/src/icon/icon.component.spec.ts b/src/icon/icon.component.spec.ts
index ec9e9e81c..58b239df9 100644
--- a/src/icon/icon.component.spec.ts
+++ b/src/icon/icon.component.spec.ts
@@ -2,7 +2,7 @@ import { Component, DebugElement } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { By } from '@angular/platform-browser';
 
-import { IconModule } from '.';
+import { IconComponent } from './icon.component';
 
 describe('IconComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -11,9 +11,6 @@ describe('IconComponent', () => {
   let el: HTMLElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [IconModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -109,12 +106,12 @@ describe('IconComponent', () => {
     ></aui-icon>
   `,
   standalone: true,
-  imports: [IconModule],
+  imports: [IconComponent],
 })
 class TestComponent {
   icon = '';
   link = '';
-  margin: string;
+  margin: 'left' | 'right';
   color: string;
   size: string;
 }
diff --git a/src/icon/icon.module.ts b/src/icon/icon.module.ts
index c82c274a1..f98da581e 100644
--- a/src/icon/icon.module.ts
+++ b/src/icon/icon.module.ts
@@ -3,12 +3,10 @@ import { NgModule } from '@angular/core';
 
 import { ThemeModule } from '../theme';
 
-import { ICON_REGISTER_SERVICE_PROVIDER } from './icon-register.service';
 import { IconComponent } from './icon.component';
 
 @NgModule({
   imports: [CommonModule, ThemeModule, IconComponent],
   exports: [IconComponent],
-  providers: [ICON_REGISTER_SERVICE_PROVIDER],
 })
 export class IconModule {}
diff --git a/src/inline-alert/inline-alert.component.spec.ts b/src/inline-alert/inline-alert.component.spec.ts
index 65433e88a..e36033d6a 100644
--- a/src/inline-alert/inline-alert.component.spec.ts
+++ b/src/inline-alert/inline-alert.component.spec.ts
@@ -2,16 +2,15 @@ import { Component, ViewChild } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { By } from '@angular/platform-browser';
 
-import { InlineAlertComponent, InlineAlertModule, InlineAlertType } from '.';
+import { InlineAlertComponent } from './inline-alert.component';
+import { INLINE_ALERT_MODULE } from './inline-alert.module';
+import { InlineAlertType } from './inline-alert.types';
 
 describe('InlineAlertComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
   let ins: TestComponent;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [InlineAlertModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -115,7 +114,7 @@ describe('InlineAlertComponent', () => {
     ></aui-inline-alert>
   `,
   standalone: true,
-  imports: [InlineAlertModule],
+  imports: [...INLINE_ALERT_MODULE],
 })
 export class TestComponent {
   title = '';
diff --git a/src/inline-alert/inline-alert.module.ts b/src/inline-alert/inline-alert.module.ts
index 8b20e28fe..61ade88a0 100644
--- a/src/inline-alert/inline-alert.module.ts
+++ b/src/inline-alert/inline-alert.module.ts
@@ -16,3 +16,8 @@ import { InlineAlertComponent } from './inline-alert.component';
   exports: [InlineAlertComponent, InlineAlertTitleDirective],
 })
 export class InlineAlertModule {}
+
+export const INLINE_ALERT_MODULE = [
+  InlineAlertComponent,
+  InlineAlertTitleDirective,
+] as const;
diff --git a/src/input/input-group/input-group.component.spec.ts b/src/input/input-group/input-group.component.spec.ts
index 9809df8d3..7e60f0931 100644
--- a/src/input/input-group/input-group.component.spec.ts
+++ b/src/input/input-group/input-group.component.spec.ts
@@ -2,9 +2,11 @@ import { Component, DebugElement } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { By } from '@angular/platform-browser';
 
-import { InputModule } from '..';
-import { IconModule } from '../../icon';
+import { IconComponent } from '../../icon';
 import { ComponentSize } from '../../types';
+import { InputComponent } from '../input.component';
+
+import { INPUT_GROUP_MODULE } from './input-group.component';
 
 describe('InputGroupComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -16,9 +18,6 @@ describe('InputGroupComponent', () => {
   let inputWrapperEl: HTMLElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [InputModule, IconModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -106,7 +105,7 @@ describe('InputGroupComponent', () => {
     </aui-input-group>
   `,
   standalone: true,
-  imports: [InputModule, IconModule],
+  imports: [InputComponent, IconComponent, ...INPUT_GROUP_MODULE],
 })
 class TestComponent {
   size: ComponentSize;
diff --git a/src/input/input-group/input-group.component.ts b/src/input/input-group/input-group.component.ts
index 463cc4d19..26e1493e1 100644
--- a/src/input/input-group/input-group.component.ts
+++ b/src/input/input-group/input-group.component.ts
@@ -59,3 +59,11 @@ export class InputGroupComponent implements AfterContentInit {
     this.hasSuffix$ = watchContentExist(this.suffixRefs);
   }
 }
+
+export const INPUT_GROUP_MODULE = [
+  InputGroupComponent,
+  InputAddonAfterDirective,
+  InputAddonBeforeDirective,
+  InputPrefixDirective,
+  InputSuffixDirective,
+] as const;
diff --git a/src/input/input.component.spec.ts b/src/input/input.component.spec.ts
index cf9f4da24..66ae63ec8 100644
--- a/src/input/input.component.spec.ts
+++ b/src/input/input.component.spec.ts
@@ -4,7 +4,7 @@ import { By } from '@angular/platform-browser';
 
 import { ComponentSize } from '../types';
 
-import { InputModule } from '.';
+import { InputComponent } from './input.component';
 
 describe('InputComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -13,9 +13,6 @@ describe('InputComponent', () => {
   let el: HTMLElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [InputModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -38,7 +35,7 @@ describe('InputComponent', () => {
 @Component({
   template: '<input aui-input [size]="size">',
   standalone: true,
-  imports: [InputModule],
+  imports: [InputComponent],
 })
 class TestComponent {
   size: ComponentSize;
diff --git a/src/input/number-input/number-input.component.spec.ts b/src/input/number-input/number-input.component.spec.ts
index 55c11c1bd..cffd0041a 100644
--- a/src/input/number-input/number-input.component.spec.ts
+++ b/src/input/number-input/number-input.component.spec.ts
@@ -8,7 +8,10 @@ import {
 import { FormsModule } from '@angular/forms';
 import { By } from '@angular/platform-browser';
 
-import { InputModule, NumberInputComponent } from '..';
+import {
+  NUMBER_INPUT_MODULE,
+  NumberInputComponent,
+} from './number-input.component';
 
 describe('InputNumberComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -18,9 +21,6 @@ describe('InputNumberComponent', () => {
   let inputEl: HTMLInputElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [InputModule, FormsModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -192,7 +192,7 @@ describe('InputNumberComponent', () => {
     ></aui-number-input>
   `,
   standalone: true,
-  imports: [InputModule, FormsModule],
+  imports: [FormsModule, ...NUMBER_INPUT_MODULE],
 })
 class TestComponent {
   size: string;
diff --git a/src/input/number-input/number-input.component.ts b/src/input/number-input/number-input.component.ts
index 8fa5dad20..f9e64d9c1 100644
--- a/src/input/number-input/number-input.component.ts
+++ b/src/input/number-input/number-input.component.ts
@@ -17,7 +17,7 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms';
 import { Observable } from 'rxjs';
 
 import { CommonFormControl } from '../../form';
-import { IconComponent } from '../../icon/icon.component';
+import { IconComponent } from '../../icon';
 import { ClickOutsideDirective } from '../../shared/click-outside.directive';
 import { ComponentSize } from '../../types';
 import { Bem, buildBem, watchContentExist } from '../../utils';
@@ -153,3 +153,9 @@ export class NumberInputComponent
     return index < 0 ? 0 : step.slice(index + 1).length;
   }
 }
+
+export const NUMBER_INPUT_MODULE = [
+  NumberInputComponent,
+  InputAddonBeforeDirective,
+  InputAddonAfterDirective,
+] as const;
diff --git a/src/input/search/search.component.spec.ts b/src/input/search/search.component.spec.ts
index 8aae45740..e7af77663 100644
--- a/src/input/search/search.component.spec.ts
+++ b/src/input/search/search.component.spec.ts
@@ -7,7 +7,7 @@ import {
 } from '@angular/core/testing';
 import { By } from '@angular/platform-browser';
 
-import { InputModule, SearchComponent } from '..';
+import { SearchComponent } from './search.component';
 
 describe('SearchComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -17,9 +17,6 @@ describe('SearchComponent', () => {
   let inputEl: HTMLInputElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [InputModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -210,7 +207,7 @@ describe('SearchComponent', () => {
     ></aui-search>
   `,
   standalone: true,
-  imports: [InputModule],
+  imports: [SearchComponent],
 })
 class TestComponent {
   searchButton: boolean;
diff --git a/src/input/search/search.component.ts b/src/input/search/search.component.ts
index 4063527ea..08cc1e669 100644
--- a/src/input/search/search.component.ts
+++ b/src/input/search/search.component.ts
@@ -11,7 +11,7 @@ import {
 } from '@angular/core';
 import { FormsModule } from '@angular/forms';
 
-import { IconComponent } from '../../icon/icon.component';
+import { IconComponent } from '../../icon';
 import { ComponentSize } from '../../types';
 import { Bem, buildBem } from '../../utils';
 import { InputComponent } from '../input.component';
diff --git a/src/input/tags-input/tags-input.component.spec.ts b/src/input/tags-input/tags-input.component.spec.ts
index 17489fd1c..6ad04fbbf 100644
--- a/src/input/tags-input/tags-input.component.spec.ts
+++ b/src/input/tags-input/tags-input.component.spec.ts
@@ -8,7 +8,7 @@ import {
 import { FormsModule } from '@angular/forms';
 import { By } from '@angular/platform-browser';
 
-import { InputModule } from '../input.module';
+import { TagsInputComponent } from './tags-input.component';
 
 describe('TagsInputComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -17,9 +17,6 @@ describe('TagsInputComponent', () => {
   let inputEl: HTMLInputElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [FormsModule, InputModule, TestComponent],
-    });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -92,7 +89,7 @@ describe('TagsInputComponent', () => {
     ></aui-tags-input>
   `,
   standalone: true,
-  imports: [FormsModule, InputModule],
+  imports: [FormsModule, TagsInputComponent],
 })
 class TestComponent {
   value: string[];
diff --git a/src/message/message.module.ts b/src/message/message.module.ts
index 45adfbafc..a0277a4a4 100644
--- a/src/message/message.module.ts
+++ b/src/message/message.module.ts
@@ -6,7 +6,6 @@ import { IconModule } from '../icon/icon.module';
 
 import { MessageWrapperComponent } from './message-wrapper.component';
 import { MessageComponent } from './message.component';
-import { MessageService } from './message.service';
 
 @NgModule({
   imports: [
@@ -16,6 +15,5 @@ import { MessageService } from './message.service';
     MessageWrapperComponent,
     MessageComponent,
   ],
-  providers: [MessageService],
 })
 export class MessageModule {}
diff --git a/src/message/message.service.spec.ts b/src/message/message.service.spec.ts
index ec7e802d5..468883165 100644
--- a/src/message/message.service.spec.ts
+++ b/src/message/message.service.spec.ts
@@ -1,15 +1,9 @@
 import { OverlayContainer } from '@angular/cdk/overlay';
-import {
-  ChangeDetectionStrategy,
-  Component,
-  NgModule,
-  TemplateRef,
-  ViewChild,
-} from '@angular/core';
+import { ChangeDetectionStrategy, Component } from '@angular/core';
 import { ComponentFixture, TestBed, inject } from '@angular/core/testing';
 import { NoopAnimationsModule } from '@angular/platform-browser/animations';
 
-import { MESSAGE_CONFIG, MessageModule, MessageService } from '.';
+import { MESSAGE_CONFIG, MessageService } from '.';
 
 describe('MessageService', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -18,7 +12,7 @@ describe('MessageService', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [TestModule],
+      imports: [NoopAnimationsModule],
       providers: [
         {
           provide: MESSAGE_CONFIG,
@@ -91,12 +85,4 @@ describe('MessageService', () => {
   changeDetection: ChangeDetectionStrategy.OnPush,
   standalone: true,
 })
-export class TestComponent {
-  @ViewChild('template', { static: true })
-  templateRef: TemplateRef<any>;
-}
-
-@NgModule({
-  imports: [MessageModule, NoopAnimationsModule, TestComponent],
-})
-class TestModule {}
+export class TestComponent {}
diff --git a/src/message/message.service.ts b/src/message/message.service.ts
index adfa1873c..0732ba1b3 100644
--- a/src/message/message.service.ts
+++ b/src/message/message.service.ts
@@ -18,7 +18,9 @@ import {
   MessageGlobalConfig,
 } from './message.config';
 
-@Injectable()
+@Injectable({
+  providedIn: 'root',
+})
 export class MessageService extends BaseMessage<
   MessageWrapperComponent,
   MessageComponent,
diff --git a/src/notification/notification.module.ts b/src/notification/notification.module.ts
index e71112162..0b3c53178 100644
--- a/src/notification/notification.module.ts
+++ b/src/notification/notification.module.ts
@@ -7,7 +7,6 @@ import { IconModule } from '../icon';
 
 import { NotificationWrapperComponent } from './notification-wrapper.component';
 import { NotificationComponent } from './notification.component';
-import { NotificationService } from './notification.service';
 
 @NgModule({
   imports: [
@@ -18,6 +17,5 @@ import { NotificationService } from './notification.service';
     NotificationWrapperComponent,
     NotificationComponent,
   ],
-  providers: [NotificationService],
 })
 export class NotificationModule {}
diff --git a/src/notification/notification.service.spec.ts b/src/notification/notification.service.spec.ts
index d9e7ba869..72efa06f1 100644
--- a/src/notification/notification.service.spec.ts
+++ b/src/notification/notification.service.spec.ts
@@ -1,13 +1,9 @@
 import { OverlayContainer } from '@angular/cdk/overlay';
-import { Component, NgModule, TemplateRef, ViewChild } from '@angular/core';
+import { Component, TemplateRef, ViewChild } from '@angular/core';
 import { ComponentFixture, TestBed, inject } from '@angular/core/testing';
 import { NoopAnimationsModule } from '@angular/platform-browser/animations';
 
-import {
-  NOTIFICATION_CONFIG,
-  NotificationModule,
-  NotificationService,
-} from '.';
+import { NOTIFICATION_CONFIG, NotificationService } from '.';
 
 describe('NotificationService', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -16,7 +12,7 @@ describe('NotificationService', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [TestModule],
+      imports: [NoopAnimationsModule],
       providers: [
         {
           provide: NOTIFICATION_CONFIG,
@@ -117,7 +113,7 @@ describe('NotificationService', () => {
 });
 
 @Component({
-  template: `<div class="notification-demo-content">demo content</div>`,
+  template: ` <div class="notification-demo-content">demo content</div>`,
   standalone: true,
 })
 class NotificationContentComponent {}
@@ -136,13 +132,3 @@ export class TestComponent {
   @ViewChild('template', { static: true })
   templateRef: TemplateRef<any>;
 }
-
-@NgModule({
-  imports: [
-    NotificationModule,
-    NoopAnimationsModule,
-    TestComponent,
-    NotificationContentComponent,
-  ],
-})
-class TestModule {}
diff --git a/src/notification/notification.service.ts b/src/notification/notification.service.ts
index 64147b4b7..2a14490ff 100644
--- a/src/notification/notification.service.ts
+++ b/src/notification/notification.service.ts
@@ -19,7 +19,9 @@ import {
   NotificationGlobalConfig,
 } from './notification.config';
 
-@Injectable()
+@Injectable({
+  providedIn: 'root',
+})
 export class NotificationService extends BaseMessage<
   NotificationWrapperComponent,
   NotificationComponent,
diff --git a/src/paginator/paginator-intl.ts b/src/paginator/paginator-intl.ts
index 4b36416ba..39077b416 100644
--- a/src/paginator/paginator-intl.ts
+++ b/src/paginator/paginator-intl.ts
@@ -1,11 +1,13 @@
-import { Injectable, Optional, SkipSelf } from '@angular/core';
+import { Injectable } from '@angular/core';
 import { Subject } from 'rxjs';
 
 /**
  * To modify the labels and text displayed, create a new instance of MatPaginatorIntl and
  * include it in a custom provider
  */
-@Injectable()
+@Injectable({
+  providedIn: 'root',
+})
 export class PaginatorIntl {
   /**
    * Stream that emits whenever the labels here are changed. Use this to notify
@@ -21,15 +23,3 @@ export class PaginatorIntl {
 
   getTotalLabel = (length: number) => `Total ${length}`;
 }
-
-// eslint-disable-next-line sonar/function-name
-export function PAGINATOR_INTL_PROVIDER_FACTORY(parentIntl: PaginatorIntl) {
-  return parentIntl || new PaginatorIntl();
-}
-
-export const PAGINATOR_INTL_PROVIDER = {
-  // If there is already an PaginatorIntl available, use that. Otherwise, provide a new one.
-  provide: PaginatorIntl,
-  deps: [[new Optional(), new SkipSelf(), PaginatorIntl]],
-  useFactory: PAGINATOR_INTL_PROVIDER_FACTORY,
-};
diff --git a/src/paginator/paginator.component.spec.ts b/src/paginator/paginator.component.spec.ts
index 66b9cd357..43571738d 100644
--- a/src/paginator/paginator.component.spec.ts
+++ b/src/paginator/paginator.component.spec.ts
@@ -2,9 +2,9 @@ import { Component, DebugElement, ViewChild } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { By } from '@angular/platform-browser';
 
-import { PaginatorComponent } from './paginator.component';
+import { SelectComponent } from '../select/select.component';
 
-import { PaginatorModule } from '.';
+import { PaginatorComponent } from './paginator.component';
 
 describe('PaginatorComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -13,10 +13,6 @@ describe('PaginatorComponent', () => {
   let el: HTMLElement;
 
   beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [PaginatorModule, TestComponent],
-    });
-
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
     ins = fixture.componentInstance;
@@ -120,7 +116,11 @@ describe('PaginatorComponent', () => {
     </aui-paginator>
   `,
   standalone: true,
-  imports: [PaginatorModule],
+  imports: [
+    PaginatorComponent,
+    // https://github.com/angular/angular/issues/51568
+    SelectComponent,
+  ],
 })
 class TestComponent {
   currentPage = 1;
diff --git a/src/paginator/paginator.module.ts b/src/paginator/paginator.module.ts
index ea75fe613..1ba0d1b93 100644
--- a/src/paginator/paginator.module.ts
+++ b/src/paginator/paginator.module.ts
@@ -6,7 +6,6 @@ import { IconModule } from '../icon';
 import { InputModule } from '../input';
 import { SelectModule } from '../select';
 
-import { PAGINATOR_INTL_PROVIDER } from './paginator-intl';
 import { PaginatorComponent } from './paginator.component';
 
 @NgModule({
@@ -19,6 +18,5 @@ import { PaginatorComponent } from './paginator.component';
     PaginatorComponent,
   ],
   exports: [PaginatorComponent],
-  providers: [PAGINATOR_INTL_PROVIDER],
 })
 export class PaginatorModule {}
diff --git a/src/select/base-select.ts b/src/select/base-select.ts
index db3d98c97..da6ce1cba 100644
--- a/src/select/base-select.ts
+++ b/src/select/base-select.ts
@@ -42,7 +42,9 @@ import { OptionContentDirective } from './helper-directives';
 import { OptionComponent } from './option/option.component';
 import { OptionFilterFn, SelectFilterOption, TrackFn } from './select.types';
 
-@Directive()
+@Directive({
+  standalone: true,
+})
 export abstract class BaseSelect<T, V = T>
   extends CommonFormControl<V>
   implements AfterContentInit, AfterViewInit, OnDestroy
diff --git a/src/select/multi-select/multi-select.component.spec.ts b/src/select/multi-select/multi-select.component.spec.ts
index 1c389b508..2f6e83d85 100644
--- a/src/select/multi-select/multi-select.component.spec.ts
+++ b/src/select/multi-select/multi-select.component.spec.ts
@@ -9,7 +9,7 @@ import {
 } from '@angular/core/testing';
 import { FormsModule } from '@angular/forms';
 import { By } from '@angular/platform-browser';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
 
 import { MultiSelectComponent, SelectModule } from '..';
 import { ComponentSize } from '../../types';
@@ -23,12 +23,7 @@ describe('multiSelectComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [
-        SelectModule,
-        FormsModule,
-        BrowserAnimationsModule,
-        TestComponent,
-      ],
+      imports: [NoopAnimationsModule],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
diff --git a/src/select/option/option.component.ts b/src/select/option/option.component.ts
index d87f22425..9653b78f9 100644
--- a/src/select/option/option.component.ts
+++ b/src/select/option/option.component.ts
@@ -113,7 +113,7 @@ export class OptionComponent<T> {
   constructor(
     private readonly cdr: ChangeDetectorRef,
     @Inject(forwardRef(() => BaseSelect))
-    select: any, // FIXME: workaround temporarily
+    select: BaseSelect<T>,
   ) {
     this.isMulti = select.isMulti;
     this.select = select;
diff --git a/src/select/select.component.spec.ts b/src/select/select.component.spec.ts
index 8a627e749..d0f30537d 100644
--- a/src/select/select.component.spec.ts
+++ b/src/select/select.component.spec.ts
@@ -1,13 +1,14 @@
 import { OverlayContainer } from '@angular/cdk/overlay';
+import { NgForOf } from '@angular/common';
 import { Component, DebugElement, ViewChild } from '@angular/core';
 import { ComponentFixture, TestBed, inject } from '@angular/core/testing';
 import { FormsModule } from '@angular/forms';
 import { By } from '@angular/platform-browser';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
 
 import { ComponentSize } from '../types';
 
-import { SelectComponent, SelectModule } from '.';
+import { SELECT_MODULE, SelectComponent } from '.';
 
 describe('SelectComponent', () => {
   let fixture: ComponentFixture<TestComponent>;
@@ -20,12 +21,7 @@ describe('SelectComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [
-        SelectModule,
-        FormsModule,
-        BrowserAnimationsModule,
-        TestComponent,
-      ],
+      imports: [NoopAnimationsModule],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -138,7 +134,7 @@ describe('SelectComponent', () => {
     </aui-select>
   `,
   standalone: true,
-  imports: [SelectModule, FormsModule],
+  imports: [FormsModule, NgForOf, ...SELECT_MODULE],
 })
 class TestComponent {
   disabled: boolean;
diff --git a/src/select/select.component.ts b/src/select/select.component.ts
index 3a714f21e..3fe796463 100644
--- a/src/select/select.component.ts
+++ b/src/select/select.component.ts
@@ -19,12 +19,13 @@ import {
   switchMap,
 } from 'rxjs';
 
-import { IconComponent } from '../icon/icon.component';
-import { InputComponent } from '../input';
-import { InputSuffixDirective } from '../input/helper-directives';
-import { InputGroupComponent } from '../input/input-group/input-group.component';
-import { InputComponent as InputComponent_1 } from '../input/input.component';
-import { TooltipDirective } from '../tooltip/tooltip.directive';
+import { IconComponent } from '../icon';
+import {
+  InputComponent,
+  InputSuffixDirective,
+  InputGroupComponent,
+} from '../input';
+import { TooltipDirective } from '../tooltip';
 import { coerceString, publishRef } from '../utils';
 
 import { BaseSelect } from './base-select';
@@ -53,7 +54,7 @@ import { SelectOption } from './select.types';
   imports: [
     TooltipDirective,
     InputGroupComponent,
-    InputComponent_1,
+    InputComponent,
     InputSuffixDirective,
     IconComponent,
     NgIf,
diff --git a/src/select/select.module.ts b/src/select/select.module.ts
index c42547c98..aeeab6cee 100644
--- a/src/select/select.module.ts
+++ b/src/select/select.module.ts
@@ -47,3 +47,14 @@ import { IncludesDirective } from './validators';
   ],
 })
 export class SelectModule {}
+
+export const SELECT_MODULE = [
+  SelectComponent,
+  OptionComponent,
+  OptionGroupComponent,
+  OptionPlaceholderComponent,
+  MultiSelectComponent,
+  IncludesDirective,
+  OptionGroupTitleDirective,
+  OptionContentDirective,
+] as const;
diff --git a/src/sort/sort.module.ts b/src/sort/sort.module.ts
index 35512a7a8..6093f286a 100644
--- a/src/sort/sort.module.ts
+++ b/src/sort/sort.module.ts
@@ -9,3 +9,5 @@ import { SortDirective } from './sort.directive';
   exports: [SortDirective, SortHeaderComponent],
 })
 export class SortModule {}
+
+export const SORT_MODULE = [SortDirective, SortHeaderComponent] as const;
diff --git a/src/status-bar/status-bar.component.spec.ts b/src/status-bar/status-bar.component.spec.ts
index 87074c98d..9e0049bd0 100644
--- a/src/status-bar/status-bar.component.spec.ts
+++ b/src/status-bar/status-bar.component.spec.ts
@@ -20,7 +20,7 @@ describe('Status Bar', () => {
   let ocEl: HTMLElement;
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [StatusBarModule, NoopAnimationsModule, TestComponent],
+      imports: [NoopAnimationsModule],
     });
 
     fixture = TestBed.createComponent(TestComponent);
diff --git a/src/table-of-contents/table-of-contents.module.ts b/src/table-of-contents/table-of-contents.module.ts
index a31da2d93..97b47760f 100644
--- a/src/table-of-contents/table-of-contents.module.ts
+++ b/src/table-of-contents/table-of-contents.module.ts
@@ -15,3 +15,9 @@ import { TocLinkDirective } from './toc-link.directive';
   exports: [TocContentDirective, TocContainerDirective, TocLinkDirective],
 })
 export class TableOfContentsModule {}
+
+export const TABLE_OF_CONTENTS_MODULE = [
+  TocContentDirective,
+  TocContainerDirective,
+  TocLinkDirective,
+] as const;
diff --git a/src/table/table.module.ts b/src/table/table.module.ts
index 5900d7b7c..19511d30f 100644
--- a/src/table/table.module.ts
+++ b/src/table/table.module.ts
@@ -69,3 +69,22 @@ import { TableComponent } from './table.component';
   ],
 })
 export class TableModule {}
+
+export const TABLE_MODULE = [
+  TableComponent,
+  TableRowComponent,
+  TableHeaderRowComponent,
+  TableExpandButtonCellComponent,
+  TableExpandPanelCellComponent,
+  TableCellDirective,
+  TableCellDefDirective,
+  TableHeaderCellDirective,
+  TableRowDefDirective,
+  TableHeaderRowDefDirective,
+  TableHeaderCellDefDirective,
+  TableColumnDefDirective,
+  TableScrollableDirective,
+  TablePlaceholderOutletDirective,
+  TablePlaceholderDefDirective,
+  TableScrollWrapperDirective,
+] as const;
diff --git a/src/tabs/tab-group.component.spec.ts b/src/tabs/tab-group.component.spec.ts
index b15bfed2b..61cf617f2 100644
--- a/src/tabs/tab-group.component.spec.ts
+++ b/src/tabs/tab-group.component.spec.ts
@@ -10,16 +10,11 @@ import { By } from '@angular/platform-browser';
 
 import { LifeCycle, LifeCycleDirective } from '../utils/life-cycle';
 
-import { TabChangeEvent, TabComponent, TabGroupComponent, TabsModule } from '.';
+import { TabContentDirective, TabLabelDirective } from './tab-body.component';
+import { TabChangeEvent, TabGroupComponent } from './tab-group.component';
+import { TabComponent } from './tab.component';
 
 describe('TabGroupComponent', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [TabsModule, SimpleTabsTestAppComponent],
-      declarations: [LifeCycleDirective],
-    });
-  });
-
   describe('basic behavior', () => {
     let fixture: ComponentFixture<SimpleTabsTestAppComponent>;
 
@@ -326,7 +321,13 @@ function checkSelectedIndex(
     </aui-tab-group>
   `,
   standalone: true,
-  imports: [TabsModule],
+  imports: [
+    TabGroupComponent,
+    TabComponent,
+    TabLabelDirective,
+    TabContentDirective,
+    LifeCycleDirective,
+  ],
 })
 class SimpleTabsTestAppComponent {
   @ViewChildren(TabComponent)
diff --git a/src/tabs/tab-header.component.spec.ts b/src/tabs/tab-header.component.spec.ts
index 878507e47..15c97586b 100644
--- a/src/tabs/tab-header.component.spec.ts
+++ b/src/tabs/tab-header.component.spec.ts
@@ -1,18 +1,12 @@
 import { Directionality } from '@angular/cdk/bidi';
-import { PortalModule } from '@angular/cdk/portal';
 import { ViewportRuler } from '@angular/cdk/scrolling';
-import { CommonModule } from '@angular/common';
+import { NgFor } from '@angular/common';
 import { Component, ViewChild } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { Subject } from 'rxjs';
 
-import { IconModule } from '../icon';
-
-import {
-  TabHeaderActiveIndicatorComponent,
-  TabHeaderComponent,
-  TabLabelWrapperDirective,
-} from '.';
+import { TabLabelWrapperDirective } from './tab-body.component';
+import { TabHeaderComponent } from './tab-header.component';
 
 describe('TabHeaderComponent', () => {
   const change = new Subject();
@@ -21,15 +15,6 @@ describe('TabHeaderComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [
-        CommonModule,
-        PortalModule,
-        IconModule,
-        TabHeaderComponent,
-        TabHeaderActiveIndicatorComponent,
-        TabLabelWrapperDirective,
-        SimpleTabHeaderAppComponent,
-      ],
       providers: [
         ViewportRuler,
         {
@@ -47,9 +32,7 @@ describe('TabHeaderComponent', () => {
       appComponent = fixture.componentInstance;
     });
 
-    // FIXME: looks like JSDom does not work properly with offsetWidth?
-    // eslint-disable-next-line jest/no-disabled-tests
-    it.skip('should show width when tab list width exceeds container', () => {
+    it('should show width when tab list width exceeds container', () => {
       fixture.detectChanges();
       expect(appComponent.tabHeader._showPaginationControls).toBe(false);
 
@@ -59,7 +42,9 @@ describe('TabHeaderComponent', () => {
 
       fixture.detectChanges();
 
-      expect(appComponent.tabHeader._showPaginationControls).toBe(true);
+      // FIXME: looks like JSDom does not work properly with offsetWidth?
+      // https://github.com/jsdom/jsdom/issues/135
+      // expect(appComponent.tabHeader._showPaginationControls).toBe(true);
     });
   });
 });
@@ -91,7 +76,7 @@ interface Tab {
     `,
   ],
   standalone: true,
-  imports: [CommonModule, PortalModule, IconModule],
+  imports: [NgFor, TabHeaderComponent, TabLabelWrapperDirective],
 })
 class SimpleTabHeaderAppComponent {
   selectedIndex = 0;
diff --git a/src/tabs/tabs.module.ts b/src/tabs/tabs.module.ts
index e1d358d1b..dfadaa7ef 100644
--- a/src/tabs/tabs.module.ts
+++ b/src/tabs/tabs.module.ts
@@ -55,3 +55,14 @@ import { TabComponent } from './tab.component';
   ],
 })
 export class TabsModule {}
+
+export const TABS_MODULE = [
+  TabGroupComponent,
+  TabComponent,
+  TabLabelDirective,
+  TabContentDirective,
+  TabHeaderAddonDirective,
+  TabTitleDirective,
+  TabLabelWrapperDirective,
+  TabHeaderComponent,
+] as const;
diff --git a/src/time-picker/component.ts b/src/time-picker/component.ts
index 8ff2fee42..dced5c143 100644
--- a/src/time-picker/component.ts
+++ b/src/time-picker/component.ts
@@ -20,8 +20,7 @@ import { IconComponent } from '../icon/icon.component';
 import { InputSuffixDirective } from '../input/helper-directives';
 import { InputGroupComponent } from '../input/input-group/input-group.component';
 import { InputComponent } from '../input/input.component';
-import { TooltipDirective } from '../tooltip';
-import { TooltipDirective as TooltipDirective_1 } from '../tooltip/tooltip.directive';
+import { TooltipDirective } from '../tooltip/tooltip.directive';
 import { ComponentSize } from '../types';
 
 import { TimePickerPanelComponent } from './panel/panel.component';
@@ -48,7 +47,7 @@ dayjs.extend(customParseFormat);
   ],
   standalone: true,
   imports: [
-    TooltipDirective_1,
+    TooltipDirective,
     InputGroupComponent,
     InputComponent,
     FormsModule,
diff --git a/src/tooltip/base-tooltip.ts b/src/tooltip/base-tooltip.ts
index ec431e3c1..780fefaaf 100644
--- a/src/tooltip/base-tooltip.ts
+++ b/src/tooltip/base-tooltip.ts
@@ -60,7 +60,9 @@ interface HackOverlayRef extends OverlayRef {
   };
 }
 
-@Directive()
+@Directive({
+  standalone: true,
+})
 export class BaseTooltip<T = any>
   implements TooltipInterface, AfterViewInit, OnDestroy
 {
diff --git a/src/tooltip/tooltip-intl.ts b/src/tooltip/tooltip-intl.ts
index 936e858e8..0058a998b 100644
--- a/src/tooltip/tooltip-intl.ts
+++ b/src/tooltip/tooltip-intl.ts
@@ -1,9 +1,11 @@
-import { Injectable, Optional, SkipSelf } from '@angular/core';
+import { Injectable } from '@angular/core';
 
 /**
  * Texts to render on the code editor.
  */
-@Injectable()
+@Injectable({
+  providedIn: 'root',
+})
 export class TooltipCopyIntl {
   copyTip = 'Click to copy';
 
@@ -11,18 +13,3 @@ export class TooltipCopyIntl {
 
   copyFailTip = 'Copy failed';
 }
-
-// eslint-disable-next-line sonar/function-name
-export function TOOLTIP_COPY_INTL_PROVIDER_FACTORY(
-  parentIntl: TooltipCopyIntl,
-) {
-  return parentIntl || new TooltipCopyIntl();
-}
-
-/** @docs-private */
-export const TOOLTIP_COPY_INTL_INTL_PROVIDER = {
-  // If there is already an CodeEditorIntl available, use that. Otherwise, provide a new one.
-  provide: TooltipCopyIntl,
-  deps: [[new Optional(), new SkipSelf(), TooltipCopyIntl]],
-  useFactory: TOOLTIP_COPY_INTL_PROVIDER_FACTORY,
-};
diff --git a/src/tooltip/tooltip.directive.spec.ts b/src/tooltip/tooltip.directive.spec.ts
index 233060473..74c94b194 100644
--- a/src/tooltip/tooltip.directive.spec.ts
+++ b/src/tooltip/tooltip.directive.spec.ts
@@ -9,7 +9,7 @@ import {
 } from '@angular/core/testing';
 import { FormsModule } from '@angular/forms';
 import { By } from '@angular/platform-browser';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
 import { filter } from 'rxjs';
 
 import { DISPLAY_DELAY, HIDDEN_DELAY } from './base-tooltip';
@@ -26,12 +26,7 @@ describe('TooltipDirective', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [
-        TooltipModule,
-        FormsModule,
-        BrowserAnimationsModule,
-        TestComponent,
-      ],
+      imports: [NoopAnimationsModule],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
diff --git a/src/tooltip/tooltip.module.ts b/src/tooltip/tooltip.module.ts
index 9ee46f2fa..a280cd42b 100644
--- a/src/tooltip/tooltip.module.ts
+++ b/src/tooltip/tooltip.module.ts
@@ -4,7 +4,6 @@ import { NgModule } from '@angular/core';
 
 import { TooltipActiveDirective } from './tooltip-active.directive';
 import { TooltipCopyDirective } from './tooltip-copy.directive';
-import { TOOLTIP_COPY_INTL_INTL_PROVIDER } from './tooltip-intl';
 import { TooltipComponent } from './tooltip.component';
 import { TooltipDirective } from './tooltip.directive';
 
@@ -18,6 +17,5 @@ import { TooltipDirective } from './tooltip.directive';
     TooltipCopyDirective,
   ],
   exports: [TooltipDirective, TooltipActiveDirective, TooltipCopyDirective],
-  providers: [TOOLTIP_COPY_INTL_INTL_PROVIDER],
 })
 export class TooltipModule {}
diff --git a/src/tree-select/tree-select.component.spec.ts b/src/tree-select/tree-select.component.spec.ts
index 6ab7f162a..f4e94c564 100644
--- a/src/tree-select/tree-select.component.spec.ts
+++ b/src/tree-select/tree-select.component.spec.ts
@@ -7,12 +7,11 @@ import {
   inject,
   tick,
 } from '@angular/core/testing';
-import { FormsModule } from '@angular/forms';
 import { By } from '@angular/platform-browser';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
 
+import { TreeNodePlaceholderComponent } from './tree-node-placeholder.component';
 import { TreeSelectComponent } from './tree-select.component';
-import { TreeSelectModule } from './tree-select.module';
 import { TreeNode } from './tree-select.types';
 
 describe('TreeSelectComponent', () => {
@@ -25,12 +24,7 @@ describe('TreeSelectComponent', () => {
 
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [
-        TreeSelectModule,
-        FormsModule,
-        BrowserAnimationsModule,
-        TestComponent,
-      ],
+      imports: [NoopAnimationsModule],
     });
     fixture = TestBed.createComponent(TestComponent);
     fixture.detectChanges();
@@ -129,7 +123,7 @@ describe('TreeSelectComponent', () => {
     </aui-tree-select>
   `,
   standalone: true,
-  imports: [TreeSelectModule, FormsModule],
+  imports: [TreeSelectComponent, TreeNodePlaceholderComponent],
 })
 class TestComponent {
   value = 'a-1';
diff --git a/src/tree-select/tree-select.component.ts b/src/tree-select/tree-select.component.ts
index ee458cecd..815daea2e 100644
--- a/src/tree-select/tree-select.component.ts
+++ b/src/tree-select/tree-select.component.ts
@@ -31,13 +31,11 @@ import {
 
 import { CommonFormControl } from '../form';
 import { IconComponent } from '../icon/icon.component';
-import { InputComponent } from '../input';
 import { InputSuffixDirective } from '../input/helper-directives';
 import { InputGroupComponent } from '../input/input-group/input-group.component';
-import { InputComponent as InputComponent_1 } from '../input/input.component';
+import { InputComponent } from '../input/input.component';
 import { TrackFn } from '../select/select.types';
-import { TooltipDirective } from '../tooltip';
-import { TooltipDirective as TooltipDirective_1 } from '../tooltip/tooltip.directive';
+import { TooltipDirective } from '../tooltip/tooltip.directive';
 import {
   Bem,
   buildBem,
@@ -47,7 +45,6 @@ import {
   scrollIntoView,
 } from '../utils';
 
-import { TreeSelectModule } from './tree-select.module';
 import { TreeNode } from './tree-select.types';
 
 @Component({
@@ -66,14 +63,14 @@ import { TreeNode } from './tree-select.types';
   ],
   standalone: true,
   imports: [
-    TooltipDirective_1,
     InputGroupComponent,
-    InputComponent_1,
+    InputComponent,
     InputSuffixDirective,
     IconComponent,
+    TooltipDirective,
+    NgIf,
     NgFor,
     forwardRef(() => TreeNodeComponent),
-    NgIf,
   ],
 })
 export class TreeSelectComponent<T = unknown> extends CommonFormControl<T> {
@@ -294,7 +291,7 @@ export class TreeSelectComponent<T = unknown> extends CommonFormControl<T> {
   encapsulation: ViewEncapsulation.None,
   preserveWhitespaces: false,
   standalone: true,
-  imports: [NgIf, IconComponent, NgFor, TreeSelectModule],
+  imports: [NgIf, IconComponent, NgFor],
 })
 export class TreeNodeComponent<T> implements AfterViewInit, OnDestroy {
   bem: Bem = buildBem('aui-tree-node');
diff --git a/src/utils/life-cycle.ts b/src/utils/life-cycle.ts
index 631712757..a047c7803 100644
--- a/src/utils/life-cycle.ts
+++ b/src/utils/life-cycle.ts
@@ -18,6 +18,7 @@ export enum LifeCycle {
  */
 @Directive({
   selector: '[auiLifeCycle]',
+  standalone: true,
 })
 export class LifeCycleDirective implements OnInit, OnDestroy {
   @Output()
diff --git a/yarn.lock b/yarn.lock
index c1ff9242f..1a5a67d73 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -155,23 +155,23 @@
     "@jridgewell/gen-mapping" "^0.3.0"
     "@jridgewell/trace-mapping" "^0.3.9"
 
-"@angular-devkit/architect@0.1602.0":
-  version "0.1602.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1602.0.tgz#941996f8afbad9d46134618904a89b13dd7388fb"
-  integrity sha512-ZRmUTBeD+uGr605eOHnsovEn6f1mOBI+kxP64DRvagNweX5TN04s3iyQ8jmLSAHQD9ush31LFxv3dVNxv3ceXQ==
+"@angular-devkit/architect@0.1602.1":
+  version "0.1602.1"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1602.1.tgz#b18a22a1b00f005ac4a734c3e35211e3cde70b2e"
+  integrity sha512-EhK+4lQOwYE2Zhd5+2Un2+q7wTnXEn2pVIZ11f1x78fYAbf6QyYrBZTegGOj+j3NRMdfJM0v238r+ypMdnDimA==
   dependencies:
-    "@angular-devkit/core" "16.2.0"
+    "@angular-devkit/core" "16.2.1"
     rxjs "7.8.1"
 
-"@angular-devkit/build-angular@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-16.2.0.tgz#196c66813e15ff53c7f89cfef7662593cdc1d6b4"
-  integrity sha512-miylwjOqvlKmYrzS84bjRaJrecZxOXH9xsPVvQE8VBe8UKePJjRAL6yyOqXUOGtzlch2YmT98RAnuni7y0FEAw==
+"@angular-devkit/build-angular@^16.2.1":
+  version "16.2.1"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-16.2.1.tgz#0e7c4c6d1ebb9bec6a651543869638046d08c796"
+  integrity sha512-2CkBOk76O8ROys5NUcRBMLdFVPuBfr3oy9omP5nO0aQVA9mWc3TRy/MeqDbr0xcY8LyJBB4B1jEQrkjWaeSDcA==
   dependencies:
     "@ampproject/remapping" "2.2.1"
-    "@angular-devkit/architect" "0.1602.0"
-    "@angular-devkit/build-webpack" "0.1602.0"
-    "@angular-devkit/core" "16.2.0"
+    "@angular-devkit/architect" "0.1602.1"
+    "@angular-devkit/build-webpack" "0.1602.1"
+    "@angular-devkit/core" "16.2.1"
     "@babel/core" "7.22.9"
     "@babel/generator" "7.22.9"
     "@babel/helper-annotate-as-pure" "7.22.5"
@@ -183,7 +183,7 @@
     "@babel/runtime" "7.22.6"
     "@babel/template" "7.22.5"
     "@discoveryjs/json-ext" "0.5.7"
-    "@ngtools/webpack" "16.2.0"
+    "@ngtools/webpack" "16.2.1"
     "@vitejs/plugin-basic-ssl" "1.0.1"
     ansi-colors "4.1.3"
     autoprefixer "10.4.14"
@@ -235,31 +235,32 @@
   optionalDependencies:
     esbuild "0.18.17"
 
-"@angular-devkit/build-webpack@0.1602.0":
-  version "0.1602.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1602.0.tgz#417ec43b435c19b630c0c734d8d91e29889784e8"
-  integrity sha512-KdSr6iAcO30i/LIGL8mYi+d1buVXuDCp2dptzEJ4vxReOMFJca90KLwb+tVHEqqnDb0WkNfWm8Ii2QYh2FrNyA==
+"@angular-devkit/build-webpack@0.1602.1":
+  version "0.1602.1"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1602.1.tgz#e7f61483c82c23c03127e5ac46b00b741425e211"
+  integrity sha512-gY7G+1xsOkPvO4/Ose1RnbflrTQkbQh6xQPeCa95I4GFFpk8De3d2cGNM9KuD8LCDc1GAGip8nRuVrCwQGZ5sw==
   dependencies:
-    "@angular-devkit/architect" "0.1602.0"
+    "@angular-devkit/architect" "0.1602.1"
     rxjs "7.8.1"
 
-"@angular-devkit/core@16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-16.2.0.tgz#477c6f9006d9efa4ff54c8f7a8a391df70788602"
-  integrity sha512-l1k6Rqm3YM16BEn3CWyQKrk9xfu+2ux7Bw3oS+h1TO4/RoxO2PgHj8LLRh/WNrYVarhaqO7QZ5ePBkXNMkzJ1g==
+"@angular-devkit/core@16.2.1":
+  version "16.2.1"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-16.2.1.tgz#b082107e06ef669c4ded203f22c379b722544c58"
+  integrity sha512-/QnIIvu9kW4UoJ2IWF8pxwHk+/O2ARi5bYV9jCgMxTs/3VuOHrWaDtxAvxd1gqj+vYvwLtdbBYNT/Hs/nCJeLQ==
   dependencies:
     ajv "8.12.0"
     ajv-formats "2.1.1"
     jsonc-parser "3.2.0"
+    picomatch "2.3.1"
     rxjs "7.8.1"
     source-map "0.7.4"
 
-"@angular-devkit/schematics@16.2.0", "@angular-devkit/schematics@^16.0.1":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-16.2.0.tgz#4de900615451fce61cf5bcbc7935986ad89e49f5"
-  integrity sha512-QMDJXPE0+YQJ9Ap3MMzb0v7rx6ZbBEokmHgpdIjN3eILYmbAdsSGE8HTV8NjS9nKmcyE9OGzFCMb7PFrDTlTAw==
+"@angular-devkit/schematics@16.2.1", "@angular-devkit/schematics@^16.0.1":
+  version "16.2.1"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-16.2.1.tgz#af9e666dbe9e23942e09f79d8a4385e6ad9b0f67"
+  integrity sha512-rXXO5zSI/iN6JtU3oU+vKfOB1N8n1iCH9aLudtJfO5zT9r29FIvV4YMmHO0iu78i4IhQAeJdr42cvrGPp8Y41A==
   dependencies:
-    "@angular-devkit/core" "16.2.0"
+    "@angular-devkit/core" "16.2.1"
     jsonc-parser "3.2.0"
     magic-string "0.30.1"
     ora "5.4.1"
@@ -306,31 +307,31 @@
     "@angular-eslint/bundled-angular-compiler" "16.1.0"
     "@typescript-eslint/utils" "5.62.0"
 
-"@angular/animations@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-16.2.0.tgz#193727e6ebe215da36d7b3ab4b135c2945c3fac7"
-  integrity sha512-SgOjldgRlU6XL1f6OUmFa+1iiy1OCWXH8i7q7g0yGCeQ4XAlvNRjDj++xxvUwDhE2pLKJLPYDJmCH98mvjKZcA==
+"@angular/animations@^16.2.3":
+  version "16.2.3"
+  resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-16.2.3.tgz#4ca00f1a731e19eb74d68271d7da88e6b74be54e"
+  integrity sha512-MEjCWjN7RcHNFHkDYB3ZvEQqt94EzwevVXfld6rcOZNwJxcOVyi7+nQQ1YhWLPSW81HF76bpwD3RWWhZpKdXQQ==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/cdk@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-16.2.0.tgz#30931dbe1cfca2764f9e4b63d2b9d20029008db8"
-  integrity sha512-pOIXP15uQkl3bf7t0i25+0uBjkHkVmBgwOMlqE9imY4gGq7UswbZRYHaGudJITin2ASFqKDgKvwNRCBqfmjO4A==
+"@angular/cdk@^16.2.2":
+  version "16.2.2"
+  resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-16.2.2.tgz#ab24c050883a99a8e48809201ed6b4623852ad7a"
+  integrity sha512-luUmeIFuEX4N3EOLhg1DM2hgsR+Is1Qd0a5xflbo30hZFnufppyzjaOvljNYUFtNTD9BaQRXaZDFA2cyTgfzZw==
   dependencies:
     tslib "^2.3.0"
   optionalDependencies:
     parse5 "^7.1.2"
 
-"@angular/cli@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-16.2.0.tgz#c3ab30c7e177f5a18cc44e8d10c024a15636dc63"
-  integrity sha512-xT8vJOyw6Rc2364XDW2jHagLgKu7342ktd/lt+c0u6R+AB2XVFMePR7VceLohX9N/vRUsbQ0nVSZr+ru/hA+HA==
+"@angular/cli@^16.2.1":
+  version "16.2.1"
+  resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-16.2.1.tgz#1274b6ee8aef5131be1ae56f3db36b810c1e60fc"
+  integrity sha512-nuCc0VOGjuUFQo1Pu9CyFQ4VTy7OuwTiwxOG9qbut4FSGz2CO9NeqoamPUuy6rpKVu5JxVe+L6Y4OFaNKv2n3Q==
   dependencies:
-    "@angular-devkit/architect" "0.1602.0"
-    "@angular-devkit/core" "16.2.0"
-    "@angular-devkit/schematics" "16.2.0"
-    "@schematics/angular" "16.2.0"
+    "@angular-devkit/architect" "0.1602.1"
+    "@angular-devkit/core" "16.2.1"
+    "@angular-devkit/schematics" "16.2.1"
+    "@schematics/angular" "16.2.1"
     "@yarnpkg/lockfile" "1.1.0"
     ansi-colors "4.1.3"
     ini "4.1.1"
@@ -346,17 +347,17 @@
     symbol-observable "4.0.0"
     yargs "17.7.2"
 
-"@angular/common@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/common/-/common-16.2.0.tgz#c28cfb431d8108ccfd83c40adc2bb3a3cd564d4c"
-  integrity sha512-ByrDLsTBarzqRmq4GS841Ku0lvB4L2wfOCfGEIw2ZuiNbZlDA5O/qohQgJnHR5d9meVJnu9NgdbeyMzk90xZNg==
+"@angular/common@^16.2.3":
+  version "16.2.3"
+  resolved "https://registry.yarnpkg.com/@angular/common/-/common-16.2.3.tgz#0672fe08bbdd836bcbe8725977793034e5a5f135"
+  integrity sha512-hOC2yqISBRAzltuVJQ3CEJxHRp9mWggysp0or5HydbcmvB6WIroECL7U0u36VA95zC9SXnymHA13OwiFPpmahA==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/compiler-cli@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-16.2.0.tgz#b5d6c55141c3051b5aaae6e3a907c45d81206a5b"
-  integrity sha512-IGRpEJwbzOLFsLj2qgTHpZ6nNcRjKDYaaAnVx+B1CfK4DP31PIsZLgsWcEcYt7KbF/FUlrCNwdBxrqE7rDxZaw==
+"@angular/compiler-cli@^16.2.3":
+  version "16.2.3"
+  resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-16.2.3.tgz#b5128a58ad5720b5afa3f19687c516ac1f9f8275"
+  integrity sha512-4p1tDeeONiq/zceC0T6unXDuqyWiAe7v2Ag7+ewwM9V8BF+YOEpEI/41lxzmbK2U1YUvG3jWfZyw3ertQlMp0Q==
   dependencies:
     "@babel/core" "7.22.5"
     "@jridgewell/sourcemap-codec" "^1.4.14"
@@ -367,38 +368,38 @@
     tslib "^2.3.0"
     yargs "^17.2.1"
 
-"@angular/compiler@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-16.2.0.tgz#17e65c1628229c037ca9d311f143d13933a371b5"
-  integrity sha512-Ai0CKRUDlMY6iFCeoRsC+soVFTU7eyMDmNzeakdmNvGYMdLdjH8WvgaNukesi6WX7YBIQIKTPJVral8fXBQroQ==
+"@angular/compiler@^16.2.3":
+  version "16.2.3"
+  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-16.2.3.tgz#f7bb3838d1424dfdb1c320babac855289fa8a9dc"
+  integrity sha512-bFc7YRHNdBJZD2HiORBQun2p40emvEt8D4JwXnW1JIStAWKJOXLyEjx045wNddqH7NpUq8AE2F1i82hIDNQZ1g==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/core@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/core/-/core-16.2.0.tgz#1713f1210900917530483ce27d80a39830b0cea2"
-  integrity sha512-iwUWFw+JmRxw0chcNoqhXVR8XUTE+Rszhy22iSCkK0Jo8IJqEad1d2dQoFu1QfqOVdPMZtpJDmC/ppQ/f5c5aA==
+"@angular/core@^16.2.3":
+  version "16.2.3"
+  resolved "https://registry.yarnpkg.com/@angular/core/-/core-16.2.3.tgz#8b43785b0d547295b8a93c7f3bfe623cad036844"
+  integrity sha512-YCzm7Rd2l0Ti0dZ1Mw3OfoQqlLolDN6jBEPy9Ah1s/KB+jKwNK9An3g8A9H6/jQIFwHCtxRad3LYH5ftknNMBQ==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/forms@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-16.2.0.tgz#7a94e07531a5ad049aa841ef3f3f0932f11b768a"
-  integrity sha512-Z/IFw319ZSgGbJFkR5Ba0sRIIqDxQDVH4I+vnVoOYqq2NxuHYfLJDHAB9uHln9GWj86b1SrJBZe8qiS7Sxb7yQ==
+"@angular/forms@^16.2.3":
+  version "16.2.3"
+  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-16.2.3.tgz#46e9a1b0ce3d9fcb34b320fcd372430c4e104e4e"
+  integrity sha512-d2ELs3PU4o1Yb89w4X3trD3CFWrDUsuFKs1hyNSYPWqCmcQ+tAfr9mizYPTVPSvee/RPRBqDEa0YTzfVpOvX4Q==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/platform-browser-dynamic@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.0.tgz#48c1dd9d5b67479c6c387bc58b46e1792deaf2d9"
-  integrity sha512-kLxgR+ichWb6dNA1JUAh0JB+iSrObkomd10porGQWVxAGmHqg1eiB3bBaSAgcaLftsrmEguIH8O9AEfq+HLfrA==
+"@angular/platform-browser-dynamic@^16.2.3":
+  version "16.2.3"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.3.tgz#3cc2f1ca9cae44de6aec6b74aecef4d46a03aa9f"
+  integrity sha512-Y3cYob1VGzT1xSMbuLGVxPlyuhv4zshYEo/yy2626YD63DigqYwGzj+gT0JoU1eNuXw2UWp3R67d9F8SC015Jw==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/platform-browser@^16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-16.2.0.tgz#097743a49e3b654b1b90313c5120bebb223bcb32"
-  integrity sha512-6xjZFnSD0C8ylDbzKpsxCJ4pLJDRvippr9Wj9RCeDQvAzMibsqIjpbesyOccw3hO+jheJQRhM/rZeO1ubZU94w==
+"@angular/platform-browser@^16.2.3":
+  version "16.2.3"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-16.2.3.tgz#034163d17fdb577531f3b11f200016c592e85a0f"
+  integrity sha512-adWINGgjIMxwbWJhkMwpEfb4FRFMda5X6ahxWQX2E03Nl0kzePI6cvlJqAgp+iBwTkieWeU8BThJk2/rMkS3bw==
   dependencies:
     tslib "^2.3.0"
 
@@ -421,12 +422,13 @@
   dependencies:
     "@babel/highlight" "^7.0.0"
 
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.5":
-  version "7.22.5"
-  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
-  integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5":
+  version "7.22.13"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
+  integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
   dependencies:
-    "@babel/highlight" "^7.22.5"
+    "@babel/highlight" "^7.22.13"
+    chalk "^2.4.2"
 
 "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9":
   version "7.22.9"
@@ -454,7 +456,7 @@
     json5 "^2.2.2"
     semver "^6.3.0"
 
-"@babel/core@7.22.9", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.21.8", "@babel/core@^7.22.9":
+"@babel/core@7.22.9", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.21.8", "@babel/core@^7.22.0", "@babel/core@^7.22.9":
   version "7.22.9"
   resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f"
   integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==
@@ -491,7 +493,7 @@
   dependencies:
     eslint-rule-composer "^0.3.0"
 
-"@babel/generator@7.22.9", "@babel/generator@^7.22.5", "@babel/generator@^7.22.7", "@babel/generator@^7.22.9", "@babel/generator@^7.7.2":
+"@babel/generator@7.22.9":
   version "7.22.9"
   resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d"
   integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==
@@ -501,6 +503,16 @@
     "@jridgewell/trace-mapping" "^0.3.17"
     jsesc "^2.5.1"
 
+"@babel/generator@^7.22.10", "@babel/generator@^7.22.5", "@babel/generator@^7.22.9", "@babel/generator@^7.7.2":
+  version "7.22.10"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722"
+  integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==
+  dependencies:
+    "@babel/types" "^7.22.10"
+    "@jridgewell/gen-mapping" "^0.3.2"
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jsesc "^2.5.1"
+
 "@babel/helper-annotate-as-pure@7.22.5", "@babel/helper-annotate-as-pure@^7.22.5":
   version "7.22.5"
   resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
@@ -516,9 +528,9 @@
     "@babel/types" "^7.22.5"
 
 "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9":
-  version "7.22.9"
-  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892"
-  integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==
+  version "7.22.10"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024"
+  integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==
   dependencies:
     "@babel/compat-data" "^7.22.9"
     "@babel/helper-validator-option" "^7.22.5"
@@ -682,27 +694,27 @@
     "@babel/types" "^7.22.5"
 
 "@babel/helpers@^7.22.5", "@babel/helpers@^7.22.6":
-  version "7.22.6"
-  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd"
-  integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==
+  version "7.22.11"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.11.tgz#b02f5d5f2d7abc21ab59eeed80de410ba70b056a"
+  integrity sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==
   dependencies:
     "@babel/template" "^7.22.5"
-    "@babel/traverse" "^7.22.6"
-    "@babel/types" "^7.22.5"
+    "@babel/traverse" "^7.22.11"
+    "@babel/types" "^7.22.11"
 
-"@babel/highlight@^7.0.0", "@babel/highlight@^7.22.5":
-  version "7.22.5"
-  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
-  integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
+"@babel/highlight@^7.0.0", "@babel/highlight@^7.22.13":
+  version "7.22.13"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16"
+  integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==
   dependencies:
     "@babel/helper-validator-identifier" "^7.22.5"
-    chalk "^2.0.0"
+    chalk "^2.4.2"
     js-tokens "^4.0.0"
 
-"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7":
-  version "7.22.7"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae"
-  integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==
+"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.11", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7":
+  version "7.22.13"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.13.tgz#23fb17892b2be7afef94f573031c2f4b42839a2b"
+  integrity sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==
 
 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5":
   version "7.22.5"
@@ -1490,26 +1502,26 @@
     "@babel/parser" "^7.22.5"
     "@babel/types" "^7.22.5"
 
-"@babel/traverse@^7.22.5", "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8":
-  version "7.22.8"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e"
-  integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==
+"@babel/traverse@^7.22.11", "@babel/traverse@^7.22.5", "@babel/traverse@^7.22.8":
+  version "7.22.11"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.11.tgz#71ebb3af7a05ff97280b83f05f8865ac94b2027c"
+  integrity sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==
   dependencies:
-    "@babel/code-frame" "^7.22.5"
-    "@babel/generator" "^7.22.7"
+    "@babel/code-frame" "^7.22.10"
+    "@babel/generator" "^7.22.10"
     "@babel/helper-environment-visitor" "^7.22.5"
     "@babel/helper-function-name" "^7.22.5"
     "@babel/helper-hoist-variables" "^7.22.5"
     "@babel/helper-split-export-declaration" "^7.22.6"
-    "@babel/parser" "^7.22.7"
-    "@babel/types" "^7.22.5"
+    "@babel/parser" "^7.22.11"
+    "@babel/types" "^7.22.11"
     debug "^4.1.0"
     globals "^11.1.0"
 
-"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
-  version "7.22.5"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
-  integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.11", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+  version "7.22.11"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2"
+  integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==
   dependencies:
     "@babel/helper-string-parser" "^7.22.5"
     "@babel/helper-validator-identifier" "^7.22.5"
@@ -2000,17 +2012,17 @@
   dependencies:
     "@jridgewell/trace-mapping" "0.3.9"
 
-"@csstools/css-parser-algorithms@^2.3.0":
+"@csstools/css-parser-algorithms@^2.3.1":
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz#ec4fc764ba45d2bb7ee2774667e056aa95003f3a"
   integrity sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==
 
-"@csstools/css-tokenizer@^2.1.1":
+"@csstools/css-tokenizer@^2.2.0":
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz#9d70e6dcbe94e44c7400a2929928db35c4de32b5"
   integrity sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==
 
-"@csstools/media-query-list-parser@^2.1.2":
+"@csstools/media-query-list-parser@^2.1.4":
   version "2.1.4"
   resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz#0017f99945f6c16dd81a7aacf6821770933c3a5c"
   integrity sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==
@@ -2294,10 +2306,10 @@
     minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
-"@eslint/js@^8.47.0":
-  version "8.47.0"
-  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.47.0.tgz#5478fdf443ff8158f9de171c704ae45308696c7d"
-  integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==
+"@eslint/js@8.48.0":
+  version "8.48.0"
+  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb"
+  integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==
 
 "@fal-works/esbuild-plugin-global-externals@^2.1.2":
   version "2.1.2"
@@ -2418,109 +2430,109 @@
   resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
   integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
 
-"@jest/console@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.6.2.tgz#bf1d4101347c23e07c029a1b1ae07d550f5cc541"
-  integrity sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==
+"@jest/console@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.6.4.tgz#a7e2d84516301f986bba0dd55af9d5fe37f46527"
+  integrity sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==
   dependencies:
-    "@jest/types" "^29.6.1"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
     chalk "^4.0.0"
-    jest-message-util "^29.6.2"
-    jest-util "^29.6.2"
+    jest-message-util "^29.6.3"
+    jest-util "^29.6.3"
     slash "^3.0.0"
 
-"@jest/core@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.2.tgz#6f2d1dbe8aa0265fcd4fb8082ae1952f148209c8"
-  integrity sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==
+"@jest/core@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.4.tgz#265ebee05ec1ff3567757e7a327155c8d6bdb126"
+  integrity sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==
   dependencies:
-    "@jest/console" "^29.6.2"
-    "@jest/reporters" "^29.6.2"
-    "@jest/test-result" "^29.6.2"
-    "@jest/transform" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/console" "^29.6.4"
+    "@jest/reporters" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
     ansi-escapes "^4.2.1"
     chalk "^4.0.0"
     ci-info "^3.2.0"
     exit "^0.1.2"
     graceful-fs "^4.2.9"
-    jest-changed-files "^29.5.0"
-    jest-config "^29.6.2"
-    jest-haste-map "^29.6.2"
-    jest-message-util "^29.6.2"
-    jest-regex-util "^29.4.3"
-    jest-resolve "^29.6.2"
-    jest-resolve-dependencies "^29.6.2"
-    jest-runner "^29.6.2"
-    jest-runtime "^29.6.2"
-    jest-snapshot "^29.6.2"
-    jest-util "^29.6.2"
-    jest-validate "^29.6.2"
-    jest-watcher "^29.6.2"
+    jest-changed-files "^29.6.3"
+    jest-config "^29.6.4"
+    jest-haste-map "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-regex-util "^29.6.3"
+    jest-resolve "^29.6.4"
+    jest-resolve-dependencies "^29.6.4"
+    jest-runner "^29.6.4"
+    jest-runtime "^29.6.4"
+    jest-snapshot "^29.6.4"
+    jest-util "^29.6.3"
+    jest-validate "^29.6.3"
+    jest-watcher "^29.6.4"
     micromatch "^4.0.4"
-    pretty-format "^29.6.2"
+    pretty-format "^29.6.3"
     slash "^3.0.0"
     strip-ansi "^6.0.0"
 
-"@jest/environment@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.2.tgz#794c0f769d85e7553439d107d3f43186dc6874a9"
-  integrity sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==
+"@jest/environment@^29.6.2", "@jest/environment@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.4.tgz#78ec2c9f8c8829a37616934ff4fea0c028c79f4f"
+  integrity sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==
   dependencies:
-    "@jest/fake-timers" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/fake-timers" "^29.6.4"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
-    jest-mock "^29.6.2"
+    jest-mock "^29.6.3"
 
-"@jest/expect-utils@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.2.tgz#1b97f290d0185d264dd9fdec7567a14a38a90534"
-  integrity sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==
+"@jest/expect-utils@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.4.tgz#17c7dfe6cec106441f218b0aff4b295f98346679"
+  integrity sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==
   dependencies:
-    jest-get-type "^29.4.3"
+    jest-get-type "^29.6.3"
 
-"@jest/expect@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.2.tgz#5a2ad58bb345165d9ce0a1845bbf873c480a4b28"
-  integrity sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==
+"@jest/expect@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.4.tgz#1d6ae17dc68d906776198389427ab7ce6179dba6"
+  integrity sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==
   dependencies:
-    expect "^29.6.2"
-    jest-snapshot "^29.6.2"
+    expect "^29.6.4"
+    jest-snapshot "^29.6.4"
 
-"@jest/fake-timers@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.2.tgz#fe9d43c5e4b1b901168fe6f46f861b3e652a2df4"
-  integrity sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==
+"@jest/fake-timers@^29.6.2", "@jest/fake-timers@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.4.tgz#45a27f093c43d5d989362a3e7a8c70c83188b4f6"
+  integrity sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==
   dependencies:
-    "@jest/types" "^29.6.1"
+    "@jest/types" "^29.6.3"
     "@sinonjs/fake-timers" "^10.0.2"
     "@types/node" "*"
-    jest-message-util "^29.6.2"
-    jest-mock "^29.6.2"
-    jest-util "^29.6.2"
+    jest-message-util "^29.6.3"
+    jest-mock "^29.6.3"
+    jest-util "^29.6.3"
 
-"@jest/globals@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.2.tgz#74af81b9249122cc46f1eb25793617eec69bf21a"
-  integrity sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==
+"@jest/globals@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.4.tgz#4f04f58731b062b44ef23036b79bdb31f40c7f63"
+  integrity sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==
   dependencies:
-    "@jest/environment" "^29.6.2"
-    "@jest/expect" "^29.6.2"
-    "@jest/types" "^29.6.1"
-    jest-mock "^29.6.2"
+    "@jest/environment" "^29.6.4"
+    "@jest/expect" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    jest-mock "^29.6.3"
 
-"@jest/reporters@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.2.tgz#524afe1d76da33d31309c2c4a2c8062d0c48780a"
-  integrity sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==
+"@jest/reporters@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.4.tgz#9d6350c8a2761ece91f7946e97ab0dabc06deab7"
+  integrity sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==
   dependencies:
     "@bcoe/v8-coverage" "^0.2.3"
-    "@jest/console" "^29.6.2"
-    "@jest/test-result" "^29.6.2"
-    "@jest/transform" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/console" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
     "@jridgewell/trace-mapping" "^0.3.18"
     "@types/node" "*"
     chalk "^4.0.0"
@@ -2529,70 +2541,70 @@
     glob "^7.1.3"
     graceful-fs "^4.2.9"
     istanbul-lib-coverage "^3.0.0"
-    istanbul-lib-instrument "^5.1.0"
+    istanbul-lib-instrument "^6.0.0"
     istanbul-lib-report "^3.0.0"
     istanbul-lib-source-maps "^4.0.0"
     istanbul-reports "^3.1.3"
-    jest-message-util "^29.6.2"
-    jest-util "^29.6.2"
-    jest-worker "^29.6.2"
+    jest-message-util "^29.6.3"
+    jest-util "^29.6.3"
+    jest-worker "^29.6.4"
     slash "^3.0.0"
     string-length "^4.0.1"
     strip-ansi "^6.0.0"
     v8-to-istanbul "^9.0.1"
 
-"@jest/schemas@^29.6.0":
-  version "29.6.0"
-  resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040"
-  integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==
+"@jest/schemas@^29.6.3":
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
+  integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
   dependencies:
     "@sinclair/typebox" "^0.27.8"
 
-"@jest/source-map@^29.6.0":
-  version "29.6.0"
-  resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.0.tgz#bd34a05b5737cb1a99d43e1957020ac8e5b9ddb1"
-  integrity sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==
+"@jest/source-map@^29.6.3":
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4"
+  integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==
   dependencies:
     "@jridgewell/trace-mapping" "^0.3.18"
     callsites "^3.0.0"
     graceful-fs "^4.2.9"
 
-"@jest/test-result@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.6.2.tgz#fdd11583cd1608e4db3114e8f0cce277bf7a32ed"
-  integrity sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==
+"@jest/test-result@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.6.4.tgz#adf5c79f6e1fb7405ad13d67d9e2b6ff54b54c6b"
+  integrity sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==
   dependencies:
-    "@jest/console" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/console" "^29.6.4"
+    "@jest/types" "^29.6.3"
     "@types/istanbul-lib-coverage" "^2.0.0"
     collect-v8-coverage "^1.0.0"
 
-"@jest/test-sequencer@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz#585eff07a68dd75225a7eacf319780cb9f6b9bf4"
-  integrity sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==
+"@jest/test-sequencer@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz#86aef66aaa22b181307ed06c26c82802fb836d7b"
+  integrity sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==
   dependencies:
-    "@jest/test-result" "^29.6.2"
+    "@jest/test-result" "^29.6.4"
     graceful-fs "^4.2.9"
-    jest-haste-map "^29.6.2"
+    jest-haste-map "^29.6.4"
     slash "^3.0.0"
 
-"@jest/transform@^29.3.1", "@jest/transform@^29.6.2":
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.2.tgz#522901ebbb211af08835bc3bcdf765ab778094e3"
-  integrity sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==
+"@jest/transform@^29.3.1", "@jest/transform@^29.6.4":
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.4.tgz#a6bc799ef597c5d85b2e65a11fd96b6b239bab5a"
+  integrity sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==
   dependencies:
     "@babel/core" "^7.11.6"
-    "@jest/types" "^29.6.1"
+    "@jest/types" "^29.6.3"
     "@jridgewell/trace-mapping" "^0.3.18"
     babel-plugin-istanbul "^6.1.1"
     chalk "^4.0.0"
     convert-source-map "^2.0.0"
     fast-json-stable-stringify "^2.1.0"
     graceful-fs "^4.2.9"
-    jest-haste-map "^29.6.2"
-    jest-regex-util "^29.4.3"
-    jest-util "^29.6.2"
+    jest-haste-map "^29.6.4"
+    jest-regex-util "^29.6.3"
+    jest-util "^29.6.3"
     micromatch "^4.0.4"
     pirates "^4.0.4"
     slash "^3.0.0"
@@ -2609,12 +2621,12 @@
     "@types/yargs" "^16.0.0"
     chalk "^4.0.0"
 
-"@jest/types@^29.6.1":
-  version "29.6.1"
-  resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2"
-  integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==
+"@jest/types@^29.6.1", "@jest/types@^29.6.3":
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59"
+  integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==
   dependencies:
-    "@jest/schemas" "^29.6.0"
+    "@jest/schemas" "^29.6.3"
     "@types/istanbul-lib-coverage" "^2.0.0"
     "@types/istanbul-reports" "^3.0.0"
     "@types/node" "*"
@@ -2936,10 +2948,10 @@
     pump "^3.0.0"
     tar-fs "^2.1.1"
 
-"@ngtools/webpack@16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-16.2.0.tgz#b3c2b2668faac35bbcc6c81a4bc016347d141349"
-  integrity sha512-c9jv4r7GnLTpnPOeF+a9yAm/3/2wwl9lMBU32i9hlY+q/Hqde4PiL95bUOLnRRL1I64DV7BFTlSZqSPgDpFXZQ==
+"@ngtools/webpack@16.2.1":
+  version "16.2.1"
+  resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-16.2.1.tgz#2ac1442dc8f823c4512b9129e73d6e23ed903c92"
+  integrity sha512-fT7uwrw3Yfi7mqVHD+kTw0zDq6jZ1CaRp6pQ5b3n+qFL+a3c34Lr/kFVVWZNktfooxO9lYWRsJdTRtid25he9w==
 
 "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1":
   version "5.1.1-v1"
@@ -3213,6 +3225,22 @@
     "@babel/runtime" "^7.13.10"
     "@radix-ui/react-slot" "1.0.2"
 
+"@radix-ui/react-roving-focus@1.0.4":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz#e90c4a6a5f6ac09d3b8c1f5b5e81aab2f0db1974"
+  integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==
+  dependencies:
+    "@babel/runtime" "^7.13.10"
+    "@radix-ui/primitive" "1.0.1"
+    "@radix-ui/react-collection" "1.0.3"
+    "@radix-ui/react-compose-refs" "1.0.1"
+    "@radix-ui/react-context" "1.0.1"
+    "@radix-ui/react-direction" "1.0.1"
+    "@radix-ui/react-id" "1.0.1"
+    "@radix-ui/react-primitive" "1.0.3"
+    "@radix-ui/react-use-callback-ref" "1.0.1"
+    "@radix-ui/react-use-controllable-state" "1.0.1"
+
 "@radix-ui/react-select@^1.2.2":
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-1.2.2.tgz#caa981fa0d672cf3c1b2a5240135524e69b32181"
@@ -3241,6 +3269,14 @@
     aria-hidden "^1.1.1"
     react-remove-scroll "2.5.5"
 
+"@radix-ui/react-separator@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.0.3.tgz#be5a931a543d5726336b112f465f58585c04c8aa"
+  integrity sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==
+  dependencies:
+    "@babel/runtime" "^7.13.10"
+    "@radix-ui/react-primitive" "1.0.3"
+
 "@radix-ui/react-slot@1.0.2":
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.2.tgz#a9ff4423eade67f501ffb32ec22064bc9d3099ab"
@@ -3249,6 +3285,44 @@
     "@babel/runtime" "^7.13.10"
     "@radix-ui/react-compose-refs" "1.0.1"
 
+"@radix-ui/react-toggle-group@1.0.4":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz#f5b5c8c477831b013bec3580c55e20a68179d6ec"
+  integrity sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==
+  dependencies:
+    "@babel/runtime" "^7.13.10"
+    "@radix-ui/primitive" "1.0.1"
+    "@radix-ui/react-context" "1.0.1"
+    "@radix-ui/react-direction" "1.0.1"
+    "@radix-ui/react-primitive" "1.0.3"
+    "@radix-ui/react-roving-focus" "1.0.4"
+    "@radix-ui/react-toggle" "1.0.3"
+    "@radix-ui/react-use-controllable-state" "1.0.1"
+
+"@radix-ui/react-toggle@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz#aecb2945630d1dc5c512997556c57aba894e539e"
+  integrity sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==
+  dependencies:
+    "@babel/runtime" "^7.13.10"
+    "@radix-ui/primitive" "1.0.1"
+    "@radix-ui/react-primitive" "1.0.3"
+    "@radix-ui/react-use-controllable-state" "1.0.1"
+
+"@radix-ui/react-toolbar@^1.0.4":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz#3211a105567fa016e89921b5b514877f833de559"
+  integrity sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==
+  dependencies:
+    "@babel/runtime" "^7.13.10"
+    "@radix-ui/primitive" "1.0.1"
+    "@radix-ui/react-context" "1.0.1"
+    "@radix-ui/react-direction" "1.0.1"
+    "@radix-ui/react-primitive" "1.0.3"
+    "@radix-ui/react-roving-focus" "1.0.4"
+    "@radix-ui/react-separator" "1.0.3"
+    "@radix-ui/react-toggle-group" "1.0.4"
+
 "@radix-ui/react-use-callback-ref@1.0.1":
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz#f4bb1f27f2023c984e6534317ebc411fc181107a"
@@ -3345,13 +3419,13 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@schematics/angular@16.2.0":
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-16.2.0.tgz#53c373054127e6838c8ec390f5ea51054c09a401"
-  integrity sha512-Ib0/ZCkjWt7a5p3209JVwEWwf41v03K3ylvlxLIEo1ZGijAZAlrBj4GrA5YQ+TmPm2hRyt+owss7x91/x+i0Gw==
+"@schematics/angular@16.2.1":
+  version "16.2.1"
+  resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-16.2.1.tgz#27b1c9a8ebb4a6d020b0d909d17f2da054fcd4bb"
+  integrity sha512-e3ckgvSv+OA+4xUBpOqVOvNM8FqY/yXaWqs/Ob0uQ/zPL1iVa/MCAoB25KqYQPnq21hEwE4zqIIQFKasKBIqMA==
   dependencies:
-    "@angular-devkit/core" "16.2.0"
-    "@angular-devkit/schematics" "16.2.0"
+    "@angular-devkit/core" "16.2.1"
+    "@angular-devkit/schematics" "16.2.1"
     jsonc-parser "3.2.0"
 
 "@sigstore/bundle@^1.0.0":
@@ -3393,206 +3467,206 @@
   dependencies:
     "@sinonjs/commons" "^3.0.0"
 
-"@storybook/addon-actions@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.2.3.tgz#da5ea3bb05f222fd34d4b4b03f05c1d41885a501"
-  integrity sha512-sWzpRPJOVzAXUOS40zhGygPt49u/ibk247GIxR2zjm/qYcaqxMES55rPfO45A1p6/9pi81rH06vx3rwhVZ+plA==
+"@storybook/addon-actions@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.4.0.tgz#709988f46422b85b3672d2e6f90bf623af59faa9"
+  integrity sha512-0lHLLUlrGE7CBFrfmAXrBKu7fUIsiQlnNekuE3cIAjSgVR481bJEzYHUUoMATqpPC4GGErBdP1CZxVDDwWV8jA==
   dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/theming" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/theming" "7.4.0"
+    "@storybook/types" "7.4.0"
     dequal "^2.0.2"
     lodash "^4.17.21"
     polished "^4.2.2"
     prop-types "^15.7.2"
     react-inspector "^6.0.0"
-    telejson "^7.0.3"
+    telejson "^7.2.0"
     ts-dedent "^2.0.0"
     uuid "^9.0.0"
 
-"@storybook/addon-backgrounds@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-7.2.3.tgz#2ff446a71e7f78b418cec38d4625c30c2367b2d5"
-  integrity sha512-9dpjwi5TaDL6wx1gERSylGouX6uoUfZK7ojSAlYRjyqtHdoNrWKgHCyF3xFN68I+p/FLZ4w9GE+MqjSCPRuNbQ==
+"@storybook/addon-backgrounds@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-7.4.0.tgz#7d3048329b8ef73145a2e9b435b7b35004a65f86"
+  integrity sha512-cEO/Tp/eRE+5bf1FGN4wKLqLDBv3EYp9enJyXV7B3cFdciqtoE7VJPZuFZkzjJN1rRcOKSZp8g5agsx+x9uNGQ==
   dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/theming" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/theming" "7.4.0"
+    "@storybook/types" "7.4.0"
     memoizerific "^1.11.3"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-controls@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.2.3.tgz#d9447b92d6f8ed19dcc64ee1b1d781d7d4a3203e"
-  integrity sha512-e0Yro238/MJP+0pV9sZ/M8BWjabX9lesr03dhvYKLAEwKSbrtcPRTszkRYKlcY9GyUxOc2xji8cgEgq0TtJWNg==
-  dependencies:
-    "@storybook/blocks" "7.2.3"
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/core-common" "7.2.3"
-    "@storybook/core-events" "7.2.3"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/theming" "7.2.3"
-    "@storybook/types" "7.2.3"
+"@storybook/addon-controls@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.4.0.tgz#b212d60fd74d69f6b63c53e4d52ab6c77ee51247"
+  integrity sha512-tYDfqpTR+c9y4kElmr3aWNHPot6kYd+nruYb697LpkCdy4lFErqSo0mhvPyZfMZp2KEajfp6YJAurhQWbvbj/A==
+  dependencies:
+    "@storybook/blocks" "7.4.0"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/core-events" "7.4.0"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/theming" "7.4.0"
+    "@storybook/types" "7.4.0"
     lodash "^4.17.21"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-docs@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.2.3.tgz#092ff166a9b5634390c1bb728b1ba4bfc388a4e7"
-  integrity sha512-Je0+ykFaKRBfA2PeiWNMTGgtpB/eVwmCs1c8zW4boFrACiHOo/MgTHq0FDJDe3gFI/o73x6XroZ4JDcujjYcDg==
+"@storybook/addon-docs@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.4.0.tgz#e07233c264eaec149a0fcca0e27c586d4e80b403"
+  integrity sha512-LJE92LUeVTgi8W4tLBEbSvCqF54snmBfTFCr46vhCFov2CE2VBgEvIX1XT3dfUgYUOtPu3RXR2C89fYgU6VYZw==
   dependencies:
     "@jest/transform" "^29.3.1"
     "@mdx-js/react" "^2.1.5"
-    "@storybook/blocks" "7.2.3"
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/csf-plugin" "7.2.3"
-    "@storybook/csf-tools" "7.2.3"
+    "@storybook/blocks" "7.4.0"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/csf-plugin" "7.4.0"
+    "@storybook/csf-tools" "7.4.0"
     "@storybook/global" "^5.0.0"
     "@storybook/mdx2-csf" "^1.0.0"
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/postinstall" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/react-dom-shim" "7.2.3"
-    "@storybook/theming" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/postinstall" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/react-dom-shim" "7.4.0"
+    "@storybook/theming" "7.4.0"
+    "@storybook/types" "7.4.0"
     fs-extra "^11.1.0"
     remark-external-links "^8.0.0"
     remark-slug "^6.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-essentials@^7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-7.2.3.tgz#6330a8622b2b05ca4b7d21cfdeab26b1598be66d"
-  integrity sha512-QIw5IgNxNWAOet9qnHCQG+7yKlxVX45gpLL0rUJzN82aEnZ5bDJFZoFCspgwYzDeddPaYEzxsYjVGg8PbTHDpQ==
-  dependencies:
-    "@storybook/addon-actions" "7.2.3"
-    "@storybook/addon-backgrounds" "7.2.3"
-    "@storybook/addon-controls" "7.2.3"
-    "@storybook/addon-docs" "7.2.3"
-    "@storybook/addon-highlight" "7.2.3"
-    "@storybook/addon-measure" "7.2.3"
-    "@storybook/addon-outline" "7.2.3"
-    "@storybook/addon-toolbars" "7.2.3"
-    "@storybook/addon-viewport" "7.2.3"
-    "@storybook/core-common" "7.2.3"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
+"@storybook/addon-essentials@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-7.4.0.tgz#b5d19c60233e5bd5e1a29b76b51059c889f18d52"
+  integrity sha512-nZmNM9AKw2JXxnYUXyFKLeUF/cL7Z9E1WTeZyOFTDtU2aITRt8+LvaepwjchtPqu2B0GcQxLB5FRDdhy0I19nw==
+  dependencies:
+    "@storybook/addon-actions" "7.4.0"
+    "@storybook/addon-backgrounds" "7.4.0"
+    "@storybook/addon-controls" "7.4.0"
+    "@storybook/addon-docs" "7.4.0"
+    "@storybook/addon-highlight" "7.4.0"
+    "@storybook/addon-measure" "7.4.0"
+    "@storybook/addon-outline" "7.4.0"
+    "@storybook/addon-toolbars" "7.4.0"
+    "@storybook/addon-viewport" "7.4.0"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-highlight@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-7.2.3.tgz#de91159bf0494b6eab22165c8001b045a98af903"
-  integrity sha512-m1Hu/zewF+nk1iJPejZX5MmCsMtCQzlUwO1uVhM4UMXABqdMl+RdqvbC2L+E+auPN3znf8lBDPrSuzscHSraoQ==
+"@storybook/addon-highlight@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-7.4.0.tgz#ea33826a7f610f5e76cfa59ff22283e01cfd76cd"
+  integrity sha512-kpYSb3oXI9t/1+aRJhToDZ0/1W4mu+SzTBfv9Bl2d/DogEkFzgJricoy5LtvS5EpcXUmKO1FJsw/DCm9buSL2g==
   dependencies:
-    "@storybook/core-events" "7.2.3"
+    "@storybook/core-events" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/preview-api" "7.2.3"
+    "@storybook/preview-api" "7.4.0"
 
-"@storybook/addon-interactions@^7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-interactions/-/addon-interactions-7.2.3.tgz#e0b0ba172116d13c3aa7084210de311b53915048"
-  integrity sha512-l4bmhLkH0qy0zrGBkiA1Mh/SCR+hIo7mzmpwybmQITm7gYB1yPunOI+psHnhwdsE+AdTjpotzMKaFmsjeGvRRA==
+"@storybook/addon-interactions@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-interactions/-/addon-interactions-7.4.0.tgz#d0c15303999ac1e8f33705146e9a0a6db6df339c"
+  integrity sha512-nEWP+Ib0Y/ShXfpCm40FBTbBy1/MT8XxTEAhcNN+3ZJ07Vhhkrb8GMlWHTKQv2PyghEVBYEoPFHhElUJQOe00g==
   dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/core-common" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/instrumenter" "7.2.3"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/theming" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/instrumenter" "7.4.0"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/theming" "7.4.0"
+    "@storybook/types" "7.4.0"
     jest-mock "^27.0.6"
     polished "^4.2.2"
     ts-dedent "^2.2.0"
 
-"@storybook/addon-links@^7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-7.2.3.tgz#317eeda725217399e4620b01de8971893c3ca645"
-  integrity sha512-xu1byYcGTo6rxVlMxmpFqp+FLiI1yQseha2tTKCIX15r+R8woh9FefrJInDkvjZT6hXPgO+Jk0OS6bqJb4AbIA==
+"@storybook/addon-links@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-7.4.0.tgz#f10ba388143d0de75150a27e94241d5fb4dfba7e"
+  integrity sha512-lFj8fiokWKk3jx5YUQ4anQo1uCNDMP1y6nJ/92Y85vnOd1vJr3w4GlLy8eOWMABRE33AKLI5Yp6wcpWZDe7hhQ==
   dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/csf" "^0.1.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/router" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/router" "7.4.0"
+    "@storybook/types" "7.4.0"
     prop-types "^15.7.2"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-measure@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.2.3.tgz#9999f595532ec633c370a45563b1b2c7efe80997"
-  integrity sha512-rfQEvyYTTYSwxTfa5pi2Ez6H7S++gC/EJ7zVwEeq3qTH3Am+47t/uJnJqQpimSVXNhHWh5DggozbRAOA+jaAMQ==
+"@storybook/addon-measure@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.4.0.tgz#61bc0d0af5af8c22e81b70e1690b2f58262944cd"
+  integrity sha512-8YjBqm6jPOBgkRn9YnJkLN0+ghgJiukdHOa0VB3qhiT+oww4ZOZ7mc2aQRwXQoFb05UbVVG9UNxE7lhyTyaG2w==
   dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/types" "7.4.0"
     tiny-invariant "^1.3.1"
 
-"@storybook/addon-outline@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-7.2.3.tgz#22cf949b6a567609a62470a5a2baab4ae29f96d7"
-  integrity sha512-FWFVWLo+ruFXq+om3WdEyILyIR42csN9Dl+QqfuuIaDZOseSodJG1eSEM5SPx14KKWgABTsnMXL7cpfemGw9rA==
+"@storybook/addon-outline@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-7.4.0.tgz#63fef45815f209a3ad7ac2b3765f0734093af668"
+  integrity sha512-CCAWFC3bfkmYPzFjOemfH/kjpqJOHt+SdJgBKmwujDy+zum0DHlUL/7rd+U32cEpezCA8bapd0hlWn59C4agHQ==
   dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/types" "7.4.0"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-toolbars@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-7.2.3.tgz#0276ece920fdaf5adde09ca4bba322bb0284b5eb"
-  integrity sha512-IEh5Zwo1yhB2ULKPu+DNb6csA7Jf/JxhCilNjgLTVcCvzQWtxoSadbI0ed9QTOSM/JRr4WJgm+4ZiC+22kXoVw==
-  dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/theming" "7.2.3"
-
-"@storybook/addon-viewport@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.2.3.tgz#b2f3b2aa9f12183b880aa99a2f119422d7e196b4"
-  integrity sha512-F9qJIgp7j98Ox/BOQRj/0jIUZ4FlX9rCTynQiHpMI6tRQJyj33pPOclO96/08tUTuuqNSK1zr/XydQIJe+dTPA==
-  dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+"@storybook/addon-toolbars@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-7.4.0.tgz#db1a3bc1d6e6aa0142b62aaf8c44d5a9f82fd6b7"
+  integrity sha512-00PDLchlQXI3ZClQHU0YQBfikAAxHOhVNv2QKW54yFKmxPl+P2c/VIeir9LcPhA04smKrJTD1u+Nszd66A9xAA==
+  dependencies:
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/theming" "7.4.0"
+
+"@storybook/addon-viewport@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.4.0.tgz#a9bc167b822d31491cec6aad21cc0a420f1ae5b7"
+  integrity sha512-Bfoilf9eJV/C7tR8XHDxz3h8JlZ+iggoESp2Tc0bW9tlRvz+PsCqeyHhF/IgHY+gLnPal2PkK/PIM+ruO45HXA==
+  dependencies:
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/theming" "7.2.3"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/theming" "7.4.0"
     memoizerific "^1.11.3"
     prop-types "^15.7.2"
 
-"@storybook/addons@7.2.3", "@storybook/addons@^7.0.0":
+"@storybook/addons@^7.0.0":
   version "7.2.3"
   resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.2.3.tgz#06fb642c6d1b850c57edf5e8d8b05af0f2d7a861"
   integrity sha512-l0RUwiXcA4NZawXB7+7SpPEUQ1ov4xjDLgqnURsC4IrzxpqhhzYyiXbNTe6vS3//xUhzd9B82f3UBSCsz3k+7Q==
@@ -3601,25 +3675,25 @@
     "@storybook/preview-api" "7.2.3"
     "@storybook/types" "7.2.3"
 
-"@storybook/angular@^7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/angular/-/angular-7.2.3.tgz#e6493fd3829f6f2f3a964343fea121a9751582a3"
-  integrity sha512-P9ZFSCgfmSRCHw6nINUwHe/xcCbnWUpZpNwTU/bjGlB2M694UGYmaRTBCIeHZa5BQvf+q+sgeodrOcsYrKAI+A==
-  dependencies:
-    "@storybook/builder-webpack5" "7.2.3"
-    "@storybook/cli" "7.2.3"
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/core-common" "7.2.3"
-    "@storybook/core-events" "7.2.3"
-    "@storybook/core-server" "7.2.3"
-    "@storybook/core-webpack" "7.2.3"
-    "@storybook/docs-tools" "7.2.3"
+"@storybook/angular@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/angular/-/angular-7.4.0.tgz#f377eb64d615aa6eb8f19e491885f454b37912b5"
+  integrity sha512-P2JXXH6QDx/lowojWYfmZK34464zmHsrjGMFG+YR03PBMEQ7GIwPV19DhLgtC90+5Z9t39tRUgi+aTvUxPGmDQ==
+  dependencies:
+    "@storybook/builder-webpack5" "7.4.0"
+    "@storybook/cli" "7.4.0"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/core-events" "7.4.0"
+    "@storybook/core-server" "7.4.0"
+    "@storybook/core-webpack" "7.4.0"
+    "@storybook/docs-tools" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/telemetry" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/telemetry" "7.4.0"
+    "@storybook/types" "7.4.0"
     "@types/node" "^16.0.0"
     "@types/react" "^16.14.34"
     "@types/react-dom" "^16.9.14"
@@ -3628,7 +3702,7 @@
     find-up "^5.0.0"
     read-pkg-up "^7.0.1"
     semver "^7.3.7"
-    telejson "^7.0.3"
+    telejson "^7.2.0"
     ts-dedent "^2.0.0"
     tsconfig-paths-webpack-plugin "^4.0.1"
     util-deprecate "^1.0.2"
@@ -3642,22 +3716,22 @@
     "@storybook/client-logger" "7.1.1"
     "@storybook/manager-api" "7.1.1"
 
-"@storybook/blocks@7.2.3", "@storybook/blocks@^7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.2.3.tgz#8dede4bae5520e2e0b6e2483a4f040330c215b1a"
-  integrity sha512-1s1BCWWxuK5gOpWPvSESULItwYtA1yQRjXJHWCDbjuDrm5DK+fQ2Asr4xl4MBzKfczw+7V8nsuEsTwybDS7/3A==
+"@storybook/blocks@7.4.0", "@storybook/blocks@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.4.0.tgz#6a9240e2b58bac99a998c559d719be7ff4e19dcc"
+  integrity sha512-YQznNjJm+l32fCfPxrZso9+MbcyG0pWZSpx3RKI1+pxDMsAs4mbXsIw4//jKfjoDP/6/Cz/FJcSx8LT7i4BJ2w==
   dependencies:
-    "@storybook/channels" "7.2.3"
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+    "@storybook/channels" "7.4.0"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/components" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/csf" "^0.1.0"
-    "@storybook/docs-tools" "7.2.3"
+    "@storybook/docs-tools" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/theming" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/manager-api" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/theming" "7.4.0"
+    "@storybook/types" "7.4.0"
     "@types/lodash" "^4.14.167"
     color-convert "^2.0.1"
     dequal "^2.0.2"
@@ -3666,20 +3740,20 @@
     memoizerific "^1.11.3"
     polished "^4.2.2"
     react-colorful "^5.1.2"
-    telejson "^7.0.3"
+    telejson "^7.2.0"
     tocbot "^4.20.1"
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/builder-manager@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.2.3.tgz#15059d9f035acde703ff67553cc131d441693ae5"
-  integrity sha512-ywAFjqJ1gHEW6vj52r1syz+PaUc6OLN65IQiWhrhfzYdXdGiIdnWSOQOIh6LSrB6p9/M21/JFtWHCKtaEKXC9w==
+"@storybook/builder-manager@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.4.0.tgz#80cf72ea83f88e16d585c5bdb40d563874c7d8ca"
+  integrity sha512-4fuxVzBIBbZh2aVBizSOU5EJ8b74IhR6x2TAZjifZZf5Gdxgfgio8sAyrrd/C78vrFOFhFEgmQhMqZRuCLHxvQ==
   dependencies:
     "@fal-works/esbuild-plugin-global-externals" "^2.1.2"
-    "@storybook/core-common" "7.2.3"
-    "@storybook/manager" "7.2.3"
-    "@storybook/node-logger" "7.2.3"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/manager" "7.4.0"
+    "@storybook/node-logger" "7.4.0"
     "@types/ejs" "^3.1.1"
     "@types/find-cache-dir" "^3.2.1"
     "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10"
@@ -3693,28 +3767,20 @@
     process "^0.11.10"
     util "^0.12.4"
 
-"@storybook/builder-webpack5@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-7.2.3.tgz#2b9a053ff49426a5e49624e0727b22748823f431"
-  integrity sha512-q3XsgmgUQa+9bViPj8whMYvMehSV4osCNEMWytAOqYsaPNecgg7FW5MqDIFTPqi7DEy0Kbt5Nhldo8HmluMAcA==
-  dependencies:
-    "@babel/core" "^7.22.9"
-    "@storybook/addons" "7.2.3"
-    "@storybook/channels" "7.2.3"
-    "@storybook/client-api" "7.2.3"
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/components" "7.2.3"
-    "@storybook/core-common" "7.2.3"
-    "@storybook/core-events" "7.2.3"
-    "@storybook/core-webpack" "7.2.3"
-    "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.2.3"
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/preview" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/router" "7.2.3"
-    "@storybook/store" "7.2.3"
-    "@storybook/theming" "7.2.3"
+"@storybook/builder-webpack5@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-7.4.0.tgz#c9a4ee5a6424dd70f5b35f057de24afd268a5fd3"
+  integrity sha512-CYeXppqGACzDUpLCFvWvwD7IjN7VNi7+nwQ1uRNgW2NgBMOIldZe+gcTXcc0BuHyIitU5/vvquYM0qjis05LYw==
+  dependencies:
+    "@babel/core" "^7.22.0"
+    "@storybook/channels" "7.4.0"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/core-events" "7.4.0"
+    "@storybook/core-webpack" "7.4.0"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/preview" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
     "@swc/core" "^1.3.49"
     "@types/node" "^16.0.0"
     "@types/semver" "^7.3.4"
@@ -3768,22 +3834,34 @@
     telejson "^7.0.3"
     tiny-invariant "^1.3.1"
 
-"@storybook/cli@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.2.3.tgz#4398bd446a471a48e2ad010f6e761fb267374ef8"
-  integrity sha512-HG06iQxX7QXmBKgoS76Vm9mx6Y8zA9jJCdx/OqL1KbFs8Kt+n+z+gbqkAHpFs35va8inQ6zZTDx0vOnTakGmjQ==
+"@storybook/channels@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.4.0.tgz#4ab69fce09c0fe7299f1595628b3de10b0fdcd8f"
+  integrity sha512-/1CU0s3npFumzVHLGeubSyPs21O3jNqtSppOjSB9iDTyV2GtQrjh5ntVwebfKpCkUSitx3x7TkCb9dylpEZ8+w==
+  dependencies:
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/core-events" "7.4.0"
+    "@storybook/global" "^5.0.0"
+    qs "^6.10.0"
+    telejson "^7.2.0"
+    tiny-invariant "^1.3.1"
+
+"@storybook/cli@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.4.0.tgz#a50f435d55e3056547c983c0bfacb2eed63cd692"
+  integrity sha512-yn27cn3LzhTqpEVX6CzUz13KTJ3jPLA2eM4bO1t7SYUqpDlzw3lET9DIcYIaUAIiL+0r2Js3jW2BsyN/5KmO5w==
   dependencies:
     "@babel/core" "^7.22.9"
     "@babel/preset-env" "^7.22.9"
     "@babel/types" "^7.22.5"
     "@ndelangen/get-tarball" "^3.0.7"
-    "@storybook/codemod" "7.2.3"
-    "@storybook/core-common" "7.2.3"
-    "@storybook/core-server" "7.2.3"
-    "@storybook/csf-tools" "7.2.3"
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/telemetry" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/codemod" "7.4.0"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/core-server" "7.4.0"
+    "@storybook/csf-tools" "7.4.0"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/telemetry" "7.4.0"
+    "@storybook/types" "7.4.0"
     "@types/semver" "^7.3.4"
     "@yarnpkg/fslib" "2.10.3"
     "@yarnpkg/libzip" "2.3.0"
@@ -3814,14 +3892,6 @@
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/client-api@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-7.2.3.tgz#030f45b6c58795cdf2c8e8879e5b9838eeeec537"
-  integrity sha512-t7OxpaifC4eJABz0LhWcnKPIY0Qw6z+aKGQlOoKZQ9R+0cXc5jpy/UUCpXYv+P/qxmdvP8MMnJSTD1i5fCfiGw==
-  dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-
 "@storybook/client-logger@7.1.1":
   version "7.1.1"
   resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.1.1.tgz#62b7760ab05977f831f1831d5842ab4a4501c585"
@@ -3836,18 +3906,25 @@
   dependencies:
     "@storybook/global" "^5.0.0"
 
-"@storybook/codemod@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.2.3.tgz#8a1795445d5c04b4086159a7eccd1181cdf6ecd1"
-  integrity sha512-ky6EJU7Wb6AI4qN2dVLKCzuSC5vqxaeQVocFbieNrNesgSuSRqjtJXryKNu1R3UXW/05LDSUb6Qb+Q6NPBZSHg==
+"@storybook/client-logger@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.4.0.tgz#f90aa5ee29d540074f6e4890bae71836ac87273c"
+  integrity sha512-4pBnf7+df1wXEVcF1civqxbrtccGGHQkfWQkJo49s53RXvF7SRTcif6XTx0V3cQV0v7I1C5mmLm0LNlmjPRP1Q==
+  dependencies:
+    "@storybook/global" "^5.0.0"
+
+"@storybook/codemod@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.4.0.tgz#c23ef80253b5a5998c83e49e74bd6ff62683d27a"
+  integrity sha512-XqNhv5bec+L7TJ5tXdsMalmJazwaFMVVxoNlnb0f9zKhovAEF2F6hl6+Pnd2avRomH9+1q7EM+GwrTCAvzAfzg==
   dependencies:
     "@babel/core" "^7.22.9"
     "@babel/preset-env" "^7.22.9"
     "@babel/types" "^7.22.5"
     "@storybook/csf" "^0.1.0"
-    "@storybook/csf-tools" "7.2.3"
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/csf-tools" "7.4.0"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/types" "7.4.0"
     "@types/cross-spawn" "^6.0.2"
     cross-spawn "^7.0.3"
     globby "^11.0.2"
@@ -3856,29 +3933,29 @@
     prettier "^2.8.0"
     recast "^0.23.1"
 
-"@storybook/components@7.2.3", "@storybook/components@^7.0.0":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.2.3.tgz#5ea7da21ae7ca478902cd64a4e44d19a369aee87"
-  integrity sha512-w3c5DXdwbUj/ecyM8y0SqHObRZiDpAs+SxDeUzs9GJBD25qQZoxKhLAcsMk6F+N+2uPBtimwM4l8RJSo0oZOZg==
+"@storybook/components@7.4.0", "@storybook/components@^7.0.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.4.0.tgz#0cc83ff89dd9cdcde3eaeeb7b3fbcf2036ba6fb8"
+  integrity sha512-GGnQrI4NXwri/PqNjhO1vNv4tC7RBjY87ce9WHBq1ueat3kBakdqV97NzScoldXarkkKK6grBqmhw9jE5PfzhQ==
   dependencies:
     "@radix-ui/react-select" "^1.2.2"
-    "@storybook/client-logger" "7.2.3"
+    "@radix-ui/react-toolbar" "^1.0.4"
+    "@storybook/client-logger" "7.4.0"
     "@storybook/csf" "^0.1.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/icons" "^1.1.0"
-    "@storybook/theming" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/theming" "7.4.0"
+    "@storybook/types" "7.4.0"
     memoizerific "^1.11.3"
     use-resize-observer "^9.1.0"
     util-deprecate "^1.0.2"
 
-"@storybook/core-common@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.2.3.tgz#a8ec9ef1cf46e3a7896efc2b306049cd969fbde4"
-  integrity sha512-aBL4MGkn/PT57x00OWmVNwRCsJEb4xYvvYOYq5CGtIBCXAn0yo1p3GT9/Z0jAYT5c3A0nvCIM0ynmgML7fiFAg==
+"@storybook/core-common@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.4.0.tgz#da71afd79a12cfb5565351f184f6797214a5da79"
+  integrity sha512-QKrBL46ZFdfTjlZE3f7b59Q5+frOHWIJ64sC9BZ2PHkZkGjFeYRDdJJ6EHLYBb+nToynl33dYN1GQz+hQn2vww==
   dependencies:
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/types" "7.4.0"
     "@types/find-cache-dir" "^3.2.1"
     "@types/node" "^16.0.0"
     "@types/node-fetch" "^2.6.4"
@@ -3905,31 +3982,38 @@
   resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.1.1.tgz#c2c30085bd254a27cdbd266a8e7755876abf9361"
   integrity sha512-P5iI4zvCJo85de/sghglEHFK/GGkWAQQKzRFrz9kbVBX5LNaosfD7IYHIz/6ZWNPzxWR+RBOKcrRUfcArL4Njg==
 
-"@storybook/core-events@7.2.3", "@storybook/core-events@^7.0.0":
+"@storybook/core-events@7.2.3":
   version "7.2.3"
   resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.2.3.tgz#ad1badbfb468ca97237370fc7e7a8dc6a5a1922c"
   integrity sha512-WWpdORiEvOl3/71xFghfEwid7ptgm9U6OxoJm8hU9e5xNuj80k2B+t4sv/iVnz872UuI5xXJqamzCqGVTblPlg==
 
-"@storybook/core-server@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.2.3.tgz#0c1cc2a779088c5621e0ae58b5efb55857261af5"
-  integrity sha512-e+PPbP9XWHmJNBRpbDFRn40lv7QiMTA0jhggp9bPgdBUIcRU1qh4yVP/nsWhKMMGBL4aAZUfK0dllWS0rvhV8g==
+"@storybook/core-events@7.4.0", "@storybook/core-events@^7.0.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.4.0.tgz#0d50d254d65a678065d5906ac1dcab64396f2f6a"
+  integrity sha512-JavEo4dw7TQdF5pSKjk4RtqLgsG2R/eWRI8vZ3ANKa0ploGAnQR/eMTfSxf6TUH3ElBWLJhi+lvUCkKXPQD+dw==
+  dependencies:
+    ts-dedent "^2.0.0"
+
+"@storybook/core-server@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.4.0.tgz#9e624789ff30d9538ac014b038c48fac0ebb7272"
+  integrity sha512-AcbfXatHVx1by4R2CiPIMgjQlOL3sUbVarkhmgUcL0AWT0zC0SCQWUZdo22en+jZhAraazgXyLGNCVP7A+6Tqg==
   dependencies:
     "@aw-web-design/x-default-browser" "1.4.126"
     "@discoveryjs/json-ext" "^0.5.3"
-    "@storybook/builder-manager" "7.2.3"
-    "@storybook/channels" "7.2.3"
-    "@storybook/core-common" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+    "@storybook/builder-manager" "7.4.0"
+    "@storybook/channels" "7.4.0"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/csf" "^0.1.0"
-    "@storybook/csf-tools" "7.2.3"
+    "@storybook/csf-tools" "7.4.0"
     "@storybook/docs-mdx" "^0.1.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager" "7.2.3"
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/telemetry" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/manager" "7.4.0"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/telemetry" "7.4.0"
+    "@storybook/types" "7.4.0"
     "@types/detect-port" "^1.3.0"
     "@types/node" "^16.0.0"
     "@types/pretty-hrtime" "^1.0.0"
@@ -3950,7 +4034,7 @@
     read-pkg-up "^7.0.1"
     semver "^7.3.7"
     serve-favicon "^2.5.0"
-    telejson "^7.0.3"
+    telejson "^7.2.0"
     tiny-invariant "^1.3.1"
     ts-dedent "^2.0.0"
     util "^0.12.4"
@@ -3958,36 +4042,36 @@
     watchpack "^2.2.0"
     ws "^8.2.3"
 
-"@storybook/core-webpack@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-7.2.3.tgz#96ee51958dfa7bcd3a95cc72df36654ac2125548"
-  integrity sha512-KNMwf9uVlLBYilZhP6nmw9lEQw/H/DxYlBulso9lI9AOHcDuHV/nGD+Y2Xs/tdhanOusYo2bfCkzmuz2fptL3A==
+"@storybook/core-webpack@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-7.4.0.tgz#0ff348a1590e9b8d425e9aec1ed850e3cfa3e75c"
+  integrity sha512-1zxzJjRbkcjl++OjYBVTDi0V/yO22Kz3ciPASTvXwrg0fXTXgxwxhJBmgOI4r17oY0kOWnJ1RDsmd95NLGAbGw==
   dependencies:
-    "@storybook/core-common" "7.2.3"
-    "@storybook/node-logger" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/node-logger" "7.4.0"
+    "@storybook/types" "7.4.0"
     "@types/node" "^16.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/csf-plugin@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.2.3.tgz#c826f6c535c63d47f2d50cd0a801afd10d362a73"
-  integrity sha512-qi2S0oh2I8kJIFwjpA/Cf6ZeKuE2CuxNtI5JdHcTBILLuTmAj0/SEn+IAexsLlhhcXN9rpFcdYD1G1o4SnrMWw==
+"@storybook/csf-plugin@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.4.0.tgz#f25ebb30affbc9b4dd61b1fdb12c4a4257a275dc"
+  integrity sha512-X1L3l/dpz2UYjCEQlFLkW7w1A13pmzDZpJ0lotkV79PALlakMXBeoX3I2E0VMjJATV8wC9RSj56COBAs6HsPeg==
   dependencies:
-    "@storybook/csf-tools" "7.2.3"
+    "@storybook/csf-tools" "7.4.0"
     unplugin "^1.3.1"
 
-"@storybook/csf-tools@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.2.3.tgz#953c34646c1bff6627fe9d0913267759bbf018c5"
-  integrity sha512-OitxpUBbQgs5EguqHCam0j27j1rpBj7cpFyS4zygc/bNaoxkNk7dRUP0JI9RoUa1a162v6koLx9UZhl9Cbsf1Q==
+"@storybook/csf-tools@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.4.0.tgz#db5c97ee603da9a68511192d701534e356f9e592"
+  integrity sha512-bKyOmWPyvT50Neq2wCRr2PmVGLVVm6pOw8WL5t5jueD8sRRzo9QdfhEkqmuSyqdsBdt3SiJKL5oA6dqY5Vl9ww==
   dependencies:
     "@babel/generator" "^7.22.9"
     "@babel/parser" "^7.22.7"
     "@babel/traverse" "^7.22.8"
     "@babel/types" "^7.22.5"
     "@storybook/csf" "^0.1.0"
-    "@storybook/types" "7.2.3"
+    "@storybook/types" "7.4.0"
     fs-extra "^11.1.0"
     recast "^0.23.1"
     ts-dedent "^2.0.0"
@@ -4004,14 +4088,14 @@
   resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz#33ba0e39d1461caf048b57db354b2cc410705316"
   integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==
 
-"@storybook/docs-tools@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.2.3.tgz#ffad241c6c36d4afd39fc3ebf15445bb9af12fab"
-  integrity sha512-wKuzKaEUzehAw6Y1aJcAK8iSchLPN9J6hCMjfPSjVhyt9nEbcHKxlc/7BADL0hPL0/yl6eZZcLvWZLA7dmOB2Q==
+"@storybook/docs-tools@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.4.0.tgz#d9109c9c8ec4e90bb24d1acfcc16834a252618eb"
+  integrity sha512-DzXmt4JorAOePoS+sjQznf8jLPI9D5mdB1eSXjfvmGBQyyehKTZv5+TXuxYvT3iPN4rW4OPrIrQCSIrbULFdwA==
   dependencies:
-    "@storybook/core-common" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
-    "@storybook/types" "7.2.3"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/preview-api" "7.4.0"
+    "@storybook/types" "7.4.0"
     "@types/doctrine" "^0.0.3"
     doctrine "^3.0.0"
     lodash "^4.17.21"
@@ -4021,21 +4105,16 @@
   resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed"
   integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==
 
-"@storybook/icons@^1.1.0":
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-1.1.6.tgz#22536cde6dd85fa259608fa8bd7b9eeca2a8e688"
-  integrity sha512-co5gDCYPojRAc5lRMnWxbjrR1V37/rTmAo9Vok4a1hDpHZIwkGTWesdzvYivSQXYFxZTpxdM1b5K3W87brnahw==
-
-"@storybook/instrumenter@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-7.2.3.tgz#1e8f130c388ad93121ca6888c14b6aa395f086c7"
-  integrity sha512-OimpXBKrwuWu17eSE23c7GLkGRq5PpVyH4EetwQT+nuhsUM+MeOWf1+LnT7FgLkcpH50T46sTeD+bgYZo1/s2Q==
+"@storybook/instrumenter@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-7.4.0.tgz#197335f25a45ecdc2c5f458bff1c2481d7ffe08c"
+  integrity sha512-jZKxLK0lGKxY8LEul6GP7s+PDlNuXT4JU6MnPY9+SVSo23lP0pAOxo/ojV8WTLf48tcoyL3ztSfbYhxnaJvBfw==
   dependencies:
-    "@storybook/channels" "7.2.3"
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/core-events" "7.2.3"
+    "@storybook/channels" "7.4.0"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/core-events" "7.4.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/preview-api" "7.2.3"
+    "@storybook/preview-api" "7.4.0"
 
 "@storybook/manager-api@7.1.1":
   version "7.1.1"
@@ -4079,25 +4158,46 @@
     telejson "^7.0.3"
     ts-dedent "^2.0.0"
 
-"@storybook/manager@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.2.3.tgz#3176b1c5ec08c0e1e37b1840f741ad9bd488aaab"
-  integrity sha512-i8HfB00GU7Mlua2HXjUp5phVdcTlHE9iwLJc217oCWnQ5377J7VW4ADMDYNLN/CzfAwwZZSVLCRc1wRG1KblUQ==
+"@storybook/manager-api@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.4.0.tgz#aee0153df1583459b7e1e64e1d8c46fb49a584c8"
+  integrity sha512-sBfkkt0eZGTozeKrbzMtWLEOQrgqdk24OUJlkc2IDaucR1CBNjoCMjNeYg7cLDw0rXE8W3W3AdWtJnfsUbLMAQ==
+  dependencies:
+    "@storybook/channels" "7.4.0"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/core-events" "7.4.0"
+    "@storybook/csf" "^0.1.0"
+    "@storybook/global" "^5.0.0"
+    "@storybook/router" "7.4.0"
+    "@storybook/theming" "7.4.0"
+    "@storybook/types" "7.4.0"
+    dequal "^2.0.2"
+    lodash "^4.17.21"
+    memoizerific "^1.11.3"
+    semver "^7.3.7"
+    store2 "^2.14.2"
+    telejson "^7.2.0"
+    ts-dedent "^2.0.0"
+
+"@storybook/manager@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.4.0.tgz#21a825c9145f56ca6c38d3e9d3546b311a6db14e"
+  integrity sha512-uOSdPBEBKg8WORUZ5HKHb4KnKcTyA5j5Q8MWy/NBaRd22JR3fQkZiKuHer9WJIOQTU+fb6KDmzhZbCTKg5Euog==
 
 "@storybook/mdx2-csf@^1.0.0":
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5"
   integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==
 
-"@storybook/node-logger@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.2.3.tgz#42efba67bd4dceba71988e1c1890e8fae8bb1232"
-  integrity sha512-7oUDf3kNtUXn04tMscvUVb9joYT11vPN25OAoCoLVP/qvED1EdDmAaNC2MzBzCatzGmto67aGbY5F4gjC+sY1w==
+"@storybook/node-logger@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.4.0.tgz#808ed8a63e3bc2f97a2d276b4e8ddaa72b79deb0"
+  integrity sha512-tWSWkYyAvp6SxjIBaTklg29avzv/3Lv4c0dOG2o5tz79PyZkq9v6sQtwLLoI8EJA9Mo8Z08vaJp8NZyDQ9RCuA==
 
-"@storybook/postinstall@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.2.3.tgz#d374bc77d873c604e02814204e3fecf4c04073a6"
-  integrity sha512-PHjlekGZmkAc/sAOm+KR+FRmv0v9GO1VHSGk+aw6Hj0DPQk7LyGdfpwbsVmGSgohIaJQNA8GUGlUSxU5bFLdPQ==
+"@storybook/postinstall@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.4.0.tgz#81f3bef31b566e26d616f9c3ce567f07ff143cc7"
+  integrity sha512-ZVBZggqkuj7ysfuHSCd/J7ovWV06zY9uWf+VU+Zw7ZeojDT8QHFrCurPsN7D9679j9vRU1/kSzqvAiStALS33g==
 
 "@storybook/preview-api@7.2.3":
   version "7.2.3"
@@ -4119,15 +4219,35 @@
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/preview@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.2.3.tgz#ee1a27f0d087298c9bc22ce159f8ecbbfec36f95"
-  integrity sha512-ziBwfI4xYG132SC7CqxvveAzjFOgVC17xNBNT56rjq7KlkJRrqfb4yfC1dzLgf0spKWzxGteuA61qeBA83foAg==
+"@storybook/preview-api@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.4.0.tgz#46818910545735bef43965651eef380a6f481f4b"
+  integrity sha512-ndXO0Nx+eE7ktVE4EqHpQZ0guX7yYBdruDdJ7B739C0+OoPWsJN7jAzUqq0NXaBcYrdaU5gTy+KnWJUt8R+OyA==
+  dependencies:
+    "@storybook/channels" "7.4.0"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/core-events" "7.4.0"
+    "@storybook/csf" "^0.1.0"
+    "@storybook/global" "^5.0.0"
+    "@storybook/types" "7.4.0"
+    "@types/qs" "^6.9.5"
+    dequal "^2.0.2"
+    lodash "^4.17.21"
+    memoizerific "^1.11.3"
+    qs "^6.10.0"
+    synchronous-promise "^2.0.15"
+    ts-dedent "^2.0.0"
+    util-deprecate "^1.0.2"
 
-"@storybook/react-dom-shim@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.2.3.tgz#ce0c84922adeb0e3616c3f70a968d8312f38c07d"
-  integrity sha512-a7pcW0xZWs7uCztvGVXDMTIgYTCgPEnWvmBXgVjk3cE7FF73+C4x8Fozie4QBS2+vQnFvJMPL6Vz1zBsPcJDkg==
+"@storybook/preview@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.4.0.tgz#a58756ac9b12ea21f203032eca47991946257b53"
+  integrity sha512-R4LMTvUrVAbcUetRbAXpY3frkwD0eysqHrByiR73040+ngzDwtZOBAy0JfO3jw3WrWv2dn3kWlao5aEwVc9Exw==
+
+"@storybook/react-dom-shim@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.4.0.tgz#12f137f00f2a209cb49a4084475dd93f23e0678a"
+  integrity sha512-TLpb8a2hnWJoRLqoXpMADh82BFfRZll6JI2Waf1FjnvJ4SF9eS0zBbxybrjW3lFAHWy2XJi+rwcK8FiPj0iBoQ==
 
 "@storybook/router@7.1.1":
   version "7.1.1"
@@ -4147,22 +4267,23 @@
     memoizerific "^1.11.3"
     qs "^6.10.0"
 
-"@storybook/store@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/store/-/store-7.2.3.tgz#ff33a86b609dd64751ac813157ff796d8c34f9ec"
-  integrity sha512-gTuu5gXJ3Fs4KLRJrm32LOHngTycM9gmw9F5kGKb1h6kotFASnCPNu2h1oVIJCz06BkzyGQqSKONAQTOJQhyDQ==
+"@storybook/router@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.4.0.tgz#627f824bfd9cc4653ee84581fc09373ab1463336"
+  integrity sha512-IATdtFL5C3ryjNQSwaQfrmiOZiVFoVNMevMoBGDC++g0laSW40TGiNK6fUjUDBKuOgbuDt4Svfbl29k21GefEg==
   dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/preview-api" "7.2.3"
+    "@storybook/client-logger" "7.4.0"
+    memoizerific "^1.11.3"
+    qs "^6.10.0"
 
-"@storybook/telemetry@7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.2.3.tgz#80ef039f516a722aaf7e52a3401d67fd8270634a"
-  integrity sha512-cqsLkPgwvvW3oZD5DuXFovfDYJPbqxwH1OI2SzF3lLP1NBQS+ufhp1PinfyrWQ2lTSuf9aFroBbr5GwpLHCwsg==
+"@storybook/telemetry@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.4.0.tgz#04e47a2d9decf7671273130a9af9d231a8c3d2e8"
+  integrity sha512-oxCB3kIbpiDWuXEtQhk/j6t1/h0KKWAuvxmcwGPxwhEvj/uNtoM+f1qhoDID9waxNo4AccU9Px+1ZJQ+2ejcDg==
   dependencies:
-    "@storybook/client-logger" "7.2.3"
-    "@storybook/core-common" "7.2.3"
-    "@storybook/csf-tools" "7.2.3"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/core-common" "7.4.0"
+    "@storybook/csf-tools" "7.4.0"
     chalk "^4.1.0"
     detect-package-manager "^2.0.1"
     fetch-retry "^5.0.2"
@@ -4179,7 +4300,7 @@
     "@storybook/global" "^5.0.0"
     memoizerific "^1.11.3"
 
-"@storybook/theming@7.2.3", "@storybook/theming@^7.0.0":
+"@storybook/theming@7.2.3":
   version "7.2.3"
   resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.2.3.tgz#f16f0c7b6db1245a53bfe3452b05d25dabbd4858"
   integrity sha512-rSvBGAvuN/VdhcHh6LdeQJoIGf8fZuvY+57IYt7Vc04bASyjDl41hMRkjIB1Sbcfj7gF+OrH6G8Fc4PvvT3gyQ==
@@ -4189,6 +4310,16 @@
     "@storybook/global" "^5.0.0"
     memoizerific "^1.11.3"
 
+"@storybook/theming@7.4.0", "@storybook/theming@^7.0.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.4.0.tgz#f5d9f8f55c41e08c0f50b57d9fb0e159ed595274"
+  integrity sha512-eLjEf6G3cqlegfutF/iUrec9LrUjKDj7K4ZhGdACWrf7bQcODs99EK62e9/d8GNKr4b+QMSEuM6XNGaqdPnuzQ==
+  dependencies:
+    "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
+    "@storybook/client-logger" "7.4.0"
+    "@storybook/global" "^5.0.0"
+    memoizerific "^1.11.3"
+
 "@storybook/types@7.1.1":
   version "7.1.1"
   resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.1.1.tgz#610ffeae955a2f4e8935b9a1d677430d6374ccea"
@@ -4209,6 +4340,17 @@
     "@types/express" "^4.7.0"
     file-system-cache "2.3.0"
 
+"@storybook/types@7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.4.0.tgz#71ce550d4d469f6aaf9777fc7432db9fb67f53f9"
+  integrity sha512-XyzYkmeklywxvElPrIWLczi/PWtEdgTL6ToT3++FVxptsC2LZKS3Ue+sBcQ9xRZhkRemw4HQHwed5EW3dO8yUg==
+  dependencies:
+    "@storybook/channels" "7.4.0"
+    "@types/babel__core" "^7.0.0"
+    "@types/express" "^4.7.0"
+    "@types/react" "^16.14.34"
+    file-system-cache "2.3.0"
+
 "@swc/core-darwin-arm64@1.3.71":
   version "1.3.71"
   resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.71.tgz#3cc2bfa7e3f89ec18987af863b2260a5340ff0a7"
@@ -4601,10 +4743,10 @@
   dependencies:
     "@types/istanbul-lib-report" "*"
 
-"@types/jest@29.5.3":
-  version "29.5.3"
-  resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.3.tgz#7a35dc0044ffb8b56325c6802a4781a626b05777"
-  integrity sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==
+"@types/jest@29.5.4":
+  version "29.5.4"
+  resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.4.tgz#9d0a16edaa009a71e6a71a999acd582514dab566"
+  integrity sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==
   dependencies:
     expect "^29.0.0"
     pretty-format "^29.0.0"
@@ -4685,10 +4827,10 @@
     "@types/node" "*"
     form-data "^3.0.0"
 
-"@types/node@*", "@types/node@^20.5.0":
-  version "20.5.0"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.0.tgz#7fc8636d5f1aaa3b21e6245e97d56b7f56702313"
-  integrity sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==
+"@types/node@*", "@types/node@^20.5.7":
+  version "20.5.7"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.7.tgz#4b8ecac87fbefbc92f431d09c30e176fc0a7c377"
+  integrity sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==
 
 "@types/node@20.4.7":
   version "20.4.7"
@@ -5795,15 +5937,15 @@ babel-core@^7.0.0-bridge.0:
   resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
   integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
 
-babel-jest@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.2.tgz#cada0a59e07f5acaeb11cbae7e3ba92aec9c1126"
-  integrity sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==
+babel-jest@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.4.tgz#98dbc45d1c93319c82a8ab4a478b670655dd2585"
+  integrity sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==
   dependencies:
-    "@jest/transform" "^29.6.2"
+    "@jest/transform" "^29.6.4"
     "@types/babel__core" "^7.1.14"
     babel-plugin-istanbul "^6.1.1"
-    babel-preset-jest "^29.5.0"
+    babel-preset-jest "^29.6.3"
     chalk "^4.0.0"
     graceful-fs "^4.2.9"
     slash "^3.0.0"
@@ -5827,10 +5969,10 @@ babel-plugin-istanbul@6.1.1, babel-plugin-istanbul@^6.1.1:
     istanbul-lib-instrument "^5.0.4"
     test-exclude "^6.0.0"
 
-babel-plugin-jest-hoist@^29.5.0:
-  version "29.5.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a"
-  integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==
+babel-plugin-jest-hoist@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626"
+  integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==
   dependencies:
     "@babel/template" "^7.3.3"
     "@babel/types" "^7.3.3"
@@ -5884,12 +6026,12 @@ babel-preset-current-node-syntax@^1.0.0:
     "@babel/plugin-syntax-optional-chaining" "^7.8.3"
     "@babel/plugin-syntax-top-level-await" "^7.8.3"
 
-babel-preset-jest@^29.5.0:
-  version "29.5.0"
-  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2"
-  integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==
+babel-preset-jest@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c"
+  integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==
   dependencies:
-    babel-plugin-jest-hoist "^29.5.0"
+    babel-plugin-jest-hoist "^29.6.3"
     babel-preset-current-node-syntax "^1.0.0"
 
 bach@^1.0.0:
@@ -6255,6 +6397,24 @@ cacache@^17.0.0:
     tar "^6.1.11"
     unique-filename "^3.0.0"
 
+cacache@^18.0.0:
+  version "18.0.0"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.0.tgz#17a9ecd6e1be2564ebe6cdca5f7cfed2bfeb6ddc"
+  integrity sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w==
+  dependencies:
+    "@npmcli/fs" "^3.1.0"
+    fs-minipass "^3.0.0"
+    glob "^10.2.2"
+    lru-cache "^10.0.1"
+    minipass "^7.0.3"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    p-map "^4.0.0"
+    ssri "^10.0.0"
+    tar "^6.1.11"
+    unique-filename "^3.0.0"
+
 cache-base@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -6345,7 +6505,7 @@ ccount@^2.0.0:
   resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
   integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
 
-chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1:
+chalk@2.4.2, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
   version "2.4.2"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
   integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -7591,10 +7751,10 @@ dfa@^1.2.0:
   resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657"
   integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==
 
-diff-sequences@^29.4.3:
-  version "29.4.3"
-  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2"
-  integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==
+diff-sequences@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
+  integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
 
 diff@^4.0.1:
   version "4.0.2"
@@ -8616,15 +8776,15 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
   integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
 
-eslint@^8.47.0:
-  version "8.47.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.47.0.tgz#c95f9b935463fb4fad7005e626c7621052e90806"
-  integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==
+eslint@^8.48.0:
+  version "8.48.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155"
+  integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.6.1"
     "@eslint/eslintrc" "^2.1.2"
-    "@eslint/js" "^8.47.0"
+    "@eslint/js" "8.48.0"
     "@humanwhocodes/config-array" "^0.11.10"
     "@humanwhocodes/module-importer" "^1.0.1"
     "@nodelib/fs.walk" "^1.2.8"
@@ -8856,17 +9016,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
   dependencies:
     homedir-polyfill "^1.0.1"
 
-expect@^29.0.0, expect@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.2.tgz#7b08e83eba18ddc4a2cf62b5f2d1918f5cd84521"
-  integrity sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==
+expect@^29.0.0, expect@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.4.tgz#a6e6f66d4613717859b2fe3da98a739437b6f4b8"
+  integrity sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==
   dependencies:
-    "@jest/expect-utils" "^29.6.2"
-    "@types/node" "*"
-    jest-get-type "^29.4.3"
-    jest-matcher-utils "^29.6.2"
-    jest-message-util "^29.6.2"
-    jest-util "^29.6.2"
+    "@jest/expect-utils" "^29.6.4"
+    jest-get-type "^29.6.3"
+    jest-matcher-utils "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-util "^29.6.3"
 
 exponential-backoff@^3.1.1:
   version "3.1.1"
@@ -9002,7 +9161,7 @@ fast-diff@^1.1.2, fast-diff@^1.2.0:
   resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0"
   integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==
 
-fast-glob@3.3.1, fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0:
+fast-glob@3.3.1, fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1:
   version "3.3.1"
   resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
   integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
@@ -11138,7 +11297,7 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
   resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
   integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
 
-istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0:
+istanbul-lib-instrument@^5.0.4:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d"
   integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==
@@ -11149,6 +11308,17 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0:
     istanbul-lib-coverage "^3.2.0"
     semver "^6.3.0"
 
+istanbul-lib-instrument@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz#7a8af094cbfff1d5bb280f62ce043695ae8dd5b8"
+  integrity sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==
+  dependencies:
+    "@babel/core" "^7.12.3"
+    "@babel/parser" "^7.14.7"
+    "@istanbuljs/schema" "^0.1.2"
+    istanbul-lib-coverage "^3.2.0"
+    semver "^7.5.4"
+
 istanbul-lib-report@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d"
@@ -11194,113 +11364,114 @@ jake@^10.8.5:
     filelist "^1.0.4"
     minimatch "^3.1.2"
 
-jest-changed-files@^29.5.0:
-  version "29.5.0"
-  resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e"
-  integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==
+jest-changed-files@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.6.3.tgz#97cfdc93f74fb8af2a1acb0b78f836f1fb40c449"
+  integrity sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==
   dependencies:
     execa "^5.0.0"
+    jest-util "^29.6.3"
     p-limit "^3.1.0"
 
-jest-circus@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.2.tgz#1e6ffca60151ac66cad63fce34f443f6b5bb4258"
-  integrity sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==
+jest-circus@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.4.tgz#f074c8d795e0cc0f2ebf0705086b1be6a9a8722f"
+  integrity sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==
   dependencies:
-    "@jest/environment" "^29.6.2"
-    "@jest/expect" "^29.6.2"
-    "@jest/test-result" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/environment" "^29.6.4"
+    "@jest/expect" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
     chalk "^4.0.0"
     co "^4.6.0"
     dedent "^1.0.0"
     is-generator-fn "^2.0.0"
-    jest-each "^29.6.2"
-    jest-matcher-utils "^29.6.2"
-    jest-message-util "^29.6.2"
-    jest-runtime "^29.6.2"
-    jest-snapshot "^29.6.2"
-    jest-util "^29.6.2"
+    jest-each "^29.6.3"
+    jest-matcher-utils "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-runtime "^29.6.4"
+    jest-snapshot "^29.6.4"
+    jest-util "^29.6.3"
     p-limit "^3.1.0"
-    pretty-format "^29.6.2"
+    pretty-format "^29.6.3"
     pure-rand "^6.0.0"
     slash "^3.0.0"
     stack-utils "^2.0.3"
 
-jest-cli@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.2.tgz#edb381763398d1a292cd1b636a98bfa5644b8fda"
-  integrity sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==
+jest-cli@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.4.tgz#ad52f2dfa1b0291de7ec7f8d7c81ac435521ede0"
+  integrity sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==
   dependencies:
-    "@jest/core" "^29.6.2"
-    "@jest/test-result" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/core" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/types" "^29.6.3"
     chalk "^4.0.0"
     exit "^0.1.2"
     graceful-fs "^4.2.9"
     import-local "^3.0.2"
-    jest-config "^29.6.2"
-    jest-util "^29.6.2"
-    jest-validate "^29.6.2"
+    jest-config "^29.6.4"
+    jest-util "^29.6.3"
+    jest-validate "^29.6.3"
     prompts "^2.0.1"
     yargs "^17.3.1"
 
-jest-config@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.2.tgz#c68723f06b31ca5e63030686e604727d406cd7c3"
-  integrity sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==
+jest-config@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.4.tgz#eff958ee41d4e1ee7a6106d02b74ad9fc427d79e"
+  integrity sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==
   dependencies:
     "@babel/core" "^7.11.6"
-    "@jest/test-sequencer" "^29.6.2"
-    "@jest/types" "^29.6.1"
-    babel-jest "^29.6.2"
+    "@jest/test-sequencer" "^29.6.4"
+    "@jest/types" "^29.6.3"
+    babel-jest "^29.6.4"
     chalk "^4.0.0"
     ci-info "^3.2.0"
     deepmerge "^4.2.2"
     glob "^7.1.3"
     graceful-fs "^4.2.9"
-    jest-circus "^29.6.2"
-    jest-environment-node "^29.6.2"
-    jest-get-type "^29.4.3"
-    jest-regex-util "^29.4.3"
-    jest-resolve "^29.6.2"
-    jest-runner "^29.6.2"
-    jest-util "^29.6.2"
-    jest-validate "^29.6.2"
+    jest-circus "^29.6.4"
+    jest-environment-node "^29.6.4"
+    jest-get-type "^29.6.3"
+    jest-regex-util "^29.6.3"
+    jest-resolve "^29.6.4"
+    jest-runner "^29.6.4"
+    jest-util "^29.6.3"
+    jest-validate "^29.6.3"
     micromatch "^4.0.4"
     parse-json "^5.2.0"
-    pretty-format "^29.6.2"
+    pretty-format "^29.6.3"
     slash "^3.0.0"
     strip-json-comments "^3.1.1"
 
-jest-diff@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.2.tgz#c36001e5543e82a0805051d3ceac32e6825c1c46"
-  integrity sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==
+jest-diff@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.4.tgz#85aaa6c92a79ae8cd9a54ebae8d5b6d9a513314a"
+  integrity sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==
   dependencies:
     chalk "^4.0.0"
-    diff-sequences "^29.4.3"
-    jest-get-type "^29.4.3"
-    pretty-format "^29.6.2"
+    diff-sequences "^29.6.3"
+    jest-get-type "^29.6.3"
+    pretty-format "^29.6.3"
 
-jest-docblock@^29.4.3:
-  version "29.4.3"
-  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8"
-  integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==
+jest-docblock@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.6.3.tgz#293dca5188846c9f7c0c2b1bb33e5b11f21645f2"
+  integrity sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==
   dependencies:
     detect-newline "^3.0.0"
 
-jest-each@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.6.2.tgz#c9e4b340bcbe838c73adf46b76817b15712d02ce"
-  integrity sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==
+jest-each@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.6.3.tgz#1956f14f5f0cb8ae0b2e7cabc10bb03ec817c142"
+  integrity sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==
   dependencies:
-    "@jest/types" "^29.6.1"
+    "@jest/types" "^29.6.3"
     chalk "^4.0.0"
-    jest-get-type "^29.4.3"
-    jest-util "^29.6.2"
-    pretty-format "^29.6.2"
+    jest-get-type "^29.6.3"
+    jest-util "^29.6.3"
+    pretty-format "^29.6.3"
 
 jest-environment-jsdom@^29.0.0:
   version "29.6.2"
@@ -11316,37 +11487,37 @@ jest-environment-jsdom@^29.0.0:
     jest-util "^29.6.2"
     jsdom "^20.0.0"
 
-jest-environment-node@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.2.tgz#a9ea2cabff39b08eca14ccb32c8ceb924c8bb1ad"
-  integrity sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==
+jest-environment-node@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.4.tgz#4ce311549afd815d3cafb49e60a1e4b25f06d29f"
+  integrity sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==
   dependencies:
-    "@jest/environment" "^29.6.2"
-    "@jest/fake-timers" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/environment" "^29.6.4"
+    "@jest/fake-timers" "^29.6.4"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
-    jest-mock "^29.6.2"
-    jest-util "^29.6.2"
+    jest-mock "^29.6.3"
+    jest-util "^29.6.3"
 
-jest-get-type@^29.4.3:
-  version "29.4.3"
-  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5"
-  integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==
+jest-get-type@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1"
+  integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==
 
-jest-haste-map@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.2.tgz#298c25ea5255cfad8b723179d4295cf3a50a70d1"
-  integrity sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==
+jest-haste-map@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.4.tgz#97143ce833829157ea7025204b08f9ace609b96a"
+  integrity sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==
   dependencies:
-    "@jest/types" "^29.6.1"
+    "@jest/types" "^29.6.3"
     "@types/graceful-fs" "^4.1.3"
     "@types/node" "*"
     anymatch "^3.0.3"
     fb-watchman "^2.0.0"
     graceful-fs "^4.2.9"
-    jest-regex-util "^29.4.3"
-    jest-util "^29.6.2"
-    jest-worker "^29.6.2"
+    jest-regex-util "^29.6.3"
+    jest-util "^29.6.3"
+    jest-worker "^29.6.4"
     micromatch "^4.0.4"
     walker "^1.0.8"
   optionalDependencies:
@@ -11362,36 +11533,36 @@ jest-junit@^16.0.0:
     uuid "^8.3.2"
     xml "^1.0.1"
 
-jest-leak-detector@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz#e2b307fee78cab091c37858a98c7e1d73cdf5b38"
-  integrity sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==
+jest-leak-detector@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz#b9661bc3aec8874e59aff361fa0c6d7cd507ea01"
+  integrity sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==
   dependencies:
-    jest-get-type "^29.4.3"
-    pretty-format "^29.6.2"
+    jest-get-type "^29.6.3"
+    pretty-format "^29.6.3"
 
-jest-matcher-utils@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz#39de0be2baca7a64eacb27291f0bd834fea3a535"
-  integrity sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==
+jest-matcher-utils@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz#327db7ababea49455df3b23e5d6109fe0c709d24"
+  integrity sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==
   dependencies:
     chalk "^4.0.0"
-    jest-diff "^29.6.2"
-    jest-get-type "^29.4.3"
-    pretty-format "^29.6.2"
+    jest-diff "^29.6.4"
+    jest-get-type "^29.6.3"
+    pretty-format "^29.6.3"
 
-jest-message-util@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.2.tgz#af7adc2209c552f3f5ae31e77cf0a261f23dc2bb"
-  integrity sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==
+jest-message-util@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.3.tgz#bce16050d86801b165f20cfde34dc01d3cf85fbf"
+  integrity sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==
   dependencies:
     "@babel/code-frame" "^7.12.13"
-    "@jest/types" "^29.6.1"
+    "@jest/types" "^29.6.3"
     "@types/stack-utils" "^2.0.0"
     chalk "^4.0.0"
     graceful-fs "^4.2.9"
     micromatch "^4.0.4"
-    pretty-format "^29.6.2"
+    pretty-format "^29.6.3"
     slash "^3.0.0"
     stack-utils "^2.0.3"
 
@@ -11403,14 +11574,14 @@ jest-mock@^27.0.6:
     "@jest/types" "^27.5.1"
     "@types/node" "*"
 
-jest-mock@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.2.tgz#ef9c9b4d38c34a2ad61010a021866dad41ce5e00"
-  integrity sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==
+jest-mock@^29.6.2, jest-mock@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.3.tgz#433f3fd528c8ec5a76860177484940628bdf5e0a"
+  integrity sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==
   dependencies:
-    "@jest/types" "^29.6.1"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
-    jest-util "^29.6.2"
+    jest-util "^29.6.3"
 
 jest-pnp-resolver@^1.2.2:
   version "1.2.3"
@@ -11431,151 +11602,151 @@ jest-preset-angular@^13.1.1:
   optionalDependencies:
     esbuild ">=0.13.8"
 
-jest-regex-util@^29.4.3:
-  version "29.4.3"
-  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8"
-  integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==
+jest-regex-util@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52"
+  integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==
 
-jest-resolve-dependencies@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz#36435269b6672c256bcc85fb384872c134cc4cf2"
-  integrity sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==
+jest-resolve-dependencies@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz#20156b33c7eacbb6bb77aeba4bed0eab4a3f8734"
+  integrity sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==
   dependencies:
-    jest-regex-util "^29.4.3"
-    jest-snapshot "^29.6.2"
+    jest-regex-util "^29.6.3"
+    jest-snapshot "^29.6.4"
 
-jest-resolve@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.2.tgz#f18405fe4b50159b7b6d85e81f6a524d22afb838"
-  integrity sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==
+jest-resolve@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.4.tgz#e34cb06f2178b429c38455d98d1a07572ac9faa3"
+  integrity sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==
   dependencies:
     chalk "^4.0.0"
     graceful-fs "^4.2.9"
-    jest-haste-map "^29.6.2"
+    jest-haste-map "^29.6.4"
     jest-pnp-resolver "^1.2.2"
-    jest-util "^29.6.2"
-    jest-validate "^29.6.2"
+    jest-util "^29.6.3"
+    jest-validate "^29.6.3"
     resolve "^1.20.0"
     resolve.exports "^2.0.0"
     slash "^3.0.0"
 
-jest-runner@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.2.tgz#89e8e32a8fef24781a7c4c49cd1cb6358ac7fc01"
-  integrity sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==
+jest-runner@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.4.tgz#b3b8ccb85970fde0fae40c73ee11eb75adccfacf"
+  integrity sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==
   dependencies:
-    "@jest/console" "^29.6.2"
-    "@jest/environment" "^29.6.2"
-    "@jest/test-result" "^29.6.2"
-    "@jest/transform" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/console" "^29.6.4"
+    "@jest/environment" "^29.6.4"
+    "@jest/test-result" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
     chalk "^4.0.0"
     emittery "^0.13.1"
     graceful-fs "^4.2.9"
-    jest-docblock "^29.4.3"
-    jest-environment-node "^29.6.2"
-    jest-haste-map "^29.6.2"
-    jest-leak-detector "^29.6.2"
-    jest-message-util "^29.6.2"
-    jest-resolve "^29.6.2"
-    jest-runtime "^29.6.2"
-    jest-util "^29.6.2"
-    jest-watcher "^29.6.2"
-    jest-worker "^29.6.2"
+    jest-docblock "^29.6.3"
+    jest-environment-node "^29.6.4"
+    jest-haste-map "^29.6.4"
+    jest-leak-detector "^29.6.3"
+    jest-message-util "^29.6.3"
+    jest-resolve "^29.6.4"
+    jest-runtime "^29.6.4"
+    jest-util "^29.6.3"
+    jest-watcher "^29.6.4"
+    jest-worker "^29.6.4"
     p-limit "^3.1.0"
     source-map-support "0.5.13"
 
-jest-runtime@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.2.tgz#692f25e387f982e89ab83270e684a9786248e545"
-  integrity sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==
-  dependencies:
-    "@jest/environment" "^29.6.2"
-    "@jest/fake-timers" "^29.6.2"
-    "@jest/globals" "^29.6.2"
-    "@jest/source-map" "^29.6.0"
-    "@jest/test-result" "^29.6.2"
-    "@jest/transform" "^29.6.2"
-    "@jest/types" "^29.6.1"
+jest-runtime@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.4.tgz#b0bc495c9b6b12a0a7042ac34ca9bb85f8cd0ded"
+  integrity sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==
+  dependencies:
+    "@jest/environment" "^29.6.4"
+    "@jest/fake-timers" "^29.6.4"
+    "@jest/globals" "^29.6.4"
+    "@jest/source-map" "^29.6.3"
+    "@jest/test-result" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
     chalk "^4.0.0"
     cjs-module-lexer "^1.0.0"
     collect-v8-coverage "^1.0.0"
     glob "^7.1.3"
     graceful-fs "^4.2.9"
-    jest-haste-map "^29.6.2"
-    jest-message-util "^29.6.2"
-    jest-mock "^29.6.2"
-    jest-regex-util "^29.4.3"
-    jest-resolve "^29.6.2"
-    jest-snapshot "^29.6.2"
-    jest-util "^29.6.2"
+    jest-haste-map "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-mock "^29.6.3"
+    jest-regex-util "^29.6.3"
+    jest-resolve "^29.6.4"
+    jest-snapshot "^29.6.4"
+    jest-util "^29.6.3"
     slash "^3.0.0"
     strip-bom "^4.0.0"
 
-jest-snapshot@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.2.tgz#9b431b561a83f2bdfe041e1cab8a6becdb01af9c"
-  integrity sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==
+jest-snapshot@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.4.tgz#9833eb6b66ff1541c7fd8ceaa42d541f407b4876"
+  integrity sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==
   dependencies:
     "@babel/core" "^7.11.6"
     "@babel/generator" "^7.7.2"
     "@babel/plugin-syntax-jsx" "^7.7.2"
     "@babel/plugin-syntax-typescript" "^7.7.2"
     "@babel/types" "^7.3.3"
-    "@jest/expect-utils" "^29.6.2"
-    "@jest/transform" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/expect-utils" "^29.6.4"
+    "@jest/transform" "^29.6.4"
+    "@jest/types" "^29.6.3"
     babel-preset-current-node-syntax "^1.0.0"
     chalk "^4.0.0"
-    expect "^29.6.2"
+    expect "^29.6.4"
     graceful-fs "^4.2.9"
-    jest-diff "^29.6.2"
-    jest-get-type "^29.4.3"
-    jest-matcher-utils "^29.6.2"
-    jest-message-util "^29.6.2"
-    jest-util "^29.6.2"
+    jest-diff "^29.6.4"
+    jest-get-type "^29.6.3"
+    jest-matcher-utils "^29.6.4"
+    jest-message-util "^29.6.3"
+    jest-util "^29.6.3"
     natural-compare "^1.4.0"
-    pretty-format "^29.6.2"
+    pretty-format "^29.6.3"
     semver "^7.5.3"
 
-jest-util@^29.0.0, jest-util@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.2.tgz#8a052df8fff2eebe446769fd88814521a517664d"
-  integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==
+jest-util@^29.0.0, jest-util@^29.6.2, jest-util@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.3.tgz#e15c3eac8716440d1ed076f09bc63ace1aebca63"
+  integrity sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==
   dependencies:
-    "@jest/types" "^29.6.1"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
     chalk "^4.0.0"
     ci-info "^3.2.0"
     graceful-fs "^4.2.9"
     picomatch "^2.2.3"
 
-jest-validate@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.2.tgz#25d972af35b2415b83b1373baf1a47bb266c1082"
-  integrity sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==
+jest-validate@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.3.tgz#a75fca774cfb1c5758c70d035d30a1f9c2784b4d"
+  integrity sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==
   dependencies:
-    "@jest/types" "^29.6.1"
+    "@jest/types" "^29.6.3"
     camelcase "^6.2.0"
     chalk "^4.0.0"
-    jest-get-type "^29.4.3"
+    jest-get-type "^29.6.3"
     leven "^3.1.0"
-    pretty-format "^29.6.2"
+    pretty-format "^29.6.3"
 
-jest-watcher@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.2.tgz#77c224674f0620d9f6643c4cfca186d8893ca088"
-  integrity sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==
+jest-watcher@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.4.tgz#633eb515ae284aa67fd6831f1c9d1b534cf0e0ba"
+  integrity sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==
   dependencies:
-    "@jest/test-result" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/test-result" "^29.6.4"
+    "@jest/types" "^29.6.3"
     "@types/node" "*"
     ansi-escapes "^4.2.1"
     chalk "^4.0.0"
     emittery "^0.13.1"
-    jest-util "^29.6.2"
+    jest-util "^29.6.3"
     string-length "^4.0.1"
 
 jest-worker@^27.4.5:
@@ -11587,25 +11758,25 @@ jest-worker@^27.4.5:
     merge-stream "^2.0.0"
     supports-color "^8.0.0"
 
-jest-worker@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.2.tgz#682fbc4b6856ad0aa122a5403c6d048b83f3fb44"
-  integrity sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==
+jest-worker@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.4.tgz#f34279f4afc33c872b470d4af21b281ac616abd3"
+  integrity sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==
   dependencies:
     "@types/node" "*"
-    jest-util "^29.6.2"
+    jest-util "^29.6.3"
     merge-stream "^2.0.0"
     supports-color "^8.0.0"
 
-jest@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.2.tgz#3bd55b9fd46a161b2edbdf5f1d1bd0d1eab76c42"
-  integrity sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==
+jest@^29.6.4:
+  version "29.6.4"
+  resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.4.tgz#7c48e67a445ba264b778253b5d78d4ebc9d0a622"
+  integrity sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==
   dependencies:
-    "@jest/core" "^29.6.2"
-    "@jest/types" "^29.6.1"
+    "@jest/core" "^29.6.4"
+    "@jest/types" "^29.6.3"
     import-local "^3.0.2"
-    jest-cli "^29.6.2"
+    jest-cli "^29.6.4"
 
 jiti@^1.18.2:
   version "1.19.1"
@@ -11915,11 +12086,6 @@ klona@^2.0.4:
   resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22"
   integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==
 
-known-css-properties@^0.27.0:
-  version "0.27.0"
-  resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.27.0.tgz#82a9358dda5fe7f7bd12b5e7142c0a205393c0c5"
-  integrity sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==
-
 known-css-properties@^0.28.0:
   version "0.28.0"
   resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.28.0.tgz#8a8be010f368b3036fe6ab0ef4bbbed972bd6274"
@@ -12072,10 +12238,10 @@ lines-and-columns@^2.0.2:
   resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b"
   integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==
 
-lint-staged@^14.0.0:
-  version "14.0.0"
-  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-14.0.0.tgz#81a06f1a265854070dc4c9ace0978bb12d4b17c3"
-  integrity sha512-0tLf0pqZYkar/wu3nTctk4rVIG+d7PanDYv4/IQR4qwdqfQkTDziLRFnqMcLuLBTuUqmcLwsHPD2EjQ18d/oaA==
+lint-staged@^14.0.1:
+  version "14.0.1"
+  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-14.0.1.tgz#57dfa3013a3d60762d9af5d9c83bdb51291a6232"
+  integrity sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==
   dependencies:
     chalk "5.3.0"
     commander "11.0.0"
@@ -12325,6 +12491,11 @@ lower-case@^2.0.2:
   dependencies:
     tslib "^2.0.3"
 
+lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0":
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a"
+  integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==
+
 lru-cache@^4.0.1:
   version "4.1.5"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
@@ -12352,11 +12523,6 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
   integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
 
-"lru-cache@^9.1.1 || ^10.0.0":
-  version "10.0.0"
-  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61"
-  integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==
-
 lru-queue@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3"
@@ -13503,11 +13669,16 @@ minipass@^3.0.0:
   dependencies:
     yallist "^4.0.0"
 
-minipass@^5.0.0, "minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+minipass@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
   integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
 
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974"
+  integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==
+
 minizlib@^2.1.1, minizlib@^2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
@@ -13692,10 +13863,10 @@ next-tick@1, next-tick@^1.1.0:
   resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
   integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
 
-ng-packagr@^16.2.0:
-  version "16.2.0"
-  resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-16.2.0.tgz#1b7bc880faace35ef99581d15e3ce020d521834b"
-  integrity sha512-3u2FVSpKDa0EJRSGOAhYIZwjtnG7SVFBnUf5fk/VfDOxVV4kFRea6DEK7f/mb1D4WV/yqSZB9JmvBZp0uuIGeA==
+ng-packagr@^16.2.2:
+  version "16.2.2"
+  resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-16.2.2.tgz#313f77704c6150cd711959dc981c0bfe5ac6744d"
+  integrity sha512-ZO+FxFXFYvdunlIdz/Jkyr2Q8h/U6FeuCHLwC6Tsi52NIjOVqFqJUZxpqotQCh8FYoaO8F6mOhhcP6YH1uhArA==
   dependencies:
     "@rollup/plugin-json" "^6.0.0"
     "@rollup/plugin-node-resolve" "^15.0.0"
@@ -13703,7 +13874,7 @@ ng-packagr@^16.2.0:
     ansi-colors "^4.1.3"
     autoprefixer "^10.4.12"
     browserslist "^4.21.4"
-    cacache "^17.0.0"
+    cacache "^18.0.0"
     chokidar "^3.5.3"
     commander "^11.0.0"
     convert-source-map "^2.0.0"
@@ -14983,7 +15154,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
   resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
   integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
 
-postcss@8.4.27, "postcss@^7.0.27 || ^8.0.0", postcss@^8.2.14, postcss@^8.2.4, postcss@^8.4.0, postcss@^8.4.16, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.25, postcss@^8.4.26, postcss@^8.4.5:
+postcss@8.4.27, "postcss@^7.0.27 || ^8.0.0", postcss@^8.2.14, postcss@^8.2.4, postcss@^8.4.0, postcss@^8.4.16, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.25, postcss@^8.4.26, postcss@^8.4.27, postcss@^8.4.5:
   version "8.4.27"
   resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057"
   integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==
@@ -15085,12 +15256,12 @@ pretty-error@^4.0.0:
     lodash "^4.17.20"
     renderkid "^3.0.0"
 
-pretty-format@^29.0.0, pretty-format@^29.6.2:
-  version "29.6.2"
-  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.2.tgz#3d5829261a8a4d89d8b9769064b29c50ed486a47"
-  integrity sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==
+pretty-format@^29.0.0, pretty-format@^29.6.3:
+  version "29.6.3"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.3.tgz#d432bb4f1ca6f9463410c3fb25a0ba88e594ace7"
+  integrity sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==
   dependencies:
-    "@jest/schemas" "^29.6.0"
+    "@jest/schemas" "^29.6.3"
     ansi-styles "^5.0.0"
     react-is "^18.0.0"
 
@@ -17517,12 +17688,12 @@ storybook-dark-mode@^3.0.1:
     fast-deep-equal "^3.1.3"
     memoizerific "^1.11.3"
 
-storybook@^7.2.3:
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.2.3.tgz#f8c75fda02c4733a6d8f4970b9c57ec2cec15598"
-  integrity sha512-3tJHa3yUxhchO96I74WUxZIfPu1DZcG7VQByX6tuKqQ3YP6iZv90JPGseBwnTW+/0y/RaM7swf3RMon6Oe/zhA==
+storybook@^7.4.0:
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.4.0.tgz#f1b64222e3d474bc6e258eb7e48c675685829873"
+  integrity sha512-jSwbyxHlr2dTY51Pv0mzenjrMDJNZH7DQhHu4ZezpjV+QK/rLCnD+Gt/7iDSaNlsmZJejQcmURDoEybWggMOqw==
   dependencies:
-    "@storybook/cli" "7.2.3"
+    "@storybook/cli" "7.4.0"
 
 stream-combiner@^0.2.2:
   version "0.2.2"
@@ -17831,14 +18002,14 @@ stylelint-stylus@^0.18.0:
     stylelint-config-html "^1.0.0"
     svg-tags "^1.0.0"
 
-stylelint@^15.10.2:
-  version "15.10.2"
-  resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.2.tgz#0ee5a8371d3a2e1ff27fefd48309d3ddef7c3405"
-  integrity sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg==
+stylelint@^15.10.3:
+  version "15.10.3"
+  resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.3.tgz#995e4512fdad450fb83e13f3472001f6edb6469c"
+  integrity sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==
   dependencies:
-    "@csstools/css-parser-algorithms" "^2.3.0"
-    "@csstools/css-tokenizer" "^2.1.1"
-    "@csstools/media-query-list-parser" "^2.1.2"
+    "@csstools/css-parser-algorithms" "^2.3.1"
+    "@csstools/css-tokenizer" "^2.2.0"
+    "@csstools/media-query-list-parser" "^2.1.4"
     "@csstools/selector-specificity" "^3.0.0"
     balanced-match "^2.0.0"
     colord "^2.9.3"
@@ -17846,7 +18017,7 @@ stylelint@^15.10.2:
     css-functions-list "^3.2.0"
     css-tree "^2.3.1"
     debug "^4.3.4"
-    fast-glob "^3.3.0"
+    fast-glob "^3.3.1"
     fastest-levenshtein "^1.0.16"
     file-entry-cache "^6.0.1"
     global-modules "^2.0.0"
@@ -17857,13 +18028,13 @@ stylelint@^15.10.2:
     import-lazy "^4.0.0"
     imurmurhash "^0.1.4"
     is-plain-object "^5.0.0"
-    known-css-properties "^0.27.0"
+    known-css-properties "^0.28.0"
     mathml-tag-names "^2.1.3"
     meow "^10.1.5"
     micromatch "^4.0.5"
     normalize-path "^3.0.0"
     picocolors "^1.0.0"
-    postcss "^8.4.25"
+    postcss "^8.4.27"
     postcss-resolve-nested-selector "^0.1.1"
     postcss-safe-parser "^6.0.0"
     postcss-selector-parser "^6.0.13"
@@ -18029,10 +18200,10 @@ tar@^6.1.11, tar@^6.1.13, tar@^6.1.2:
     mkdirp "^1.0.3"
     yallist "^4.0.0"
 
-telejson@^7.0.3:
-  version "7.1.0"
-  resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.1.0.tgz#1ef7a0dd57eeb52cde933126f61bcc296c170f52"
-  integrity sha512-jFJO4P5gPebZAERPkJsqMAQ0IMA1Hi0AoSfxpnUaV6j6R2SZqlpkbS20U6dEUtA3RUYt2Ak/mTlkQzHH9Rv/hA==
+telejson@^7.0.3, telejson@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.2.0.tgz#3994f6c9a8f8d7f2dba9be2c7c5bbb447e876f32"
+  integrity sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==
   dependencies:
     memoizerific "^1.11.3"
 

From ae740a5c3087683e06c3b30f784458b780105dca Mon Sep 17 00:00:00 2001
From: JounQin <admin@1stg.me>
Date: Wed, 30 Aug 2023 23:19:58 -0500
Subject: [PATCH 3/4] Create weak-walls-invent.md

---
 .changeset/weak-walls-invent.md | 5 +++++
 1 file changed, 5 insertions(+)
 create mode 100644 .changeset/weak-walls-invent.md

diff --git a/.changeset/weak-walls-invent.md b/.changeset/weak-walls-invent.md
new file mode 100644
index 000000000..417e2a666
--- /dev/null
+++ b/.changeset/weak-walls-invent.md
@@ -0,0 +1,5 @@
+---
+"@alauda/ui": major
+---
+
+feat!: migrate to standalone API

From 8983309e591b248026e3afe1c607ae0f230bca27 Mon Sep 17 00:00:00 2001
From: JounQin <admin@1stg.me>
Date: Wed, 18 Oct 2023 13:39:51 +0800
Subject: [PATCH 4/4] chore: fix review issues

---
 .changeset/weak-walls-invent.md | 2 +-
 src/drawer/drawer.module.ts     | 9 +--------
 2 files changed, 2 insertions(+), 9 deletions(-)

diff --git a/.changeset/weak-walls-invent.md b/.changeset/weak-walls-invent.md
index 417e2a666..1ab49dd51 100644
--- a/.changeset/weak-walls-invent.md
+++ b/.changeset/weak-walls-invent.md
@@ -1,5 +1,5 @@
 ---
-"@alauda/ui": major
+"@alauda/ui": minor
 ---
 
 feat!: migrate to standalone API
diff --git a/src/drawer/drawer.module.ts b/src/drawer/drawer.module.ts
index 43046e72b..5166ce551 100644
--- a/src/drawer/drawer.module.ts
+++ b/src/drawer/drawer.module.ts
@@ -21,14 +21,7 @@ const COMMON = [
 ];
 
 @NgModule({
-  imports: [
-    CommonModule,
-    IconModule,
-    IconModule,
-    OverlayModule,
-    PortalModule,
-    ...COMMON,
-  ],
+  imports: [CommonModule, IconModule, OverlayModule, PortalModule, ...COMMON],
   exports: COMMON,
   providers: [DrawerService],
 })